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:
parent
3bc741a0d2
commit
7858cb9c08
@ -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:
|
||||
|
@ -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:
|
||||
|
Loading…
Reference in New Issue
Block a user