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 | 0864a75ebf82c239ab62bdc91ee2fd3b7279245f (patch) | |
tree | e062ab34b1d5c24daa2f9513e77a511c8d7bb0c5 /llvm/lib/CodeGen | |
parent | c68cfcfd03e0280b9412e4609b5b6434fb77ba5b (diff) | |
download | bcm5719-llvm-0864a75ebf82c239ab62bdc91ee2fd3b7279245f.tar.gz bcm5719-llvm-0864a75ebf82c239ab62bdc91ee2fd3b7279245f.zip |
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.
llvm-svn: 60857
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 9cc8061f183..7e78923f6d9 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/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); |