[llvm] [ARM] Stop gluing ALU nodes to branches / selects (PR #116970)
Sergei Barannikov via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 20 11:53:58 PST 2024
================
@@ -5052,65 +5063,70 @@ let hasSideEffects = 0 in {
let isCommutable = 1, isSelect = 1 in
def MOVCCr : ARMPseudoInst<(outs GPR:$Rd),
- (ins GPR:$false, GPR:$Rm, cmovpred:$p),
- 4, IIC_iCMOVr,
- [(set GPR:$Rd, (ARMcmov GPR:$false, GPR:$Rm,
- cmovpred:$p))]>,
+ (ins GPR:$false, GPR:$Rm, pred:$p),
+ 4, IIC_iCMOVr, []>,
RegConstraint<"$false = $Rd">, Sched<[WriteALU]>;
def MOVCCsi : ARMPseudoInst<(outs GPR:$Rd),
- (ins GPR:$false, so_reg_imm:$shift, cmovpred:$p),
- 4, IIC_iCMOVsr,
- [(set GPR:$Rd,
- (ARMcmov GPR:$false, so_reg_imm:$shift,
- cmovpred:$p))]>,
+ (ins GPR:$false, so_reg_imm:$shift, pred:$p),
+ 4, IIC_iCMOVsr, []>,
RegConstraint<"$false = $Rd">, Sched<[WriteALU]>;
def MOVCCsr : ARMPseudoInst<(outs GPR:$Rd),
- (ins GPR:$false, so_reg_reg:$shift, cmovpred:$p),
- 4, IIC_iCMOVsr,
- [(set GPR:$Rd, (ARMcmov GPR:$false, so_reg_reg:$shift,
- cmovpred:$p))]>,
+ (ins GPR:$false, so_reg_reg:$shift, pred:$p),
+ 4, IIC_iCMOVsr, []>,
RegConstraint<"$false = $Rd">, Sched<[WriteALU]>;
let isMoveImm = 1 in
def MOVCCi16
: ARMPseudoInst<(outs GPR:$Rd),
- (ins GPR:$false, imm0_65535_expr:$imm, cmovpred:$p),
- 4, IIC_iMOVi,
- [(set GPR:$Rd, (ARMcmov GPR:$false, imm0_65535:$imm,
- cmovpred:$p))]>,
+ (ins GPR:$false, imm0_65535_expr:$imm, pred:$p),
+ 4, IIC_iMOVi, []>,
RegConstraint<"$false = $Rd">, Requires<[IsARM, HasV6T2]>,
Sched<[WriteALU]>;
let isMoveImm = 1 in
def MOVCCi : ARMPseudoInst<(outs GPR:$Rd),
- (ins GPR:$false, mod_imm:$imm, cmovpred:$p),
- 4, IIC_iCMOVi,
- [(set GPR:$Rd, (ARMcmov GPR:$false, mod_imm:$imm,
- cmovpred:$p))]>,
+ (ins GPR:$false, mod_imm:$imm, pred:$p),
+ 4, IIC_iCMOVi, []>,
RegConstraint<"$false = $Rd">, Sched<[WriteALU]>;
// Two instruction predicate mov immediate.
let isMoveImm = 1 in
def MOVCCi32imm
: ARMPseudoInst<(outs GPR:$Rd),
- (ins GPR:$false, i32imm:$src, cmovpred:$p),
- 8, IIC_iCMOVix2,
- [(set GPR:$Rd, (ARMcmov GPR:$false, imm:$src,
- cmovpred:$p))]>,
+ (ins GPR:$false, i32imm:$src, pred:$p),
+ 8, IIC_iCMOVix2, []>,
RegConstraint<"$false = $Rd">, Requires<[IsARM, HasV6T2]>;
let isMoveImm = 1 in
def MVNCCi : ARMPseudoInst<(outs GPR:$Rd),
- (ins GPR:$false, mod_imm:$imm, cmovpred:$p),
- 4, IIC_iCMOVi,
- [(set GPR:$Rd, (ARMcmov GPR:$false, mod_imm_not:$imm,
- cmovpred:$p))]>,
+ (ins GPR:$false, mod_imm:$imm, pred:$p),
+ 4, IIC_iCMOVi, []>,
RegConstraint<"$false = $Rd">, Sched<[WriteALU]>;
} // hasSideEffects
+def : ARMPat<(ARMcmov i32:$false, i32:$Rm, imm:$cc, CPSR),
----------------
s-barannikov wrote:
I added comments to three places. Please let me know if you think it wasn't necessary and I should've just updated the description.
https://github.com/llvm/llvm-project/pull/116970
More information about the llvm-commits
mailing list