[llvm-commits] [llvm] r146960 - in /llvm/trunk: include/llvm/ include/llvm/ADT/ include/llvm/Analysis/ include/llvm/CodeGen/ include/llvm/MC/ include/llvm/Object/ include/llvm/TableGen/ include/llvm/Target/ include/llvm/Transforms/Utils/ lib/Analysis/ lib/CodeGen/ lib/CodeGen/AsmPrinter/ lib/CodeGen/SelectionDAG/ lib/DebugInfo/ lib/ExecutionEngine/MCJIT/ lib/MC/ lib/Object/ lib/Support/ lib/TableGen/ lib/Target/ lib/Target/ARM/ lib/Target/ARM/MCTargetDesc/ lib/Target/CellSPU/ lib/Target/CellSPU/MCTargetDesc/ lib/Target...

Chad Rosier mcrosier at apple.com
Mon Dec 19 23:47:36 PST 2011


David,
Could you please update the CMakeList.txt?

 Chad

On Dec 19, 2011, at 6:50 PM, David Blaikie wrote:

> Author: dblaikie
> Date: Mon Dec 19 20:50:00 2011
> New Revision: 146960
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=146960&view=rev
> Log:
> Unweaken vtables as per http://llvm.org/docs/CodingStandards.html#ll_virtual_anch
> 
> Added:
>    llvm/trunk/lib/CodeGen/JITCodeEmitter.cpp
>    llvm/trunk/lib/CodeGen/MachineCodeEmitter.cpp
>    llvm/trunk/lib/ExecutionEngine/MCJIT/MCJITMemoryManager.cpp
>    llvm/trunk/lib/Support/IntrusiveRefCntPtr.cpp
>    llvm/trunk/lib/TableGen/TableGenAction.cpp
>    llvm/trunk/lib/Target/ARM/ARMMachineFunctionInfo.cpp
>    llvm/trunk/lib/Target/CellSPU/SPUMachineFunction.cpp
>    llvm/trunk/lib/Target/MBlaze/MBlazeMachineFunction.cpp
>    llvm/trunk/lib/Target/MSP430/MSP430MachineFunctionInfo.cpp
>    llvm/trunk/lib/Target/Mips/MipsMachineFunction.cpp
>    llvm/trunk/lib/Target/PTX/PTXMachineFunctionInfo.cpp
>    llvm/trunk/lib/Target/PowerPC/PPCMachineFunctionInfo.cpp
>    llvm/trunk/lib/Target/Sparc/SparcMachineFunctionInfo.cpp
>    llvm/trunk/lib/Target/TargetJITInfo.cpp
>    llvm/trunk/lib/Target/X86/X86MachineFunctionInfo.cpp
>    llvm/trunk/lib/Target/XCore/XCoreMachineFunctionInfo.cpp
>    llvm/trunk/utils/TableGen/X86ModRMFilters.cpp
> Modified:
>    llvm/trunk/include/llvm/ADT/IntrusiveRefCntPtr.h
>    llvm/trunk/include/llvm/Analysis/DebugInfo.h
>    llvm/trunk/include/llvm/Analysis/DominanceFrontier.h
>    llvm/trunk/include/llvm/Argument.h
>    llvm/trunk/include/llvm/CodeGen/JITCodeEmitter.h
>    llvm/trunk/include/llvm/CodeGen/LexicalScopes.h
>    llvm/trunk/include/llvm/CodeGen/MachineBranchProbabilityInfo.h
>    llvm/trunk/include/llvm/CodeGen/MachineCodeEmitter.h
>    llvm/trunk/include/llvm/CodeGen/MachineConstantPool.h
>    llvm/trunk/include/llvm/CodeGen/MachinePassRegistry.h
>    llvm/trunk/include/llvm/CodeGen/ScheduleDAG.h
>    llvm/trunk/include/llvm/CodeGen/SelectionDAGISel.h
>    llvm/trunk/include/llvm/Constant.h
>    llvm/trunk/include/llvm/Constants.h
>    llvm/trunk/include/llvm/MC/MCAsmInfoCOFF.h
>    llvm/trunk/include/llvm/MC/MCAsmInfoDarwin.h
>    llvm/trunk/include/llvm/MC/MCAssembler.h
>    llvm/trunk/include/llvm/Metadata.h
>    llvm/trunk/include/llvm/Object/Archive.h
>    llvm/trunk/include/llvm/Object/ObjectFile.h
>    llvm/trunk/include/llvm/TableGen/Record.h
>    llvm/trunk/include/llvm/TableGen/TableGenAction.h
>    llvm/trunk/include/llvm/TableGen/TableGenBackend.h
>    llvm/trunk/include/llvm/Target/TargetJITInfo.h
>    llvm/trunk/include/llvm/Target/TargetLibraryInfo.h
>    llvm/trunk/include/llvm/Target/TargetRegisterInfo.h
>    llvm/trunk/include/llvm/Transforms/Utils/SimplifyIndVar.h
>    llvm/trunk/lib/Analysis/DebugInfo.cpp
>    llvm/trunk/lib/Analysis/DominanceFrontier.cpp
>    llvm/trunk/lib/CodeGen/AsmPrinter/DIE.cpp
>    llvm/trunk/lib/CodeGen/AsmPrinter/DIE.h
>    llvm/trunk/lib/CodeGen/LexicalScopes.cpp
>    llvm/trunk/lib/CodeGen/LiveRangeEdit.cpp
>    llvm/trunk/lib/CodeGen/LiveRangeEdit.h
>    llvm/trunk/lib/CodeGen/MachineBranchProbabilityInfo.cpp
>    llvm/trunk/lib/CodeGen/MachineFunction.cpp
>    llvm/trunk/lib/CodeGen/MachinePassRegistry.cpp
>    llvm/trunk/lib/CodeGen/ScheduleDAG.cpp
>    llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
>    llvm/trunk/lib/CodeGen/Spiller.cpp
>    llvm/trunk/lib/CodeGen/Spiller.h
>    llvm/trunk/lib/DebugInfo/DWARFContext.cpp
>    llvm/trunk/lib/DebugInfo/DWARFContext.h
>    llvm/trunk/lib/ExecutionEngine/MCJIT/MCJITMemoryManager.h
>    llvm/trunk/lib/MC/MCAsmInfoCOFF.cpp
>    llvm/trunk/lib/MC/MCAsmInfoDarwin.cpp
>    llvm/trunk/lib/MC/MCAssembler.cpp
>    llvm/trunk/lib/Object/Archive.cpp
>    llvm/trunk/lib/Object/ObjectFile.cpp
>    llvm/trunk/lib/TableGen/Record.cpp
>    llvm/trunk/lib/TableGen/TableGenBackend.cpp
>    llvm/trunk/lib/Target/ARM/ARMMachineFunctionInfo.h
>    llvm/trunk/lib/Target/ARM/ARMRegisterInfo.cpp
>    llvm/trunk/lib/Target/ARM/ARMRegisterInfo.h
>    llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp
>    llvm/trunk/lib/Target/ARM/ARMTargetMachine.h
>    llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp
>    llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.h
>    llvm/trunk/lib/Target/CellSPU/MCTargetDesc/SPUMCAsmInfo.cpp
>    llvm/trunk/lib/Target/CellSPU/MCTargetDesc/SPUMCAsmInfo.h
>    llvm/trunk/lib/Target/CellSPU/SPUMachineFunction.h
>    llvm/trunk/lib/Target/MBlaze/MBlazeMachineFunction.h
>    llvm/trunk/lib/Target/MBlaze/MCTargetDesc/MBlazeMCAsmInfo.cpp
>    llvm/trunk/lib/Target/MBlaze/MCTargetDesc/MBlazeMCAsmInfo.h
>    llvm/trunk/lib/Target/MSP430/MCTargetDesc/MSP430MCAsmInfo.cpp
>    llvm/trunk/lib/Target/MSP430/MCTargetDesc/MSP430MCAsmInfo.h
>    llvm/trunk/lib/Target/MSP430/MSP430MachineFunctionInfo.h
>    llvm/trunk/lib/Target/MSP430/MSP430Subtarget.cpp
>    llvm/trunk/lib/Target/MSP430/MSP430Subtarget.h
>    llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.cpp
>    llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.h
>    llvm/trunk/lib/Target/Mips/MipsMachineFunction.h
>    llvm/trunk/lib/Target/Mips/MipsSubtarget.cpp
>    llvm/trunk/lib/Target/Mips/MipsSubtarget.h
>    llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp
>    llvm/trunk/lib/Target/Mips/MipsTargetMachine.h
>    llvm/trunk/lib/Target/PTX/MCTargetDesc/PTXMCAsmInfo.cpp
>    llvm/trunk/lib/Target/PTX/MCTargetDesc/PTXMCAsmInfo.h
>    llvm/trunk/lib/Target/PTX/PTXMachineFunctionInfo.h
>    llvm/trunk/lib/Target/PTX/PTXSubtarget.cpp
>    llvm/trunk/lib/Target/PTX/PTXSubtarget.h
>    llvm/trunk/lib/Target/PTX/PTXTargetMachine.cpp
>    llvm/trunk/lib/Target/PTX/PTXTargetMachine.h
>    llvm/trunk/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.cpp
>    llvm/trunk/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.h
>    llvm/trunk/lib/Target/PowerPC/PPCMachineFunctionInfo.h
>    llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.cpp
>    llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.h
>    llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.cpp
>    llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.h
>    llvm/trunk/lib/Target/Sparc/SparcMachineFunctionInfo.h
>    llvm/trunk/lib/Target/Sparc/SparcSubtarget.cpp
>    llvm/trunk/lib/Target/Sparc/SparcSubtarget.h
>    llvm/trunk/lib/Target/Sparc/SparcTargetMachine.cpp
>    llvm/trunk/lib/Target/Sparc/SparcTargetMachine.h
>    llvm/trunk/lib/Target/TargetLibraryInfo.cpp
>    llvm/trunk/lib/Target/TargetRegisterInfo.cpp
>    llvm/trunk/lib/Target/X86/Disassembler/X86Disassembler.cpp
>    llvm/trunk/lib/Target/X86/Disassembler/X86Disassembler.h
>    llvm/trunk/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp
>    llvm/trunk/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.h
>    llvm/trunk/lib/Target/X86/X86MachineFunctionInfo.h
>    llvm/trunk/lib/Target/X86/X86TargetMachine.cpp
>    llvm/trunk/lib/Target/X86/X86TargetMachine.h
>    llvm/trunk/lib/Target/XCore/MCTargetDesc/XCoreMCAsmInfo.cpp
>    llvm/trunk/lib/Target/XCore/MCTargetDesc/XCoreMCAsmInfo.h
>    llvm/trunk/lib/Target/XCore/XCoreMachineFunctionInfo.h
>    llvm/trunk/lib/Target/XCore/XCoreSubtarget.cpp
>    llvm/trunk/lib/Target/XCore/XCoreSubtarget.h
>    llvm/trunk/lib/Transforms/Utils/SimplifyIndVar.cpp
>    llvm/trunk/lib/VMCore/Constants.cpp
>    llvm/trunk/lib/VMCore/ConstantsContext.h
>    llvm/trunk/lib/VMCore/Function.cpp
>    llvm/trunk/lib/VMCore/LLVMContextImpl.cpp
>    llvm/trunk/lib/VMCore/Metadata.cpp
>    llvm/trunk/lib/VMCore/PassManager.cpp
>    llvm/trunk/tools/bugpoint/CrashDebugger.cpp
>    llvm/trunk/tools/bugpoint/ToolRunner.cpp
>    llvm/trunk/tools/bugpoint/ToolRunner.h
>    llvm/trunk/tools/llvm-diff/DiffConsumer.cpp
>    llvm/trunk/tools/llvm-diff/DiffConsumer.h
>    llvm/trunk/tools/llvm-diff/DifferenceEngine.cpp
>    llvm/trunk/tools/llvm-diff/DifferenceEngine.h
>    llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp
>    llvm/trunk/tools/llvm-objdump/llvm-objdump.h
>    llvm/trunk/unittests/Support/IRBuilderTest.cpp
>    llvm/trunk/unittests/Transforms/Utils/Cloning.cpp
>    llvm/trunk/utils/TableGen/DAGISelMatcher.cpp
>    llvm/trunk/utils/TableGen/DAGISelMatcher.h
>    llvm/trunk/utils/TableGen/SetTheory.cpp
>    llvm/trunk/utils/TableGen/SetTheory.h
>    llvm/trunk/utils/TableGen/TGValueTypes.cpp
>    llvm/trunk/utils/TableGen/TableGen.cpp
>    llvm/trunk/utils/TableGen/X86ModRMFilters.h
> 
> Modified: llvm/trunk/include/llvm/ADT/IntrusiveRefCntPtr.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/IntrusiveRefCntPtr.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/ADT/IntrusiveRefCntPtr.h (original)
> +++ llvm/trunk/include/llvm/ADT/IntrusiveRefCntPtr.h Mon Dec 19 20:50:00 2011
> @@ -65,6 +65,7 @@
> //===----------------------------------------------------------------------===//
>   class RefCountedBaseVPTR {
>     mutable unsigned ref_cnt;
> +    virtual void anchor();
> 
>   protected:
>     RefCountedBaseVPTR() : ref_cnt(0) {}
> 
> Modified: llvm/trunk/include/llvm/Analysis/DebugInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/DebugInfo.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Analysis/DebugInfo.h (original)
> +++ llvm/trunk/include/llvm/Analysis/DebugInfo.h Mon Dec 19 20:50:00 2011
> @@ -153,6 +153,7 @@
> 
>   /// DIScope - A base class for various scopes.
>   class DIScope : public DIDescriptor {
> +    virtual void anchor();
>   public:
>     explicit DIScope(const MDNode *N = 0) : DIDescriptor (N) {}
>     virtual ~DIScope() {}
> @@ -163,6 +164,7 @@
> 
>   /// DICompileUnit - A wrapper for a compile unit.
>   class DICompileUnit : public DIScope {
> +    virtual void anchor();
>   public:
>     explicit DICompileUnit(const MDNode *N = 0) : DIScope(N) {}
> 
> @@ -202,6 +204,7 @@
> 
>   /// DIFile - This is a wrapper for a file.
>   class DIFile : public DIScope {
> +    virtual void anchor();
>   public:
>     explicit DIFile(const MDNode *N = 0) : DIScope(N) {
>       if (DbgNode && !isFile())
> @@ -230,7 +233,7 @@
>   /// FIXME: Types should be factored much better so that CV qualifiers and
>   /// others do not require a huge and empty descriptor full of zeros.
>   class DIType : public DIScope {
> -  public:
> +    virtual void anchor();
>   protected:
>     // This ctor is used when the Tag has already been validated by a derived
>     // ctor.
> @@ -240,7 +243,6 @@
> 
>     /// Verify - Verify that a type descriptor is well formed.
>     bool Verify() const;
> -  public:
>     explicit DIType(const MDNode *N);
>     explicit DIType() {}
>     virtual ~DIType() {}
> @@ -320,6 +322,7 @@
> 
>   /// DIBasicType - A basic type, like 'int' or 'float'.
>   class DIBasicType : public DIType {
> +    virtual void anchor();
>   public:
>     explicit DIBasicType(const MDNode *N = 0) : DIType(N) {}
> 
> @@ -338,6 +341,7 @@
>   /// DIDerivedType - A simple derived type, like a const qualified type,
>   /// a typedef, a pointer or reference, etc.
>   class DIDerivedType : public DIType {
> +    virtual void anchor();
>   protected:
>     explicit DIDerivedType(const MDNode *N, bool, bool)
>       : DIType(N, true, true) {}
> @@ -391,6 +395,7 @@
>   /// other types, like a function or struct.
>   /// FIXME: Why is this a DIDerivedType??
>   class DICompositeType : public DIDerivedType {
> +    virtual void anchor();
>   public:
>     explicit DICompositeType(const MDNode *N = 0)
>       : DIDerivedType(N, true, true) {
> @@ -454,6 +459,7 @@
> 
>   /// DISubprogram - This is a wrapper for a subprogram (e.g. a function).
>   class DISubprogram : public DIScope {
> +    virtual void anchor();
>   public:
>     explicit DISubprogram(const MDNode *N = 0) : DIScope(N) {}
> 
> @@ -687,6 +693,7 @@
> 
>   /// DILexicalBlock - This is a wrapper for a lexical block.
>   class DILexicalBlock : public DIScope {
> +    virtual void anchor();
>   public:
>     explicit DILexicalBlock(const MDNode *N = 0) : DIScope(N) {}
>     DIScope getContext() const       { return getFieldAs<DIScope>(1);      }
> @@ -705,6 +712,7 @@
>   /// DILexicalBlockFile - This is a wrapper for a lexical block with
>   /// a filename change.
>   class DILexicalBlockFile : public DIScope {
> +    virtual void anchor();
>   public:
>     explicit DILexicalBlockFile(const MDNode *N = 0) : DIScope(N) {}
>     DIScope getContext() const { return getScope().getContext(); }
> @@ -724,6 +732,7 @@
> 
>   /// DINameSpace - A wrapper for a C++ style name space.
>   class DINameSpace : public DIScope { 
> +    virtual void anchor();
>   public:
>     explicit DINameSpace(const MDNode *N = 0) : DIScope(N) {}
>     DIScope getContext() const     { return getFieldAs<DIScope>(1);      }
> 
> Modified: llvm/trunk/include/llvm/Analysis/DominanceFrontier.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/DominanceFrontier.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Analysis/DominanceFrontier.h (original)
> +++ llvm/trunk/include/llvm/Analysis/DominanceFrontier.h Mon Dec 19 20:50:00 2011
> @@ -154,6 +154,7 @@
> /// used to compute a forward dominator frontiers.
> ///
> class DominanceFrontier : public DominanceFrontierBase {
> +  virtual void anchor();
> public:
>   static char ID; // Pass ID, replacement for typeid
>   DominanceFrontier() :
> 
> Modified: llvm/trunk/include/llvm/Argument.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Argument.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Argument.h (original)
> +++ llvm/trunk/include/llvm/Argument.h Mon Dec 19 20:50:00 2011
> @@ -30,6 +30,7 @@
> /// the function was called with.
> /// @brief LLVM Argument representation  
> class Argument : public Value, public ilist_node<Argument> {
> +  virtual void anchor();
>   Function *Parent;
> 
>   friend class SymbolTableListTraits<Argument, Function>;
> 
> Modified: llvm/trunk/include/llvm/CodeGen/JITCodeEmitter.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/JITCodeEmitter.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/JITCodeEmitter.h (original)
> +++ llvm/trunk/include/llvm/CodeGen/JITCodeEmitter.h Mon Dec 19 20:50:00 2011
> @@ -51,6 +51,7 @@
> /// occurred, more memory is allocated, and we reemit the code into it.
> /// 
> class JITCodeEmitter : public MachineCodeEmitter {
> +  virtual void anchor();
> public:
>   virtual ~JITCodeEmitter() {}
> 
> 
> Modified: llvm/trunk/include/llvm/CodeGen/LexicalScopes.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LexicalScopes.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/LexicalScopes.h (original)
> +++ llvm/trunk/include/llvm/CodeGen/LexicalScopes.h Mon Dec 19 20:50:00 2011
> @@ -153,6 +153,7 @@
> /// LexicalScope - This class is used to track scope information.
> ///
> class LexicalScope {
> +  virtual void anchor();
> 
> public:
>   LexicalScope(LexicalScope *P, const MDNode *D, const MDNode *I, bool A)
> 
> Modified: llvm/trunk/include/llvm/CodeGen/MachineBranchProbabilityInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineBranchProbabilityInfo.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/MachineBranchProbabilityInfo.h (original)
> +++ llvm/trunk/include/llvm/CodeGen/MachineBranchProbabilityInfo.h Mon Dec 19 20:50:00 2011
> @@ -25,6 +25,7 @@
> class MachineBasicBlock;
> 
> class MachineBranchProbabilityInfo : public ImmutablePass {
> +  virtual void anchor();
> 
>   // Default weight value. Used when we don't have information about the edge.
>   // TODO: DEFAULT_WEIGHT makes sense during static predication, when none of
> 
> Modified: llvm/trunk/include/llvm/CodeGen/MachineCodeEmitter.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineCodeEmitter.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/MachineCodeEmitter.h (original)
> +++ llvm/trunk/include/llvm/CodeGen/MachineCodeEmitter.h Mon Dec 19 20:50:00 2011
> @@ -20,6 +20,8 @@
> #include "llvm/Support/DataTypes.h"
> #include "llvm/Support/DebugLoc.h"
> 
> +#include <string>
> +
> namespace llvm {
> 
> class MachineBasicBlock;
> @@ -49,6 +51,7 @@
> /// occurred, more memory is allocated, and we reemit the code into it.
> /// 
> class MachineCodeEmitter {
> +  virtual void anchor();
> protected:
>   /// BufferBegin/BufferEnd - Pointers to the start and end of the memory
>   /// allocated for this code buffer.
> 
> Modified: llvm/trunk/include/llvm/CodeGen/MachineConstantPool.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineConstantPool.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/MachineConstantPool.h (original)
> +++ llvm/trunk/include/llvm/CodeGen/MachineConstantPool.h Mon Dec 19 20:50:00 2011
> @@ -34,6 +34,7 @@
> /// Abstract base class for all machine specific constantpool value subclasses.
> ///
> class MachineConstantPoolValue {
> +  virtual void anchor();
>   Type *Ty;
> 
> public:
> 
> Modified: llvm/trunk/include/llvm/CodeGen/MachinePassRegistry.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachinePassRegistry.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/MachinePassRegistry.h (original)
> +++ llvm/trunk/include/llvm/CodeGen/MachinePassRegistry.h Mon Dec 19 20:50:00 2011
> @@ -33,6 +33,7 @@
> ///
> //===----------------------------------------------------------------------===//
> class MachinePassRegistryListener {
> +  virtual void anchor();
> public:
>   MachinePassRegistryListener() {}
>   virtual ~MachinePassRegistryListener() {}
> 
> Modified: llvm/trunk/include/llvm/CodeGen/ScheduleDAG.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/ScheduleDAG.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/ScheduleDAG.h (original)
> +++ llvm/trunk/include/llvm/CodeGen/ScheduleDAG.h Mon Dec 19 20:50:00 2011
> @@ -427,6 +427,7 @@
>   /// implementation to decide.
>   ///
>   class SchedulingPriorityQueue {
> +    virtual void anchor();
>     unsigned CurCycle;
>     bool HasReadyFilter;
>   public:
> 
> Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAGISel.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SelectionDAGISel.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/SelectionDAGISel.h (original)
> +++ llvm/trunk/include/llvm/CodeGen/SelectionDAGISel.h Mon Dec 19 20:50:00 2011
> @@ -181,6 +181,7 @@
>   /// ISelUpdater - helper class to handle updates of the
>   /// instruction selection graph.
>   class ISelUpdater : public SelectionDAG::DAGUpdateListener {
> +    virtual void anchor();
>     SelectionDAG::allnodes_iterator &ISelPosition;
>   public:
>     explicit ISelUpdater(SelectionDAG::allnodes_iterator &isp)
> 
> Modified: llvm/trunk/include/llvm/Constant.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Constant.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Constant.h (original)
> +++ llvm/trunk/include/llvm/Constant.h Mon Dec 19 20:50:00 2011
> @@ -41,6 +41,7 @@
> class Constant : public User {
>   void operator=(const Constant &);     // Do not implement
>   Constant(const Constant &);           // Do not implement
> +  virtual void anchor();
> 
> protected:
>   Constant(Type *ty, ValueTy vty, Use *Ops, unsigned NumOps)
> 
> Modified: llvm/trunk/include/llvm/Constants.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Constants.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Constants.h (original)
> +++ llvm/trunk/include/llvm/Constants.h Mon Dec 19 20:50:00 2011
> @@ -45,6 +45,7 @@
> /// represents both boolean and integral constants.
> /// @brief Class for constant integers.
> class ConstantInt : public Constant {
> +  virtual void anchor();
>   void *operator new(size_t, unsigned);  // DO NOT IMPLEMENT
>   ConstantInt(const ConstantInt &);      // DO NOT IMPLEMENT
>   ConstantInt(IntegerType *Ty, const APInt& V);
> @@ -229,6 +230,7 @@
> ///
> class ConstantFP : public Constant {
>   APFloat Val;
> +  virtual void anchor();
>   void *operator new(size_t, unsigned);// DO NOT IMPLEMENT
>   ConstantFP(const ConstantFP &);      // DO NOT IMPLEMENT
>   friend class LLVMContextImpl;
> 
> Modified: llvm/trunk/include/llvm/MC/MCAsmInfoCOFF.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCAsmInfoCOFF.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/MC/MCAsmInfoCOFF.h (original)
> +++ llvm/trunk/include/llvm/MC/MCAsmInfoCOFF.h Mon Dec 19 20:50:00 2011
> @@ -14,17 +14,19 @@
> 
> namespace llvm {
>   class MCAsmInfoCOFF : public MCAsmInfo {
> +    virtual void anchor();
>   protected:
>     explicit MCAsmInfoCOFF();
> -      
>   };
> 
>   class MCAsmInfoMicrosoft : public MCAsmInfoCOFF {
> +    virtual void anchor();
>   protected:
>     explicit MCAsmInfoMicrosoft();
>   };
> 
>   class MCAsmInfoGNUCOFF : public MCAsmInfoCOFF {
> +    virtual void anchor();
>   protected:
>     explicit MCAsmInfoGNUCOFF();
>   };
> 
> Modified: llvm/trunk/include/llvm/MC/MCAsmInfoDarwin.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCAsmInfoDarwin.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/MC/MCAsmInfoDarwin.h (original)
> +++ llvm/trunk/include/llvm/MC/MCAsmInfoDarwin.h Mon Dec 19 20:50:00 2011
> @@ -18,7 +18,9 @@
> #include "llvm/MC/MCAsmInfo.h"
> 
> namespace llvm {
> -  struct MCAsmInfoDarwin : public MCAsmInfo {
> +  class MCAsmInfoDarwin : public MCAsmInfo {
> +    virtual void anchor();
> +  public:
>     explicit MCAsmInfoDarwin();
>   };
> }
> 
> Modified: llvm/trunk/include/llvm/MC/MCAssembler.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCAssembler.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/MC/MCAssembler.h (original)
> +++ llvm/trunk/include/llvm/MC/MCAssembler.h Mon Dec 19 20:50:00 2011
> @@ -106,6 +106,7 @@
> };
> 
> class MCDataFragment : public MCFragment {
> +  virtual void anchor();
>   SmallString<32> Contents;
> 
>   /// Fixups - The list of fixups in this fragment.
> @@ -160,6 +161,8 @@
> // object with just the MCInst and a code size, then we should just change
> // MCDataFragment to have an optional MCInst at its end.
> class MCInstFragment : public MCFragment {
> +  virtual void anchor();
> +
>   /// Inst - The instruction this is a fragment for.
>   MCInst Inst;
> 
> @@ -215,6 +218,8 @@
> };
> 
> class MCAlignFragment : public MCFragment {
> +  virtual void anchor();
> +
>   /// Alignment - The alignment to ensure, in bytes.
>   unsigned Alignment;
> 
> @@ -263,6 +268,8 @@
> };
> 
> class MCFillFragment : public MCFragment {
> +  virtual void anchor();
> +
>   /// Value - Value to use for filling bytes.
>   int64_t Value;
> 
> @@ -300,6 +307,8 @@
> };
> 
> class MCOrgFragment : public MCFragment {
> +  virtual void anchor();
> +
>   /// Offset - The offset this fragment should start at.
>   const MCExpr *Offset;
> 
> @@ -327,6 +336,8 @@
> };
> 
> class MCLEBFragment : public MCFragment {
> +  virtual void anchor();
> +
>   /// Value - The value this fragment should contain.
>   const MCExpr *Value;
> 
> @@ -358,6 +369,8 @@
> };
> 
> class MCDwarfLineAddrFragment : public MCFragment {
> +  virtual void anchor();
> +
>   /// LineDelta - the value of the difference between the two line numbers
>   /// between two .loc dwarf directives.
>   int64_t LineDelta;
> @@ -393,6 +406,8 @@
> };
> 
> class MCDwarfCallFrameFragment : public MCFragment {
> +  virtual void anchor();
> +
>   /// AddrDelta - The expression for the difference of the two symbols that
>   /// make up the address delta between two .cfi_* dwarf directives.
>   const MCExpr *AddrDelta;
> 
> Modified: llvm/trunk/include/llvm/Metadata.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Metadata.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Metadata.h (original)
> +++ llvm/trunk/include/llvm/Metadata.h Mon Dec 19 20:50:00 2011
> @@ -36,6 +36,7 @@
> /// These are used to efficiently contain a byte sequence for metadata.
> /// MDString is always unnamed.
> class MDString : public Value {
> +  virtual void anchor();
>   MDString(const MDString &);            // DO NOT IMPLEMENT
> 
>   StringRef Str;
> 
> Modified: llvm/trunk/include/llvm/Object/Archive.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/Archive.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Object/Archive.h (original)
> +++ llvm/trunk/include/llvm/Object/Archive.h Mon Dec 19 20:50:00 2011
> @@ -22,6 +22,7 @@
> namespace object {
> 
> class Archive : public Binary {
> +  virtual void anchor();
> public:
>   class Child {
>     const Archive *Parent;
> 
> Modified: llvm/trunk/include/llvm/Object/ObjectFile.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ObjectFile.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Object/ObjectFile.h (original)
> +++ llvm/trunk/include/llvm/Object/ObjectFile.h Mon Dec 19 20:50:00 2011
> @@ -232,7 +232,7 @@
> /// Concrete instances of this object are created by createObjectFile, which
> /// figure out which type to create.
> class ObjectFile : public Binary {
> -private:
> +  virtual void anchor();
>   ObjectFile(); // = delete
>   ObjectFile(const ObjectFile &other); // = delete
> 
> 
> Modified: llvm/trunk/include/llvm/TableGen/Record.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/TableGen/Record.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/TableGen/Record.h (original)
> +++ llvm/trunk/include/llvm/TableGen/Record.h Mon Dec 19 20:50:00 2011
> @@ -68,6 +68,7 @@
> 
> class RecTy {
>   ListRecTy *ListTy;
> +  virtual void anchor();
> public:
>   RecTy() : ListTy(0) {}
>   virtual ~RecTy() {}
> @@ -489,6 +490,7 @@
> class Init {
>   Init(const Init &);  // Do not define.
>   Init &operator=(const Init &);  // Do not define.
> +  virtual void anchor();
> 
> protected:
>   Init(void) {}
> @@ -617,6 +619,7 @@
>   UnsetInit() : Init() {}
>   UnsetInit(const UnsetInit &);  // Do not define.
>   UnsetInit &operator=(const UnsetInit &Other);  // Do not define.
> +  virtual void anchor();
> 
> public:
>   static UnsetInit *get();
> @@ -638,6 +641,7 @@
>   explicit BitInit(bool V) : Value(V) {}
>   BitInit(const BitInit &Other);  // Do not define.
>   BitInit &operator=(BitInit &Other);  // Do not define.
> +  virtual void anchor();
> 
> public:
>   static BitInit *get(bool V);
> @@ -750,6 +754,7 @@
> 
>   StringInit(const StringInit &Other);  // Do not define.
>   StringInit &operator=(const StringInit &Other);  // Do not define.
> +  virtual void anchor();
> 
> public:
>   static StringInit *get(const std::string &V);
> @@ -792,6 +797,7 @@
> 
>   CodeInit(const CodeInit &Other);  // Do not define.
>   CodeInit &operator=(const CodeInit &Other);  // Do not define.
> +  virtual void anchor();
> 
> public:
>   static CodeInit *get(const std::string &V);
> 
> Modified: llvm/trunk/include/llvm/TableGen/TableGenAction.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/TableGen/TableGenAction.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/TableGen/TableGenAction.h (original)
> +++ llvm/trunk/include/llvm/TableGen/TableGenAction.h Mon Dec 19 20:50:00 2011
> @@ -21,6 +21,7 @@
> class RecordKeeper;
> 
> class TableGenAction {
> +  virtual void anchor();
> public:
>   virtual ~TableGenAction() {}
> 
> 
> Modified: llvm/trunk/include/llvm/TableGen/TableGenBackend.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/TableGen/TableGenBackend.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/TableGen/TableGenBackend.h (original)
> +++ llvm/trunk/include/llvm/TableGen/TableGenBackend.h Mon Dec 19 20:50:00 2011
> @@ -24,6 +24,7 @@
> class RecordKeeper;
> 
> struct TableGenBackend {
> +  virtual void anchor();
>   virtual ~TableGenBackend() {}
> 
>   // run - All TableGen backends should implement the run method, which should
> 
> Modified: llvm/trunk/include/llvm/Target/TargetJITInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetJITInfo.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Target/TargetJITInfo.h (original)
> +++ llvm/trunk/include/llvm/Target/TargetJITInfo.h Mon Dec 19 20:50:00 2011
> @@ -30,6 +30,7 @@
>   /// TargetJITInfo - Target specific information required by the Just-In-Time
>   /// code generator.
>   class TargetJITInfo {
> +    virtual void anchor();
>   public:
>     virtual ~TargetJITInfo() {}
> 
> 
> Modified: llvm/trunk/include/llvm/Target/TargetLibraryInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetLibraryInfo.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Target/TargetLibraryInfo.h (original)
> +++ llvm/trunk/include/llvm/Target/TargetLibraryInfo.h Mon Dec 19 20:50:00 2011
> @@ -208,6 +208,7 @@
> /// library functions are available for the current target, and allows a
> /// frontend to disable optimizations through -fno-builtin etc.
> class TargetLibraryInfo : public ImmutablePass {
> +  virtual void anchor();
>   unsigned char AvailableArray[(LibFunc::NumLibFuncs+3)/4];
>   llvm::DenseMap<unsigned, std::string> CustomNames;
>   static const char* StandardNames[LibFunc::NumLibFuncs];
> 
> Modified: llvm/trunk/include/llvm/Target/TargetRegisterInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetRegisterInfo.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Target/TargetRegisterInfo.h (original)
> +++ llvm/trunk/include/llvm/Target/TargetRegisterInfo.h Mon Dec 19 20:50:00 2011
> @@ -38,6 +38,7 @@
>   typedef const EVT* vt_iterator;
>   typedef const TargetRegisterClass* const * sc_iterator;
> private:
> +  virtual void anchor();
>   const MCRegisterClass *MC;
>   const vt_iterator VTs;
>   const unsigned *SubClassMask;
> 
> Modified: llvm/trunk/include/llvm/Transforms/Utils/SimplifyIndVar.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Utils/SimplifyIndVar.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Transforms/Utils/SimplifyIndVar.h (original)
> +++ llvm/trunk/include/llvm/Transforms/Utils/SimplifyIndVar.h Mon Dec 19 20:50:00 2011
> @@ -33,6 +33,7 @@
> /// Interface for visiting interesting IV users that are recognized but not
> /// simplified by this utility.
> class IVVisitor {
> +  virtual void anchor();
> public:
>   virtual ~IVVisitor() {}
>   virtual void visitCast(CastInst *Cast) = 0;
> 
> Modified: llvm/trunk/lib/Analysis/DebugInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/DebugInfo.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Analysis/DebugInfo.cpp (original)
> +++ llvm/trunk/lib/Analysis/DebugInfo.cpp Mon Dec 19 20:50:00 2011
> @@ -638,6 +638,32 @@
> }
> 
> //===----------------------------------------------------------------------===//
> +// DIDescriptor: vtable anchors for all descriptors.
> +//===----------------------------------------------------------------------===//
> +
> +void DIScope::anchor() { }
> +
> +void DICompileUnit::anchor() { }
> +
> +void DIFile::anchor() { }
> +
> +void DIType::anchor() { }
> +
> +void DIBasicType::anchor() { }
> +
> +void DIDerivedType::anchor() { }
> +
> +void DICompositeType::anchor() { }
> +
> +void DISubprogram::anchor() { }
> +
> +void DILexicalBlock::anchor() { }
> +
> +void DINameSpace::anchor() { }
> +
> +void DILexicalBlockFile::anchor() { }
> +
> +//===----------------------------------------------------------------------===//
> // DIDescriptor: dump routines for all descriptors.
> //===----------------------------------------------------------------------===//
> 
> 
> Modified: llvm/trunk/lib/Analysis/DominanceFrontier.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/DominanceFrontier.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Analysis/DominanceFrontier.cpp (original)
> +++ llvm/trunk/lib/Analysis/DominanceFrontier.cpp Mon Dec 19 20:50:00 2011
> @@ -35,6 +35,8 @@
>   };
> }
> 
> +void DominanceFrontier::anchor() { }
> +
> const DominanceFrontier::DomSetType &
> DominanceFrontier::calculate(const DominatorTree &DT,
>                              const DomTreeNode *Node) {
> 
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DIE.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DIE.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DIE.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DIE.cpp Mon Dec 19 20:50:00 2011
> @@ -174,6 +174,7 @@
> }
> #endif
> 
> +void DIEValue::anchor() { }
> 
> #ifndef NDEBUG
> void DIEValue::dump() {
> 
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DIE.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DIE.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DIE.h (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DIE.h Mon Dec 19 20:50:00 2011
> @@ -195,6 +195,7 @@
>   /// DIEValue - A debug information entry value.
>   ///
>   class DIEValue {
> +    virtual void anchor();
>   public:
>     enum {
>       isInteger,
> 
> Added: llvm/trunk/lib/CodeGen/JITCodeEmitter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/JITCodeEmitter.cpp?rev=146960&view=auto
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/JITCodeEmitter.cpp (added)
> +++ llvm/trunk/lib/CodeGen/JITCodeEmitter.cpp Mon Dec 19 20:50:00 2011
> @@ -0,0 +1,14 @@
> +//===-- llvm/CodeGen/JITCodeEmitter.cpp - Code emission --------*- C++ -*-===//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include "llvm/CodeGen/JITCodeEmitter.h"
> +
> +using namespace llvm;
> +
> +void JITCodeEmitter::anchor() { }
> 
> Modified: llvm/trunk/lib/CodeGen/LexicalScopes.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LexicalScopes.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/LexicalScopes.cpp (original)
> +++ llvm/trunk/lib/CodeGen/LexicalScopes.cpp Mon Dec 19 20:50:00 2011
> @@ -311,6 +311,8 @@
>   return Result;
> }
> 
> +void LexicalScope::anchor() { }
> +
> /// dump - Print data structures.
> void LexicalScope::dump() const {
> #ifndef NDEBUG
> 
> Modified: llvm/trunk/lib/CodeGen/LiveRangeEdit.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveRangeEdit.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/LiveRangeEdit.cpp (original)
> +++ llvm/trunk/lib/CodeGen/LiveRangeEdit.cpp Mon Dec 19 20:50:00 2011
> @@ -29,6 +29,8 @@
> STATISTIC(NumDCEFoldedLoads, "Number of single use loads folded after DCE");
> STATISTIC(NumFracRanges,     "Number of live ranges fractured by DCE");
> 
> +void LiveRangeEdit::Delegate::anchor() { }
> +
> LiveInterval &LiveRangeEdit::createFrom(unsigned OldReg,
>                                         LiveIntervals &LIS,
>                                         VirtRegMap &VRM) {
> 
> Modified: llvm/trunk/lib/CodeGen/LiveRangeEdit.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveRangeEdit.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/LiveRangeEdit.h (original)
> +++ llvm/trunk/lib/CodeGen/LiveRangeEdit.h Mon Dec 19 20:50:00 2011
> @@ -33,7 +33,9 @@
> class LiveRangeEdit {
> public:
>   /// Callback methods for LiveRangeEdit owners.
> -  struct Delegate {
> +  class Delegate {
> +    virtual void anchor();
> +  public:
>     /// Called immediately before erasing a dead machine instruction.
>     virtual void LRE_WillEraseInstruction(MachineInstr *MI) {}
> 
> 
> Modified: llvm/trunk/lib/CodeGen/MachineBranchProbabilityInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineBranchProbabilityInfo.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/MachineBranchProbabilityInfo.cpp (original)
> +++ llvm/trunk/lib/CodeGen/MachineBranchProbabilityInfo.cpp Mon Dec 19 20:50:00 2011
> @@ -26,6 +26,8 @@
> 
> char MachineBranchProbabilityInfo::ID = 0;
> 
> +void MachineBranchProbabilityInfo::anchor() { }
> +
> uint32_t MachineBranchProbabilityInfo::
> getSumForBlock(MachineBasicBlock *MBB, uint32_t &Scale) const {
>   // First we compute the sum with 64-bits of precision, ensuring that cannot
> 
> Added: llvm/trunk/lib/CodeGen/MachineCodeEmitter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineCodeEmitter.cpp?rev=146960&view=auto
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/MachineCodeEmitter.cpp (added)
> +++ llvm/trunk/lib/CodeGen/MachineCodeEmitter.cpp Mon Dec 19 20:50:00 2011
> @@ -0,0 +1,14 @@
> +//===-- llvm/CodeGen/MachineCodeEmitter.cpp - Code emission -----*- C++ -*-===//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include "llvm/CodeGen/MachineCodeEmitter.h"
> +
> +using namespace llvm;
> +
> +void MachineCodeEmitter::anchor() { }
> 
> Modified: llvm/trunk/lib/CodeGen/MachineFunction.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineFunction.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/MachineFunction.cpp (original)
> +++ llvm/trunk/lib/CodeGen/MachineFunction.cpp Mon Dec 19 20:50:00 2011
> @@ -619,6 +619,8 @@
> //  MachineConstantPool implementation
> //===----------------------------------------------------------------------===//
> 
> +void MachineConstantPoolValue::anchor() { }
> +
> Type *MachineConstantPoolEntry::getType() const {
>   if (isMachineConstantPoolEntry())
>     return Val.MachineCPVal->getType();
> 
> Modified: llvm/trunk/lib/CodeGen/MachinePassRegistry.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachinePassRegistry.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/MachinePassRegistry.cpp (original)
> +++ llvm/trunk/lib/CodeGen/MachinePassRegistry.cpp Mon Dec 19 20:50:00 2011
> @@ -16,6 +16,7 @@
> 
> using namespace llvm;
> 
> +void MachinePassRegistryListener::anchor() { }
> 
> /// Add - Adds a function pass to the registration list.
> ///
> 
> Modified: llvm/trunk/lib/CodeGen/ScheduleDAG.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/ScheduleDAG.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/ScheduleDAG.cpp (original)
> +++ llvm/trunk/lib/CodeGen/ScheduleDAG.cpp Mon Dec 19 20:50:00 2011
> @@ -31,6 +31,8 @@
>   cl::desc("Stress test instruction scheduling"));
> #endif
> 
> +void SchedulingPriorityQueue::anchor() { }
> +
> ScheduleDAG::ScheduleDAG(MachineFunction &mf)
>   : TM(mf.getTarget()),
>     TII(TM.getInstrInfo()),
> 
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Mon Dec 19 20:50:00 2011
> @@ -262,6 +262,8 @@
> // SelectionDAGISel code
> //===----------------------------------------------------------------------===//
> 
> +void SelectionDAGISel::ISelUpdater::anchor() { }
> +
> SelectionDAGISel::SelectionDAGISel(const TargetMachine &tm,
>                                    CodeGenOpt::Level OL) :
>   MachineFunctionPass(ID), TM(tm), TLI(*tm.getTargetLowering()),
> 
> Modified: llvm/trunk/lib/CodeGen/Spiller.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/Spiller.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/Spiller.cpp (original)
> +++ llvm/trunk/lib/CodeGen/Spiller.cpp Mon Dec 19 20:50:00 2011
> @@ -185,6 +185,8 @@
> 
> } // end anonymous namespace
> 
> +void Spiller::anchor() { }
> +
> llvm::Spiller* llvm::createSpiller(MachineFunctionPass &pass,
>                                    MachineFunction &mf,
>                                    VirtRegMap &vrm) {
> 
> Modified: llvm/trunk/lib/CodeGen/Spiller.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/Spiller.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/Spiller.h (original)
> +++ llvm/trunk/lib/CodeGen/Spiller.h Mon Dec 19 20:50:00 2011
> @@ -22,6 +22,7 @@
>   /// Implementations are utility classes which insert spill or remat code on
>   /// demand.
>   class Spiller {
> +    virtual void anchor();
>   public:
>     virtual ~Spiller() = 0;
> 
> 
> Modified: llvm/trunk/lib/DebugInfo/DWARFContext.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFContext.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/DWARFContext.cpp (original)
> +++ llvm/trunk/lib/DebugInfo/DWARFContext.cpp Mon Dec 19 20:50:00 2011
> @@ -165,3 +165,5 @@
> 
>   return DILineInfo(fileName.c_str(), row.Line, row.Column);
> }
> +
> +void DWARFContextInMemory::anchor() { }
> 
> Modified: llvm/trunk/lib/DebugInfo/DWARFContext.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARFContext.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/DWARFContext.h (original)
> +++ llvm/trunk/lib/DebugInfo/DWARFContext.h Mon Dec 19 20:50:00 2011
> @@ -86,6 +86,7 @@
> /// DWARFContext. It assumes all content is available in memory and stores
> /// pointers to it.
> class DWARFContextInMemory : public DWARFContext {
> +  virtual void anchor();
>   StringRef InfoSection;
>   StringRef AbbrevSection;
>   StringRef ARangeSection;
> 
> Added: llvm/trunk/lib/ExecutionEngine/MCJIT/MCJITMemoryManager.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/MCJIT/MCJITMemoryManager.cpp?rev=146960&view=auto
> ==============================================================================
> --- llvm/trunk/lib/ExecutionEngine/MCJIT/MCJITMemoryManager.cpp (added)
> +++ llvm/trunk/lib/ExecutionEngine/MCJIT/MCJITMemoryManager.cpp Mon Dec 19 20:50:00 2011
> @@ -0,0 +1,14 @@
> +//==-- MCJITMemoryManager.cpp - Definition for the Memory Manager -*-C++ -*-==//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include "MCJITMemoryManager.h"
> +
> +using namespace llvm;
> +
> +void MCJITMemoryManager::anchor() { }
> 
> Modified: llvm/trunk/lib/ExecutionEngine/MCJIT/MCJITMemoryManager.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/MCJIT/MCJITMemoryManager.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/ExecutionEngine/MCJIT/MCJITMemoryManager.h (original)
> +++ llvm/trunk/lib/ExecutionEngine/MCJIT/MCJITMemoryManager.h Mon Dec 19 20:50:00 2011
> @@ -21,6 +21,7 @@
> // and the RuntimeDyld interface that maps objects, by name, onto their
> // matching LLVM IR counterparts in the module(s) being compiled.
> class MCJITMemoryManager : public RTDyldMemoryManager {
> +  virtual void anchor();
>   JITMemoryManager *JMM;
> 
>   // FIXME: Multiple modules.
> 
> Modified: llvm/trunk/lib/MC/MCAsmInfoCOFF.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAsmInfoCOFF.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/MCAsmInfoCOFF.cpp (original)
> +++ llvm/trunk/lib/MC/MCAsmInfoCOFF.cpp Mon Dec 19 20:50:00 2011
> @@ -16,6 +16,8 @@
> #include "llvm/ADT/SmallVector.h"
> using namespace llvm;
> 
> +void MCAsmInfoCOFF::anchor() { }
> +
> MCAsmInfoCOFF::MCAsmInfoCOFF() {
>   GlobalPrefix = "_";
>   COMMDirectiveAlignmentIsInBytes = false;
> @@ -39,10 +41,14 @@
>   SupportsDataRegions = false;
> }
> 
> +void MCAsmInfoMicrosoft::anchor() { }
> +
> MCAsmInfoMicrosoft::MCAsmInfoMicrosoft() {
>   AllowQuotesInName = true;
> }
> 
> +void MCAsmInfoGNUCOFF::anchor() { }
> +
> MCAsmInfoGNUCOFF::MCAsmInfoGNUCOFF() {
> 
> }
> 
> Modified: llvm/trunk/lib/MC/MCAsmInfoDarwin.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAsmInfoDarwin.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/MCAsmInfoDarwin.cpp (original)
> +++ llvm/trunk/lib/MC/MCAsmInfoDarwin.cpp Mon Dec 19 20:50:00 2011
> @@ -18,6 +18,8 @@
> #include "llvm/MC/MCStreamer.h"
> using namespace llvm;
> 
> +void MCAsmInfoDarwin::anchor() { } 
> +
> MCAsmInfoDarwin::MCAsmInfoDarwin() {
>   // Common settings for all Darwin targets.
>   // Syntax:
> 
> Modified: llvm/trunk/lib/MC/MCAssembler.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAssembler.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/MCAssembler.cpp (original)
> +++ llvm/trunk/lib/MC/MCAssembler.cpp Mon Dec 19 20:50:00 2011
> @@ -972,3 +972,13 @@
>   }
>   OS << "]>\n";
> }
> +
> +// anchors for MC*Fragment vtables
> +void MCDataFragment::anchor() { }
> +void MCInstFragment::anchor() { }
> +void MCAlignFragment::anchor() { }
> +void MCFillFragment::anchor() { }
> +void MCOrgFragment::anchor() { }
> +void MCLEBFragment::anchor() { }
> +void MCDwarfLineAddrFragment::anchor() { }
> +void MCDwarfCallFrameFragment::anchor() { }
> 
> Modified: llvm/trunk/lib/Object/Archive.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/Archive.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Object/Archive.cpp (original)
> +++ llvm/trunk/lib/Object/Archive.cpp Mon Dec 19 20:50:00 2011
> @@ -74,6 +74,8 @@
>   return false;
> }
> 
> +void Archive::anchor() { }
> +
> Archive::Child Archive::Child::getNext() const {
>   size_t SpaceToSkip = sizeof(ArchiveMemberHeader) +
>     ToHeader(Data.data())->getSize();
> 
> Modified: llvm/trunk/lib/Object/ObjectFile.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/ObjectFile.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Object/ObjectFile.cpp (original)
> +++ llvm/trunk/lib/Object/ObjectFile.cpp Mon Dec 19 20:50:00 2011
> @@ -21,6 +21,8 @@
> using namespace llvm;
> using namespace object;
> 
> +void ObjectFile::anchor() { }
> +
> ObjectFile::ObjectFile(unsigned int Type, MemoryBuffer *source, error_code &ec)
>   : Binary(Type, source) {
> }
> 
> Added: llvm/trunk/lib/Support/IntrusiveRefCntPtr.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/IntrusiveRefCntPtr.cpp?rev=146960&view=auto
> ==============================================================================
> --- llvm/trunk/lib/Support/IntrusiveRefCntPtr.cpp (added)
> +++ llvm/trunk/lib/Support/IntrusiveRefCntPtr.cpp Mon Dec 19 20:50:00 2011
> @@ -0,0 +1,14 @@
> +//== IntrusiveRefCntPtr.cpp - Smart Refcounting Pointer ----------*- C++ -*-==//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include "llvm/ADT/IntrusiveRefCntPtr.h"
> +
> +using namespace llvm;
> +
> +void RefCountedBaseVPTR::anchor() { }
> 
> Modified: llvm/trunk/lib/TableGen/Record.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/TableGen/Record.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/TableGen/Record.cpp (original)
> +++ llvm/trunk/lib/TableGen/Record.cpp Mon Dec 19 20:50:00 2011
> @@ -81,6 +81,7 @@
> CodeRecTy CodeRecTy::Shared;
> DagRecTy DagRecTy::Shared;
> 
> +void RecTy::anchor() { }
> void RecTy::dump() const { print(errs()); }
> 
> ListRecTy *RecTy::getListTy() {
> @@ -444,13 +445,18 @@
> //    Initializer implementations
> //===----------------------------------------------------------------------===//
> 
> +void Init::anchor() { }
> void Init::dump() const { return print(errs()); }
> 
> +void UnsetInit::anchor() { }
> +
> UnsetInit *UnsetInit::get() {
>   static UnsetInit TheInit;
>   return &TheInit;
> }
> 
> +void BitInit::anchor() { }
> +
> BitInit *BitInit::get(bool V) {
>   static BitInit True(true);
>   static BitInit False(false);
> @@ -565,6 +571,8 @@
>   return BitsInit::get(NewBits);
> }
> 
> +void StringInit::anchor() { }
> +
> StringInit *StringInit::get(const std::string &V) {
>   typedef StringMap<StringInit *> Pool;
>   static Pool ThePool;
> @@ -574,6 +582,8 @@
>   return I;
> }
> 
> +void CodeInit::anchor() { }
> +
> CodeInit *CodeInit::get(const std::string &V) {
>   typedef StringMap<CodeInit *> Pool;
>   static Pool ThePool;
> 
> Added: llvm/trunk/lib/TableGen/TableGenAction.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/TableGen/TableGenAction.cpp?rev=146960&view=auto
> ==============================================================================
> --- llvm/trunk/lib/TableGen/TableGenAction.cpp (added)
> +++ llvm/trunk/lib/TableGen/TableGenAction.cpp Mon Dec 19 20:50:00 2011
> @@ -0,0 +1,15 @@
> +//===- TableGenAction.cpp - defines TableGenAction --------------*- C++ -*-===//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include "llvm/TableGen/TableGenAction.h"
> +
> +using namespace llvm;
> +
> +void TableGenAction::anchor() { }
> +
> 
> Modified: llvm/trunk/lib/TableGen/TableGenBackend.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/TableGen/TableGenBackend.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/TableGen/TableGenBackend.cpp (original)
> +++ llvm/trunk/lib/TableGen/TableGenBackend.cpp Mon Dec 19 20:50:00 2011
> @@ -15,6 +15,8 @@
> #include "llvm/TableGen/Record.h"
> using namespace llvm;
> 
> +void TableGenBackend::anchor() { }
> +
> void TableGenBackend::EmitSourceFileHeader(const std::string &Desc,
>                                            raw_ostream &OS) const {
>   OS << "//===- TableGen'erated file -------------------------------------*-"
> 
> Added: llvm/trunk/lib/Target/ARM/ARMMachineFunctionInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMMachineFunctionInfo.cpp?rev=146960&view=auto
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/ARMMachineFunctionInfo.cpp (added)
> +++ llvm/trunk/lib/Target/ARM/ARMMachineFunctionInfo.cpp Mon Dec 19 20:50:00 2011
> @@ -0,0 +1,14 @@
> +//====- ARMMachineFuctionInfo.cpp - ARM machine function info ---*- C++ -*-===//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include "ARMMachineFunctionInfo.h"
> +
> +using namespace llvm;
> +
> +void ARMFunctionInfo::anchor() { }
> 
> Modified: llvm/trunk/lib/Target/ARM/ARMMachineFunctionInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMMachineFunctionInfo.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/ARMMachineFunctionInfo.h (original)
> +++ llvm/trunk/lib/Target/ARM/ARMMachineFunctionInfo.h Mon Dec 19 20:50:00 2011
> @@ -25,6 +25,7 @@
> /// ARMFunctionInfo - This class is derived from MachineFunctionInfo and
> /// contains private ARM-specific information for each MachineFunction.
> class ARMFunctionInfo : public MachineFunctionInfo {
> +  virtual void anchor();
> 
>   /// isThumb - True if this function is compiled under Thumb mode.
>   /// Used to initialized Align, so must precede it.
> 
> Modified: llvm/trunk/lib/Target/ARM/ARMRegisterInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMRegisterInfo.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/ARMRegisterInfo.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/ARMRegisterInfo.cpp Mon Dec 19 20:50:00 2011
> @@ -16,6 +16,8 @@
> #include "ARMRegisterInfo.h"
> using namespace llvm;
> 
> +void ARMRegisterInfo::anchor() { }
> +
> ARMRegisterInfo::ARMRegisterInfo(const ARMBaseInstrInfo &tii,
>                                  const ARMSubtarget &sti)
>   : ARMBaseRegisterInfo(tii, sti) {
> 
> Modified: llvm/trunk/lib/Target/ARM/ARMRegisterInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMRegisterInfo.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/ARMRegisterInfo.h (original)
> +++ llvm/trunk/lib/Target/ARM/ARMRegisterInfo.h Mon Dec 19 20:50:00 2011
> @@ -24,6 +24,7 @@
>   class Type;
> 
> struct ARMRegisterInfo : public ARMBaseRegisterInfo {
> +  virtual void anchor();
> public:
>   ARMRegisterInfo(const ARMBaseInstrInfo &tii, const ARMSubtarget &STI);
> };
> 
> Modified: llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp Mon Dec 19 20:50:00 2011
> @@ -34,6 +34,7 @@
>   RegisterTargetMachine<ThumbTargetMachine> Y(TheThumbTarget);
> }
> 
> +
> /// TargetMachine ctor - Create an ARM architecture model.
> ///
> ARMBaseTargetMachine::ARMBaseTargetMachine(const Target &T, StringRef TT,
> @@ -50,6 +51,8 @@
>     this->Options.FloatABIType = FloatABI::Soft;
> }
> 
> +void ARMTargetMachine::anchor() { }
> +
> ARMTargetMachine::ARMTargetMachine(const Target &T, StringRef TT,
>                                    StringRef CPU, StringRef FS,
>                                    const TargetOptions &Options,
> @@ -74,6 +77,8 @@
>                        "support ARM mode execution!");
> }
> 
> +void ThumbTargetMachine::anchor() { }
> +
> ThumbTargetMachine::ThumbTargetMachine(const Target &T, StringRef TT,
>                                        StringRef CPU, StringRef FS,
>                                        const TargetOptions &Options,
> 
> Modified: llvm/trunk/lib/Target/ARM/ARMTargetMachine.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMTargetMachine.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/ARMTargetMachine.h (original)
> +++ llvm/trunk/lib/Target/ARM/ARMTargetMachine.h Mon Dec 19 20:50:00 2011
> @@ -63,6 +63,7 @@
> /// ARMTargetMachine - ARM target machine.
> ///
> class ARMTargetMachine : public ARMBaseTargetMachine {
> +  virtual void anchor();
>   ARMInstrInfo        InstrInfo;
>   const TargetData    DataLayout;       // Calculates type size & alignment
>   ARMELFWriterInfo    ELFWriterInfo;
> @@ -103,6 +104,7 @@
> ///   Thumb-1 and Thumb-2.
> ///
> class ThumbTargetMachine : public ARMBaseTargetMachine {
> +  virtual void anchor();
>   // Either Thumb1InstrInfo or Thumb2InstrInfo.
>   OwningPtr<ARMBaseInstrInfo> InstrInfo;
>   const TargetData    DataLayout;   // Calculates type size & alignment
> 
> Modified: llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp Mon Dec 19 20:50:00 2011
> @@ -48,6 +48,8 @@
>   0,0
> };
> 
> +void ARMMCAsmInfoDarwin::anchor() { }
> +
> ARMMCAsmInfoDarwin::ARMMCAsmInfoDarwin() {
>   AsmTransCBE = arm_asm_table;
>   Data64bitsDirective = 0;
> @@ -61,6 +63,8 @@
>   ExceptionsType = ExceptionHandling::SjLj;
> }
> 
> +void ARMELFMCAsmInfo::anchor() { }
> +
> ARMELFMCAsmInfo::ARMELFMCAsmInfo() {
>   // ".comm align is in bytes but .align is pow-2."
>   AlignmentIsInBytes = false;
> 
> Modified: llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.h (original)
> +++ llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.h Mon Dec 19 20:50:00 2011
> @@ -18,11 +18,15 @@
> 
> namespace llvm {
> 
> -  struct ARMMCAsmInfoDarwin : public MCAsmInfoDarwin {
> +  class ARMMCAsmInfoDarwin : public MCAsmInfoDarwin {
> +    virtual void anchor();
> +  public:
>     explicit ARMMCAsmInfoDarwin();
>   };
> 
> -  struct ARMELFMCAsmInfo : public MCAsmInfo {
> +  class ARMELFMCAsmInfo : public MCAsmInfo {
> +    virtual void anchor();
> +  public:
>     explicit ARMELFMCAsmInfo();
>   };
> 
> 
> Modified: llvm/trunk/lib/Target/CellSPU/MCTargetDesc/SPUMCAsmInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/MCTargetDesc/SPUMCAsmInfo.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/CellSPU/MCTargetDesc/SPUMCAsmInfo.cpp (original)
> +++ llvm/trunk/lib/Target/CellSPU/MCTargetDesc/SPUMCAsmInfo.cpp Mon Dec 19 20:50:00 2011
> @@ -14,6 +14,8 @@
> #include "SPUMCAsmInfo.h"
> using namespace llvm;
> 
> +void SPULinuxMCAsmInfo::anchor() { }
> +
> SPULinuxMCAsmInfo::SPULinuxMCAsmInfo(const Target &T, StringRef TT) {
>   IsLittleEndian = false;
> 
> 
> Modified: llvm/trunk/lib/Target/CellSPU/MCTargetDesc/SPUMCAsmInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/MCTargetDesc/SPUMCAsmInfo.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/CellSPU/MCTargetDesc/SPUMCAsmInfo.h (original)
> +++ llvm/trunk/lib/Target/CellSPU/MCTargetDesc/SPUMCAsmInfo.h Mon Dec 19 20:50:00 2011
> @@ -20,7 +20,9 @@
> namespace llvm {
>   class Target;
> 
> -  struct SPULinuxMCAsmInfo : public MCAsmInfo {
> +  class SPULinuxMCAsmInfo : public MCAsmInfo {
> +    virtual void anchor();
> +  public:
>     explicit SPULinuxMCAsmInfo(const Target &T, StringRef TT);
>   };
> } // namespace llvm
> 
> Added: llvm/trunk/lib/Target/CellSPU/SPUMachineFunction.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUMachineFunction.cpp?rev=146960&view=auto
> ==============================================================================
> --- llvm/trunk/lib/Target/CellSPU/SPUMachineFunction.cpp (added)
> +++ llvm/trunk/lib/Target/CellSPU/SPUMachineFunction.cpp Mon Dec 19 20:50:00 2011
> @@ -0,0 +1,14 @@
> +//==-- SPUMachineFunctionInfo.cpp - Private data used for CellSPU -*- C++ -*-=//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include "SPUMachineFunction.h"
> +
> +using namespace llvm;
> +
> +void SPUFunctionInfo::anchor() { }
> 
> Modified: llvm/trunk/lib/Target/CellSPU/SPUMachineFunction.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUMachineFunction.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/CellSPU/SPUMachineFunction.h (original)
> +++ llvm/trunk/lib/Target/CellSPU/SPUMachineFunction.h Mon Dec 19 20:50:00 2011
> @@ -21,7 +21,8 @@
> /// SPUFunctionInfo - Cell SPU target-specific information for each
> /// MachineFunction
> class SPUFunctionInfo : public MachineFunctionInfo {
> -private:
> +  virtual void anchor();
> +
>   /// UsesLR - Indicates whether LR is used in the current function.
>   ///
>   bool UsesLR;
> 
> Added: llvm/trunk/lib/Target/MBlaze/MBlazeMachineFunction.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MBlaze/MBlazeMachineFunction.cpp?rev=146960&view=auto
> ==============================================================================
> --- llvm/trunk/lib/Target/MBlaze/MBlazeMachineFunction.cpp (added)
> +++ llvm/trunk/lib/Target/MBlaze/MBlazeMachineFunction.cpp Mon Dec 19 20:50:00 2011
> @@ -0,0 +1,14 @@
> +//===-- MBlazeMachineFunctionInfo.cpp - Private data --------------*- C++ -*-=//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include "MBlazeMachineFunction.h"
> +
> +using namespace llvm;
> +
> +void MBlazeFunctionInfo::anchor() { }
> 
> Modified: llvm/trunk/lib/Target/MBlaze/MBlazeMachineFunction.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MBlaze/MBlazeMachineFunction.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/MBlaze/MBlazeMachineFunction.h (original)
> +++ llvm/trunk/lib/Target/MBlaze/MBlazeMachineFunction.h Mon Dec 19 20:50:00 2011
> @@ -25,8 +25,8 @@
> /// MBlazeFunctionInfo - This class is derived from MachineFunction private
> /// MBlaze target-specific information for each MachineFunction.
> class MBlazeFunctionInfo : public MachineFunctionInfo {
> +  virtual void anchor();
> 
> -private:
>   /// Holds for each function where on the stack the Frame Pointer must be
>   /// saved. This is used on Prologue and Epilogue to emit FP save/restore
>   int FPStackOffset;
> 
> Modified: llvm/trunk/lib/Target/MBlaze/MCTargetDesc/MBlazeMCAsmInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MBlaze/MCTargetDesc/MBlazeMCAsmInfo.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/MBlaze/MCTargetDesc/MBlazeMCAsmInfo.cpp (original)
> +++ llvm/trunk/lib/Target/MBlaze/MCTargetDesc/MBlazeMCAsmInfo.cpp Mon Dec 19 20:50:00 2011
> @@ -14,6 +14,8 @@
> #include "MBlazeMCAsmInfo.h"
> using namespace llvm;
> 
> +void MBlazeMCAsmInfo::anchor() { }
> +
> MBlazeMCAsmInfo::MBlazeMCAsmInfo() {
>   IsLittleEndian              = false;
>   StackGrowsUp                = false;
> 
> Modified: llvm/trunk/lib/Target/MBlaze/MCTargetDesc/MBlazeMCAsmInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MBlaze/MCTargetDesc/MBlazeMCAsmInfo.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/MBlaze/MCTargetDesc/MBlazeMCAsmInfo.h (original)
> +++ llvm/trunk/lib/Target/MBlaze/MCTargetDesc/MBlazeMCAsmInfo.h Mon Dec 19 20:50:00 2011
> @@ -21,6 +21,7 @@
>   class Target;
> 
>   class MBlazeMCAsmInfo : public MCAsmInfo {
> +    virtual void anchor();
>   public:
>     explicit MBlazeMCAsmInfo();
>   };
> 
> Modified: llvm/trunk/lib/Target/MSP430/MCTargetDesc/MSP430MCAsmInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MSP430/MCTargetDesc/MSP430MCAsmInfo.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/MSP430/MCTargetDesc/MSP430MCAsmInfo.cpp (original)
> +++ llvm/trunk/lib/Target/MSP430/MCTargetDesc/MSP430MCAsmInfo.cpp Mon Dec 19 20:50:00 2011
> @@ -14,6 +14,8 @@
> #include "MSP430MCAsmInfo.h"
> using namespace llvm;
> 
> +void MSP430MCAsmInfo::anchor() { }
> +
> MSP430MCAsmInfo::MSP430MCAsmInfo(const Target &T, StringRef TT) {
>   PointerSize = 2;
> 
> 
> Modified: llvm/trunk/lib/Target/MSP430/MCTargetDesc/MSP430MCAsmInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MSP430/MCTargetDesc/MSP430MCAsmInfo.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/MSP430/MCTargetDesc/MSP430MCAsmInfo.h (original)
> +++ llvm/trunk/lib/Target/MSP430/MCTargetDesc/MSP430MCAsmInfo.h Mon Dec 19 20:50:00 2011
> @@ -20,7 +20,9 @@
> namespace llvm {
>   class Target;
> 
> -  struct MSP430MCAsmInfo : public MCAsmInfo {
> +  class MSP430MCAsmInfo : public MCAsmInfo {
> +    virtual void anchor();
> +  public:
>     explicit MSP430MCAsmInfo(const Target &T, StringRef TT);
>   };
> 
> 
> Added: llvm/trunk/lib/Target/MSP430/MSP430MachineFunctionInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MSP430/MSP430MachineFunctionInfo.cpp?rev=146960&view=auto
> ==============================================================================
> --- llvm/trunk/lib/Target/MSP430/MSP430MachineFunctionInfo.cpp (added)
> +++ llvm/trunk/lib/Target/MSP430/MSP430MachineFunctionInfo.cpp Mon Dec 19 20:50:00 2011
> @@ -0,0 +1,14 @@
> +//==- MSP430MachineFuctionInfo.cpp - MSP430 machine function info -*- C++ -*-=//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include "MSP430MachineFunctionInfo.h"
> +
> +using namespace llvm;
> +
> +void MSP430MachineFunctionInfo::anchor() { }
> 
> Modified: llvm/trunk/lib/Target/MSP430/MSP430MachineFunctionInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MSP430/MSP430MachineFunctionInfo.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/MSP430/MSP430MachineFunctionInfo.h (original)
> +++ llvm/trunk/lib/Target/MSP430/MSP430MachineFunctionInfo.h Mon Dec 19 20:50:00 2011
> @@ -21,6 +21,8 @@
> /// MSP430MachineFunctionInfo - This class is derived from MachineFunction and
> /// contains private MSP430 target-specific information for each MachineFunction.
> class MSP430MachineFunctionInfo : public MachineFunctionInfo {
> +  virtual void anchor();
> +
>   /// CalleeSavedFrameSize - Size of the callee-saved register portion of the
>   /// stack frame in bytes.
>   unsigned CalleeSavedFrameSize;
> 
> Modified: llvm/trunk/lib/Target/MSP430/MSP430Subtarget.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MSP430/MSP430Subtarget.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/MSP430/MSP430Subtarget.cpp (original)
> +++ llvm/trunk/lib/Target/MSP430/MSP430Subtarget.cpp Mon Dec 19 20:50:00 2011
> @@ -21,6 +21,8 @@
> 
> using namespace llvm;
> 
> +void MSP430Subtarget::anchor() { }
> +
> MSP430Subtarget::MSP430Subtarget(const std::string &TT,
>                                  const std::string &CPU,
>                                  const std::string &FS) :
> 
> Modified: llvm/trunk/lib/Target/MSP430/MSP430Subtarget.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MSP430/MSP430Subtarget.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/MSP430/MSP430Subtarget.h (original)
> +++ llvm/trunk/lib/Target/MSP430/MSP430Subtarget.h Mon Dec 19 20:50:00 2011
> @@ -25,6 +25,7 @@
> class StringRef;
> 
> class MSP430Subtarget : public MSP430GenSubtargetInfo {
> +  virtual void anchor();
>   bool ExtendedInsts;
> public:
>   /// This constructor initializes the data members to match that
> 
> Modified: llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.cpp (original)
> +++ llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.cpp Mon Dec 19 20:50:00 2011
> @@ -16,6 +16,8 @@
> 
> using namespace llvm;
> 
> +void MipsMCAsmInfo::anchor() { }
> +
> MipsMCAsmInfo::MipsMCAsmInfo(const Target &T, StringRef TT) {
>   Triple TheTriple(TT);
>   if ((TheTriple.getArch() == Triple::mips) ||
> 
> Modified: llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.h (original)
> +++ llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.h Mon Dec 19 20:50:00 2011
> @@ -21,6 +21,7 @@
>   class Target;
> 
>   class MipsMCAsmInfo : public MCAsmInfo {
> +    virtual void anchor();
>   public:
>     explicit MipsMCAsmInfo(const Target &T, StringRef TT);
>   };
> 
> Added: llvm/trunk/lib/Target/Mips/MipsMachineFunction.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsMachineFunction.cpp?rev=146960&view=auto
> ==============================================================================
> --- llvm/trunk/lib/Target/Mips/MipsMachineFunction.cpp (added)
> +++ llvm/trunk/lib/Target/Mips/MipsMachineFunction.cpp Mon Dec 19 20:50:00 2011
> @@ -0,0 +1,14 @@
> +//===-- MipsMachineFunctionInfo.cpp - Private data used for Mips --*- C++ -*-=//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include "MipsMachineFunction.h"
> +
> +using namespace llvm;
> +
> +void MipsFunctionInfo::anchor() { }
> 
> Modified: llvm/trunk/lib/Target/Mips/MipsMachineFunction.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsMachineFunction.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Mips/MipsMachineFunction.h (original)
> +++ llvm/trunk/lib/Target/Mips/MipsMachineFunction.h Mon Dec 19 20:50:00 2011
> @@ -25,8 +25,8 @@
> /// MipsFunctionInfo - This class is derived from MachineFunction private
> /// Mips target-specific information for each MachineFunction.
> class MipsFunctionInfo : public MachineFunctionInfo {
> +  virtual void anchor();
> 
> -private:
>   MachineFunction& MF;
>   /// SRetReturnReg - Some subtargets require that sret lowering includes
>   /// returning the value of the returned struct in a register. This field
> 
> Modified: llvm/trunk/lib/Target/Mips/MipsSubtarget.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsSubtarget.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Mips/MipsSubtarget.cpp (original)
> +++ llvm/trunk/lib/Target/Mips/MipsSubtarget.cpp Mon Dec 19 20:50:00 2011
> @@ -21,6 +21,8 @@
> 
> using namespace llvm;
> 
> +void MipsSubtarget::anchor() { }
> +
> MipsSubtarget::MipsSubtarget(const std::string &TT, const std::string &CPU,
>                              const std::string &FS, bool little) :
>   MipsGenSubtargetInfo(TT, CPU, FS),
> 
> Modified: llvm/trunk/lib/Target/Mips/MipsSubtarget.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsSubtarget.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Mips/MipsSubtarget.h (original)
> +++ llvm/trunk/lib/Target/Mips/MipsSubtarget.h Mon Dec 19 20:50:00 2011
> @@ -25,6 +25,7 @@
> class StringRef;
> 
> class MipsSubtarget : public MipsGenSubtargetInfo {
> +  virtual void anchor();
> 
> public:
>   // NOTE: O64 will not be supported.
> 
> Modified: llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp Mon Dec 19 20:50:00 2011
> @@ -52,6 +52,8 @@
>     TLInfo(*this), TSInfo(*this), JITInfo() {
> }
> 
> +void MipsebTargetMachine::anchor() { }
> +
> MipsebTargetMachine::
> MipsebTargetMachine(const Target &T, StringRef TT,
>                     StringRef CPU, StringRef FS, const TargetOptions &Options,
> @@ -59,6 +61,8 @@
>                     CodeGenOpt::Level OL)
>   : MipsTargetMachine(T, TT, CPU, FS, Options, RM, CM, OL, false) {}
> 
> +void MipselTargetMachine::anchor() { }
> +
> MipselTargetMachine::
> MipselTargetMachine(const Target &T, StringRef TT,
>                     StringRef CPU, StringRef FS, const TargetOptions &Options,
> @@ -66,6 +70,8 @@
>                     CodeGenOpt::Level OL)
>   : MipsTargetMachine(T, TT, CPU, FS, Options, RM, CM, OL, true) {}
> 
> +void Mips64ebTargetMachine::anchor() { }
> +
> Mips64ebTargetMachine::
> Mips64ebTargetMachine(const Target &T, StringRef TT,
>                       StringRef CPU, StringRef FS, const TargetOptions &Options,
> @@ -73,6 +79,8 @@
>                       CodeGenOpt::Level OL)
>   : MipsTargetMachine(T, TT, CPU, FS, Options, RM, CM, OL, false) {}
> 
> +void Mips64elTargetMachine::anchor() { }
> +
> Mips64elTargetMachine::
> Mips64elTargetMachine(const Target &T, StringRef TT,
>                       StringRef CPU, StringRef FS, const TargetOptions &Options,
> 
> Modified: llvm/trunk/lib/Target/Mips/MipsTargetMachine.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsTargetMachine.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Mips/MipsTargetMachine.h (original)
> +++ llvm/trunk/lib/Target/Mips/MipsTargetMachine.h Mon Dec 19 20:50:00 2011
> @@ -80,6 +80,7 @@
> /// MipsebTargetMachine - Mips32 big endian target machine.
> ///
> class MipsebTargetMachine : public MipsTargetMachine {
> +  virtual void anchor();
> public:
>   MipsebTargetMachine(const Target &T, StringRef TT,
>                       StringRef CPU, StringRef FS, const TargetOptions &Options,
> @@ -90,6 +91,7 @@
> /// MipselTargetMachine - Mips32 little endian target machine.
> ///
> class MipselTargetMachine : public MipsTargetMachine {
> +  virtual void anchor();
> public:
>   MipselTargetMachine(const Target &T, StringRef TT,
>                       StringRef CPU, StringRef FS, const TargetOptions &Options,
> @@ -100,6 +102,7 @@
> /// Mips64ebTargetMachine - Mips64 big endian target machine.
> ///
> class Mips64ebTargetMachine : public MipsTargetMachine {
> +  virtual void anchor();
> public:
>   Mips64ebTargetMachine(const Target &T, StringRef TT,
>                         StringRef CPU, StringRef FS,
> @@ -111,6 +114,7 @@
> /// Mips64elTargetMachine - Mips64 little endian target machine.
> ///
> class Mips64elTargetMachine : public MipsTargetMachine {
> +  virtual void anchor();
> public:
>   Mips64elTargetMachine(const Target &T, StringRef TT,
>                         StringRef CPU, StringRef FS,
> 
> Modified: llvm/trunk/lib/Target/PTX/MCTargetDesc/PTXMCAsmInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PTX/MCTargetDesc/PTXMCAsmInfo.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/PTX/MCTargetDesc/PTXMCAsmInfo.cpp (original)
> +++ llvm/trunk/lib/Target/PTX/MCTargetDesc/PTXMCAsmInfo.cpp Mon Dec 19 20:50:00 2011
> @@ -16,6 +16,8 @@
> 
> using namespace llvm;
> 
> +void PTXMCAsmInfo::anchor() { }
> +
> PTXMCAsmInfo::PTXMCAsmInfo(const Target &T, const StringRef &TT) {
>   Triple TheTriple(TT);
>   if (TheTriple.getArch() == Triple::ptx64)
> 
> Modified: llvm/trunk/lib/Target/PTX/MCTargetDesc/PTXMCAsmInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PTX/MCTargetDesc/PTXMCAsmInfo.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/PTX/MCTargetDesc/PTXMCAsmInfo.h (original)
> +++ llvm/trunk/lib/Target/PTX/MCTargetDesc/PTXMCAsmInfo.h Mon Dec 19 20:50:00 2011
> @@ -20,7 +20,9 @@
>   class Target;
>   class StringRef;
> 
> -  struct PTXMCAsmInfo : public MCAsmInfo {
> +  class PTXMCAsmInfo : public MCAsmInfo {
> +    virtual void anchor();
> +  public:
>     explicit PTXMCAsmInfo(const Target &T, const StringRef &TT);
>   };
> } // namespace llvm
> 
> Added: llvm/trunk/lib/Target/PTX/PTXMachineFunctionInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PTX/PTXMachineFunctionInfo.cpp?rev=146960&view=auto
> ==============================================================================
> --- llvm/trunk/lib/Target/PTX/PTXMachineFunctionInfo.cpp (added)
> +++ llvm/trunk/lib/Target/PTX/PTXMachineFunctionInfo.cpp Mon Dec 19 20:50:00 2011
> @@ -0,0 +1,14 @@
> +//===- PTXMachineFuctionInfo.cpp - PTX machine function info -----*- C++ -*-==//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include "PTXMachineFunctionInfo.h"
> +
> +using namespace llvm;
> +
> +void PTXMachineFunctionInfo::anchor() { }
> 
> Modified: llvm/trunk/lib/Target/PTX/PTXMachineFunctionInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PTX/PTXMachineFunctionInfo.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/PTX/PTXMachineFunctionInfo.h (original)
> +++ llvm/trunk/lib/Target/PTX/PTXMachineFunctionInfo.h Mon Dec 19 20:50:00 2011
> @@ -30,7 +30,7 @@
> /// contains private PTX target-specific information for each MachineFunction.
> ///
> class PTXMachineFunctionInfo : public MachineFunctionInfo {
> -private:
> +  virtual void anchor();
>   bool IsKernel;
>   DenseSet<unsigned> RegArgs;
>   DenseSet<unsigned> RegRets;
> 
> Modified: llvm/trunk/lib/Target/PTX/PTXSubtarget.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PTX/PTXSubtarget.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/PTX/PTXSubtarget.cpp (original)
> +++ llvm/trunk/lib/Target/PTX/PTXSubtarget.cpp Mon Dec 19 20:50:00 2011
> @@ -22,6 +22,8 @@
> 
> using namespace llvm;
> 
> +void PTXSubtarget::anchor() { }
> +
> PTXSubtarget::PTXSubtarget(const std::string &TT, const std::string &CPU,
>                            const std::string &FS, bool is64Bit)
>   : PTXGenSubtargetInfo(TT, CPU, FS),
> 
> Modified: llvm/trunk/lib/Target/PTX/PTXSubtarget.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PTX/PTXSubtarget.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/PTX/PTXSubtarget.h (original)
> +++ llvm/trunk/lib/Target/PTX/PTXSubtarget.h Mon Dec 19 20:50:00 2011
> @@ -23,6 +23,7 @@
> class StringRef;
> 
>   class PTXSubtarget : public PTXGenSubtargetInfo {
> +      virtual void anchor(); 
>     public:
> 
>       /**
> 
> Modified: llvm/trunk/lib/Target/PTX/PTXTargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PTX/PTXTargetMachine.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/PTX/PTXTargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/PTX/PTXTargetMachine.cpp Mon Dec 19 20:50:00 2011
> @@ -85,6 +85,8 @@
>     TLInfo(*this) {
> }
> 
> +void PTX32TargetMachine::anchor() { }
> +
> PTX32TargetMachine::PTX32TargetMachine(const Target &T, StringRef TT,
>                                        StringRef CPU, StringRef FS,
>                                        const TargetOptions &Options,
> @@ -93,6 +95,8 @@
>   : PTXTargetMachine(T, TT, CPU, FS, Options, RM, CM, OL, false) {
> }
> 
> +void PTX64TargetMachine::anchor() { }
> +
> PTX64TargetMachine::PTX64TargetMachine(const Target &T, StringRef TT,
>                                        StringRef CPU, StringRef FS,
>                                        const TargetOptions &Options,
> 
> Modified: llvm/trunk/lib/Target/PTX/PTXTargetMachine.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PTX/PTXTargetMachine.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/PTX/PTXTargetMachine.h (original)
> +++ llvm/trunk/lib/Target/PTX/PTXTargetMachine.h Mon Dec 19 20:50:00 2011
> @@ -91,6 +91,7 @@
> 
> 
> class PTX32TargetMachine : public PTXTargetMachine {
> +  virtual void anchor();
> public:
> 
>   PTX32TargetMachine(const Target &T, StringRef TT,
> @@ -100,6 +101,7 @@
> }; // class PTX32TargetMachine
> 
> class PTX64TargetMachine : public PTXTargetMachine {
> +  virtual void anchor();
> public:
> 
>   PTX64TargetMachine(const Target &T, StringRef TT,
> 
> Modified: llvm/trunk/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.cpp (original)
> +++ llvm/trunk/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.cpp Mon Dec 19 20:50:00 2011
> @@ -14,6 +14,8 @@
> #include "PPCMCAsmInfo.h"
> using namespace llvm;
> 
> +void PPCMCAsmInfoDarwin::anchor() { }
> +
> PPCMCAsmInfoDarwin::PPCMCAsmInfoDarwin(bool is64Bit) {
>   if (is64Bit)
>     PointerSize = 8;
> @@ -30,6 +32,8 @@
>   SupportsDebugInformation= true; // Debug information.
> }
> 
> +void PPCLinuxMCAsmInfo::anchor() { }
> +
> PPCLinuxMCAsmInfo::PPCLinuxMCAsmInfo(bool is64Bit) {
>   if (is64Bit)
>     PointerSize = 8;
> 
> Modified: llvm/trunk/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.h (original)
> +++ llvm/trunk/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.h Mon Dec 19 20:50:00 2011
> @@ -18,11 +18,15 @@
> 
> namespace llvm {
> 
> -  struct PPCMCAsmInfoDarwin : public MCAsmInfoDarwin {
> +  class PPCMCAsmInfoDarwin : public MCAsmInfoDarwin {
> +    virtual void anchor();
> +  public:
>     explicit PPCMCAsmInfoDarwin(bool is64Bit);
>   };
> 
> -  struct PPCLinuxMCAsmInfo : public MCAsmInfo {
> +  class PPCLinuxMCAsmInfo : public MCAsmInfo {
> +    virtual void anchor();
> +  public:
>     explicit PPCLinuxMCAsmInfo(bool is64Bit);
>   };
> 
> 
> Added: llvm/trunk/lib/Target/PowerPC/PPCMachineFunctionInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCMachineFunctionInfo.cpp?rev=146960&view=auto
> ==============================================================================
> --- llvm/trunk/lib/Target/PowerPC/PPCMachineFunctionInfo.cpp (added)
> +++ llvm/trunk/lib/Target/PowerPC/PPCMachineFunctionInfo.cpp Mon Dec 19 20:50:00 2011
> @@ -0,0 +1,15 @@
> +//=-- PPCMachineFunctionInfo.cpp - Private data used for PowerPC --*- C++ -*-=//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include "PPCMachineFunctionInfo.h"
> +
> +using namespace llvm;
> +
> +void PPCFunctionInfo::anchor() { }
> +
> 
> Modified: llvm/trunk/lib/Target/PowerPC/PPCMachineFunctionInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCMachineFunctionInfo.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/PowerPC/PPCMachineFunctionInfo.h (original)
> +++ llvm/trunk/lib/Target/PowerPC/PPCMachineFunctionInfo.h Mon Dec 19 20:50:00 2011
> @@ -21,7 +21,8 @@
> /// PPCFunctionInfo - This class is derived from MachineFunction private
> /// PowerPC target-specific information for each MachineFunction.
> class PPCFunctionInfo : public MachineFunctionInfo {
> -private:
> +  virtual void anchor();
> +
>   /// FramePointerSaveIndex - Frame index of where the old frame pointer is
>   /// stored.  Also used as an anchor for instructions that need to be altered
>   /// when using frame pointers (dyna_add, dyna_sub.)
> 
> Modified: llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.cpp Mon Dec 19 20:50:00 2011
> @@ -44,6 +44,8 @@
> /// groups, which typically degrades performance.
> bool PPCTargetMachine::getEnableTailMergeDefault() const { return false; }
> 
> +void PPC32TargetMachine::anchor() { }
> +
> PPC32TargetMachine::PPC32TargetMachine(const Target &T, StringRef TT, 
>                                        StringRef CPU, StringRef FS,
>                                        const TargetOptions &Options,
> @@ -52,6 +54,7 @@
>   : PPCTargetMachine(T, TT, CPU, FS, Options, RM, CM, OL, false) {
> }
> 
> +void PPC64TargetMachine::anchor() { }
> 
> PPC64TargetMachine::PPC64TargetMachine(const Target &T, StringRef TT, 
>                                        StringRef CPU,  StringRef FS,
> 
> Modified: llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.h (original)
> +++ llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.h Mon Dec 19 20:50:00 2011
> @@ -77,6 +77,7 @@
> /// PPC32TargetMachine - PowerPC 32-bit target machine.
> ///
> class PPC32TargetMachine : public PPCTargetMachine {
> +  virtual void anchor();
> public:
>   PPC32TargetMachine(const Target &T, StringRef TT,
>                      StringRef CPU, StringRef FS, const TargetOptions &Options,
> @@ -87,6 +88,7 @@
> /// PPC64TargetMachine - PowerPC 64-bit target machine.
> ///
> class PPC64TargetMachine : public PPCTargetMachine {
> +  virtual void anchor();
> public:
>   PPC64TargetMachine(const Target &T, StringRef TT,
>                      StringRef CPU, StringRef FS, const TargetOptions &Options,
> 
> Modified: llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.cpp (original)
> +++ llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.cpp Mon Dec 19 20:50:00 2011
> @@ -16,6 +16,8 @@
> 
> using namespace llvm;
> 
> +void SparcELFMCAsmInfo::anchor() { }
> +
> SparcELFMCAsmInfo::SparcELFMCAsmInfo(const Target &T, StringRef TT) {
>   IsLittleEndian = false;
>   Triple TheTriple(TT);
> 
> Modified: llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.h (original)
> +++ llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.h Mon Dec 19 20:50:00 2011
> @@ -20,7 +20,9 @@
> namespace llvm {
>   class Target;
> 
> -  struct SparcELFMCAsmInfo : public MCAsmInfo {
> +  class SparcELFMCAsmInfo : public MCAsmInfo {
> +    virtual void anchor();
> +  public:
>     explicit SparcELFMCAsmInfo(const Target &T, StringRef TT);
>   };
> 
> 
> Added: llvm/trunk/lib/Target/Sparc/SparcMachineFunctionInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/SparcMachineFunctionInfo.cpp?rev=146960&view=auto
> ==============================================================================
> --- llvm/trunk/lib/Target/Sparc/SparcMachineFunctionInfo.cpp (added)
> +++ llvm/trunk/lib/Target/Sparc/SparcMachineFunctionInfo.cpp Mon Dec 19 20:50:00 2011
> @@ -0,0 +1,14 @@
> +//==- SparcMachineFunctionInfo.cpp - Sparc Machine Function Info -*- C++ -*-==//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include "SparcMachineFunctionInfo.h"
> +
> +using namespace llvm;
> +
> +void SparcMachineFunctionInfo::anchor() { }
> 
> Modified: llvm/trunk/lib/Target/Sparc/SparcMachineFunctionInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/SparcMachineFunctionInfo.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Sparc/SparcMachineFunctionInfo.h (original)
> +++ llvm/trunk/lib/Target/Sparc/SparcMachineFunctionInfo.h Mon Dec 19 20:50:00 2011
> @@ -18,6 +18,7 @@
> namespace llvm {
> 
>   class SparcMachineFunctionInfo : public MachineFunctionInfo {
> +    virtual void anchor();
>   private:
>     unsigned GlobalBaseReg;
> 
> 
> Modified: llvm/trunk/lib/Target/Sparc/SparcSubtarget.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/SparcSubtarget.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Sparc/SparcSubtarget.cpp (original)
> +++ llvm/trunk/lib/Target/Sparc/SparcSubtarget.cpp Mon Dec 19 20:50:00 2011
> @@ -21,6 +21,8 @@
> 
> using namespace llvm;
> 
> +void SparcSubtarget::anchor() { }
> +
> SparcSubtarget::SparcSubtarget(const std::string &TT, const std::string &CPU,
>                                const std::string &FS,  bool is64Bit) :
>   SparcGenSubtargetInfo(TT, CPU, FS),
> 
> Modified: llvm/trunk/lib/Target/Sparc/SparcSubtarget.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/SparcSubtarget.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Sparc/SparcSubtarget.h (original)
> +++ llvm/trunk/lib/Target/Sparc/SparcSubtarget.h Mon Dec 19 20:50:00 2011
> @@ -24,6 +24,7 @@
> class StringRef;
> 
> class SparcSubtarget : public SparcGenSubtargetInfo {
> +  virtual void anchor();
>   bool IsV9;
>   bool V8DeprecatedInsts;
>   bool IsVIS;
> 
> Modified: llvm/trunk/lib/Target/Sparc/SparcTargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/SparcTargetMachine.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Sparc/SparcTargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/Sparc/SparcTargetMachine.cpp Mon Dec 19 20:50:00 2011
> @@ -51,6 +51,8 @@
>   return true;
> }
> 
> +void SparcV8TargetMachine::anchor() { }
> +
> SparcV8TargetMachine::SparcV8TargetMachine(const Target &T,
>                                            StringRef TT, StringRef CPU,
>                                            StringRef FS,
> @@ -61,6 +63,8 @@
>   : SparcTargetMachine(T, TT, CPU, FS, Options, RM, CM, OL, false) {
> }
> 
> +void SparcV9TargetMachine::anchor() { }
> +
> SparcV9TargetMachine::SparcV9TargetMachine(const Target &T, 
>                                            StringRef TT,  StringRef CPU,
>                                            StringRef FS,
> 
> Modified: llvm/trunk/lib/Target/Sparc/SparcTargetMachine.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/SparcTargetMachine.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Sparc/SparcTargetMachine.h (original)
> +++ llvm/trunk/lib/Target/Sparc/SparcTargetMachine.h Mon Dec 19 20:50:00 2011
> @@ -62,6 +62,7 @@
> /// SparcV8TargetMachine - Sparc 32-bit target machine
> ///
> class SparcV8TargetMachine : public SparcTargetMachine {
> +  virtual void anchor();
> public:
>   SparcV8TargetMachine(const Target &T, StringRef TT,
>                        StringRef CPU, StringRef FS,
> @@ -73,6 +74,7 @@
> /// SparcV9TargetMachine - Sparc 64-bit target machine
> ///
> class SparcV9TargetMachine : public SparcTargetMachine {
> +  virtual void anchor();
> public:
>   SparcV9TargetMachine(const Target &T, StringRef TT,
>                        StringRef CPU, StringRef FS,
> 
> Added: llvm/trunk/lib/Target/TargetJITInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetJITInfo.cpp?rev=146960&view=auto
> ==============================================================================
> --- llvm/trunk/lib/Target/TargetJITInfo.cpp (added)
> +++ llvm/trunk/lib/Target/TargetJITInfo.cpp Mon Dec 19 20:50:00 2011
> @@ -0,0 +1,14 @@
> +//===- Target/TargetJITInfo.h - Target Information for JIT ------*- C++ -*-===//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include "llvm/Target/TargetJITInfo.h"
> +
> +using namespace llvm;
> +
> +void TargetJITInfo::anchor() { }
> 
> Modified: llvm/trunk/lib/Target/TargetLibraryInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetLibraryInfo.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/TargetLibraryInfo.cpp (original)
> +++ llvm/trunk/lib/Target/TargetLibraryInfo.cpp Mon Dec 19 20:50:00 2011
> @@ -20,6 +20,8 @@
>                 "Target Library Information", false, true)
> char TargetLibraryInfo::ID = 0;
> 
> +void TargetLibraryInfo::anchor() { }
> +
> const char* TargetLibraryInfo::StandardNames[LibFunc::NumLibFuncs] =
>   {
>     "acos",
> 
> Modified: llvm/trunk/lib/Target/TargetRegisterInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetRegisterInfo.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/TargetRegisterInfo.cpp (original)
> +++ llvm/trunk/lib/Target/TargetRegisterInfo.cpp Mon Dec 19 20:50:00 2011
> @@ -18,6 +18,8 @@
> 
> using namespace llvm;
> 
> +void TargetRegisterClass::anchor() { }
> +
> TargetRegisterInfo::TargetRegisterInfo(const TargetRegisterInfoDesc *ID,
>                              regclass_iterator RCB, regclass_iterator RCE,
>                              const char *const *subregindexnames)
> 
> Modified: llvm/trunk/lib/Target/X86/Disassembler/X86Disassembler.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/Disassembler/X86Disassembler.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/Disassembler/X86Disassembler.cpp (original)
> +++ llvm/trunk/lib/Target/X86/Disassembler/X86Disassembler.cpp Mon Dec 19 20:50:00 2011
> @@ -79,6 +79,12 @@
>   return instInfoX86;
> }
> 
> +void X86_16Disassembler::anchor() { }
> +
> +void X86_32Disassembler::anchor() { }
> +
> +void X86_64Disassembler::anchor() { }
> +
> /// regionReader - a callback function that wraps the readByte method from
> ///   MemoryObject.
> ///
> 
> Modified: llvm/trunk/lib/Target/X86/Disassembler/X86Disassembler.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/Disassembler/X86Disassembler.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/Disassembler/X86Disassembler.h (original)
> +++ llvm/trunk/lib/Target/X86/Disassembler/X86Disassembler.h Mon Dec 19 20:50:00 2011
> @@ -128,6 +128,7 @@
> 
> /// X86_16Disassembler - 16-bit X86 disassembler.
> class X86_16Disassembler : public X86GenericDisassembler {
> +  virtual void anchor();
> public:
>   X86_16Disassembler(const MCSubtargetInfo &STI) :
>     X86GenericDisassembler(STI, MODE_16BIT) {
> @@ -136,6 +137,7 @@
> 
> /// X86_16Disassembler - 32-bit X86 disassembler.
> class X86_32Disassembler : public X86GenericDisassembler {
> +  virtual void anchor();
> public:
>   X86_32Disassembler(const MCSubtargetInfo &STI) :
>     X86GenericDisassembler(STI, MODE_32BIT) {
> @@ -144,6 +146,7 @@
> 
> /// X86_16Disassembler - 64-bit X86 disassembler.
> class X86_64Disassembler : public X86GenericDisassembler {
> +  virtual void anchor();
> public:
>   X86_64Disassembler(const MCSubtargetInfo &STI) :
>     X86GenericDisassembler(STI, MODE_64BIT) {
> 
> Modified: llvm/trunk/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp (original)
> +++ llvm/trunk/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp Mon Dec 19 20:50:00 2011
> @@ -48,6 +48,8 @@
>   "{cc}", "cc",
>   0,0};
> 
> +void X86MCAsmInfoDarwin::anchor() { }
> +
> X86MCAsmInfoDarwin::X86MCAsmInfoDarwin(const Triple &T) {
>   bool is64Bit = T.getArch() == Triple::x86_64;
>   if (is64Bit)
> @@ -80,6 +82,8 @@
>   : X86MCAsmInfoDarwin(Triple) {
> }
> 
> +void X86ELFMCAsmInfo::anchor() { }
> +
> X86ELFMCAsmInfo::X86ELFMCAsmInfo(const Triple &T) {
>   if (T.getArch() == Triple::x86_64)
>     PointerSize = 8;
> @@ -125,6 +129,8 @@
>                            0, SectionKind::getMetadata());
> }
> 
> +void X86MCAsmInfoMicrosoft::anchor() { }
> +
> X86MCAsmInfoMicrosoft::X86MCAsmInfoMicrosoft(const Triple &Triple) {
>   if (Triple.getArch() == Triple::x86_64) {
>     GlobalPrefix = "";
> @@ -137,6 +143,8 @@
>   TextAlignFillValue = 0x90;
> }
> 
> +void X86MCAsmInfoGNUCOFF::anchor() { }
> +
> X86MCAsmInfoGNUCOFF::X86MCAsmInfoGNUCOFF(const Triple &Triple) {
>   if (Triple.getArch() == Triple::x86_64) {
>     GlobalPrefix = "";
> 
> Modified: llvm/trunk/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.h (original)
> +++ llvm/trunk/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.h Mon Dec 19 20:50:00 2011
> @@ -21,7 +21,9 @@
> namespace llvm {
>   class Triple;
> 
> -  struct X86MCAsmInfoDarwin : public MCAsmInfoDarwin {
> +  class X86MCAsmInfoDarwin : public MCAsmInfoDarwin {
> +    virtual void anchor();
> +  public:
>     explicit X86MCAsmInfoDarwin(const Triple &Triple);
>   };
> 
> @@ -33,16 +35,22 @@
>                                 MCStreamer &Streamer) const;
>   };
> 
> -  struct X86ELFMCAsmInfo : public MCAsmInfo {
> +  class X86ELFMCAsmInfo : public MCAsmInfo {
> +    virtual void anchor();
> +  public:
>     explicit X86ELFMCAsmInfo(const Triple &Triple);
>     virtual const MCSection *getNonexecutableStackSection(MCContext &Ctx) const;
>   };
> 
> -  struct X86MCAsmInfoMicrosoft : public MCAsmInfoMicrosoft {
> +  class X86MCAsmInfoMicrosoft : public MCAsmInfoMicrosoft {
> +    virtual void anchor();
> +  public:
>     explicit X86MCAsmInfoMicrosoft(const Triple &Triple);
>   };
> 
> -  struct X86MCAsmInfoGNUCOFF : public MCAsmInfoGNUCOFF {
> +  class X86MCAsmInfoGNUCOFF : public MCAsmInfoGNUCOFF {
> +    virtual void anchor();
> +  public:
>     explicit X86MCAsmInfoGNUCOFF(const Triple &Triple);
>   };
> } // namespace llvm
> 
> Added: llvm/trunk/lib/Target/X86/X86MachineFunctionInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86MachineFunctionInfo.cpp?rev=146960&view=auto
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86MachineFunctionInfo.cpp (added)
> +++ llvm/trunk/lib/Target/X86/X86MachineFunctionInfo.cpp Mon Dec 19 20:50:00 2011
> @@ -0,0 +1,14 @@
> +//====- X86MachineFuctionInfo.cpp - X86 machine function info ---*- C++ -*-===//
> +// 
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +// 
> +//===----------------------------------------------------------------------===//
> +
> +#include "X86MachineFunctionInfo.h"
> +
> +using namespace llvm;
> +
> +void X86MachineFunctionInfo::anchor() { }
> 
> Modified: llvm/trunk/lib/Target/X86/X86MachineFunctionInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86MachineFunctionInfo.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86MachineFunctionInfo.h (original)
> +++ llvm/trunk/lib/Target/X86/X86MachineFunctionInfo.h Mon Dec 19 20:50:00 2011
> @@ -21,6 +21,8 @@
> /// X86MachineFunctionInfo - This class is derived from MachineFunction and
> /// contains private X86 target-specific information for each MachineFunction.
> class X86MachineFunctionInfo : public MachineFunctionInfo {
> +  virtual void anchor();
> +
>   /// ForceFramePointer - True if the function is required to use of frame
>   /// pointer for reasons other than it containing dynamic allocation or 
>   /// that FP eliminatation is turned off. For example, Cygwin main function
> 
> Modified: llvm/trunk/lib/Target/X86/X86TargetMachine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetMachine.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86TargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86TargetMachine.cpp Mon Dec 19 20:50:00 2011
> @@ -28,6 +28,7 @@
>   RegisterTargetMachine<X86_64TargetMachine> Y(TheX86_64Target);
> }
> 
> +void X86_32TargetMachine::anchor() { }
> 
> X86_32TargetMachine::X86_32TargetMachine(const Target &T, StringRef TT,
>                                          StringRef CPU, StringRef FS,
> @@ -50,6 +51,7 @@
>     JITInfo(*this) {
> }
> 
> +void X86_64TargetMachine::anchor() { }
> 
> X86_64TargetMachine::X86_64TargetMachine(const Target &T, StringRef TT,
>                                          StringRef CPU, StringRef FS,
> 
> Modified: llvm/trunk/lib/Target/X86/X86TargetMachine.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetMachine.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86TargetMachine.h (original)
> +++ llvm/trunk/lib/Target/X86/X86TargetMachine.h Mon Dec 19 20:50:00 2011
> @@ -78,6 +78,7 @@
> /// X86_32TargetMachine - X86 32-bit target machine.
> ///
> class X86_32TargetMachine : public X86TargetMachine {
> +  virtual void anchor();
>   const TargetData  DataLayout; // Calculates type size & alignment
>   X86InstrInfo      InstrInfo;
>   X86SelectionDAGInfo TSInfo;
> @@ -106,6 +107,7 @@
> /// X86_64TargetMachine - X86 64-bit target machine.
> ///
> class X86_64TargetMachine : public X86TargetMachine {
> +  virtual void anchor();
>   const TargetData  DataLayout; // Calculates type size & alignment
>   X86InstrInfo      InstrInfo;
>   X86SelectionDAGInfo TSInfo;
> 
> Modified: llvm/trunk/lib/Target/XCore/MCTargetDesc/XCoreMCAsmInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/MCTargetDesc/XCoreMCAsmInfo.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/XCore/MCTargetDesc/XCoreMCAsmInfo.cpp (original)
> +++ llvm/trunk/lib/Target/XCore/MCTargetDesc/XCoreMCAsmInfo.cpp Mon Dec 19 20:50:00 2011
> @@ -10,6 +10,8 @@
> #include "XCoreMCAsmInfo.h"
> using namespace llvm;
> 
> +void XCoreMCAsmInfo::anchor() { }
> +
> XCoreMCAsmInfo::XCoreMCAsmInfo(const Target &T, StringRef TT) {
>   SupportsDebugInformation = true;
>   Data16bitsDirective = "\t.short\t";
> 
> Modified: llvm/trunk/lib/Target/XCore/MCTargetDesc/XCoreMCAsmInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/MCTargetDesc/XCoreMCAsmInfo.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/XCore/MCTargetDesc/XCoreMCAsmInfo.h (original)
> +++ llvm/trunk/lib/Target/XCore/MCTargetDesc/XCoreMCAsmInfo.h Mon Dec 19 20:50:00 2011
> @@ -21,6 +21,7 @@
>   class Target;
> 
>   class XCoreMCAsmInfo : public MCAsmInfo {
> +    virtual void anchor();
>   public:
>     explicit XCoreMCAsmInfo(const Target &T, StringRef TT);
>   };
> 
> Added: llvm/trunk/lib/Target/XCore/XCoreMachineFunctionInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/XCoreMachineFunctionInfo.cpp?rev=146960&view=auto
> ==============================================================================
> --- llvm/trunk/lib/Target/XCore/XCoreMachineFunctionInfo.cpp (added)
> +++ llvm/trunk/lib/Target/XCore/XCoreMachineFunctionInfo.cpp Mon Dec 19 20:50:00 2011
> @@ -0,0 +1,14 @@
> +//===- XCoreMachineFuctionInfo.cpp - XCore machine function info -*- C++ -*-==//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include "XCoreMachineFunctionInfo.h"
> +
> +using namespace llvm;
> +
> +void XCoreFunctionInfo::anchor() { }
> 
> Modified: llvm/trunk/lib/Target/XCore/XCoreMachineFunctionInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/XCoreMachineFunctionInfo.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/XCore/XCoreMachineFunctionInfo.h (original)
> +++ llvm/trunk/lib/Target/XCore/XCoreMachineFunctionInfo.h Mon Dec 19 20:50:00 2011
> @@ -26,7 +26,7 @@
> /// XCoreFunctionInfo - This class is derived from MachineFunction private
> /// XCore target-specific information for each MachineFunction.
> class XCoreFunctionInfo : public MachineFunctionInfo {
> -private:
> +  virtual void anchor();
>   bool UsesLR;
>   int LRSpillSlot;
>   int FPSpillSlot;
> 
> Modified: llvm/trunk/lib/Target/XCore/XCoreSubtarget.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/XCoreSubtarget.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/XCore/XCoreSubtarget.cpp (original)
> +++ llvm/trunk/lib/Target/XCore/XCoreSubtarget.cpp Mon Dec 19 20:50:00 2011
> @@ -21,6 +21,8 @@
> 
> using namespace llvm;
> 
> +void XCoreSubtarget::anchor() { }
> +
> XCoreSubtarget::XCoreSubtarget(const std::string &TT,
>                                const std::string &CPU, const std::string &FS)
>   : XCoreGenSubtargetInfo(TT, CPU, FS)
> 
> Modified: llvm/trunk/lib/Target/XCore/XCoreSubtarget.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/XCoreSubtarget.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/XCore/XCoreSubtarget.h (original)
> +++ llvm/trunk/lib/Target/XCore/XCoreSubtarget.h Mon Dec 19 20:50:00 2011
> @@ -25,6 +25,7 @@
> class StringRef;
> 
> class XCoreSubtarget : public XCoreGenSubtargetInfo {
> +  virtual void anchor();
> 
> public:
>   /// This constructor initializes the data members to match that
> 
> Modified: llvm/trunk/lib/Transforms/Utils/SimplifyIndVar.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/SimplifyIndVar.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Utils/SimplifyIndVar.cpp (original)
> +++ llvm/trunk/lib/Transforms/Utils/SimplifyIndVar.cpp Mon Dec 19 20:50:00 2011
> @@ -375,6 +375,8 @@
> 
> namespace llvm {
> 
> +void IVVisitor::anchor() { }
> +
> /// simplifyUsersOfIV - Simplify instructions that use this induction variable
> /// by using ScalarEvolution to analyze the IV's recurrence.
> bool simplifyUsersOfIV(PHINode *CurrIV, ScalarEvolution *SE, LPPassManager *LPM,
> 
> Modified: llvm/trunk/lib/VMCore/Constants.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Constants.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/VMCore/Constants.cpp (original)
> +++ llvm/trunk/lib/VMCore/Constants.cpp Mon Dec 19 20:50:00 2011
> @@ -40,6 +40,8 @@
> //                              Constant Class
> //===----------------------------------------------------------------------===//
> 
> +void Constant::anchor() { }
> +
> bool Constant::isNegativeZeroValue() const {
>   // Floating point values have an explicit -0.0 value.
>   if (const ConstantFP *CFP = dyn_cast<ConstantFP>(this))
> @@ -363,6 +365,8 @@
> //                                ConstantInt
> //===----------------------------------------------------------------------===//
> 
> +void ConstantInt::anchor() { }
> +
> ConstantInt::ConstantInt(IntegerType *Ty, const APInt& V)
>   : Constant(Ty, ConstantIntVal, 0, 0), Val(V) {
>   assert(V.getBitWidth() == Ty->getBitWidth() && "Invalid constant for type");
> @@ -486,6 +490,8 @@
>   return &APFloat::PPCDoubleDouble;
> }
> 
> +void ConstantFP::anchor() { }
> +
> /// get() - This returns a constant fp for the specified value in the
> /// specified type.  This should only be used for simple constant values like
> /// 2.0/1.0 etc, that are known-valid both as double and as the target format.
> 
> Modified: llvm/trunk/lib/VMCore/ConstantsContext.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/ConstantsContext.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/VMCore/ConstantsContext.h (original)
> +++ llvm/trunk/lib/VMCore/ConstantsContext.h Mon Dec 19 20:50:00 2011
> @@ -30,6 +30,7 @@
> /// UnaryConstantExpr - This class is private to Constants.cpp, and is used
> /// behind the scenes to implement unary constant exprs.
> class UnaryConstantExpr : public ConstantExpr {
> +  virtual void anchor();
>   void *operator new(size_t, unsigned);  // DO NOT IMPLEMENT
> public:
>   // allocate space for exactly one operand
> @@ -46,6 +47,7 @@
> /// BinaryConstantExpr - This class is private to Constants.cpp, and is used
> /// behind the scenes to implement binary constant exprs.
> class BinaryConstantExpr : public ConstantExpr {
> +  virtual void anchor();
>   void *operator new(size_t, unsigned);  // DO NOT IMPLEMENT
> public:
>   // allocate space for exactly two operands
> @@ -66,6 +68,7 @@
> /// SelectConstantExpr - This class is private to Constants.cpp, and is used
> /// behind the scenes to implement select constant exprs.
> class SelectConstantExpr : public ConstantExpr {
> +  virtual void anchor();
>   void *operator new(size_t, unsigned);  // DO NOT IMPLEMENT
> public:
>   // allocate space for exactly three operands
> @@ -86,6 +89,7 @@
> /// Constants.cpp, and is used behind the scenes to implement
> /// extractelement constant exprs.
> class ExtractElementConstantExpr : public ConstantExpr {
> +  virtual void anchor();
>   void *operator new(size_t, unsigned);  // DO NOT IMPLEMENT
> public:
>   // allocate space for exactly two operands
> @@ -106,6 +110,7 @@
> /// Constants.cpp, and is used behind the scenes to implement
> /// insertelement constant exprs.
> class InsertElementConstantExpr : public ConstantExpr {
> +  virtual void anchor();
>   void *operator new(size_t, unsigned);  // DO NOT IMPLEMENT
> public:
>   // allocate space for exactly three operands
> @@ -127,6 +132,7 @@
> /// Constants.cpp, and is used behind the scenes to implement
> /// shufflevector constant exprs.
> class ShuffleVectorConstantExpr : public ConstantExpr {
> +  virtual void anchor();
>   void *operator new(size_t, unsigned);  // DO NOT IMPLEMENT
> public:
>   // allocate space for exactly three operands
> @@ -151,6 +157,7 @@
> /// Constants.cpp, and is used behind the scenes to implement
> /// extractvalue constant exprs.
> class ExtractValueConstantExpr : public ConstantExpr {
> +  virtual void anchor();
>   void *operator new(size_t, unsigned);  // DO NOT IMPLEMENT
> public:
>   // allocate space for exactly one operand
> @@ -176,6 +183,7 @@
> /// Constants.cpp, and is used behind the scenes to implement
> /// insertvalue constant exprs.
> class InsertValueConstantExpr : public ConstantExpr {
> +  virtual void anchor();
>   void *operator new(size_t, unsigned);  // DO NOT IMPLEMENT
> public:
>   // allocate space for exactly one operand
> @@ -202,6 +210,7 @@
> /// GetElementPtrConstantExpr - This class is private to Constants.cpp, and is
> /// used behind the scenes to implement getelementpr constant exprs.
> class GetElementPtrConstantExpr : public ConstantExpr {
> +  virtual void anchor();
>   GetElementPtrConstantExpr(Constant *C, const std::vector<Constant*> &IdxList,
>                             Type *DestTy);
> public:
> @@ -221,8 +230,10 @@
> // CompareConstantExpr - This class is private to Constants.cpp, and is used
> // behind the scenes to implement ICmp and FCmp constant expressions. This is
> // needed in order to store the predicate value for these instructions.
> -struct CompareConstantExpr : public ConstantExpr {
> +class CompareConstantExpr : public ConstantExpr {
> +  virtual void anchor();
>   void *operator new(size_t, unsigned);  // DO NOT IMPLEMENT
> +public:
>   // allocate space for exactly two operands
>   void *operator new(size_t s) {
>     return User::operator new(s, 2);
> 
> Modified: llvm/trunk/lib/VMCore/Function.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Function.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/VMCore/Function.cpp (original)
> +++ llvm/trunk/lib/VMCore/Function.cpp Mon Dec 19 20:50:00 2011
> @@ -39,6 +39,8 @@
> // Argument Implementation
> //===----------------------------------------------------------------------===//
> 
> +void Argument::anchor() { }
> +
> Argument::Argument(Type *Ty, const Twine &Name, Function *Par)
>   : Value(Ty, Value::ArgumentVal) {
>   Parent = 0;
> 
> Modified: llvm/trunk/lib/VMCore/LLVMContextImpl.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/LLVMContextImpl.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/VMCore/LLVMContextImpl.cpp (original)
> +++ llvm/trunk/lib/VMCore/LLVMContextImpl.cpp Mon Dec 19 20:50:00 2011
> @@ -93,3 +93,24 @@
>   // Destroy MDStrings.
>   DeleteContainerSeconds(MDStringCache);
> }
> +
> +// ConstantsContext anchors
> +void UnaryConstantExpr::anchor() { }
> +
> +void BinaryConstantExpr::anchor() { }
> +
> +void SelectConstantExpr::anchor() { }
> +
> +void ExtractElementConstantExpr::anchor() { }
> +
> +void InsertElementConstantExpr::anchor() { }
> +
> +void ShuffleVectorConstantExpr::anchor() { }
> +
> +void ExtractValueConstantExpr::anchor() { }
> +
> +void InsertValueConstantExpr::anchor() { }
> +
> +void GetElementPtrConstantExpr::anchor() { }
> +
> +void CompareConstantExpr::anchor() { }
> 
> Modified: llvm/trunk/lib/VMCore/Metadata.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Metadata.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/VMCore/Metadata.cpp (original)
> +++ llvm/trunk/lib/VMCore/Metadata.cpp Mon Dec 19 20:50:00 2011
> @@ -29,6 +29,8 @@
> // MDString implementation.
> //
> 
> +void MDString::anchor() { }
> +
> MDString::MDString(LLVMContext &C, StringRef S)
>   : Value(Type::getMetadataTy(C), Value::MDStringVal), Str(S) {}
> 
> 
> Modified: llvm/trunk/lib/VMCore/PassManager.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/PassManager.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/lib/VMCore/PassManager.cpp (original)
> +++ llvm/trunk/lib/VMCore/PassManager.cpp Mon Dec 19 20:50:00 2011
> @@ -223,6 +223,7 @@
> class FunctionPassManagerImpl : public Pass,
>                                 public PMDataManager,
>                                 public PMTopLevelManager {
> +  virtual void anchor();
> private:
>   bool wasRun;
> public:
> @@ -291,6 +292,8 @@
>   }
> };
> 
> +void FunctionPassManagerImpl::anchor() {}
> +
> char FunctionPassManagerImpl::ID = 0;
> 
> //===----------------------------------------------------------------------===//
> @@ -384,6 +387,7 @@
> class PassManagerImpl : public Pass,
>                         public PMDataManager,
>                         public PMTopLevelManager {
> +  virtual void anchor();
> 
> public:
>   static char ID;
> @@ -437,6 +441,8 @@
>   }
> };
> 
> +void PassManagerImpl::anchor() {}
> +
> char PassManagerImpl::ID = 0;
> } // End of llvm namespace
> 
> 
> Modified: llvm/trunk/tools/bugpoint/CrashDebugger.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/bugpoint/CrashDebugger.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/tools/bugpoint/CrashDebugger.cpp (original)
> +++ llvm/trunk/tools/bugpoint/CrashDebugger.cpp Mon Dec 19 20:50:00 2011
> @@ -169,7 +169,7 @@
>   return false;
> }
> 
> -namespace llvm {
> +namespace {
>   /// ReduceCrashingFunctions reducer - This works by removing functions and
>   /// seeing if the program still crashes. If it does, then keep the newer,
>   /// smaller program.
> 
> Modified: llvm/trunk/tools/bugpoint/ToolRunner.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/bugpoint/ToolRunner.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/tools/bugpoint/ToolRunner.cpp (original)
> +++ llvm/trunk/tools/bugpoint/ToolRunner.cpp Mon Dec 19 20:50:00 2011
> @@ -234,6 +234,8 @@
>       Timeout, MemoryLimit, Error);
> }
> 
> +void AbstractInterpreter::anchor() { }
> +
> // LLI create method - Try to find the LLI executable
> AbstractInterpreter *AbstractInterpreter::createLLI(const char *Argv0,
>                                                     std::string &Message,
> 
> Modified: llvm/trunk/tools/bugpoint/ToolRunner.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/bugpoint/ToolRunner.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/tools/bugpoint/ToolRunner.h (original)
> +++ llvm/trunk/tools/bugpoint/ToolRunner.h Mon Dec 19 20:50:00 2011
> @@ -86,6 +86,7 @@
> /// complexity behind a simple interface.
> ///
> class AbstractInterpreter {
> +  virtual void anchor();
> public:
>   static CBE *createCBE(const char *Argv0, std::string &Message,
>                         const std::string              &GCCBinary,
> 
> Modified: llvm/trunk/tools/llvm-diff/DiffConsumer.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-diff/DiffConsumer.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/tools/llvm-diff/DiffConsumer.cpp (original)
> +++ llvm/trunk/tools/llvm-diff/DiffConsumer.cpp Mon Dec 19 20:50:00 2011
> @@ -44,6 +44,8 @@
> }
> 
> 
> +void Consumer::anchor() { }
> +
> void DiffConsumer::printValue(Value *V, bool isL) {
>   if (V->hasName()) {
>     out << (isa<GlobalValue>(V) ? '@' : '%') << V->getName();
> 
> Modified: llvm/trunk/tools/llvm-diff/DiffConsumer.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-diff/DiffConsumer.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/tools/llvm-diff/DiffConsumer.h (original)
> +++ llvm/trunk/tools/llvm-diff/DiffConsumer.h Mon Dec 19 20:50:00 2011
> @@ -29,6 +29,7 @@
> 
>   /// The interface for consumers of difference data.
>   class Consumer {
> +    virtual void anchor();
>   public:
>     /// Record that a local context has been entered.  Left and
>     /// Right are IR "containers" of some sort which are being
> 
> Modified: llvm/trunk/tools/llvm-diff/DifferenceEngine.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-diff/DifferenceEngine.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/tools/llvm-diff/DifferenceEngine.cpp (original)
> +++ llvm/trunk/tools/llvm-diff/DifferenceEngine.cpp Mon Dec 19 20:50:00 2011
> @@ -628,6 +628,8 @@
> 
> }
> 
> +void DifferenceEngine::Oracle::anchor() { }
> +
> void DifferenceEngine::diff(Function *L, Function *R) {
>   Context C(*this, L, R);
> 
> 
> Modified: llvm/trunk/tools/llvm-diff/DifferenceEngine.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-diff/DifferenceEngine.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/tools/llvm-diff/DifferenceEngine.h (original)
> +++ llvm/trunk/tools/llvm-diff/DifferenceEngine.h Mon Dec 19 20:50:00 2011
> @@ -50,7 +50,9 @@
> 
>     /// An oracle for answering whether two values are equivalent as
>     /// operands.
> -    struct Oracle {
> +    class Oracle {
> +      virtual void anchor();
> +    public:
>       virtual bool operator()(Value *L, Value *R) = 0;
> 
>     protected:
> 
> Modified: llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp (original)
> +++ llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp Mon Dec 19 20:50:00 2011
> @@ -126,6 +126,8 @@
>   return 0;
> }
> 
> +void llvm::StringRefMemoryObject::anchor() { }
> +
> void llvm::DumpBytes(StringRef bytes) {
>   static const char hex_rep[] = "0123456789abcdef";
>   // FIXME: The real way to do this is to figure out the longest instruction
> 
> Modified: llvm/trunk/tools/llvm-objdump/llvm-objdump.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objdump/llvm-objdump.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/tools/llvm-objdump/llvm-objdump.h (original)
> +++ llvm/trunk/tools/llvm-objdump/llvm-objdump.h Mon Dec 19 20:50:00 2011
> @@ -25,7 +25,7 @@
> void DisassembleInputMachO(StringRef Filename);
> 
> class StringRefMemoryObject : public MemoryObject {
> -private:
> +  virtual void anchor();
>   StringRef Bytes;
> public:
>   StringRefMemoryObject(StringRef bytes) : Bytes(bytes) {}
> 
> Modified: llvm/trunk/unittests/Support/IRBuilderTest.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/IRBuilderTest.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/unittests/Support/IRBuilderTest.cpp (original)
> +++ llvm/trunk/unittests/Support/IRBuilderTest.cpp Mon Dec 19 20:50:00 2011
> @@ -19,6 +19,7 @@
> 
> using namespace llvm;
> 
> +namespace {
> class IRBuilderTest : public testing::Test {
> protected:
>   virtual void SetUp() {
> @@ -37,6 +38,7 @@
>   OwningPtr<Module> M;
>   BasicBlock *BB;
> };
> +}
> 
> TEST_F(IRBuilderTest, Lifetime) {
>   IRBuilder<> Builder(BB);
> 
> Modified: llvm/trunk/unittests/Transforms/Utils/Cloning.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Transforms/Utils/Cloning.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/unittests/Transforms/Utils/Cloning.cpp (original)
> +++ llvm/trunk/unittests/Transforms/Utils/Cloning.cpp Mon Dec 19 20:50:00 2011
> @@ -17,6 +17,7 @@
> 
> using namespace llvm;
> 
> +namespace {
> class CloneInstruction : public ::testing::Test {
> protected:
>   virtual void SetUp() {
> @@ -47,6 +48,7 @@
>   LLVMContext context;
>   Value *V;
> };
> +}
> 
> TEST_F(CloneInstruction, OverflowBits) {
>   V = new Argument(Type::getInt32Ty(context));
> 
> Modified: llvm/trunk/utils/TableGen/DAGISelMatcher.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/DAGISelMatcher.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/utils/TableGen/DAGISelMatcher.cpp (original)
> +++ llvm/trunk/utils/TableGen/DAGISelMatcher.cpp Mon Dec 19 20:50:00 2011
> @@ -15,6 +15,8 @@
> #include "llvm/ADT/StringExtras.h"
> using namespace llvm;
> 
> +void Matcher::anchor() { }
> +
> void Matcher::dump() const {
>   print(errs(), 0);
> }
> @@ -324,6 +326,10 @@
> }
> 
> 
> +void EmitNodeMatcher::anchor() { }
> +
> +void MorphNodeToMatcher::anchor() { }
> +
> unsigned MarkGlueResultsMatcher::getHashImpl() const {
>   return HashUnsigneds(GlueResultNodes.begin(), GlueResultNodes.end());
> }
> 
> Modified: llvm/trunk/utils/TableGen/DAGISelMatcher.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/DAGISelMatcher.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/utils/TableGen/DAGISelMatcher.h (original)
> +++ llvm/trunk/utils/TableGen/DAGISelMatcher.h Mon Dec 19 20:50:00 2011
> @@ -41,6 +41,7 @@
>   // The next matcher node that is executed after this one.  Null if this is the
>   // last stage of a match.
>   OwningPtr<Matcher> Next;
> +  virtual void anchor();
> public:
>   enum KindTy {
>     // Matcher state manipulation.
> @@ -1011,6 +1012,7 @@
> 
> /// EmitNodeMatcher - This signals a successful match and generates a node.
> class EmitNodeMatcher : public EmitNodeMatcherCommon {
> +  virtual void anchor();
>   unsigned FirstResultSlot;
> public:
>   EmitNodeMatcher(const std::string &opcodeName,
> @@ -1033,6 +1035,7 @@
> };
> 
> class MorphNodeToMatcher : public EmitNodeMatcherCommon {
> +  virtual void anchor();
>   const PatternToMatch &Pattern;
> public:
>   MorphNodeToMatcher(const std::string &opcodeName,
> 
> Modified: llvm/trunk/utils/TableGen/SetTheory.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/SetTheory.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/utils/TableGen/SetTheory.cpp (original)
> +++ llvm/trunk/utils/TableGen/SetTheory.cpp Mon Dec 19 20:50:00 2011
> @@ -198,6 +198,10 @@
> };
> } // end anonymous namespace
> 
> +void SetTheory::Operator::anchor() { }
> +
> +void SetTheory::Expander::anchor() { }
> +
> SetTheory::SetTheory() {
>   addOperator("add", new AddOp);
>   addOperator("sub", new SubOp);
> 
> Modified: llvm/trunk/utils/TableGen/SetTheory.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/SetTheory.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/utils/TableGen/SetTheory.h (original)
> +++ llvm/trunk/utils/TableGen/SetTheory.h Mon Dec 19 20:50:00 2011
> @@ -65,7 +65,9 @@
>   typedef SmallSetVector<Record*, 16> RecSet;
> 
>   /// Operator - A callback representing a DAG operator.
> -  struct Operator {
> +  class Operator {
> +    virtual void anchor();
> +  public:
>     virtual ~Operator() {}
> 
>     /// apply - Apply this operator to Expr's arguments and insert the result
> @@ -76,7 +78,9 @@
>   /// Expander - A callback function that can transform a Record representing a
>   /// set into a fully expanded list of elements. Expanders provide a way for
>   /// users to define named sets that can be used in DAG expressions.
> -  struct Expander {
> +  class Expander {
> +    virtual void anchor();
> +  public:
>     virtual ~Expander() {}
> 
>     virtual void expand(SetTheory&, Record*, RecSet &Elts) =0;
> 
> Modified: llvm/trunk/utils/TableGen/TGValueTypes.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/TGValueTypes.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/utils/TableGen/TGValueTypes.cpp (original)
> +++ llvm/trunk/utils/TableGen/TGValueTypes.cpp Mon Dec 19 20:50:00 2011
> @@ -18,6 +18,9 @@
> #include <map>
> using namespace llvm;
> 
> +#pragma clang diagnostic push
> +#pragma clang diagnostic ignored "-Wweak-vtables"
> +
> namespace llvm {
> 
> class Type {
> @@ -58,6 +61,8 @@
>   }
> };
> 
> +#pragma clang diagnostic pop
> +
> static std::map<unsigned, const Type *>
>   ExtendedIntegerTypeMap;
> static std::map<std::pair<uintptr_t, uintptr_t>, const Type *>
> 
> Modified: llvm/trunk/utils/TableGen/TableGen.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/TableGen.cpp?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/utils/TableGen/TableGen.cpp (original)
> +++ llvm/trunk/utils/TableGen/TableGen.cpp Mon Dec 19 20:50:00 2011
> @@ -101,92 +101,92 @@
> 
>   cl::opt<std::string>
>   Class("class", cl::desc("Print Enum list for this class"),
> -        cl::value_desc("class name"));
> -}
> -
> -class LLVMTableGenAction : public TableGenAction {
> -public:
> -  bool operator()(raw_ostream &OS, RecordKeeper &Records) {
> -    switch (Action) {
> -    case PrintRecords:
> -      OS << Records;           // No argument, dump all contents
> -      break;
> -    case GenEmitter:
> -      CodeEmitterGen(Records).run(OS);
> -      break;
> -    case GenRegisterInfo:
> -      RegisterInfoEmitter(Records).run(OS);
> -      break;
> -    case GenInstrInfo:
> -      InstrInfoEmitter(Records).run(OS);
> -      break;
> -    case GenCallingConv:
> -      CallingConvEmitter(Records).run(OS);
> -      break;
> -    case GenAsmWriter:
> -      AsmWriterEmitter(Records).run(OS);
> -      break;
> -    case GenAsmMatcher:
> -      AsmMatcherEmitter(Records).run(OS);
> -      break;
> -    case GenDisassembler:
> -      DisassemblerEmitter(Records).run(OS);
> -      break;
> -    case GenPseudoLowering:
> -      PseudoLoweringEmitter(Records).run(OS);
> -      break;
> -    case GenDAGISel:
> -      DAGISelEmitter(Records).run(OS);
> -      break;
> -    case GenDFAPacketizer:
> -      DFAGen(Records).run(OS);
> -      break;
> -    case GenFastISel:
> -      FastISelEmitter(Records).run(OS);
> -      break;
> -    case GenSubtarget:
> -      SubtargetEmitter(Records).run(OS);
> -      break;
> -    case GenIntrinsic:
> -      IntrinsicEmitter(Records).run(OS);
> -      break;
> -    case GenTgtIntrinsic:
> -      IntrinsicEmitter(Records, true).run(OS);
> -      break;
> -    case GenEDInfo:
> -      EDEmitter(Records).run(OS);
> -      break;
> -    case PrintEnums:
> -    {
> -      std::vector<Record*> Recs = Records.getAllDerivedDefinitions(Class);
> -      for (unsigned i = 0, e = Recs.size(); i != e; ++i)
> -        OS << Recs[i]->getName() << ", ";
> -      OS << "\n";
> -      break;
> -    }
> -    case PrintSets:
> -    {
> -      SetTheory Sets;
> -      Sets.addFieldExpander("Set", "Elements");
> -      std::vector<Record*> Recs = Records.getAllDerivedDefinitions("Set");
> -      for (unsigned i = 0, e = Recs.size(); i != e; ++i) {
> -        OS << Recs[i]->getName() << " = [";
> -        const std::vector<Record*> *Elts = Sets.expand(Recs[i]);
> -        assert(Elts && "Couldn't expand Set instance");
> -        for (unsigned ei = 0, ee = Elts->size(); ei != ee; ++ei)
> -          OS << ' ' << (*Elts)[ei]->getName();
> -        OS << " ]\n";
> +          cl::value_desc("class name"));
> +  
> +  class LLVMTableGenAction : public TableGenAction {
> +  public:
> +    bool operator()(raw_ostream &OS, RecordKeeper &Records) {
> +      switch (Action) {
> +      case PrintRecords:
> +        OS << Records;           // No argument, dump all contents
> +        break;
> +      case GenEmitter:
> +        CodeEmitterGen(Records).run(OS);
> +        break;
> +      case GenRegisterInfo:
> +        RegisterInfoEmitter(Records).run(OS);
> +        break;
> +      case GenInstrInfo:
> +        InstrInfoEmitter(Records).run(OS);
> +        break;
> +      case GenCallingConv:
> +        CallingConvEmitter(Records).run(OS);
> +        break;
> +      case GenAsmWriter:
> +        AsmWriterEmitter(Records).run(OS);
> +        break;
> +      case GenAsmMatcher:
> +        AsmMatcherEmitter(Records).run(OS);
> +        break;
> +      case GenDisassembler:
> +        DisassemblerEmitter(Records).run(OS);
> +        break;
> +      case GenPseudoLowering:
> +        PseudoLoweringEmitter(Records).run(OS);
> +        break;
> +      case GenDAGISel:
> +        DAGISelEmitter(Records).run(OS);
> +        break;
> +      case GenDFAPacketizer:
> +        DFAGen(Records).run(OS);
> +        break;
> +      case GenFastISel:
> +        FastISelEmitter(Records).run(OS);
> +        break;
> +      case GenSubtarget:
> +        SubtargetEmitter(Records).run(OS);
> +        break;
> +      case GenIntrinsic:
> +        IntrinsicEmitter(Records).run(OS);
> +        break;
> +      case GenTgtIntrinsic:
> +        IntrinsicEmitter(Records, true).run(OS);
> +        break;
> +      case GenEDInfo:
> +        EDEmitter(Records).run(OS);
> +        break;
> +      case PrintEnums:
> +      {
> +        std::vector<Record*> Recs = Records.getAllDerivedDefinitions(Class);
> +        for (unsigned i = 0, e = Recs.size(); i != e; ++i)
> +          OS << Recs[i]->getName() << ", ";
> +        OS << "\n";
> +        break;
>       }
> -      break;
> -    }
> -    default:
> -      assert(1 && "Invalid Action");
> -      return true;
> +      case PrintSets:
> +      {
> +        SetTheory Sets;
> +        Sets.addFieldExpander("Set", "Elements");
> +        std::vector<Record*> Recs = Records.getAllDerivedDefinitions("Set");
> +        for (unsigned i = 0, e = Recs.size(); i != e; ++i) {
> +          OS << Recs[i]->getName() << " = [";
> +          const std::vector<Record*> *Elts = Sets.expand(Recs[i]);
> +          assert(Elts && "Couldn't expand Set instance");
> +          for (unsigned ei = 0, ee = Elts->size(); ei != ee; ++ei)
> +            OS << ' ' << (*Elts)[ei]->getName();
> +          OS << " ]\n";
> +        }
> +        break;
> +      }
> +      default:
> +        assert(1 && "Invalid Action");
> +        return true;
> +      }
> +  
> +      return false;
>     }
> -
> -    return false;
> -  }
> -};
> +  };
> +}
> 
> int main(int argc, char **argv) {
>   sys::PrintStackTraceOnErrorSignal();
> 
> Added: llvm/trunk/utils/TableGen/X86ModRMFilters.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/X86ModRMFilters.cpp?rev=146960&view=auto
> ==============================================================================
> --- llvm/trunk/utils/TableGen/X86ModRMFilters.cpp (added)
> +++ llvm/trunk/utils/TableGen/X86ModRMFilters.cpp Mon Dec 19 20:50:00 2011
> @@ -0,0 +1,26 @@
> +//===- X86ModRMFilters.cpp - Disassembler ModR/M filterss -------*- C++ -*-===//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include "X86ModRMFilters.h"
> +
> +using namespace llvm::X86Disassembler;
> +
> +void ModRMFilter::anchor() { }
> +
> +void DumbFilter::anchor() { }
> +
> +void ModFilter::anchor() { }
> +
> +void EscapeFilter::anchor() { }
> +
> +void AddRegEscapeFilter::anchor() { }
> +
> +void ExtendedFilter::anchor() { }
> +
> +void ExactFilter::anchor() { }
> 
> Modified: llvm/trunk/utils/TableGen/X86ModRMFilters.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/X86ModRMFilters.h?rev=146960&r1=146959&r2=146960&view=diff
> ==============================================================================
> --- llvm/trunk/utils/TableGen/X86ModRMFilters.h (original)
> +++ llvm/trunk/utils/TableGen/X86ModRMFilters.h Mon Dec 19 20:50:00 2011
> @@ -27,6 +27,7 @@
> /// ModRMFilter - Abstract base class for clases that recognize patterns in
> ///   ModR/M bytes.
> class ModRMFilter {
> +  virtual void anchor();
> public:
>   /// Destructor    - Override as necessary.
>   virtual ~ModRMFilter() { }
> @@ -49,6 +50,7 @@
> ///   require a ModR/M byte or instructions where the entire ModR/M byte is used
> ///   for operands.
> class DumbFilter : public ModRMFilter {
> +  virtual void anchor();
> public:
>   bool isDumb() const {
>     return true;
> @@ -63,7 +65,7 @@
> ///   Some instructions are classified based on whether they are 11 or anything
> ///   else.  This filter performs that classification.
> class ModFilter : public ModRMFilter {
> -private:
> +  virtual void anchor();
>   bool R;
> public:
>   /// Constructor
> @@ -90,7 +92,7 @@
> ///   possible value.  Otherwise, there is one instruction for each value of the
> ///   nnn field [bits 5-3], known elsewhere as the reg field.
> class EscapeFilter : public ModRMFilter {
> -private:
> +  virtual void anchor();
>   bool C0_FF;
>   uint8_t NNN_or_ModRM;
> public:
> @@ -121,7 +123,7 @@
> ///   maps to a single instruction.  Such instructions require the ModR/M byte
> ///   to fall between 0xc0 and 0xff.
> class AddRegEscapeFilter : public ModRMFilter {
> -private:
> +  virtual void anchor();
>   uint8_t ModRM;
> public:
>   /// Constructor
> @@ -142,7 +144,7 @@
> /// ExtendedFilter - Extended opcodes are classified based on the value of the
> ///   mod field [bits 7-6] and the value of the nnn field [bits 5-3]. 
> class ExtendedFilter : public ModRMFilter {
> -private:
> +  virtual void anchor();
>   bool R;
>   uint8_t NNN;
> public:
> @@ -169,9 +171,8 @@
> 
> /// ExactFilter - The occasional extended opcode (such as VMCALL or MONITOR)
> ///   requires the ModR/M byte to have a specific value.
> -class ExactFilter : public ModRMFilter
> -{
> -private:
> +class ExactFilter : public ModRMFilter {
> +  virtual void anchor();
>   uint8_t ModRM;
> public:
>   /// Constructor
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list