[llvm] [AArch64][GISel] Use Register instead of MCRegister for markPhysRegUsed in CallLowering. (PR #122853)
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 13 19:57:15 PST 2025
https://github.com/topperc created https://github.com/llvm/llvm-project/pull/122853
For "returned" attribute arguments, the physical register is really a
virtual register which shouldn't be stored in an MCRegister. This
moves the conversion from Register to MCRegister into the derived
classes of IncomingArgHandler. The derived class ReturnedArgCallReturnHandler
does not use the register so no MCRegister is created in that case.
I can remove Phys from function name for clarity if we want.
>From 1cfae92cc97f20f55b240808c2e899521ad9a3fa Mon Sep 17 00:00:00 2001
From: Craig Topper <craig.topper at sifive.com>
Date: Mon, 13 Jan 2025 19:44:38 -0800
Subject: [PATCH] [AArch64][GISel] Use Register instead of MCRegister for
markPhysRegUsed in CallLowering.
For "returned" attribute arguments, the physical register is a
virtual register which shouldn't be stored in MCRegister. This
moves the conversion from Register to MCRegister into the derived
classes of IncomingArgHandler. The derived class ReturnedArgCallReturnHandler
does not use the register so no MCRegister is created in that case.
---
llvm/lib/Target/AArch64/GISel/AArch64CallLowering.cpp | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/llvm/lib/Target/AArch64/GISel/AArch64CallLowering.cpp b/llvm/lib/Target/AArch64/GISel/AArch64CallLowering.cpp
index 15f1c99e87246b..3fceb922f35520 100644
--- a/llvm/lib/Target/AArch64/GISel/AArch64CallLowering.cpp
+++ b/llvm/lib/Target/AArch64/GISel/AArch64CallLowering.cpp
@@ -207,14 +207,14 @@ struct IncomingArgHandler : public CallLowering::IncomingValueHandler {
/// How the physical register gets marked varies between formal
/// parameters (it's a basic-block live-in), and a call instruction
/// (it's an implicit-def of the BL).
- virtual void markPhysRegUsed(MCRegister PhysReg) = 0;
+ virtual void markPhysRegUsed(Register PhysReg) = 0;
};
struct FormalArgHandler : public IncomingArgHandler {
FormalArgHandler(MachineIRBuilder &MIRBuilder, MachineRegisterInfo &MRI)
: IncomingArgHandler(MIRBuilder, MRI) {}
- void markPhysRegUsed(MCRegister PhysReg) override {
+ void markPhysRegUsed(Register PhysReg) override {
MIRBuilder.getMRI()->addLiveIn(PhysReg);
MIRBuilder.getMBB().addLiveIn(PhysReg);
}
@@ -225,7 +225,7 @@ struct CallReturnHandler : public IncomingArgHandler {
MachineInstrBuilder MIB)
: IncomingArgHandler(MIRBuilder, MRI), MIB(MIB) {}
- void markPhysRegUsed(MCRegister PhysReg) override {
+ void markPhysRegUsed(Register PhysReg) override {
MIB.addDef(PhysReg, RegState::Implicit);
}
@@ -239,7 +239,7 @@ struct ReturnedArgCallReturnHandler : public CallReturnHandler {
MachineInstrBuilder MIB)
: CallReturnHandler(MIRBuilder, MRI, MIB) {}
- void markPhysRegUsed(MCRegister PhysReg) override {}
+ void markPhysRegUsed(Register PhysReg) override {}
};
struct OutgoingArgHandler : public CallLowering::OutgoingValueHandler {
More information about the llvm-commits
mailing list