Subzero: Improve the representation and handling of the FakeKill instruction.

The FakeKill instruction is always used for killing scratch registers, and a fair amount of effort is spent building new copies of the same scratch register list each time (i.e., for each lowered call instruction).  As such, we can create one master list of scratch registers and share it among all FakeKill instructions.

Also, in all situations where an instruction's Srcs[] were considered for liveness, we had to either explicitly ignore an InstFakeKill instruction, or treat it specially.  Now that InstFakeKill lacks any Srcs[] (or Dest), it doesn't need to be specially ignored, and the code is simplified.

In addition, the text asm emitter no longer clutters the output with FakeKill comments (and FakeUse as well).

BUG= none
R=jvoung@chromium.org

Review URL: https://codereview.chromium.org/691693003
diff --git a/src/IceInst.cpp b/src/IceInst.cpp
index 70b54b6..090faba 100644
--- a/src/IceInst.cpp
+++ b/src/IceInst.cpp
@@ -454,11 +454,8 @@
 
 InstFakeKill::InstFakeKill(Cfg *Func, const VarList &KilledRegs,
                            const Inst *Linked)
-    : InstHighLevel(Func, Inst::FakeKill, KilledRegs.size(), NULL),
-      Linked(Linked) {
-  for (Variable *Var : KilledRegs)
-    addSource(Var);
-}
+    : InstHighLevel(Func, Inst::FakeKill, 0, NULL), KilledRegs(KilledRegs),
+      Linked(Linked) {}
 
 // ======================== Dump routines ======================== //
 
@@ -730,6 +727,8 @@
 }
 
 void InstFakeDef::emit(const Cfg *Func) const {
+  // Go ahead and "emit" these for now, since they are relatively
+  // rare.
   Ostream &Str = Func->getContext()->getStrEmit();
   Str << "\t# ";
   getDest()->emit(Func);
@@ -744,12 +743,7 @@
   dumpSources(Func);
 }
 
-void InstFakeUse::emit(const Cfg *Func) const {
-  Ostream &Str = Func->getContext()->getStrEmit();
-  Str << "\t# ";
-  Str << "use.pseudo ";
-  emitSources(Func);
-}
+void InstFakeUse::emit(const Cfg *Func) const { (void)Func; }
 
 void InstFakeUse::dump(const Cfg *Func) const {
   Ostream &Str = Func->getContext()->getStrDump();
@@ -757,21 +751,20 @@
   dumpSources(Func);
 }
 
-void InstFakeKill::emit(const Cfg *Func) const {
-  Ostream &Str = Func->getContext()->getStrEmit();
-  Str << "\t# ";
-  if (Linked->isDeleted())
-    Str << "// ";
-  Str << "kill.pseudo ";
-  emitSources(Func);
-}
+void InstFakeKill::emit(const Cfg *Func) const { (void)Func; }
 
 void InstFakeKill::dump(const Cfg *Func) const {
   Ostream &Str = Func->getContext()->getStrDump();
   if (Linked->isDeleted())
     Str << "// ";
   Str << "kill.pseudo ";
-  dumpSources(Func);
+  bool First = true;
+  for (Variable *Var : KilledRegs) {
+    if (!First)
+      Str << ", ";
+    First = false;
+    Var->dump(Func);
+  }
 }
 
 void InstTarget::dump(const Cfg *Func) const {