mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-08 06:32:24 +00:00
Added support for decomposing constant expressions containing shr and shl
instructions. Review of this commit would be greatly appreciated. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21876 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
98cf45bbf6
commit
3163e2d9f3
@ -146,6 +146,30 @@ static Instruction* DecomposeConstantExpr(ConstantExpr* CE,
|
||||
return new SelectInst (C, S1, S2, "constantSelect", &insertBefore);
|
||||
}
|
||||
|
||||
case Instruction::Shr: {
|
||||
getArg1 = CE->getOperand(0);
|
||||
if (ConstantExpr* CEarg = dyn_cast<ConstantExpr>(getArg1))
|
||||
getArg1 = DecomposeConstantExpr(CEarg, insertBefore);
|
||||
getArg2 = CE->getOperand(1);
|
||||
if (ConstantExpr* CEarg = dyn_cast<ConstantExpr>(getArg2))
|
||||
getArg2 = DecomposeConstantExpr(CEarg, insertBefore);
|
||||
return new ShiftInst (static_cast<Instruction::OtherOps>(CE->getOpcode()),
|
||||
getArg1, getArg2,
|
||||
"constantShr:" + getArg1->getName(), &insertBefore);
|
||||
}
|
||||
|
||||
case Instruction::Shl: {
|
||||
getArg1 = CE->getOperand(0);
|
||||
if (ConstantExpr* CEarg = dyn_cast<ConstantExpr>(getArg1))
|
||||
getArg1 = DecomposeConstantExpr(CEarg, insertBefore);
|
||||
getArg2 = CE->getOperand(1);
|
||||
if (ConstantExpr* CEarg = dyn_cast<ConstantExpr>(getArg2))
|
||||
getArg2 = DecomposeConstantExpr(CEarg, insertBefore);
|
||||
return new ShiftInst (static_cast<Instruction::OtherOps>(CE->getOpcode()),
|
||||
getArg1, getArg2,
|
||||
"constantShl:" + getArg1->getName(), &insertBefore);
|
||||
}
|
||||
|
||||
default: // must be a binary operator
|
||||
assert(CE->getOpcode() >= Instruction::BinaryOpsBegin &&
|
||||
CE->getOpcode() < Instruction::BinaryOpsEnd &&
|
||||
|
Loading…
x
Reference in New Issue
Block a user