[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