aboutsummaryrefslogtreecommitdiffstats
path: root/lib/CodeGen
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2008-12-12 00:56:36 +0000
committerBill Wendling <isanbard@gmail.com>2008-12-12 00:56:36 +0000
commitae034ed6a84ffef03fc47e31c29e6c3c7ce42d40 (patch)
tree770f22dcefcbafbbb4a2a91a7a195d7eca15ab47 /lib/CodeGen
parent2534fb4eb80105afafa4002ac7e86cdb847ac66e (diff)
downloadexternal_llvm-ae034ed6a84ffef03fc47e31c29e6c3c7ce42d40.zip
external_llvm-ae034ed6a84ffef03fc47e31c29e6c3c7ce42d40.tar.gz
external_llvm-ae034ed6a84ffef03fc47e31c29e6c3c7ce42d40.tar.bz2
Redo the arithmetic with overflow architecture. I was changing the semantics of
ISD::ADD to emit an implicit EFLAGS. This was horribly broken. Instead, replace the intrinsic with an ISD::SADDO node. Then custom lower that into an X86ISD::ADD node with a associated SETCC that checks the correct condition code (overflow or carry). Then that gets lowered into the correct X86::ADDOvf instruction. Similar for SUB and MUL instructions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60915 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r--lib/CodeGen/SelectionDAG/DAGCombiner.cpp15
1 files changed, 0 insertions, 15 deletions
diff --git a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
index 314697d..6538417 100644
--- a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -967,11 +967,6 @@ SDValue DAGCombiner::visitADD(SDNode *N) {
if (FoldedVOp.getNode()) return FoldedVOp;
}
- if (N->getNumValues() != 1)
- // FIXME: DAG combiner cannot handle arithmetic operators which produce
- // multiple results.
- return SDValue();
-
// fold (add x, undef) -> undef
if (N0.getOpcode() == ISD::UNDEF)
return N0;
@@ -1167,11 +1162,6 @@ SDValue DAGCombiner::visitSUB(SDNode *N) {
if (FoldedVOp.getNode()) return FoldedVOp;
}
- if (N->getNumValues() != 1)
- // FIXME: DAG combiner cannot handle arithmetic operators which produce
- // multiple results.
- return SDValue();
-
// fold (sub x, x) -> 0
if (N0 == N1)
return DAG.getConstant(0, N->getValueType(0));
@@ -1230,11 +1220,6 @@ SDValue DAGCombiner::visitMUL(SDNode *N) {
if (FoldedVOp.getNode()) return FoldedVOp;
}
- if (N->getNumValues() != 1)
- // FIXME: DAG combiner cannot handle arithmetic operators which produce
- // multiple results.
- return SDValue();
-
// fold (mul x, undef) -> 0
if (N0.getOpcode() == ISD::UNDEF || N1.getOpcode() == ISD::UNDEF)
return DAG.getConstant(0, VT);