mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
try to do better match for i32 adds
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20143 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9b1e659cd6
commit
093f32785b
@ -920,13 +920,34 @@ unsigned ISel::SelectExpr(SDOperand N) {
|
|||||||
cast<ConstantSDNode>(N.getOperand(0).getOperand(1))->getValue() <= 255)
|
cast<ConstantSDNode>(N.getOperand(0).getOperand(1))->getValue() <= 255)
|
||||||
{ //Normal imm add/sub
|
{ //Normal imm add/sub
|
||||||
Opc = isAdd ? Alpha::ADDLi : (isMul ? Alpha::MULLi : Alpha::SUBLi);
|
Opc = isAdd ? Alpha::ADDLi : (isMul ? Alpha::MULLi : Alpha::SUBLi);
|
||||||
Tmp1 = SelectExpr(N.getOperand(0).getOperand(0));
|
//if the value was really originally a i32, skip the up conversion
|
||||||
|
if (N.getOperand(0).getOperand(0).getOpcode() == ISD::SIGN_EXTEND_INREG &&
|
||||||
|
dyn_cast<MVTSDNode>(N.getOperand(0).getOperand(0).Val)
|
||||||
|
->getExtraValueType() == MVT::i32)
|
||||||
|
Tmp1 = SelectExpr(N.getOperand(0).getOperand(0).getOperand(0));
|
||||||
|
else
|
||||||
|
Tmp1 = SelectExpr(N.getOperand(0).getOperand(0));
|
||||||
Tmp2 = cast<ConstantSDNode>(N.getOperand(0).getOperand(1))->getValue();
|
Tmp2 = cast<ConstantSDNode>(N.getOperand(0).getOperand(1))->getValue();
|
||||||
BuildMI(BB, Opc, 2, Result).addReg(Tmp1).addImm(Tmp2);
|
BuildMI(BB, Opc, 2, Result).addReg(Tmp1).addImm(Tmp2);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ //Normal add/sub
|
{ //Normal add/sub
|
||||||
Opc = isAdd ? Alpha::ADDL : (isMul ? Alpha::MULLi : Alpha::SUBL);
|
Opc = isAdd ? Alpha::ADDL : (isMul ? Alpha::MULLi : Alpha::SUBL);
|
||||||
|
//if the value was really originally a i32, skip the up conversion
|
||||||
|
if (N.getOperand(0).getOperand(0).getOpcode() == ISD::SIGN_EXTEND_INREG &&
|
||||||
|
dyn_cast<MVTSDNode>(N.getOperand(0).getOperand(0).Val)
|
||||||
|
->getExtraValueType() == MVT::i32)
|
||||||
|
Tmp1 = SelectExpr(N.getOperand(0).getOperand(0).getOperand(0));
|
||||||
|
else
|
||||||
|
Tmp1 = SelectExpr(N.getOperand(0).getOperand(0));
|
||||||
|
//if the value was really originally a i32, skip the up conversion
|
||||||
|
if (N.getOperand(0).getOperand(1).getOpcode() == ISD::SIGN_EXTEND_INREG &&
|
||||||
|
dyn_cast<MVTSDNode>(N.getOperand(0).getOperand(1).Val)
|
||||||
|
->getExtraValueType() == MVT::i32)
|
||||||
|
Tmp2 = SelectExpr(N.getOperand(0).getOperand(1).getOperand(0));
|
||||||
|
else
|
||||||
|
Tmp2 = SelectExpr(N.getOperand(0).getOperand(1));
|
||||||
|
|
||||||
Tmp1 = SelectExpr(N.getOperand(0).getOperand(0));
|
Tmp1 = SelectExpr(N.getOperand(0).getOperand(0));
|
||||||
Tmp2 = SelectExpr(N.getOperand(0).getOperand(1));
|
Tmp2 = SelectExpr(N.getOperand(0).getOperand(1));
|
||||||
BuildMI(BB, Opc, 2, Result).addReg(Tmp1).addReg(Tmp2);
|
BuildMI(BB, Opc, 2, Result).addReg(Tmp1).addReg(Tmp2);
|
||||||
|
Loading…
Reference in New Issue
Block a user