diff --git a/src/IceCfg.cpp b/src/IceCfg.cpp
index 33a5992..4f316c1 100644
--- a/src/IceCfg.cpp
+++ b/src/IceCfg.cpp
@@ -1062,7 +1062,7 @@
   if (getFlags().getDecorateAsm()) {
     for (Variable *Var : getVariables()) {
       if (Var->getStackOffset() && !Var->isRematerializable()) {
-        Str << "\t" << Var->getSymbolicStackOffset(this) << " = "
+        Str << "\t" << Var->getSymbolicStackOffset() << " = "
             << Var->getStackOffset() << "\n";
       }
     }
diff --git a/src/IceCfgNode.cpp b/src/IceCfgNode.cpp
index 4b5268a..94acff9 100644
--- a/src/IceCfgNode.cpp
+++ b/src/IceCfgNode.cpp
@@ -26,15 +26,6 @@
 
 namespace Ice {
 
-CfgNode::CfgNode(Cfg *Func, SizeT Number) : Func(Func), Number(Number) {
-  if (BuildDefs::dump()) {
-    Name =
-        NodeString::createWithString(Func, "__" + std::to_string(getIndex()));
-  } else {
-    Name = NodeString::createWithoutString(Func);
-  }
-}
-
 // Adds an instruction to either the Phi list or the regular instruction list.
 // Validates that all Phis are added before all regular instructions.
 void CfgNode::appendInst(Inst *Instr, bool AllowPhisAnywhere) {
@@ -797,7 +788,7 @@
       auto Next = Start + 1;
       Str << "Duplicate LR begin, block " << getName() << ", instructions "
           << Start->second << " & " << Next->second << ", variable "
-          << Liveness->getVariable(Start->first, this)->getName(Func) << "\n";
+          << Liveness->getVariable(Start->first, this)->getName() << "\n";
     }
     for (auto Start = MapEnd.begin();
          (Start = std::adjacent_find(Start, MapEnd.end(), ComparePair)) !=
@@ -806,7 +797,7 @@
       auto Next = Start + 1;
       Str << "Duplicate LR end,   block " << getName() << ", instructions "
           << Start->second << " & " << Next->second << ", variable "
-          << Liveness->getVariable(Start->first, this)->getName(Func) << "\n";
+          << Liveness->getVariable(Start->first, this)->getName() << "\n";
     }
   }
 
@@ -1402,7 +1393,7 @@
       for (SizeT i = 0; i < LiveIn.size(); ++i) {
         if (LiveIn[i]) {
           Variable *Var = Liveness->getVariable(i, this);
-          Str << " %" << Var->getName(Func);
+          Str << " %" << Var->getName();
           if (Func->isVerbose(IceV_RegOrigins) && Var->hasReg()) {
             Str << ":"
                 << Func->getTarget()->getRegName(Var->getRegNum(),
@@ -1428,7 +1419,7 @@
       for (SizeT i = 0; i < LiveOut.size(); ++i) {
         if (LiveOut[i]) {
           Variable *Var = Liveness->getVariable(i, this);
-          Str << " %" << Var->getName(Func);
+          Str << " %" << Var->getName();
           if (Func->isVerbose(IceV_RegOrigins) && Var->hasReg()) {
             Str << ":"
                 << Func->getTarget()->getRegName(Var->getRegNum(),
diff --git a/src/IceCfgNode.h b/src/IceCfgNode.h
index cf3e83c..6d7811c 100644
--- a/src/IceCfgNode.h
+++ b/src/IceCfgNode.h
@@ -37,7 +37,11 @@
   /// Access the label number and name for this node.
   SizeT getIndex() const { return Number; }
   void resetIndex(SizeT NewNumber) { Number = NewNumber; }
-  NodeString getName() const { return Name; }
+  std::string getName() const {
+    if (Name.hasStdString())
+      return Name.toString();
+    return "__" + std::to_string(NumberOrig);
+  }
   void setName(const std::string &NewName) {
     if (NewName.empty())
       return;
@@ -118,10 +122,13 @@
   }
 
 private:
-  CfgNode(Cfg *Func, SizeT Number);
+  CfgNode(Cfg *Func, SizeT Number)
+      : Func(Func), Number(Number), NumberOrig(Number),
+        Name(NodeString::createWithoutString(Func)) {}
   bool livenessValidateIntervals(Liveness *Liveness) const;
   Cfg *const Func;
-  SizeT Number; /// invariant: Func->Nodes[Number]==this
+  SizeT Number;           /// invariant: Func->Nodes[Number]==this
+  const SizeT NumberOrig; /// used for name auto-generation
   NodeString Name;
   SizeT LoopNestDepth = 0; /// the loop nest depth of this node
   bool HasReturn = false;  /// does this block need an epilog?
diff --git a/src/IceInst.cpp b/src/IceInst.cpp
index 6cd2a04..a30a632 100644
--- a/src/IceInst.cpp
+++ b/src/IceInst.cpp
@@ -452,7 +452,7 @@
   assert(Dest);
   Variable *NewSrc = Func->makeVariable(Dest->getType());
   if (BuildDefs::dump())
-    NewSrc->setName(Func, Dest->getName(Func) + "_phi");
+    NewSrc->setName(Func, Dest->getName() + "_phi");
   if (auto *NewSrc64On32 = llvm::dyn_cast<Variable64On32>(NewSrc))
     NewSrc64On32->initHiLo(Func);
   this->Dest = NewSrc;
diff --git a/src/IceOperand.cpp b/src/IceOperand.cpp
index 462ba9a..50d70b9 100644
--- a/src/IceOperand.cpp
+++ b/src/IceOperand.cpp
@@ -191,12 +191,6 @@
     ++TrimmedBegin;
 }
 
-std::string Variable::getName(const Cfg *Func) const {
-  if (Func == nullptr)
-    return "__" + std::to_string(getIndex());
-  return Name.toString();
-}
-
 const Variable *Variable::asType(const Cfg *Func, Type Ty,
                                  RegNumT NewRegNum) const {
   // Note: This returns a Variable, even if the "this" object is a subclass of
@@ -539,12 +533,12 @@
   if (!BuildDefs::dump())
     return;
   if (Func == nullptr) {
-    Str << "%" << getName(Func);
+    Str << "%" << getName();
     return;
   }
   if (Func->isVerbose(IceV_RegOrigins) ||
       (!hasReg() && !Func->getTarget()->hasComputedFrame()))
-    Str << "%" << getName(Func);
+    Str << "%" << getName();
   if (hasReg()) {
     if (Func->isVerbose(IceV_RegOrigins))
       Str << ":";
diff --git a/src/IceOperand.h b/src/IceOperand.h
index 04895f6..06b11e6 100644
--- a/src/IceOperand.h
+++ b/src/IceOperand.h
@@ -647,9 +647,12 @@
   }
 
   SizeT getIndex() const { return Number; }
-  std::string getName(const Cfg *Func) const;
+  std::string getName() const {
+    if (Name.hasStdString())
+      return Name.toString();
+    return "__" + std::to_string(getIndex());
+  }
   virtual void setName(const Cfg *Func, const std::string &NewName) {
-    (void)Func;
     if (NewName.empty())
       return;
     Name = VariableString::createWithString(Func, NewName);
@@ -669,10 +672,10 @@
   void setStackOffset(int32_t Offset) { StackOffset = Offset; }
   /// Returns the variable's stack offset in symbolic form, to improve
   /// readability in DecorateAsm mode.
-  std::string getSymbolicStackOffset(const Cfg *Func) const {
+  std::string getSymbolicStackOffset() const {
     if (!BuildDefs::dump())
       return "";
-    return "lv$" + getName(Func);
+    return "lv$" + getName();
   }
 
   bool hasReg() const { return getRegNum().hasValue(); }
@@ -755,12 +758,6 @@
     Vars = VarsReal;
     Vars[0] = this;
     NumVars = 1;
-    if (BuildDefs::dump()) {
-      Name = VariableString::createWithString(
-          Func, "__" + std::to_string(getIndex()));
-    } else {
-      Name = VariableString::createWithoutString(Func);
-    }
   }
   /// Number is unique across all variables, and is used as a (bit)vector index
   /// for liveness analysis.
@@ -805,8 +802,8 @@
   void setName(const Cfg *Func, const std::string &NewName) override {
     Variable::setName(Func, NewName);
     if (LoVar && HiVar) {
-      LoVar->setName(Func, getName(Func) + "__lo");
-      HiVar->setName(Func, getName(Func) + "__hi");
+      LoVar->setName(Func, getName() + "__lo");
+      HiVar->setName(Func, getName() + "__hi");
     }
   }
 
@@ -835,8 +832,8 @@
     LoVar->setIsArg(getIsArg());
     HiVar->setIsArg(getIsArg());
     if (BuildDefs::dump()) {
-      LoVar->setName(Func, getName(Func) + "__lo");
-      HiVar->setName(Func, getName(Func) + "__hi");
+      LoVar->setName(Func, getName() + "__lo");
+      HiVar->setName(Func, getName() + "__hi");
     }
   }
 
diff --git a/src/IceRegAlloc.cpp b/src/IceRegAlloc.cpp
index 2eb3a84..e753852 100644
--- a/src/IceRegAlloc.cpp
+++ b/src/IceRegAlloc.cpp
@@ -169,12 +169,12 @@
   for (SizeT VarNum : DefsWithoutUses) {
     Variable *Var = Vars[VarNum];
     Str << "LR def without use, instruction " << LRBegin[VarNum]
-        << ", variable " << Var->getName(Func) << "\n";
+        << ", variable " << Var->getName() << "\n";
   }
   for (SizeT VarNum : UsesBeforeDefs) {
     Variable *Var = Vars[VarNum];
     Str << "LR use before def, instruction " << LREnd[VarNum] << ", variable "
-        << Var->getName(Func) << "\n";
+        << Var->getName() << "\n";
   }
   return false;
 }
@@ -277,12 +277,12 @@
       for (SizeT VarNum : DefsWithoutUses) {
         Variable *Var = Vars[VarNum];
         Str << "LR def without use, instruction " << LRBegin[VarNum]
-            << ", variable " << Var->getName(Func) << "\n";
+            << ", variable " << Var->getName() << "\n";
       }
       for (SizeT VarNum : UsesBeforeDefs) {
         Variable *Var = Vars[VarNum];
         Str << "LR use before def, instruction " << LREnd[VarNum]
-            << ", variable " << Var->getName(Func) << "\n";
+            << ", variable " << Var->getName() << "\n";
       }
     }
     llvm::report_fatal_error("initForInfOnly: Liveness error");
@@ -715,7 +715,7 @@
       Func->setError("Unable to find a physical register for an "
                      "infinite-weight live range "
                      "(consider using -reg-reserve): " +
-                     Iter.Cur->getName(Func));
+                     Iter.Cur->getName());
       Handled.push_back(Iter.Cur);
       return;
     }
diff --git a/src/IceTargetLoweringARM32.cpp b/src/IceTargetLoweringARM32.cpp
index 0f626e6..54a0cfa 100644
--- a/src/IceTargetLoweringARM32.cpp
+++ b/src/IceTargetLoweringARM32.cpp
@@ -1270,7 +1270,7 @@
     return;
   }
   if (Var->mustHaveReg()) {
-    llvm::report_fatal_error("Infinite-weight Variable (" + Var->getName(Func) +
+    llvm::report_fatal_error("Infinite-weight Variable (" + Var->getName() +
                              ") has no register assigned - function " +
                              Func->getFunctionName());
   }
@@ -1402,7 +1402,7 @@
 
     Variable *RegisterArg = Func->makeVariable(Ty);
     if (BuildDefs::dump()) {
-      RegisterArg->setName(Func, "home_reg:" + Arg->getName(Func));
+      RegisterArg->setName(Func, "home_reg:" + Arg->getName());
     }
     RegisterArg->setIsArg();
     Arg->setIsArg(false);
diff --git a/src/IceTargetLoweringMIPS32.cpp b/src/IceTargetLoweringMIPS32.cpp
index de8afbf..8b12f88 100644
--- a/src/IceTargetLoweringMIPS32.cpp
+++ b/src/IceTargetLoweringMIPS32.cpp
@@ -434,7 +434,7 @@
       Variable *RegisterArg = Func->makeVariable(Ty);
       auto *RegisterArg64On32 = llvm::cast<Variable64On32>(RegisterArg);
       if (BuildDefs::dump())
-        RegisterArg64On32->setName(Func, "home_reg:" + Arg->getName(Func));
+        RegisterArg64On32->setName(Func, "home_reg:" + Arg->getName());
       RegisterArg64On32->initHiLo(Func);
       RegisterArg64On32->setIsArg();
       RegisterArg64On32->getLo()->setRegNum(RegLo);
@@ -451,7 +451,7 @@
       ++NumGPRRegsUsed;
       Variable *RegisterArg = Func->makeVariable(Ty);
       if (BuildDefs::dump()) {
-        RegisterArg->setName(Func, "home_reg:" + Arg->getName(Func));
+        RegisterArg->setName(Func, "home_reg:" + Arg->getName());
       }
       RegisterArg->setRegNum(RegNum);
       RegisterArg->setIsArg();
diff --git a/src/IceTargetLoweringX86BaseImpl.h b/src/IceTargetLoweringX86BaseImpl.h
index c1a5f74..0bf03eb 100644
--- a/src/IceTargetLoweringX86BaseImpl.h
+++ b/src/IceTargetLoweringX86BaseImpl.h
@@ -886,7 +886,7 @@
     return;
   }
   if (Var->mustHaveReg()) {
-    llvm::report_fatal_error("Infinite-weight Variable (" + Var->getName(Func) +
+    llvm::report_fatal_error("Infinite-weight Variable (" + Var->getName() +
                              ") has no register assigned - function " +
                              Func->getFunctionName());
   }
@@ -901,7 +901,7 @@
   // Only print Offset when it is nonzero, regardless of DecorateAsm.
   if (Offset) {
     if (DecorateAsm) {
-      Str << Var->getSymbolicStackOffset(Func);
+      Str << Var->getSymbolicStackOffset();
     } else {
       Str << Offset;
     }
@@ -916,7 +916,7 @@
   if (Var->hasReg())
     llvm::report_fatal_error("Stack Variable has a register assigned");
   if (Var->mustHaveReg()) {
-    llvm::report_fatal_error("Infinite-weight Variable (" + Var->getName(Func) +
+    llvm::report_fatal_error("Infinite-weight Variable (" + Var->getName() +
                              ") has no register assigned - function " +
                              Func->getFunctionName());
   }
@@ -1509,7 +1509,7 @@
     // an instruction in the prolog to copy the home register to the assigned
     // location of Arg.
     if (BuildDefs::dump())
-      RegisterArg->setName(Func, "home_reg:" + Arg->getName(Func));
+      RegisterArg->setName(Func, "home_reg:" + Arg->getName());
     RegisterArg->setRegNum(RegNum);
     RegisterArg->setIsArg();
     Arg->setIsArg(false);
