[llvm] 6b2ef39 - [GlobalISel] Reserve IRTranslator value map and virtual register storage (NFC) (#222311)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 10 02:31:28 PDT 2026
Author: Cullen Rhodes
Date: 2026-09-10T10:31:22+01:00
New Revision: 6b2ef39be51f46e2f359f6965588577913765af4
URL: https://github.com/llvm/llvm-project/commit/6b2ef39be51f46e2f359f6965588577913765af4
DIFF: https://github.com/llvm/llvm-project/commit/6b2ef39be51f46e2f359f6965588577913765af4.diff
LOG: [GlobalISel] Reserve IRTranslator value map and virtual register storage (NFC) (#222311)
Reserve storage based on the number of IR arguments and instructions to
avoid unnecessary container growth.
Improves CTMark geomean -0.08% on aarch64-O0-g, including 0.18% on
sqlite.
https://llvm-compile-time-tracker.com/compare.php?from=cec101b15dd27fb1c51b6c87cb6e9d78517d2b09&to=996caa798ca6e27dfc657296db4b8ae6519701b0&stat=instructions:u
Assisted-by: codex
Added:
Modified:
llvm/include/llvm/CodeGen/MachineRegisterInfo.h
llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/CodeGen/MachineRegisterInfo.h b/llvm/include/llvm/CodeGen/MachineRegisterInfo.h
index a26462641de52..5e682029a57b8 100644
--- a/llvm/include/llvm/CodeGen/MachineRegisterInfo.h
+++ b/llvm/include/llvm/CodeGen/MachineRegisterInfo.h
@@ -823,6 +823,12 @@ class MachineRegisterInfo {
/// getNumVirtRegs - Return the number of virtual registers created.
unsigned getNumVirtRegs() const { return VRegInfo.size(); }
+ /// Reserve space for at least \p NumVirtRegs virtual registers.
+ void reserveVirtRegs(unsigned NumVirtRegs) {
+ VRegInfo.reserve(NumVirtRegs);
+ VRegToType.reserve(NumVirtRegs);
+ }
+
/// clearVirtRegs - Remove all virtual registers (after physreg assignment).
LLVM_ABI void clearVirtRegs();
diff --git a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
index a1fe689685258..f4d46e3cad48d 100644
--- a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
@@ -156,6 +156,8 @@ class IRTranslatorImpl {
bool contains(const Value &V) const { return ValToVRegs.contains(&V); }
+ void reserveVRegs(unsigned NumValues) { ValToVRegs.reserve(NumValues); }
+
void reset() {
ValToVRegs.clear();
TypeToOffsets.clear();
@@ -5073,10 +5075,14 @@ bool IRTranslatorImpl::runOnMachineFunction(
bool IsVarArg = F.isVarArg();
bool HasMustTailInVarArgFn = false;
+ // Use arguments and instructions to estimate the number of mapped values and
+ // virtual registers.
+ unsigned NumValues = F.arg_size();
// Create all blocks, in IR order, to preserve the layout.
FuncInfo.MBBMap.resize(F.getMaxBlockNumber());
for (const BasicBlock &BB: F) {
+ NumValues += BB.size();
auto *&MBB = FuncInfo.MBBMap[BB.getNumber()];
MBB = MF->CreateMachineBasicBlock(&BB);
@@ -5095,6 +5101,9 @@ bool IRTranslatorImpl::runOnMachineFunction(
HasMustTailInVarArgFn = checkForMustTailInVarArgFn(IsVarArg, BB);
}
+ VMap.reserveVRegs(NumValues);
+ MRI->reserveVirtRegs(NumValues);
+
MF->getFrameInfo().setHasMustTailInVarArgFunc(HasMustTailInVarArgFn);
// Make our arguments/constants entry block fallthrough to the IR entry block.
More information about the llvm-commits
mailing list