Subzero: Don't store std::string objects inside Variable.

Instead, extend 668a7a333d6ddc3102b5b7c7c07448f6d259113c to include both CfgNode and Variable, keeping a pool of strings in the Cfg.

BUG= none
R=jvoung@chromium.org

Review URL: https://codereview.chromium.org/798693003
diff --git a/src/IceTargetLoweringX8632.cpp b/src/IceTargetLoweringX8632.cpp
index 1288c20..d049cbd 100644
--- a/src/IceTargetLoweringX8632.cpp
+++ b/src/IceTargetLoweringX8632.cpp
@@ -555,8 +555,9 @@
     // to the assigned location of Arg.
     int32_t RegNum = RegX8632::Reg_xmm0 + NumXmmArgs;
     ++NumXmmArgs;
-    IceString Name = "home_reg:" + Arg->getName();
-    Variable *RegisterArg = Func->makeVariable(Ty, Name);
+    Variable *RegisterArg = Func->makeVariable(Ty);
+    if (ALLOW_DUMP)
+      RegisterArg->setName(Func, "home_reg:" + Arg->getName(Func));
     RegisterArg->setRegNum(RegNum);
     RegisterArg->setIsArg();
     Arg->setIsArg(false);
@@ -1050,8 +1051,12 @@
     return;
   }
   assert(Hi == NULL);
-  Lo = Func->makeVariable(IceType_i32, Var->getName() + "__lo");
-  Hi = Func->makeVariable(IceType_i32, Var->getName() + "__hi");
+  Lo = Func->makeVariable(IceType_i32);
+  Hi = Func->makeVariable(IceType_i32);
+  if (ALLOW_DUMP) {
+    Lo->setName(Func, Var->getName(Func) + "__lo");
+    Hi->setName(Func, Var->getName(Func) + "__hi");
+  }
   Var->setLoHi(Lo, Hi);
   if (Var->getIsArg()) {
     Lo->setIsArg();