mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-04 06:09:05 +00:00
InstCombine: Remove redundant combines
InstSimplify already handles icmp (X+Y), X (and things like it) appropriately. The first thing that InstCombine does is run InstSimplify on the instruction. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216659 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c84ba857ea
commit
0b16ed7f1c
@ -740,21 +740,6 @@ Instruction *InstCombiner::FoldGEPICmp(GEPOperator *GEPLHS, Value *RHS,
|
||||
Instruction *InstCombiner::FoldICmpAddOpCst(Instruction &ICI,
|
||||
Value *X, ConstantInt *CI,
|
||||
ICmpInst::Predicate Pred) {
|
||||
// If we have X+0, exit early (simplifying logic below) and let it get folded
|
||||
// elsewhere. icmp X+0, X -> icmp X, X
|
||||
if (CI->isZero()) {
|
||||
bool isTrue = ICmpInst::isTrueWhenEqual(Pred);
|
||||
return ReplaceInstUsesWith(ICI, ConstantInt::get(ICI.getType(), isTrue));
|
||||
}
|
||||
|
||||
// (X+4) == X -> false.
|
||||
if (Pred == ICmpInst::ICMP_EQ)
|
||||
return ReplaceInstUsesWith(ICI, Builder->getFalse());
|
||||
|
||||
// (X+4) != X -> true.
|
||||
if (Pred == ICmpInst::ICMP_NE)
|
||||
return ReplaceInstUsesWith(ICI, Builder->getTrue());
|
||||
|
||||
// From this point on, we know that (X+C <= X) --> (X+C < X) because C != 0,
|
||||
// so the values can never be equal. Similarly for all other "or equals"
|
||||
// operators.
|
||||
|
Loading…
Reference in New Issue
Block a user