mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-03 13:31:05 +00:00
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
This commit is contained in:
parent
e5cbdca3bd
commit
74b64611c4
@ -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