mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-10-31 09:11:13 +00:00
Implement InstCombine/add.ll:test21
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14443 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8d5e05bb71
commit
15d58b638a
@ -1520,10 +1520,15 @@ Instruction *InstCombiner::visitSetCondInst(BinaryOperator &I) {
|
|||||||
if (BinaryOperator *BO = dyn_cast<BinaryOperator>(Op0)) {
|
if (BinaryOperator *BO = dyn_cast<BinaryOperator>(Op0)) {
|
||||||
switch (BO->getOpcode()) {
|
switch (BO->getOpcode()) {
|
||||||
case Instruction::Add:
|
case Instruction::Add:
|
||||||
if (CI->isNullValue()) {
|
// Replace ((add A, B) != C) with (A != C-B) if B & C are constants.
|
||||||
|
if (ConstantInt *BOp1C = dyn_cast<ConstantInt>(BO->getOperand(1))) {
|
||||||
|
return new SetCondInst(I.getOpcode(), BO->getOperand(0),
|
||||||
|
ConstantExpr::getSub(CI, BOp1C));
|
||||||
|
} else if (CI->isNullValue()) {
|
||||||
// Replace ((add A, B) != 0) with (A != -B) if A or B is
|
// Replace ((add A, B) != 0) with (A != -B) if A or B is
|
||||||
// efficiently invertible, or if the add has just this one use.
|
// efficiently invertible, or if the add has just this one use.
|
||||||
Value *BOp0 = BO->getOperand(0), *BOp1 = BO->getOperand(1);
|
Value *BOp0 = BO->getOperand(0), *BOp1 = BO->getOperand(1);
|
||||||
|
|
||||||
if (Value *NegVal = dyn_castNegVal(BOp1))
|
if (Value *NegVal = dyn_castNegVal(BOp1))
|
||||||
return new SetCondInst(I.getOpcode(), BOp0, NegVal);
|
return new SetCondInst(I.getOpcode(), BOp0, NegVal);
|
||||||
else if (Value *NegVal = dyn_castNegVal(BOp0))
|
else if (Value *NegVal = dyn_castNegVal(BOp0))
|
||||||
|
Loading…
Reference in New Issue
Block a user