mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-09 11:25:55 +00:00
Constant generation instructions are re-materializable.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35161 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -137,7 +137,7 @@ def so_imm_neg :
|
|||||||
PatLeaf<(imm), [{ return ARM_AM::getSOImmVal(-(int)N->getValue()) != -1; }],
|
PatLeaf<(imm), [{ return ARM_AM::getSOImmVal(-(int)N->getValue()) != -1; }],
|
||||||
so_imm_neg_XFORM>;
|
so_imm_neg_XFORM>;
|
||||||
|
|
||||||
def so_imm_not :
|
def so_imm_not :
|
||||||
PatLeaf<(imm), [{ return ARM_AM::getSOImmVal(~(int)N->getValue()) != -1; }],
|
PatLeaf<(imm), [{ return ARM_AM::getSOImmVal(~(int)N->getValue()) != -1; }],
|
||||||
so_imm_not_XFORM>;
|
so_imm_not_XFORM>;
|
||||||
|
|
||||||
@@ -709,6 +709,8 @@ def MOVrr : AI1<(ops GPR:$dst, GPR:$src),
|
|||||||
"mov $dst, $src", []>;
|
"mov $dst, $src", []>;
|
||||||
def MOVrs : AI1<(ops GPR:$dst, so_reg:$src),
|
def MOVrs : AI1<(ops GPR:$dst, so_reg:$src),
|
||||||
"mov $dst, $src", [(set GPR:$dst, so_reg:$src)]>;
|
"mov $dst, $src", [(set GPR:$dst, so_reg:$src)]>;
|
||||||
|
|
||||||
|
let isReMaterializable = 1 in
|
||||||
def MOVri : AI1<(ops GPR:$dst, so_imm:$src),
|
def MOVri : AI1<(ops GPR:$dst, so_imm:$src),
|
||||||
"mov $dst, $src", [(set GPR:$dst, so_imm:$src)]>;
|
"mov $dst, $src", [(set GPR:$dst, so_imm:$src)]>;
|
||||||
|
|
||||||
@@ -806,10 +808,13 @@ defm ORR : AI1_bin_irs<"orr", BinOpFrag<(or node:$LHS, node:$RHS)>>;
|
|||||||
defm EOR : AI1_bin_irs<"eor", BinOpFrag<(xor node:$LHS, node:$RHS)>>;
|
defm EOR : AI1_bin_irs<"eor", BinOpFrag<(xor node:$LHS, node:$RHS)>>;
|
||||||
defm BIC : AI1_bin_irs<"bic", BinOpFrag<(and node:$LHS, (not node:$RHS))>>;
|
defm BIC : AI1_bin_irs<"bic", BinOpFrag<(and node:$LHS, (not node:$RHS))>>;
|
||||||
|
|
||||||
defm MVN : AI1_unary_irs<"mvn", not>;
|
def MVNr : AI<(ops GPR:$dst, GPR:$src),
|
||||||
|
"mvn $dst, $src", [(set GPR:$dst, (not GPR:$src))]>;
|
||||||
def : ARMPat<(i32 so_imm_not:$imm),
|
def MVNs : AI<(ops GPR:$dst, so_reg:$src),
|
||||||
(MVNi so_imm_not:$imm)>;
|
"mvn $dst, $src", [(set GPR:$dst, (not so_reg:$src))]>;
|
||||||
|
let isReMaterializable = 1 in
|
||||||
|
def MVNi : AI<(ops GPR:$dst, so_imm:$imm),
|
||||||
|
"mvn $dst, $imm", [(set GPR:$dst, so_imm_not:$imm)]>;
|
||||||
|
|
||||||
def : ARMPat<(and GPR:$src, so_imm_not:$imm),
|
def : ARMPat<(and GPR:$src, so_imm_not:$imm),
|
||||||
(BICri GPR:$src, so_imm_not:$imm)>;
|
(BICri GPR:$src, so_imm_not:$imm)>;
|
||||||
|
@@ -374,6 +374,7 @@ def tLSRrr : TIt<(ops GPR:$dst, GPR:$lhs, GPR:$rhs),
|
|||||||
"lsr $dst, $rhs",
|
"lsr $dst, $rhs",
|
||||||
[(set GPR:$dst, (srl GPR:$lhs, GPR:$rhs))]>;
|
[(set GPR:$dst, (srl GPR:$lhs, GPR:$rhs))]>;
|
||||||
|
|
||||||
|
let isReMaterializable = 1 in
|
||||||
def tMOVri8 : TI<(ops GPR:$dst, i32imm:$src),
|
def tMOVri8 : TI<(ops GPR:$dst, i32imm:$src),
|
||||||
"mov $dst, $src",
|
"mov $dst, $src",
|
||||||
[(set GPR:$dst, imm0_255:$src)]>;
|
[(set GPR:$dst, imm0_255:$src)]>;
|
||||||
|
Reference in New Issue
Block a user