[llvm] [AArch64] Separate PNR into its own Register Class (PR #65306)

Matthew Devereau via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 13 06:03:06 PDT 2023


================
@@ -3658,6 +3658,32 @@ void AArch64InstrInfo::copyPhysReg(MachineBasicBlock &MBB,
     return;
   }
 
+  if (AArch64::PNRRegClass.contains(DestReg) &&
+      AArch64::PPRRegClass.contains(SrcReg)) {
+    assert(Subtarget.hasSVEorSME() && "Unexpected SVE register.");
+    if ((DestReg.id() - AArch64::PN0) == (SrcReg.id() - AArch64::P0))
+      return;
+    DestReg = DestReg - AArch64::PN0 + AArch64::P0;
+    BuildMI(MBB, I, DL, get(AArch64::ORR_PPzPP), DestReg)
+        .addReg(SrcReg)
+        .addReg(SrcReg)
+        .addReg(SrcReg, getKillRegState(KillSrc));
+    return;
+  }
+
+  if (AArch64::PPRRegClass.contains(DestReg) &&
+      AArch64::PNRRegClass.contains(SrcReg)) {
+    assert(Subtarget.hasSVEorSME() && "Unexpected SVE register.");
+    if ((DestReg.id() - AArch64::P0) == (SrcReg.id() - AArch64::PN0))
+      return;
+    SrcReg = (SrcReg - AArch64::PN0) + AArch64::P0;
----------------
MDevereau wrote:

Done

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


More information about the llvm-commits mailing list