1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 03:33:20 +01:00

move a transformation to a more logical place, simplifying it.

llvm-svn: 122183
This commit is contained in:
Chris Lattner 2010-12-19 19:43:52 +00:00
parent 3bc741a0d2
commit 7858cb9c08
2 changed files with 7 additions and 16 deletions

View File

@ -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:

View File

@ -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: