[llvm] [AArch64] Peephole optimization to remove redundant csel instructions (PR #101483)
David Green via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 1 09:55:40 PDT 2024
================
@@ -283,6 +287,26 @@ bool AArch64MIPeepholeOpt::visitORR(MachineInstr &MI) {
return true;
}
+bool AArch64MIPeepholeOpt::visitCSEL(MachineInstr &MI) {
+ // Replace CSEL with MOV when both inputs are the same register.
+ if (MI.getOperand(1).getReg() != MI.getOperand(2).getReg())
+ return false;
+
+ auto ZeroReg =
+ MI.getOpcode() == AArch64::CSELXr ? AArch64::XZR : AArch64::WZR;
+ auto OrOpcode =
+ MI.getOpcode() == AArch64::CSELXr ? AArch64::ORRXrs : AArch64::ORRWrs;
+
+ BuildMI(*MI.getParent(), MI, MI.getDebugLoc(), TII->get(OrOpcode))
+ .addReg(MI.getOperand(0).getReg(), RegState::Define)
+ .addReg(ZeroReg)
+ .addReg(MI.getOperand(1).getReg())
+ .addImm(0);
----------------
davemgreen wrote:
I never know if we need it or not, but should this do a MRI->constrainRegClass on the Regs?
https://github.com/llvm/llvm-project/pull/101483
More information about the llvm-commits
mailing list