Fix symbol table handling in functions.

Also fixes minor issues with branches in instructions (i.e. defining
entry node and computing predecessors).

BUG= https://code.google.com/p/nativeclient/issues/detail?id=3892
R=stichnot@chromium.org

Review URL: https://codereview.chromium.org/561823002
diff --git a/src/IceOperand.h b/src/IceOperand.h
index 0828396..36aafe2 100644
--- a/src/IceOperand.h
+++ b/src/IceOperand.h
@@ -335,6 +335,11 @@
 
   SizeT getIndex() const { return Number; }
   IceString getName() const;
+  void setName(IceString &NewName) {
+    // Make sure that the name can only be set once.
+    assert(Name.empty());
+    Name = NewName;
+  }
 
   Inst *getDefinition() const { return DefInst; }
   void setDefinition(Inst *Inst, const CfgNode *Node);
@@ -427,7 +432,7 @@
   // (bit)vector index for liveness analysis.
   const SizeT Number;
   // Name is optional.
-  const IceString Name;
+  IceString Name;
   // DefInst is the instruction that produces this variable as its
   // dest.
   Inst *DefInst;