diff options
author | Bill Wendling <isanbard@gmail.com> | 2008-12-10 22:36:00 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2008-12-10 22:36:00 +0000 |
commit | 2476e5d3458ea3543f233159fcf4f2fea47426e9 (patch) | |
tree | 046f753b4bf61cfd95974db041702ff13b57f762 /lib/CodeGen/SelectionDAG/DAGCombiner.cpp | |
parent | e5ad88e97fea74dd55675fa3ded89f01fb18f363 (diff) |
If ADD, SUB, or MUL have an overflow bit that's used, don't do transformation on
them. The DAG combiner expects that nodes that are transformed have one value
result.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60857 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/SelectionDAG/DAGCombiner.cpp')
-rw-r--r-- | lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 9cc8061f18..7e78923f6d 100644 --- a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -966,6 +966,11 @@ SDValue DAGCombiner::visitADD(SDNode *N) { SDValue FoldedVOp = SimplifyVBinOp(N); if (FoldedVOp.getNode()) return FoldedVOp; } + + if (N->getNumValues() != 1) + // FIXME: DAG combiner cannot handle multiple return values on arithmetic + // operators. + return SDValue(); // fold (add x, undef) -> undef if (N0.getOpcode() == ISD::UNDEF) @@ -1161,6 +1166,11 @@ SDValue DAGCombiner::visitSUB(SDNode *N) { SDValue FoldedVOp = SimplifyVBinOp(N); if (FoldedVOp.getNode()) return FoldedVOp; } + + if (N->getNumValues() != 1) + // FIXME: DAG combiner cannot handle multiple return values on arithmetic + // operators. + return SDValue(); // fold (sub x, x) -> 0 if (N0 == N1) @@ -1220,6 +1230,11 @@ SDValue DAGCombiner::visitMUL(SDNode *N) { if (FoldedVOp.getNode()) return FoldedVOp; } + if (N->getNumValues() != 1) + // FIXME: DAG combiner cannot handle multiple return values on arithmetic + // operators. + return SDValue(); + // fold (mul x, undef) -> 0 if (N0.getOpcode() == ISD::UNDEF || N1.getOpcode() == ISD::UNDEF) return DAG.getConstant(0, VT); |