| Index: src/IceInstX8632.h | 
| diff --git a/src/IceInstX8632.h b/src/IceInstX8632.h | 
| index f7447c357020d7238363e1fbfc988b5c85af59fb..5d25deedaa0c3e8ab2d92a5f9f052838ec6c9390 100644 | 
| --- a/src/IceInstX8632.h | 
| +++ b/src/IceInstX8632.h | 
| @@ -36,16 +36,15 @@ public: | 
| kMem, | 
| kSplit | 
| }; | 
| -  virtual void emit(const Cfg *Func) const = 0; | 
| using Operand::dump; | 
| -  virtual void dump(const Cfg *, Ostream &Str) const { | 
| +  void dump(const Cfg *, Ostream &Str) const override { | 
| Str << "<OperandX8632>"; | 
| } | 
|  | 
| protected: | 
| OperandX8632(OperandKindX8632 Kind, Type Ty) | 
| : Operand(static_cast<OperandKind>(Kind), Ty) {} | 
| -  virtual ~OperandX8632() {} | 
| +  ~OperandX8632() override {} | 
|  | 
| private: | 
| OperandX8632(const OperandX8632 &) LLVM_DELETED_FUNCTION; | 
| @@ -77,9 +76,9 @@ public: | 
| uint16_t getShift() const { return Shift; } | 
| SegmentRegisters getSegmentRegister() const { return SegmentReg; } | 
| x86::Address toAsmAddress(Assembler *Asm) const; | 
| -  virtual void emit(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| using OperandX8632::dump; | 
| -  virtual void dump(const Cfg *Func, Ostream &Str) const; | 
| +  void dump(const Cfg *Func, Ostream &Str) const override; | 
|  | 
| static bool classof(const Operand *Operand) { | 
| return Operand->getKind() == static_cast<OperandKind>(kMem); | 
| @@ -90,7 +89,7 @@ private: | 
| Variable *Index, uint16_t Shift, SegmentRegisters SegmentReg); | 
| OperandX8632Mem(const OperandX8632Mem &) LLVM_DELETED_FUNCTION; | 
| OperandX8632Mem &operator=(const OperandX8632Mem &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~OperandX8632Mem() {} | 
| +  ~OperandX8632Mem() override {} | 
| Variable *Base; | 
| Constant *Offset; | 
| Variable *Index; | 
| @@ -113,9 +112,9 @@ public: | 
| static VariableSplit *create(Cfg *Func, Variable *Var, Portion Part) { | 
| return new (Func->allocate<VariableSplit>()) VariableSplit(Func, Var, Part); | 
| } | 
| -  virtual void emit(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| using OperandX8632::dump; | 
| -  virtual void dump(const Cfg *Func, Ostream &Str) const; | 
| +  void dump(const Cfg *Func, Ostream &Str) const override; | 
|  | 
| static bool classof(const Operand *Operand) { | 
| return Operand->getKind() == static_cast<OperandKind>(kSplit); | 
| @@ -131,7 +130,7 @@ private: | 
| } | 
| VariableSplit(const VariableSplit &) LLVM_DELETED_FUNCTION; | 
| VariableSplit &operator=(const VariableSplit &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~VariableSplit() { Func->deallocateArrayOf<Variable *>(Vars); } | 
| +  ~VariableSplit() override { Func->deallocateArrayOf<Variable *>(Vars); } | 
| Cfg *Func; // Held only for the destructor. | 
| Variable *Var; | 
| Portion Part; | 
| @@ -253,13 +252,12 @@ public: | 
| }; | 
|  | 
| static const char *getWidthString(Type Ty); | 
| -  virtual void emit(const Cfg *Func) const = 0; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void dump(const Cfg *Func) const override; | 
|  | 
| protected: | 
| InstX8632(Cfg *Func, InstKindX8632 Kind, SizeT Maxsrcs, Variable *Dest) | 
| : InstTarget(Func, static_cast<InstKind>(Kind), Maxsrcs, Dest) {} | 
| -  virtual ~InstX8632() {} | 
| +  ~InstX8632() override {} | 
| static bool isClassof(const Inst *Inst, InstKindX8632 MyKind) { | 
| return Inst->getKind() == static_cast<InstKind>(MyKind); | 
| } | 
| @@ -311,16 +309,16 @@ public: | 
| static InstX8632Label *create(Cfg *Func, TargetX8632 *Target) { | 
| return new (Func->allocate<InstX8632Label>()) InstX8632Label(Func, Target); | 
| } | 
| -  virtual uint32_t getEmitInstCount() const { return 0; } | 
| +  uint32_t getEmitInstCount() const override { return 0; } | 
| IceString getName(const Cfg *Func) const; | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
|  | 
| private: | 
| InstX8632Label(Cfg *Func, TargetX8632 *Target); | 
| InstX8632Label(const InstX8632Label &) LLVM_DELETED_FUNCTION; | 
| InstX8632Label &operator=(const InstX8632Label &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632Label() {} | 
| +  ~InstX8632Label() override {} | 
| SizeT Number; // used only for unique label string generation | 
| }; | 
|  | 
| @@ -363,7 +361,7 @@ public: | 
| const CfgNode *getTargetTrue() const { return TargetTrue; } | 
| const CfgNode *getTargetFalse() const { return TargetFalse; } | 
| bool optimizeBranch(const CfgNode *NextNode); | 
| -  virtual uint32_t getEmitInstCount() const { | 
| +  uint32_t getEmitInstCount() const override { | 
| uint32_t Sum = 0; | 
| if (Label) | 
| ++Sum; | 
| @@ -373,8 +371,8 @@ public: | 
| ++Sum; | 
| return Sum; | 
| } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| static bool classof(const Inst *Inst) { return isClassof(Inst, Br); } | 
|  | 
| private: | 
| @@ -382,7 +380,7 @@ private: | 
| const InstX8632Label *Label, CondX86::BrCond Condition); | 
| InstX8632Br(const InstX8632Br &) LLVM_DELETED_FUNCTION; | 
| InstX8632Br &operator=(const InstX8632Br &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632Br() {} | 
| +  ~InstX8632Br() override {} | 
| CondX86::BrCond Condition; | 
| const CfgNode *TargetTrue; | 
| const CfgNode *TargetFalse; | 
| @@ -397,9 +395,9 @@ public: | 
| return new (Func->allocate<InstX8632AdjustStack>()) | 
| InstX8632AdjustStack(Func, Amount, Esp); | 
| } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void emitIAS(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void emitIAS(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| static bool classof(const Inst *Inst) { return isClassof(Inst, Adjuststack); } | 
|  | 
| private: | 
| @@ -418,15 +416,15 @@ public: | 
| InstX8632Call(Func, Dest, CallTarget); | 
| } | 
| Operand *getCallTarget() const { return getSrc(0); } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| static bool classof(const Inst *Inst) { return isClassof(Inst, Call); } | 
|  | 
| private: | 
| InstX8632Call(Cfg *Func, Variable *Dest, Operand *CallTarget); | 
| InstX8632Call(const InstX8632Call &) LLVM_DELETED_FUNCTION; | 
| InstX8632Call &operator=(const InstX8632Call &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632Call() {} | 
| +  ~InstX8632Call() override {} | 
| }; | 
|  | 
| // Emit a one-operand (GPR) instruction. | 
| @@ -441,20 +439,20 @@ public: | 
| return new (Func->allocate<InstX8632InplaceopGPR>()) | 
| InstX8632InplaceopGPR(Func, SrcDest); | 
| } | 
| -  virtual void emit(const Cfg *Func) const { | 
| +  void emit(const Cfg *Func) const override { | 
| Ostream &Str = Func->getContext()->getStrEmit(); | 
| assert(getSrcSize() == 1); | 
| Str << "\t" << Opcode << "\t"; | 
| getSrc(0)->emit(Func); | 
| Str << "\n"; | 
| } | 
| -  virtual void emitIAS(const Cfg *Func) const { | 
| +  void emitIAS(const Cfg *Func) const override { | 
| assert(getSrcSize() == 1); | 
| const Variable *Var = getDest(); | 
| Type Ty = Var->getType(); | 
| emitIASVarTyGPR(Func, Ty, Var, Emitter); | 
| } | 
| -  virtual void dump(const Cfg *Func) const { | 
| +  void dump(const Cfg *Func) const override { | 
| Ostream &Str = Func->getContext()->getStrDump(); | 
| dumpDest(Func); | 
| Str << " = " << Opcode << "." << getDest()->getType() << " "; | 
| @@ -470,7 +468,7 @@ private: | 
| InstX8632InplaceopGPR(const InstX8632InplaceopGPR &) LLVM_DELETED_FUNCTION; | 
| InstX8632InplaceopGPR & | 
| operator=(const InstX8632InplaceopGPR &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632InplaceopGPR() {} | 
| +  ~InstX8632InplaceopGPR() override {} | 
| static const char *Opcode; | 
| static const x86::AssemblerX86::GPREmitterOneOp Emitter; | 
| }; | 
| @@ -489,7 +487,7 @@ public: | 
| return new (Func->allocate<InstX8632UnaryopGPR>()) | 
| InstX8632UnaryopGPR(Func, Dest, Src); | 
| } | 
| -  virtual void emit(const Cfg *Func) const { | 
| +  void emit(const Cfg *Func) const override { | 
| Ostream &Str = Func->getContext()->getStrEmit(); | 
| assert(getSrcSize() == 1); | 
| Str << "\t" << Opcode << "\t"; | 
| @@ -498,14 +496,14 @@ public: | 
| getSrc(0)->emit(Func); | 
| Str << "\n"; | 
| } | 
| -  virtual void emitIAS(const Cfg *Func) const { | 
| +  void emitIAS(const Cfg *Func) const override { | 
| assert(getSrcSize() == 1); | 
| const Variable *Var = getDest(); | 
| Type Ty = Var->getType(); | 
| const Operand *Src = getSrc(0); | 
| emitIASRegOpTyGPR(Func, Ty, Var, Src, Emitter); | 
| } | 
| -  virtual void dump(const Cfg *Func) const { | 
| +  void dump(const Cfg *Func) const override { | 
| Ostream &Str = Func->getContext()->getStrDump(); | 
| dumpDest(Func); | 
| Str << " = " << Opcode << "." << getDest()->getType() << " "; | 
| @@ -521,7 +519,7 @@ private: | 
| InstX8632UnaryopGPR(const InstX8632UnaryopGPR &) LLVM_DELETED_FUNCTION; | 
| InstX8632UnaryopGPR & | 
| operator=(const InstX8632UnaryopGPR &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632UnaryopGPR() {} | 
| +  ~InstX8632UnaryopGPR() override {} | 
| static const char *Opcode; | 
| static const x86::AssemblerX86::GPREmitterRegOp Emitter; | 
| }; | 
| @@ -537,7 +535,7 @@ public: | 
| return new (Func->allocate<InstX8632UnaryopXmm>()) | 
| InstX8632UnaryopXmm(Func, Dest, Src); | 
| } | 
| -  virtual void emit(const Cfg *Func) const { | 
| +  void emit(const Cfg *Func) const override { | 
| Ostream &Str = Func->getContext()->getStrEmit(); | 
| assert(getSrcSize() == 1); | 
| Str << "\t" << Opcode << "\t"; | 
| @@ -546,12 +544,12 @@ public: | 
| getSrc(0)->emit(Func); | 
| Str << "\n"; | 
| } | 
| -  virtual void emitIAS(const Cfg *Func) const { | 
| +  void emitIAS(const Cfg *Func) const override { | 
| Type Ty = getDest()->getType(); | 
| assert(getSrcSize() == 1); | 
| emitIASVarOperandTyXMM(Func, Ty, getDest(), getSrc(0), Emitter); | 
| } | 
| -  virtual void dump(const Cfg *Func) const { | 
| +  void dump(const Cfg *Func) const override { | 
| Ostream &Str = Func->getContext()->getStrDump(); | 
| dumpDest(Func); | 
| Str << " = " << Opcode << "." << getDest()->getType() << " "; | 
| @@ -567,7 +565,7 @@ private: | 
| InstX8632UnaryopXmm(const InstX8632UnaryopXmm &) LLVM_DELETED_FUNCTION; | 
| InstX8632UnaryopXmm & | 
| operator=(const InstX8632UnaryopXmm &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632UnaryopXmm() {} | 
| +  ~InstX8632UnaryopXmm() override {} | 
| static const char *Opcode; | 
| static const x86::AssemblerX86::XmmEmitterTwoOps Emitter; | 
| }; | 
| @@ -585,10 +583,10 @@ public: | 
| return new (Func->allocate<InstX8632Binop>()) | 
| InstX8632Binop(Func, Dest, Source); | 
| } | 
| -  virtual void emit(const Cfg *Func) const { | 
| +  void emit(const Cfg *Func) const override { | 
| emitTwoAddress(Opcode, this, Func, ShiftHack); | 
| } | 
| -  virtual void dump(const Cfg *Func) const { | 
| +  void dump(const Cfg *Func) const override { | 
| Ostream &Str = Func->getContext()->getStrDump(); | 
| dumpDest(Func); | 
| Str << " = " << Opcode << "." << getDest()->getType() << " "; | 
| @@ -604,7 +602,7 @@ private: | 
| } | 
| InstX8632Binop(const InstX8632Binop &) LLVM_DELETED_FUNCTION; | 
| InstX8632Binop &operator=(const InstX8632Binop &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632Binop() {} | 
| +  ~InstX8632Binop() override {} | 
| static const char *Opcode; | 
| }; | 
|  | 
| @@ -616,18 +614,18 @@ public: | 
| return new (Func->allocate<InstX8632BinopXmm>()) | 
| InstX8632BinopXmm(Func, Dest, Source); | 
| } | 
| -  virtual void emit(const Cfg *Func) const { | 
| +  void emit(const Cfg *Func) const override { | 
| const bool ShiftHack = false; | 
| emitTwoAddress(Opcode, this, Func, ShiftHack); | 
| } | 
| -  virtual void emitIAS(const Cfg *Func) const { | 
| +  void emitIAS(const Cfg *Func) const override { | 
| Type Ty = getDest()->getType(); | 
| if (NeedsElementType) | 
| Ty = typeElementType(Ty); | 
| assert(getSrcSize() == 2); | 
| emitIASVarOperandTyXMM(Func, Ty, getDest(), getSrc(1), Emitter); | 
| } | 
| -  virtual void dump(const Cfg *Func) const { | 
| +  void dump(const Cfg *Func) const override { | 
| Ostream &Str = Func->getContext()->getStrDump(); | 
| dumpDest(Func); | 
| Str << " = " << Opcode << "." << getDest()->getType() << " "; | 
| @@ -643,7 +641,7 @@ private: | 
| } | 
| InstX8632BinopXmm(const InstX8632BinopXmm &) LLVM_DELETED_FUNCTION; | 
| InstX8632BinopXmm &operator=(const InstX8632BinopXmm &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632BinopXmm() {} | 
| +  ~InstX8632BinopXmm() override {} | 
| static const char *Opcode; | 
| static const x86::AssemblerX86::XmmEmitterTwoOps Emitter; | 
| }; | 
| @@ -656,7 +654,7 @@ public: | 
| return new (Func->allocate<InstX8632Ternop>()) | 
| InstX8632Ternop(Func, Dest, Source1, Source2); | 
| } | 
| -  virtual void emit(const Cfg *Func) const { | 
| +  void emit(const Cfg *Func) const override { | 
| Ostream &Str = Func->getContext()->getStrEmit(); | 
| assert(getSrcSize() == 3); | 
| Str << "\t" << Opcode << "\t"; | 
| @@ -667,7 +665,7 @@ public: | 
| getSrc(2)->emit(Func); | 
| Str << "\n"; | 
| } | 
| -  virtual void dump(const Cfg *Func) const { | 
| +  void dump(const Cfg *Func) const override { | 
| Ostream &Str = Func->getContext()->getStrDump(); | 
| dumpDest(Func); | 
| Str << " = " << Opcode << "." << getDest()->getType() << " "; | 
| @@ -684,7 +682,7 @@ private: | 
| } | 
| InstX8632Ternop(const InstX8632Ternop &) LLVM_DELETED_FUNCTION; | 
| InstX8632Ternop &operator=(const InstX8632Ternop &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632Ternop() {} | 
| +  ~InstX8632Ternop() override {} | 
| static const char *Opcode; | 
| }; | 
|  | 
| @@ -697,7 +695,7 @@ public: | 
| return new (Func->allocate<InstX8632ThreeAddressop>()) | 
| InstX8632ThreeAddressop(Func, Dest, Source0, Source1); | 
| } | 
| -  virtual void emit(const Cfg *Func) const { | 
| +  void emit(const Cfg *Func) const override { | 
| Ostream &Str = Func->getContext()->getStrEmit(); | 
| assert(getSrcSize() == 2); | 
| Str << "\t" << Opcode << "\t"; | 
| @@ -708,7 +706,7 @@ public: | 
| getSrc(1)->emit(Func); | 
| Str << "\n"; | 
| } | 
| -  virtual void dump(const Cfg *Func) const { | 
| +  void dump(const Cfg *Func) const override { | 
| Ostream &Str = Func->getContext()->getStrDump(); | 
| dumpDest(Func); | 
| Str << " = " << Opcode << "." << getDest()->getType() << " "; | 
| @@ -727,7 +725,7 @@ private: | 
| LLVM_DELETED_FUNCTION; | 
| InstX8632ThreeAddressop & | 
| operator=(const InstX8632ThreeAddressop &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632ThreeAddressop() {} | 
| +  ~InstX8632ThreeAddressop() override {} | 
| static const char *Opcode; | 
| }; | 
|  | 
| @@ -741,12 +739,12 @@ public: | 
| return new (Func->allocate<InstX8632Movlike>()) | 
| InstX8632Movlike(Func, Dest, Source); | 
| } | 
| -  virtual bool isRedundantAssign() const { | 
| +  bool isRedundantAssign() const override { | 
| return checkForRedundantAssign(getDest(), getSrc(0)); | 
| } | 
| -  virtual bool isSimpleAssign() const { return true; } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const { | 
| +  bool isSimpleAssign() const override { return true; } | 
| +  void emit(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override { | 
| Ostream &Str = Func->getContext()->getStrDump(); | 
| Str << Opcode << "." << getDest()->getType() << " "; | 
| dumpDest(Func); | 
| @@ -762,7 +760,7 @@ private: | 
| } | 
| InstX8632Movlike(const InstX8632Movlike &) LLVM_DELETED_FUNCTION; | 
| InstX8632Movlike &operator=(const InstX8632Movlike &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632Movlike() {} | 
| +  ~InstX8632Movlike() override {} | 
|  | 
| static const char *Opcode; | 
| }; | 
| @@ -844,7 +842,7 @@ protected: | 
| // with optimizations. | 
| HasSideEffects = Locked; | 
| } | 
| -  virtual ~InstX8632Lockable() {} | 
| +  ~InstX8632Lockable() override {} | 
|  | 
| private: | 
| InstX8632Lockable(const InstX8632Lockable &) LLVM_DELETED_FUNCTION; | 
| @@ -859,15 +857,15 @@ public: | 
| return new (Func->allocate<InstX8632Mul>()) | 
| InstX8632Mul(Func, Dest, Source1, Source2); | 
| } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| static bool classof(const Inst *Inst) { return isClassof(Inst, Mul); } | 
|  | 
| private: | 
| InstX8632Mul(Cfg *Func, Variable *Dest, Variable *Source1, Operand *Source2); | 
| InstX8632Mul(const InstX8632Mul &) LLVM_DELETED_FUNCTION; | 
| InstX8632Mul &operator=(const InstX8632Mul &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632Mul() {} | 
| +  ~InstX8632Mul() override {} | 
| }; | 
|  | 
| // Shld instruction - shift across a pair of operands.  TODO: Verify | 
| @@ -879,8 +877,8 @@ public: | 
| return new (Func->allocate<InstX8632Shld>()) | 
| InstX8632Shld(Func, Dest, Source1, Source2); | 
| } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| static bool classof(const Inst *Inst) { return isClassof(Inst, Shld); } | 
|  | 
| private: | 
| @@ -888,7 +886,7 @@ private: | 
| Variable *Source2); | 
| InstX8632Shld(const InstX8632Shld &) LLVM_DELETED_FUNCTION; | 
| InstX8632Shld &operator=(const InstX8632Shld &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632Shld() {} | 
| +  ~InstX8632Shld() override {} | 
| }; | 
|  | 
| // Shrd instruction - shift across a pair of operands.  TODO: Verify | 
| @@ -900,8 +898,8 @@ public: | 
| return new (Func->allocate<InstX8632Shrd>()) | 
| InstX8632Shrd(Func, Dest, Source1, Source2); | 
| } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| static bool classof(const Inst *Inst) { return isClassof(Inst, Shrd); } | 
|  | 
| private: | 
| @@ -909,7 +907,7 @@ private: | 
| Variable *Source2); | 
| InstX8632Shrd(const InstX8632Shrd &) LLVM_DELETED_FUNCTION; | 
| InstX8632Shrd &operator=(const InstX8632Shrd &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632Shrd() {} | 
| +  ~InstX8632Shrd() override {} | 
| }; | 
|  | 
| // Conditional move instruction. | 
| @@ -920,9 +918,9 @@ public: | 
| return new (Func->allocate<InstX8632Cmov>()) | 
| InstX8632Cmov(Func, Dest, Source, Cond); | 
| } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void emitIAS(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void emitIAS(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| static bool classof(const Inst *Inst) { return isClassof(Inst, Cmov); } | 
|  | 
| private: | 
| @@ -930,7 +928,7 @@ private: | 
| CondX86::BrCond Cond); | 
| InstX8632Cmov(const InstX8632Cmov &) LLVM_DELETED_FUNCTION; | 
| InstX8632Cmov &operator=(const InstX8632Cmov &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632Cmov() {} | 
| +  ~InstX8632Cmov() override {} | 
|  | 
| CondX86::BrCond Condition; | 
| }; | 
| @@ -944,9 +942,9 @@ public: | 
| return new (Func->allocate<InstX8632Cmpps>()) | 
| InstX8632Cmpps(Func, Dest, Source, Condition); | 
| } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void emitIAS(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void emitIAS(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| static bool classof(const Inst *Inst) { return isClassof(Inst, Cmpps); } | 
|  | 
| private: | 
| @@ -954,7 +952,7 @@ private: | 
| CondX86::CmppsCond Cond); | 
| InstX8632Cmpps(const InstX8632Cmpps &) LLVM_DELETED_FUNCTION; | 
| InstX8632Cmpps &operator=(const InstX8632Cmpps &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632Cmpps() {} | 
| +  ~InstX8632Cmpps() override {} | 
|  | 
| CondX86::CmppsCond Condition; | 
| }; | 
| @@ -971,9 +969,9 @@ public: | 
| return new (Func->allocate<InstX8632Cmpxchg>()) | 
| InstX8632Cmpxchg(Func, DestOrAddr, Eax, Desired, Locked); | 
| } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void emitIAS(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void emitIAS(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| static bool classof(const Inst *Inst) { return isClassof(Inst, Cmpxchg); } | 
|  | 
| private: | 
| @@ -981,7 +979,7 @@ private: | 
| Variable *Desired, bool Locked); | 
| InstX8632Cmpxchg(const InstX8632Cmpxchg &) LLVM_DELETED_FUNCTION; | 
| InstX8632Cmpxchg &operator=(const InstX8632Cmpxchg &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632Cmpxchg() {} | 
| +  ~InstX8632Cmpxchg() override {} | 
| }; | 
|  | 
| // Cmpxchg8b instruction - cmpxchg8b <m64> will compare if <m64> | 
| @@ -998,9 +996,9 @@ public: | 
| return new (Func->allocate<InstX8632Cmpxchg8b>()) | 
| InstX8632Cmpxchg8b(Func, Dest, Edx, Eax, Ecx, Ebx, Locked); | 
| } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void emitIAS(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void emitIAS(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| static bool classof(const Inst *Inst) { return isClassof(Inst, Cmpxchg8b); } | 
|  | 
| private: | 
| @@ -1009,7 +1007,7 @@ private: | 
| InstX8632Cmpxchg8b(const InstX8632Cmpxchg8b &) LLVM_DELETED_FUNCTION; | 
| InstX8632Cmpxchg8b & | 
| operator=(const InstX8632Cmpxchg8b &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632Cmpxchg8b() {} | 
| +  ~InstX8632Cmpxchg8b() override {} | 
| }; | 
|  | 
| // Cvt instruction - wrapper for cvtsX2sY where X and Y are in {s,d,i} | 
| @@ -1023,8 +1021,8 @@ public: | 
| return new (Func->allocate<InstX8632Cvt>()) | 
| InstX8632Cvt(Func, Dest, Source, Trunc); | 
| } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| static bool classof(const Inst *Inst) { return isClassof(Inst, Cvt); } | 
|  | 
| private: | 
| @@ -1032,7 +1030,7 @@ private: | 
| InstX8632Cvt(Cfg *Func, Variable *Dest, Operand *Source, bool Trunc); | 
| InstX8632Cvt(const InstX8632Cvt &) LLVM_DELETED_FUNCTION; | 
| InstX8632Cvt &operator=(const InstX8632Cvt &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632Cvt() {} | 
| +  ~InstX8632Cvt() override {} | 
| }; | 
|  | 
| // cmp - Integer compare instruction. | 
| @@ -1042,15 +1040,15 @@ public: | 
| return new (Func->allocate<InstX8632Icmp>()) | 
| InstX8632Icmp(Func, Src1, Src2); | 
| } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| static bool classof(const Inst *Inst) { return isClassof(Inst, Icmp); } | 
|  | 
| private: | 
| InstX8632Icmp(Cfg *Func, Operand *Src1, Operand *Src2); | 
| InstX8632Icmp(const InstX8632Icmp &) LLVM_DELETED_FUNCTION; | 
| InstX8632Icmp &operator=(const InstX8632Icmp &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632Icmp() {} | 
| +  ~InstX8632Icmp() override {} | 
| }; | 
|  | 
| // ucomiss/ucomisd - floating-point compare instruction. | 
| @@ -1060,16 +1058,16 @@ public: | 
| return new (Func->allocate<InstX8632Ucomiss>()) | 
| InstX8632Ucomiss(Func, Src1, Src2); | 
| } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void emitIAS(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void emitIAS(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| static bool classof(const Inst *Inst) { return isClassof(Inst, Ucomiss); } | 
|  | 
| private: | 
| InstX8632Ucomiss(Cfg *Func, Operand *Src1, Operand *Src2); | 
| InstX8632Ucomiss(const InstX8632Ucomiss &) LLVM_DELETED_FUNCTION; | 
| InstX8632Ucomiss &operator=(const InstX8632Ucomiss &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632Ucomiss() {} | 
| +  ~InstX8632Ucomiss() override {} | 
| }; | 
|  | 
| // UD2 instruction. | 
| @@ -1078,15 +1076,15 @@ public: | 
| static InstX8632UD2 *create(Cfg *Func) { | 
| return new (Func->allocate<InstX8632UD2>()) InstX8632UD2(Func); | 
| } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| static bool classof(const Inst *Inst) { return isClassof(Inst, UD2); } | 
|  | 
| private: | 
| InstX8632UD2(Cfg *Func); | 
| InstX8632UD2(const InstX8632UD2 &) LLVM_DELETED_FUNCTION; | 
| InstX8632UD2 &operator=(const InstX8632UD2 &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632UD2() {} | 
| +  ~InstX8632UD2() override {} | 
| }; | 
|  | 
| // Test instruction. | 
| @@ -1096,15 +1094,15 @@ public: | 
| return new (Func->allocate<InstX8632Test>()) | 
| InstX8632Test(Func, Source1, Source2); | 
| } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| static bool classof(const Inst *Inst) { return isClassof(Inst, Test); } | 
|  | 
| private: | 
| InstX8632Test(Cfg *Func, Operand *Source1, Operand *Source2); | 
| InstX8632Test(const InstX8632Test &) LLVM_DELETED_FUNCTION; | 
| InstX8632Test &operator=(const InstX8632Test &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632Test() {} | 
| +  ~InstX8632Test() override {} | 
| }; | 
|  | 
| // Mfence instruction. | 
| @@ -1113,15 +1111,15 @@ public: | 
| static InstX8632Mfence *create(Cfg *Func) { | 
| return new (Func->allocate<InstX8632Mfence>()) InstX8632Mfence(Func); | 
| } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| static bool classof(const Inst *Inst) { return isClassof(Inst, Mfence); } | 
|  | 
| private: | 
| InstX8632Mfence(Cfg *Func); | 
| InstX8632Mfence(const InstX8632Mfence &) LLVM_DELETED_FUNCTION; | 
| InstX8632Mfence &operator=(const InstX8632Mfence &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632Mfence() {} | 
| +  ~InstX8632Mfence() override {} | 
| }; | 
|  | 
| // This is essentially a "mov" instruction with an OperandX8632Mem | 
| @@ -1133,15 +1131,15 @@ public: | 
| return new (Func->allocate<InstX8632Store>()) | 
| InstX8632Store(Func, Value, Mem); | 
| } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| static bool classof(const Inst *Inst) { return isClassof(Inst, Store); } | 
|  | 
| private: | 
| InstX8632Store(Cfg *Func, Operand *Value, OperandX8632 *Mem); | 
| InstX8632Store(const InstX8632Store &) LLVM_DELETED_FUNCTION; | 
| InstX8632Store &operator=(const InstX8632Store &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632Store() {} | 
| +  ~InstX8632Store() override {} | 
| }; | 
|  | 
| class InstX8632StoreP : public InstX8632 { | 
| @@ -1150,15 +1148,15 @@ public: | 
| return new (Func->allocate<InstX8632StoreP>()) | 
| InstX8632StoreP(Func, Value, Mem); | 
| } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| static bool classof(const Inst *Inst) { return isClassof(Inst, StoreP); } | 
|  | 
| private: | 
| InstX8632StoreP(Cfg *Func, Operand *Value, OperandX8632 *Mem); | 
| InstX8632StoreP(const InstX8632StoreP &) LLVM_DELETED_FUNCTION; | 
| InstX8632StoreP &operator=(const InstX8632StoreP &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632StoreP() {} | 
| +  ~InstX8632StoreP() override {} | 
| }; | 
|  | 
| // This is essentially a "movq" instruction with an OperandX8632Mem | 
| @@ -1170,15 +1168,15 @@ public: | 
| return new (Func->allocate<InstX8632StoreQ>()) | 
| InstX8632StoreQ(Func, Value, Mem); | 
| } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| static bool classof(const Inst *Inst) { return isClassof(Inst, StoreQ); } | 
|  | 
| private: | 
| InstX8632StoreQ(Cfg *Func, Operand *Value, OperandX8632 *Mem); | 
| InstX8632StoreQ(const InstX8632StoreQ &) LLVM_DELETED_FUNCTION; | 
| InstX8632StoreQ &operator=(const InstX8632StoreQ &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632StoreQ() {} | 
| +  ~InstX8632StoreQ() override {} | 
| }; | 
|  | 
| // Movsx - copy from a narrower integer type to a wider integer | 
| @@ -1189,15 +1187,15 @@ public: | 
| return new (Func->allocate<InstX8632Movsx>()) | 
| InstX8632Movsx(Func, Dest, Source); | 
| } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| static bool classof(const Inst *Inst) { return isClassof(Inst, Movsx); } | 
|  | 
| private: | 
| InstX8632Movsx(Cfg *Func, Variable *Dest, Operand *Source); | 
| InstX8632Movsx(const InstX8632Movsx &) LLVM_DELETED_FUNCTION; | 
| InstX8632Movsx &operator=(const InstX8632Movsx &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632Movsx() {} | 
| +  ~InstX8632Movsx() override {} | 
| }; | 
|  | 
| // Movzx - copy from a narrower integer type to a wider integer | 
| @@ -1208,15 +1206,15 @@ public: | 
| return new (Func->allocate<InstX8632Movzx>()) | 
| InstX8632Movzx(Func, Dest, Source); | 
| } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| static bool classof(const Inst *Inst) { return isClassof(Inst, Movzx); } | 
|  | 
| private: | 
| InstX8632Movzx(Cfg *Func, Variable *Dest, Operand *Source); | 
| InstX8632Movzx(const InstX8632Movzx &) LLVM_DELETED_FUNCTION; | 
| InstX8632Movzx &operator=(const InstX8632Movzx &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632Movzx() {} | 
| +  ~InstX8632Movzx() override {} | 
| }; | 
|  | 
| // Nop instructions of varying length | 
| @@ -1228,16 +1226,16 @@ public: | 
| static InstX8632Nop *create(Cfg *Func, NopVariant Variant) { | 
| return new (Func->allocate<InstX8632Nop>()) InstX8632Nop(Func, Variant); | 
| } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void emitIAS(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void emitIAS(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| static bool classof(const Inst *Inst) { return isClassof(Inst, Nop); } | 
|  | 
| private: | 
| InstX8632Nop(Cfg *Func, SizeT Length); | 
| InstX8632Nop(const InstX8632Nop &) LLVM_DELETED_FUNCTION; | 
| InstX8632Nop &operator=(const InstX8632Nop &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632Nop() {} | 
| +  ~InstX8632Nop() override {} | 
|  | 
| NopVariant Variant; | 
| }; | 
| @@ -1248,15 +1246,15 @@ public: | 
| static InstX8632Fld *create(Cfg *Func, Operand *Src) { | 
| return new (Func->allocate<InstX8632Fld>()) InstX8632Fld(Func, Src); | 
| } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| static bool classof(const Inst *Inst) { return isClassof(Inst, Fld); } | 
|  | 
| private: | 
| InstX8632Fld(Cfg *Func, Operand *Src); | 
| InstX8632Fld(const InstX8632Fld &) LLVM_DELETED_FUNCTION; | 
| InstX8632Fld &operator=(const InstX8632Fld &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632Fld() {} | 
| +  ~InstX8632Fld() override {} | 
| }; | 
|  | 
| // Fstp - store x87 st(0) into memory and pop st(0). | 
| @@ -1265,15 +1263,15 @@ public: | 
| static InstX8632Fstp *create(Cfg *Func, Variable *Dest) { | 
| return new (Func->allocate<InstX8632Fstp>()) InstX8632Fstp(Func, Dest); | 
| } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| static bool classof(const Inst *Inst) { return isClassof(Inst, Fstp); } | 
|  | 
| private: | 
| InstX8632Fstp(Cfg *Func, Variable *Dest); | 
| InstX8632Fstp(const InstX8632Fstp &) LLVM_DELETED_FUNCTION; | 
| InstX8632Fstp &operator=(const InstX8632Fstp &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632Fstp() {} | 
| +  ~InstX8632Fstp() override {} | 
| }; | 
|  | 
| class InstX8632Pop : public InstX8632 { | 
| @@ -1281,16 +1279,16 @@ public: | 
| static InstX8632Pop *create(Cfg *Func, Variable *Dest) { | 
| return new (Func->allocate<InstX8632Pop>()) InstX8632Pop(Func, Dest); | 
| } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void emitIAS(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void emitIAS(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| static bool classof(const Inst *Inst) { return isClassof(Inst, Pop); } | 
|  | 
| private: | 
| InstX8632Pop(Cfg *Func, Variable *Dest); | 
| InstX8632Pop(const InstX8632Pop &) LLVM_DELETED_FUNCTION; | 
| InstX8632Pop &operator=(const InstX8632Pop &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632Pop() {} | 
| +  ~InstX8632Pop() override {} | 
| }; | 
|  | 
| class InstX8632Push : public InstX8632 { | 
| @@ -1300,8 +1298,8 @@ public: | 
| return new (Func->allocate<InstX8632Push>()) | 
| InstX8632Push(Func, Source, SuppressStackAdjustment); | 
| } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| static bool classof(const Inst *Inst) { return isClassof(Inst, Push); } | 
|  | 
| private: | 
| @@ -1309,7 +1307,7 @@ private: | 
| InstX8632Push(const InstX8632Push &) LLVM_DELETED_FUNCTION; | 
| InstX8632Push &operator=(const InstX8632Push &) LLVM_DELETED_FUNCTION; | 
| bool SuppressStackAdjustment; | 
| -  virtual ~InstX8632Push() {} | 
| +  ~InstX8632Push() override {} | 
| }; | 
|  | 
| // Ret instruction.  Currently only supports the "ret" version that | 
| @@ -1321,16 +1319,16 @@ public: | 
| static InstX8632Ret *create(Cfg *Func, Variable *Source = NULL) { | 
| return new (Func->allocate<InstX8632Ret>()) InstX8632Ret(Func, Source); | 
| } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void emitIAS(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void emitIAS(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| static bool classof(const Inst *Inst) { return isClassof(Inst, Ret); } | 
|  | 
| private: | 
| InstX8632Ret(Cfg *Func, Variable *Source); | 
| InstX8632Ret(const InstX8632Ret &) LLVM_DELETED_FUNCTION; | 
| InstX8632Ret &operator=(const InstX8632Ret &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632Ret() {} | 
| +  ~InstX8632Ret() override {} | 
| }; | 
|  | 
| // Exchanging Add instruction.  Exchanges the first operand (destination | 
| @@ -1347,16 +1345,16 @@ public: | 
| return new (Func->allocate<InstX8632Xadd>()) | 
| InstX8632Xadd(Func, Dest, Source, Locked); | 
| } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void emitIAS(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void emitIAS(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| static bool classof(const Inst *Inst) { return isClassof(Inst, Xadd); } | 
|  | 
| private: | 
| InstX8632Xadd(Cfg *Func, Operand *Dest, Variable *Source, bool Locked); | 
| InstX8632Xadd(const InstX8632Xadd &) LLVM_DELETED_FUNCTION; | 
| InstX8632Xadd &operator=(const InstX8632Xadd &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632Xadd() {} | 
| +  ~InstX8632Xadd() override {} | 
| }; | 
|  | 
| // Exchange instruction.  Exchanges the first operand (destination | 
| @@ -1371,16 +1369,16 @@ public: | 
| return new (Func->allocate<InstX8632Xchg>()) | 
| InstX8632Xchg(Func, Dest, Source); | 
| } | 
| -  virtual void emit(const Cfg *Func) const; | 
| -  virtual void emitIAS(const Cfg *Func) const; | 
| -  virtual void dump(const Cfg *Func) const; | 
| +  void emit(const Cfg *Func) const override; | 
| +  void emitIAS(const Cfg *Func) const override; | 
| +  void dump(const Cfg *Func) const override; | 
| static bool classof(const Inst *Inst) { return isClassof(Inst, Xchg); } | 
|  | 
| private: | 
| InstX8632Xchg(Cfg *Func, Operand *Dest, Variable *Source); | 
| InstX8632Xchg(const InstX8632Xchg &) LLVM_DELETED_FUNCTION; | 
| InstX8632Xchg &operator=(const InstX8632Xchg &) LLVM_DELETED_FUNCTION; | 
| -  virtual ~InstX8632Xchg() {} | 
| +  ~InstX8632Xchg() override {} | 
| }; | 
|  | 
| // Declare partial template specializations of emit() methods that | 
|  |