[llvm] 7cdc978 - MachineInstrBuilder: Introduce copyMIMetadata() function.
via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 31 09:53:05 PDT 2025
Author: Peter Collingbourne
Date: 2025-07-31T09:53:01-07:00
New Revision: 7cdc9781d45ce6eb27041a3aaeb756f00b9058e3
URL: https://github.com/llvm/llvm-project/commit/7cdc9781d45ce6eb27041a3aaeb756f00b9058e3
DIFF: https://github.com/llvm/llvm-project/commit/7cdc9781d45ce6eb27041a3aaeb756f00b9058e3.diff
LOG: MachineInstrBuilder: Introduce copyMIMetadata() function.
This reduces the amount of boilerplate required when adding a new
field to MIMetadata and reduces the chance of bugs like the
one I fixed in TargetInstrInfo::reassociateOps.
Reviewers: arsenm, nikic
Reviewed By: nikic
Pull Request: https://github.com/llvm/llvm-project/pull/133535
Added:
Modified:
llvm/include/llvm/CodeGen/MachineInstrBuilder.h
llvm/lib/CodeGen/TargetInstrInfo.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/CodeGen/MachineInstrBuilder.h b/llvm/include/llvm/CodeGen/MachineInstrBuilder.h
index e63e77a8302c0..e705d7d99544c 100644
--- a/llvm/include/llvm/CodeGen/MachineInstrBuilder.h
+++ b/llvm/include/llvm/CodeGen/MachineInstrBuilder.h
@@ -69,6 +69,32 @@ enum {
} // end namespace RegState
+/// Set of metadata that should be preserved when using BuildMI(). This provides
+/// a more convenient way of preserving DebugLoc, PCSections and MMRA.
+class MIMetadata {
+public:
+ MIMetadata() = default;
+ MIMetadata(DebugLoc DL, MDNode *PCSections = nullptr, MDNode *MMRA = nullptr)
+ : DL(std::move(DL)), PCSections(PCSections), MMRA(MMRA) {}
+ MIMetadata(const DILocation *DI, MDNode *PCSections = nullptr,
+ MDNode *MMRA = nullptr)
+ : DL(DI), PCSections(PCSections), MMRA(MMRA) {}
+ explicit MIMetadata(const Instruction &From)
+ : DL(From.getDebugLoc()),
+ PCSections(From.getMetadata(LLVMContext::MD_pcsections)) {}
+ explicit MIMetadata(const MachineInstr &From)
+ : DL(From.getDebugLoc()), PCSections(From.getPCSections()) {}
+
+ const DebugLoc &getDL() const { return DL; }
+ MDNode *getPCSections() const { return PCSections; }
+ MDNode *getMMRAMetadata() const { return MMRA; }
+
+private:
+ DebugLoc DL;
+ MDNode *PCSections = nullptr;
+ MDNode *MMRA = nullptr;
+};
+
class MachineInstrBuilder {
MachineFunction *MF = nullptr;
MachineInstr *MI = nullptr;
@@ -317,15 +343,11 @@ class MachineInstrBuilder {
}
}
- const MachineInstrBuilder &setPCSections(MDNode *MD) const {
- if (MD)
- MI->setPCSections(*MF, MD);
- return *this;
- }
-
- const MachineInstrBuilder &setMMRAMetadata(MDNode *MMRA) const {
- if (MMRA)
- MI->setMMRAMetadata(*MF, MMRA);
+ const MachineInstrBuilder ©MIMetadata(const MIMetadata &MIMD) const {
+ if (MIMD.getPCSections())
+ MI->setPCSections(*MF, MIMD.getPCSections());
+ if (MIMD.getMMRAMetadata())
+ MI->setMMRAMetadata(*MF, MIMD.getMMRAMetadata());
return *this;
}
@@ -343,38 +365,11 @@ class MachineInstrBuilder {
}
};
-/// Set of metadata that should be preserved when using BuildMI(). This provides
-/// a more convenient way of preserving DebugLoc, PCSections and MMRA.
-class MIMetadata {
-public:
- MIMetadata() = default;
- MIMetadata(DebugLoc DL, MDNode *PCSections = nullptr, MDNode *MMRA = nullptr)
- : DL(std::move(DL)), PCSections(PCSections), MMRA(MMRA) {}
- MIMetadata(const DILocation *DI, MDNode *PCSections = nullptr,
- MDNode *MMRA = nullptr)
- : DL(DI), PCSections(PCSections), MMRA(MMRA) {}
- explicit MIMetadata(const Instruction &From)
- : DL(From.getDebugLoc()),
- PCSections(From.getMetadata(LLVMContext::MD_pcsections)) {}
- explicit MIMetadata(const MachineInstr &From)
- : DL(From.getDebugLoc()), PCSections(From.getPCSections()) {}
-
- const DebugLoc &getDL() const { return DL; }
- MDNode *getPCSections() const { return PCSections; }
- MDNode *getMMRAMetadata() const { return MMRA; }
-
-private:
- DebugLoc DL;
- MDNode *PCSections = nullptr;
- MDNode *MMRA = nullptr;
-};
-
/// Builder interface. Specify how to create the initial instruction itself.
inline MachineInstrBuilder BuildMI(MachineFunction &MF, const MIMetadata &MIMD,
const MCInstrDesc &MCID) {
return MachineInstrBuilder(MF, MF.CreateMachineInstr(MCID, MIMD.getDL()))
- .setPCSections(MIMD.getPCSections())
- .setMMRAMetadata(MIMD.getMMRAMetadata());
+ .copyMIMetadata(MIMD);
}
/// This version of the builder sets up the first operand as a
@@ -382,8 +377,7 @@ inline MachineInstrBuilder BuildMI(MachineFunction &MF, const MIMetadata &MIMD,
inline MachineInstrBuilder BuildMI(MachineFunction &MF, const MIMetadata &MIMD,
const MCInstrDesc &MCID, Register DestReg) {
return MachineInstrBuilder(MF, MF.CreateMachineInstr(MCID, MIMD.getDL()))
- .setPCSections(MIMD.getPCSections())
- .setMMRAMetadata(MIMD.getMMRAMetadata())
+ .copyMIMetadata(MIMD)
.addReg(DestReg, RegState::Define);
}
@@ -397,10 +391,8 @@ inline MachineInstrBuilder BuildMI(MachineBasicBlock &BB,
MachineFunction &MF = *BB.getParent();
MachineInstr *MI = MF.CreateMachineInstr(MCID, MIMD.getDL());
BB.insert(I, MI);
- return MachineInstrBuilder(MF, MI)
- .setPCSections(MIMD.getPCSections())
- .setMMRAMetadata(MIMD.getMMRAMetadata())
- .addReg(DestReg, RegState::Define);
+ return MachineInstrBuilder(MF, MI).copyMIMetadata(MIMD).addReg(
+ DestReg, RegState::Define);
}
/// This version of the builder inserts the newly-built instruction before
@@ -416,10 +408,8 @@ inline MachineInstrBuilder BuildMI(MachineBasicBlock &BB,
MachineFunction &MF = *BB.getParent();
MachineInstr *MI = MF.CreateMachineInstr(MCID, MIMD.getDL());
BB.insert(I, MI);
- return MachineInstrBuilder(MF, MI)
- .setPCSections(MIMD.getPCSections())
- .setMMRAMetadata(MIMD.getMMRAMetadata())
- .addReg(DestReg, RegState::Define);
+ return MachineInstrBuilder(MF, MI).copyMIMetadata(MIMD).addReg(
+ DestReg, RegState::Define);
}
inline MachineInstrBuilder BuildMI(MachineBasicBlock &BB, MachineInstr &I,
@@ -449,9 +439,7 @@ inline MachineInstrBuilder BuildMI(MachineBasicBlock &BB,
MachineFunction &MF = *BB.getParent();
MachineInstr *MI = MF.CreateMachineInstr(MCID, MIMD.getDL());
BB.insert(I, MI);
- return MachineInstrBuilder(MF, MI)
- .setPCSections(MIMD.getPCSections())
- .setMMRAMetadata(MIMD.getMMRAMetadata());
+ return MachineInstrBuilder(MF, MI).copyMIMetadata(MIMD);
}
inline MachineInstrBuilder BuildMI(MachineBasicBlock &BB,
@@ -461,9 +449,7 @@ inline MachineInstrBuilder BuildMI(MachineBasicBlock &BB,
MachineFunction &MF = *BB.getParent();
MachineInstr *MI = MF.CreateMachineInstr(MCID, MIMD.getDL());
BB.insert(I, MI);
- return MachineInstrBuilder(MF, MI)
- .setPCSections(MIMD.getPCSections())
- .setMMRAMetadata(MIMD.getMMRAMetadata());
+ return MachineInstrBuilder(MF, MI).copyMIMetadata(MIMD);
}
inline MachineInstrBuilder BuildMI(MachineBasicBlock &BB, MachineInstr &I,
diff --git a/llvm/lib/CodeGen/TargetInstrInfo.cpp b/llvm/lib/CodeGen/TargetInstrInfo.cpp
index 18d6bbc0ff2b0..705e046ed3457 100644
--- a/llvm/lib/CodeGen/TargetInstrInfo.cpp
+++ b/llvm/lib/CodeGen/TargetInstrInfo.cpp
@@ -1406,7 +1406,7 @@ void TargetInstrInfo::reassociateOps(
const MCInstrDesc &MCID, Register DestReg) {
return MachineInstrBuilder(
MF, MF.CreateMachineInstr(MCID, MIMD.getDL(), /*NoImpl=*/true))
- .setPCSections(MIMD.getPCSections())
+ .copyMIMetadata(MIMD)
.addReg(DestReg, RegState::Define);
};
More information about the llvm-commits
mailing list