[llvm] [AArch64] Separate PNR into its own Register Class (PR #65306)
David Sherwood via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 12 02:19:17 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;
+ BuildMI(MBB, I, DL, get(AArch64::ORR_PPzPP), DestReg)
+ .addReg(SrcReg)
+ .addReg(SrcReg)
+ .addReg(SrcReg, getKillRegState(KillSrc));
----------------
david-arm wrote:
I think @sdesmalen-arm's comment about adding implicit def applies here too, i.e. an implicit def of the same PNR register.
https://github.com/llvm/llvm-project/pull/65306
More information about the llvm-commits
mailing list