mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-09 10:31:14 +00:00
Swap the order of operands created here. For +&|^, the order doesn't matter,
but for sub, it really does! Fix fixes a miscompilation of fibheap_cut in llvmgcc4. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28600 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
408a4061d8
commit
13d4ab4009
@ -4437,7 +4437,7 @@ Instruction *InstCombiner::FoldShiftByConstant(Value *Op0, ConstantUInt *Op1,
|
||||
Op0BO->getName());
|
||||
InsertNewInstBefore(YS, I); // (Y << C)
|
||||
Instruction *X =
|
||||
BinaryOperator::create(Op0BO->getOpcode(), YS, V1,
|
||||
BinaryOperator::create(Op0BO->getOpcode(), V1, YS,
|
||||
Op0BO->getOperand(0)->getName());
|
||||
InsertNewInstBefore(X, I); // (X + (Y << C))
|
||||
Constant *C2 = ConstantInt::getAllOnesValue(X->getType());
|
||||
@ -4445,6 +4445,7 @@ Instruction *InstCombiner::FoldShiftByConstant(Value *Op0, ConstantUInt *Op1,
|
||||
return BinaryOperator::createAnd(X, C2);
|
||||
}
|
||||
|
||||
// Turn (((X >> C)&CC) + Y) << C -> (X + (Y << C)) & (CC << C)
|
||||
if (isLeftShift && Op0BO->getOperand(0)->hasOneUse() &&
|
||||
match(Op0BO->getOperand(0),
|
||||
m_And(m_Shr(m_Value(V1), m_Value(V2)),
|
||||
@ -4460,7 +4461,7 @@ Instruction *InstCombiner::FoldShiftByConstant(Value *Op0, ConstantUInt *Op1,
|
||||
V1->getName()+".mask");
|
||||
InsertNewInstBefore(XM, I); // X & (CC << C)
|
||||
|
||||
return BinaryOperator::create(Op0BO->getOpcode(), YS, XM);
|
||||
return BinaryOperator::create(Op0BO->getOpcode(), XM, YS);
|
||||
}
|
||||
|
||||
break;
|
||||
|
Loading…
x
Reference in New Issue
Block a user