mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-01 15:40:46 +00:00
Implement InstCombine/add.ll:test17 & 18
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8817 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ad5727d173
commit
6b032052cc
@ -437,6 +437,22 @@ Instruction *InstCombiner::visitAdd(BinaryOperator &I) {
|
||||
if (Constant *C2 = dyn_castMaskingAnd(RHS))
|
||||
if (Instruction *R = AssociativeOpt(I, AddMaskingAnd(C2))) return R;
|
||||
|
||||
if (ConstantInt *CRHS = dyn_cast<ConstantInt>(RHS)) {
|
||||
if (Instruction *ILHS = dyn_cast<Instruction>(LHS)) {
|
||||
switch (ILHS->getOpcode()) {
|
||||
case Instruction::Xor:
|
||||
// ~X + C --> (C-1) - X
|
||||
if (ConstantInt *XorRHS = dyn_cast<ConstantInt>(ILHS->getOperand(1)))
|
||||
if (XorRHS->isAllOnesValue())
|
||||
return BinaryOperator::create(Instruction::Sub,
|
||||
*CRHS - *ConstantInt::get(I.getType(), 1),
|
||||
ILHS->getOperand(0));
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Changed ? &I : 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user