diff options
author | Craig Topper <craig.topper@gmail.com> | 2012-12-10 08:12:29 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@gmail.com> | 2012-12-10 08:12:29 +0000 |
commit | 48b509c77318cc6e753513ca5dcdd67e18094235 (patch) | |
tree | 13e6e855eee19ac3ed2f4600388ff3816fba8700 /lib/CodeGen/SelectionDAG/DAGCombiner.cpp | |
parent | cbc478ebc1f93df073f5883dda561995e15f6f46 (diff) | |
download | llvm-48b509c77318cc6e753513ca5dcdd67e18094235.tar.gz llvm-48b509c77318cc6e753513ca5dcdd67e18094235.tar.bz2 llvm-48b509c77318cc6e753513ca5dcdd67e18094235.tar.xz |
Teach DAG combine to handle vector add/sub with vectors of all 0s.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169727 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/SelectionDAG/DAGCombiner.cpp')
-rw-r--r-- | lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 6a43337041..e774c138d2 100644 --- a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -1381,6 +1381,12 @@ SDValue DAGCombiner::visitADD(SDNode *N) { if (VT.isVector()) { SDValue FoldedVOp = SimplifyVBinOp(N); if (FoldedVOp.getNode()) return FoldedVOp; + + // fold (add x, 0) -> x, vector edition + if (ISD::isBuildVectorAllZeros(N1.getNode())) + return N0; + if (ISD::isBuildVectorAllZeros(N0.getNode())) + return N1; } // fold (add x, undef) -> undef @@ -1624,6 +1630,10 @@ SDValue DAGCombiner::visitSUB(SDNode *N) { if (VT.isVector()) { SDValue FoldedVOp = SimplifyVBinOp(N); if (FoldedVOp.getNode()) return FoldedVOp; + + // fold (sub x, 0) -> x, vector edition + if (ISD::isBuildVectorAllZeros(N1.getNode())) + return N0; } // fold (sub x, x) -> 0 |