diff options
author | Chris Lattner <sabre@nondot.org> | 2010-12-19 19:43:52 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-12-19 19:43:52 +0000 |
commit | 3e635d2e9968c34927432c048d6fad7993101537 (patch) | |
tree | a87953a1de3c92204493edc846dfda8e3d1c9c4c | |
parent | 5e0c0c72e9da9a8f151e770aea709eb169abf56a (diff) | |
download | bcm5719-llvm-3e635d2e9968c34927432c048d6fad7993101537.tar.gz bcm5719-llvm-3e635d2e9968c34927432c048d6fad7993101537.zip |
move a transformation to a more logical place, simplifying it.
llvm-svn: 122183
-rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp | 16 | ||||
-rw-r--r-- | llvm/lib/Transforms/InstCombine/InstructionCombining.cpp | 7 |
2 files changed, 7 insertions, 16 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp index f3a5e724c61..d53f3291e71 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp +++ b/llvm/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/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp index b215ee817b1..5fa930e7541 100644 --- a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp +++ b/llvm/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: |