aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-12-19 19:43:52 +0000
committerChris Lattner <sabre@nondot.org>2010-12-19 19:43:52 +0000
commit74b64611c4b74a633239f2a9bfd6be07cdedff88 (patch)
treee6011f65938103cdc2d14a37e1944403635d9e07 /lib
parente5cbdca3bd4bc40ca31282531a9292f70648d265 (diff)
move a transformation to a more logical place, simplifying it.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122183 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/Transforms/InstCombine/InstCombineCalls.cpp16
-rw-r--r--lib/Transforms/InstCombine/InstructionCombining.cpp7
2 files changed, 7 insertions, 16 deletions
diff --git a/lib/Transforms/InstCombine/InstCombineCalls.cpp b/lib/Transforms/InstCombine/InstCombineCalls.cpp
index f3a5e724c6..d53f3291e7 100644
--- a/lib/Transforms/InstCombine/InstCombineCalls.cpp
+++ b/lib/Transforms/InstCombine/InstCombineCalls.cpp
@@ -523,21 +523,6 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) {
return InsertValueInst::Create(Struct, Add, 0);
}
}
-
- // If the normal result of the add is dead, and the RHS is a constant, we
- // can transform this into a range comparison.
- // overflow = uadd a, -4 --> overflow = icmp ugt a, 3
- if (ConstantInt *CI = dyn_cast<ConstantInt>(RHS))
- if (ExtractValueInst *EVI = dyn_cast<ExtractValueInst>(II->use_back()))
- if (II->hasOneUse() && EVI->getNumIndices() == 1 && !EVI->use_empty() &&
- *EVI->idx_begin() == 1) { // Extract of overflow result.
- Builder->SetInsertPoint(EVI);
- Value *R = Builder->CreateICmpUGT(LHS, ConstantExpr::getNot(CI));
- R->takeName(EVI);
- ReplaceInstUsesWith(*EVI, R);
- return II;
- }
-
}
// FALL THROUGH uadd into sadd
case Intrinsic::sadd_with_overflow:
@@ -565,7 +550,6 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) {
return InsertValueInst::Create(Struct, II->getArgOperand(0), 0);
}
}
-
break;
case Intrinsic::usub_with_overflow:
case Intrinsic::ssub_with_overflow:
diff --git a/lib/Transforms/InstCombine/InstructionCombining.cpp b/lib/Transforms/InstCombine/InstructionCombining.cpp
index b215ee817b..5fa930e754 100644
--- a/lib/Transforms/InstCombine/InstructionCombining.cpp
+++ b/lib/Transforms/InstCombine/InstructionCombining.cpp
@@ -1147,6 +1147,13 @@ Instruction *InstCombiner::visitExtractValueInst(ExtractValueInst &EV) {
EraseInstFromFunction(*II);
return BinaryOperator::CreateAdd(LHS, RHS);
}
+
+ // If the normal result of the add is dead, and the RHS is a constant,
+ // we can transform this into a range comparison.
+ // overflow = uadd a, -4 --> overflow = icmp ugt a, 3
+ if (ConstantInt *CI = dyn_cast<ConstantInt>(II->getArgOperand(1)))
+ return new ICmpInst(ICmpInst::ICMP_UGT, II->getArgOperand(0),
+ ConstantExpr::getNot(CI));
break;
case Intrinsic::usub_with_overflow:
case Intrinsic::ssub_with_overflow: