[llvm] [AArch64] Use 0-cycle reg2reg MOVs for FPR32, FPR16, FPR8 (PR #144152)

Jon Roelofs via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 18 11:05:29 PDT 2025


================
@@ -5302,30 +5302,73 @@ void AArch64InstrInfo::copyPhysReg(MachineBasicBlock &MBB,
 
   if (AArch64::FPR32RegClass.contains(DestReg) &&
       AArch64::FPR32RegClass.contains(SrcReg)) {
-    BuildMI(MBB, I, DL, get(AArch64::FMOVSr), DestReg)
-        .addReg(SrcReg, getKillRegState(KillSrc));
+    if (Subtarget.isTargetDarwin() && Subtarget.hasZeroCycleRegMove()) {
----------------
jroelofs wrote:

ISTM this should be a new subtarget feature, maybe `hasZeroCycleFPRMove()` or something similar. It's weird to conflate per-cpu hardware tuning details with platform details like `isTargetDarwin()`.

https://github.com/llvm/llvm-project/pull/144152


More information about the llvm-commits mailing list