mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-19 04:26:05 +00:00
Add a small transform: transform -(X<<Y) to (-X<<Y) when the shift has a single
use and X is free to negate. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@94941 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -676,6 +676,13 @@ Instruction *InstCombiner::visitSub(BinaryOperator &I) {
|
||||
return BinaryOperator::CreateSDiv(Op1I->getOperand(0),
|
||||
ConstantExpr::getNeg(DivRHS));
|
||||
|
||||
// 0 - (C << X) -> (-C << X)
|
||||
if (Op1I->getOpcode() == Instruction::Shl)
|
||||
if (ConstantInt *CSI = dyn_cast<ConstantInt>(Op0))
|
||||
if (CSI->isZero())
|
||||
if (Value *ShlLHSNeg = dyn_castNegVal(Op1I->getOperand(0)))
|
||||
return BinaryOperator::CreateShl(ShlLHSNeg, Op1I->getOperand(1));
|
||||
|
||||
// X - X*C --> X * (1-C)
|
||||
ConstantInt *C2 = 0;
|
||||
if (dyn_castFoldableMul(Op1I, C2) == Op0) {
|
||||
|
Reference in New Issue
Block a user