diff options
| author | Chris Lattner <sabre@nondot.org> | 2009-08-12 07:22:17 +0000 | 
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2009-08-12 07:22:17 +0000 | 
| commit | 9a6cf91261bb1420fedbd738d298b1e13f9ae71a (patch) | |
| tree | 857e5f098cdcadb899e091ecf17bf807d9551070 /llvm/lib | |
| parent | 1235f2074416cd5dc6220a89d63122426960aa56 (diff) | |
| download | bcm5719-llvm-9a6cf91261bb1420fedbd738d298b1e13f9ae71a.tar.gz bcm5719-llvm-9a6cf91261bb1420fedbd738d298b1e13f9ae71a.zip  | |
Change TargetAsmInfo to be constructed via TargetRegistry from a Target+Triple
pair instead of from a virtual method on TargetMachine.  This cuts the final
ties of TargetAsmInfo to TargetMachine, meaning that MC can now use 
TargetAsmInfo.
llvm-svn: 78802
Diffstat (limited to 'llvm/lib')
48 files changed, 128 insertions, 144 deletions
diff --git a/llvm/lib/CodeGen/LLVMTargetMachine.cpp b/llvm/lib/CodeGen/LLVMTargetMachine.cpp index 6a456dc0e6c..71efa1375ee 100644 --- a/llvm/lib/CodeGen/LLVMTargetMachine.cpp +++ b/llvm/lib/CodeGen/LLVMTargetMachine.cpp @@ -55,6 +55,15 @@ static cl::opt<cl::boolOrDefault>  EnableFastISelOption("fast-isel", cl::Hidden,    cl::desc("Enable the experimental \"fast\" instruction selector")); + +LLVMTargetMachine::LLVMTargetMachine(const Target &T, +                                     const std::string &TargetTriple) +  : TargetMachine(T) { +  AsmInfo = T.createAsmInfo(TargetTriple); +} + + +  FileModel::Model  LLVMTargetMachine::addPassesToEmitFile(PassManagerBase &PM,                                         formatted_raw_ostream &Out, diff --git a/llvm/lib/Target/ARM/ARMTargetMachine.cpp b/llvm/lib/Target/ARM/ARMTargetMachine.cpp index c66570b2e3c..fbc5f38efea 100644 --- a/llvm/lib/Target/ARM/ARMTargetMachine.cpp +++ b/llvm/lib/Target/ARM/ARMTargetMachine.cpp @@ -27,10 +27,26 @@ static cl::opt<bool> DisableLdStOpti("disable-arm-loadstore-opti", cl::Hidden,  static cl::opt<bool> DisableIfConversion("disable-arm-if-conversion",cl::Hidden,                                cl::desc("Disable if-conversion pass")); +static const TargetAsmInfo *createTargetAsmInfo(const Target &T, +                                                const StringRef &TT) { +  Triple TheTriple(TT); +  switch (TheTriple.getOS()) { +  case Triple::Darwin: +    return new ARMDarwinTargetAsmInfo(); +  default: +    return new ARMELFTargetAsmInfo(); +  } +} + +  extern "C" void LLVMInitializeARMTarget() {    // Register the target.    RegisterTargetMachine<ARMTargetMachine> X(TheARMTarget);    RegisterTargetMachine<ThumbTargetMachine> Y(TheThumbTarget); +   +  // Register the target asm info. +  RegisterAsmInfoFn A(TheARMTarget, createTargetAsmInfo); +  RegisterAsmInfoFn B(TheThumbTarget, createTargetAsmInfo);  }  /// TargetMachine ctor - Create an ARM architecture model. @@ -73,16 +89,6 @@ ThumbTargetMachine::ThumbTargetMachine(const Target &T, const std::string &TT,  } -const TargetAsmInfo *ARMBaseTargetMachine::createTargetAsmInfo() const { -  switch (Subtarget.TargetType) { -  default: llvm_unreachable("Unknown ARM subtarget kind"); -  case ARMSubtarget::isDarwin: -    return new ARMDarwinTargetAsmInfo(); -  case ARMSubtarget::isELF: -    return new ARMELFTargetAsmInfo(); -  } -} -  // Pass Pipeline Configuration  bool ARMBaseTargetMachine::addInstSelector(PassManagerBase &PM, diff --git a/llvm/lib/Target/ARM/ARMTargetMachine.h b/llvm/lib/Target/ARM/ARMTargetMachine.h index d992f08f2f0..420305500f4 100644 --- a/llvm/lib/Target/ARM/ARMTargetMachine.h +++ b/llvm/lib/Target/ARM/ARMTargetMachine.h @@ -47,8 +47,6 @@ public:      return InstrItins;    } -  virtual const TargetAsmInfo *createTargetAsmInfo() const; -    // Pass Pipeline Configuration    virtual bool addInstSelector(PassManagerBase &PM, CodeGenOpt::Level OptLevel);    virtual bool addPreRegAlloc(PassManagerBase &PM, CodeGenOpt::Level OptLevel); diff --git a/llvm/lib/Target/Alpha/AlphaTargetAsmInfo.cpp b/llvm/lib/Target/Alpha/AlphaTargetAsmInfo.cpp index 20be50eff95..ebb89ecf526 100644 --- a/llvm/lib/Target/Alpha/AlphaTargetAsmInfo.cpp +++ b/llvm/lib/Target/Alpha/AlphaTargetAsmInfo.cpp @@ -14,7 +14,7 @@  #include "AlphaTargetAsmInfo.h"  using namespace llvm; -AlphaTargetAsmInfo::AlphaTargetAsmInfo() { +AlphaTargetAsmInfo::AlphaTargetAsmInfo(const Target &T, const StringRef &TT) {    AlignmentIsInBytes = false;    PrivateGlobalPrefix = "$";    PICJumpTableDirective = ".gprel32"; diff --git a/llvm/lib/Target/Alpha/AlphaTargetAsmInfo.h b/llvm/lib/Target/Alpha/AlphaTargetAsmInfo.h index 1f0259b22c4..20903c730f2 100644 --- a/llvm/lib/Target/Alpha/AlphaTargetAsmInfo.h +++ b/llvm/lib/Target/Alpha/AlphaTargetAsmInfo.h @@ -17,9 +17,11 @@  #include "llvm/Target/TargetAsmInfo.h"  namespace llvm { +  class Target; +  class StringRef;    struct AlphaTargetAsmInfo : public TargetAsmInfo { -    explicit AlphaTargetAsmInfo(); +    explicit AlphaTargetAsmInfo(const Target &T, const StringRef &TT);    };  } // namespace llvm diff --git a/llvm/lib/Target/Alpha/AlphaTargetMachine.cpp b/llvm/lib/Target/Alpha/AlphaTargetMachine.cpp index bb140dca923..19218704a6f 100644 --- a/llvm/lib/Target/Alpha/AlphaTargetMachine.cpp +++ b/llvm/lib/Target/Alpha/AlphaTargetMachine.cpp @@ -17,16 +17,12 @@  #include "llvm/PassManager.h"  #include "llvm/Support/FormattedStream.h"  #include "llvm/Target/TargetRegistry.h" -  using namespace llvm;  extern "C" void LLVMInitializeAlphaTarget() {     // Register the target.    RegisterTargetMachine<AlphaTargetMachine> X(TheAlphaTarget); -} - -const TargetAsmInfo *AlphaTargetMachine::createTargetAsmInfo() const { -  return new AlphaTargetAsmInfo(); +  RegisterAsmInfo<AlphaTargetAsmInfo> Y(TheAlphaTarget);  }  AlphaTargetMachine::AlphaTargetMachine(const Target &T, const std::string &TT, diff --git a/llvm/lib/Target/Alpha/AlphaTargetMachine.h b/llvm/lib/Target/Alpha/AlphaTargetMachine.h index fc6439345ab..f03e9388f7d 100644 --- a/llvm/lib/Target/Alpha/AlphaTargetMachine.h +++ b/llvm/lib/Target/Alpha/AlphaTargetMachine.h @@ -34,9 +34,6 @@ class AlphaTargetMachine : public LLVMTargetMachine {    AlphaSubtarget Subtarget;    AlphaTargetLowering TLInfo; -protected: -  virtual const TargetAsmInfo *createTargetAsmInfo() const; -  public:    AlphaTargetMachine(const Target &T, const std::string &TT,                       const std::string &FS); diff --git a/llvm/lib/Target/Blackfin/BlackfinTargetAsmInfo.cpp b/llvm/lib/Target/Blackfin/BlackfinTargetAsmInfo.cpp index 3ab02d8c51f..21087453efe 100644 --- a/llvm/lib/Target/Blackfin/BlackfinTargetAsmInfo.cpp +++ b/llvm/lib/Target/Blackfin/BlackfinTargetAsmInfo.cpp @@ -15,7 +15,8 @@  using namespace llvm; -BlackfinTargetAsmInfo::BlackfinTargetAsmInfo() { +BlackfinTargetAsmInfo::BlackfinTargetAsmInfo(const Target &T, +                                             const StringRef &TT) {    GlobalPrefix = "_";    CommentString = "//";  } diff --git a/llvm/lib/Target/Blackfin/BlackfinTargetAsmInfo.h b/llvm/lib/Target/Blackfin/BlackfinTargetAsmInfo.h index fa4cd7c373a..8040f0fb212 100644 --- a/llvm/lib/Target/Blackfin/BlackfinTargetAsmInfo.h +++ b/llvm/lib/Target/Blackfin/BlackfinTargetAsmInfo.h @@ -17,9 +17,11 @@  #include "llvm/Target/TargetAsmInfo.h"  namespace llvm { +  class Target; +  class StringRef;    struct BlackfinTargetAsmInfo : public TargetAsmInfo { -    explicit BlackfinTargetAsmInfo(); +    explicit BlackfinTargetAsmInfo(const Target &T, const StringRef &TT);    };  } // namespace llvm diff --git a/llvm/lib/Target/Blackfin/BlackfinTargetMachine.cpp b/llvm/lib/Target/Blackfin/BlackfinTargetMachine.cpp index 35dba2568d8..4309a9be4d0 100644 --- a/llvm/lib/Target/Blackfin/BlackfinTargetMachine.cpp +++ b/llvm/lib/Target/Blackfin/BlackfinTargetMachine.cpp @@ -20,10 +20,8 @@ using namespace llvm;  extern "C" void LLVMInitializeBlackfinTarget() {    RegisterTargetMachine<BlackfinTargetMachine> X(TheBlackfinTarget); -} +  RegisterAsmInfo<BlackfinTargetAsmInfo> Y(TheBlackfinTarget); -const TargetAsmInfo* BlackfinTargetMachine::createTargetAsmInfo() const { -  return new BlackfinTargetAsmInfo();  }  BlackfinTargetMachine::BlackfinTargetMachine(const Target &T, diff --git a/llvm/lib/Target/Blackfin/BlackfinTargetMachine.h b/llvm/lib/Target/Blackfin/BlackfinTargetMachine.h index 13a8a631f3c..73ed3143f53 100644 --- a/llvm/lib/Target/Blackfin/BlackfinTargetMachine.h +++ b/llvm/lib/Target/Blackfin/BlackfinTargetMachine.h @@ -29,10 +29,6 @@ namespace llvm {      BlackfinTargetLowering TLInfo;      BlackfinInstrInfo InstrInfo;      TargetFrameInfo FrameInfo; - -  protected: -    virtual const TargetAsmInfo *createTargetAsmInfo() const; -    public:      BlackfinTargetMachine(const Target &T, const std::string &TT,                            const std::string &FS); diff --git a/llvm/lib/Target/CellSPU/SPUTargetAsmInfo.cpp b/llvm/lib/Target/CellSPU/SPUTargetAsmInfo.cpp index a295a4c29df..4ae852df995 100644 --- a/llvm/lib/Target/CellSPU/SPUTargetAsmInfo.cpp +++ b/llvm/lib/Target/CellSPU/SPUTargetAsmInfo.cpp @@ -14,7 +14,7 @@  #include "SPUTargetAsmInfo.h"  using namespace llvm; -SPULinuxTargetAsmInfo::SPULinuxTargetAsmInfo() { +SPULinuxTargetAsmInfo::SPULinuxTargetAsmInfo(const Target &T, const StringRef &TT) {    ZeroDirective = "\t.space\t";    SetDirective = "\t.set";    Data64bitsDirective = "\t.quad\t"; diff --git a/llvm/lib/Target/CellSPU/SPUTargetAsmInfo.h b/llvm/lib/Target/CellSPU/SPUTargetAsmInfo.h index 9507ff9e59e..b3c6bdaefd8 100644 --- a/llvm/lib/Target/CellSPU/SPUTargetAsmInfo.h +++ b/llvm/lib/Target/CellSPU/SPUTargetAsmInfo.h @@ -17,9 +17,11 @@  #include "llvm/Target/TargetAsmInfo.h"  namespace llvm { - +  class Target; +  class StringRef; +      struct SPULinuxTargetAsmInfo : public TargetAsmInfo { -    explicit SPULinuxTargetAsmInfo(); +    explicit SPULinuxTargetAsmInfo(const Target &T, const StringRef &TT);    };  } // namespace llvm diff --git a/llvm/lib/Target/CellSPU/SPUTargetMachine.cpp b/llvm/lib/Target/CellSPU/SPUTargetMachine.cpp index 85dda310d28..b904b9559d0 100644 --- a/llvm/lib/Target/CellSPU/SPUTargetMachine.cpp +++ b/llvm/lib/Target/CellSPU/SPUTargetMachine.cpp @@ -25,6 +25,7 @@ using namespace llvm;  extern "C" void LLVMInitializeCellSPUTarget() {     // Register the target.    RegisterTargetMachine<SPUTargetMachine> X(TheCellSPUTarget); +  RegisterAsmInfo<SPULinuxTargetAsmInfo> Y(TheCellSPUTarget);  }  const std::pair<unsigned, int> * @@ -33,10 +34,6 @@ SPUFrameInfo::getCalleeSaveSpillSlots(unsigned &NumEntries) const {    return &LR[0];  } -const TargetAsmInfo *SPUTargetMachine::createTargetAsmInfo() const { -  return new SPULinuxTargetAsmInfo(); -} -  SPUTargetMachine::SPUTargetMachine(const Target &T, const std::string &TT,                                     const std::string &FS)    : LLVMTargetMachine(T, TT), diff --git a/llvm/lib/Target/CellSPU/SPUTargetMachine.h b/llvm/lib/Target/CellSPU/SPUTargetMachine.h index a0e71307493..9fdcfe9ab61 100644 --- a/llvm/lib/Target/CellSPU/SPUTargetMachine.h +++ b/llvm/lib/Target/CellSPU/SPUTargetMachine.h @@ -35,10 +35,6 @@ class SPUTargetMachine : public LLVMTargetMachine {    SPUFrameInfo        FrameInfo;    SPUTargetLowering   TLInfo;    InstrItineraryData  InstrItins; - -protected: -  virtual const TargetAsmInfo *createTargetAsmInfo() const; -  public:    SPUTargetMachine(const Target &T, const std::string &TT,                     const std::string &FS); diff --git a/llvm/lib/Target/MSP430/MSP430AsmPrinter.cpp b/llvm/lib/Target/MSP430/MSP430AsmPrinter.cpp index 6209fc4c0a1..fd8c7d1715e 100644 --- a/llvm/lib/Target/MSP430/MSP430AsmPrinter.cpp +++ b/llvm/lib/Target/MSP430/MSP430AsmPrinter.cpp @@ -15,6 +15,7 @@  #define DEBUG_TYPE "asm-printer"  #include "MSP430.h"  #include "MSP430InstrInfo.h" +#include "MSP430TargetAsmInfo.h"  #include "MSP430TargetMachine.h"  #include "llvm/Constants.h"  #include "llvm/DerivedTypes.h" @@ -25,7 +26,6 @@  #include "llvm/CodeGen/MachineFunctionPass.h"  #include "llvm/CodeGen/MachineConstantPool.h"  #include "llvm/CodeGen/MachineInstr.h" -#include "llvm/Target/TargetAsmInfo.h"  #include "llvm/Target/TargetData.h"  #include "llvm/Target/TargetLoweringObjectFile.h"  #include "llvm/Target/TargetRegistry.h" @@ -246,4 +246,5 @@ extern "C" void LLVMInitializeMSP430Target() {    // Register the target.    RegisterTargetMachine<MSP430TargetMachine> X(TheMSP430Target);    RegisterAsmPrinter<MSP430AsmPrinter> Y(TheMSP430Target); +  RegisterAsmInfo<MSP430TargetAsmInfo> Z(TheMSP430Target);  } diff --git a/llvm/lib/Target/MSP430/MSP430TargetAsmInfo.cpp b/llvm/lib/Target/MSP430/MSP430TargetAsmInfo.cpp index 1aae9f259d1..56560d6c1e7 100644 --- a/llvm/lib/Target/MSP430/MSP430TargetAsmInfo.cpp +++ b/llvm/lib/Target/MSP430/MSP430TargetAsmInfo.cpp @@ -14,6 +14,6 @@  #include "MSP430TargetAsmInfo.h"  using namespace llvm; -MSP430TargetAsmInfo::MSP430TargetAsmInfo() { +MSP430TargetAsmInfo::MSP430TargetAsmInfo(const Target &T, const StringRef &TT) {    AlignmentIsInBytes = false;  } diff --git a/llvm/lib/Target/MSP430/MSP430TargetAsmInfo.h b/llvm/lib/Target/MSP430/MSP430TargetAsmInfo.h index 8b4580c5313..510e2390f80 100644 --- a/llvm/lib/Target/MSP430/MSP430TargetAsmInfo.h +++ b/llvm/lib/Target/MSP430/MSP430TargetAsmInfo.h @@ -17,8 +17,10 @@  #include "llvm/Target/TargetAsmInfo.h"  namespace llvm { +  class Target; +  class StringRef;    struct MSP430TargetAsmInfo : public TargetAsmInfo { -    explicit MSP430TargetAsmInfo(); +    explicit MSP430TargetAsmInfo(const Target &T, const StringRef &TT);    };  } // namespace llvm diff --git a/llvm/lib/Target/MSP430/MSP430TargetMachine.cpp b/llvm/lib/Target/MSP430/MSP430TargetMachine.cpp index f34e3db32b9..56495e6b21b 100644 --- a/llvm/lib/Target/MSP430/MSP430TargetMachine.cpp +++ b/llvm/lib/Target/MSP430/MSP430TargetMachine.cpp @@ -29,9 +29,6 @@ MSP430TargetMachine::MSP430TargetMachine(const Target &T,    InstrInfo(*this), TLInfo(*this),    FrameInfo(TargetFrameInfo::StackGrowsDown, 2, -2) { } -const TargetAsmInfo *MSP430TargetMachine::createTargetAsmInfo() const { -  return new MSP430TargetAsmInfo(); -}  bool MSP430TargetMachine::addInstSelector(PassManagerBase &PM,                                            CodeGenOpt::Level OptLevel) { diff --git a/llvm/lib/Target/MSP430/MSP430TargetMachine.h b/llvm/lib/Target/MSP430/MSP430TargetMachine.h index 44cdd54239d..d38614018c8 100644 --- a/llvm/lib/Target/MSP430/MSP430TargetMachine.h +++ b/llvm/lib/Target/MSP430/MSP430TargetMachine.h @@ -37,9 +37,6 @@ class MSP430TargetMachine : public LLVMTargetMachine {    // any MSP430 specific FrameInfo class.    TargetFrameInfo       FrameInfo; -protected: -  virtual const TargetAsmInfo *createTargetAsmInfo() const; -  public:    MSP430TargetMachine(const Target &T, const std::string &TT,                        const std::string &FS); diff --git a/llvm/lib/Target/Mips/MipsTargetAsmInfo.cpp b/llvm/lib/Target/Mips/MipsTargetAsmInfo.cpp index f5871726459..3046f33ac04 100644 --- a/llvm/lib/Target/Mips/MipsTargetAsmInfo.cpp +++ b/llvm/lib/Target/Mips/MipsTargetAsmInfo.cpp @@ -14,7 +14,7 @@  #include "MipsTargetAsmInfo.h"  using namespace llvm; -MipsTargetAsmInfo::MipsTargetAsmInfo() { +MipsTargetAsmInfo::MipsTargetAsmInfo(const Target &T, const StringRef &TT) {    AlignmentIsInBytes          = false;    COMMDirectiveTakesAlignment = true;    Data16bitsDirective         = "\t.half\t"; diff --git a/llvm/lib/Target/Mips/MipsTargetAsmInfo.h b/llvm/lib/Target/Mips/MipsTargetAsmInfo.h index 32e98df87b5..fbb02362893 100644 --- a/llvm/lib/Target/Mips/MipsTargetAsmInfo.h +++ b/llvm/lib/Target/Mips/MipsTargetAsmInfo.h @@ -17,9 +17,12 @@  #include "llvm/Target/TargetAsmInfo.h"  namespace llvm { +  class Target; +  class StringRef; +      class MipsTargetAsmInfo : public TargetAsmInfo {    public: -    explicit MipsTargetAsmInfo(); +    explicit MipsTargetAsmInfo(const Target &T, const StringRef &TT);    };  } // namespace llvm diff --git a/llvm/lib/Target/Mips/MipsTargetMachine.cpp b/llvm/lib/Target/Mips/MipsTargetMachine.cpp index 546c834c080..c09b6064c39 100644 --- a/llvm/lib/Target/Mips/MipsTargetMachine.cpp +++ b/llvm/lib/Target/Mips/MipsTargetMachine.cpp @@ -22,10 +22,8 @@ extern "C" void LLVMInitializeMipsTarget() {    // Register the target.    RegisterTargetMachine<MipsTargetMachine> X(TheMipsTarget);    RegisterTargetMachine<MipselTargetMachine> Y(TheMipselTarget); -} - -const TargetAsmInfo *MipsTargetMachine::createTargetAsmInfo() const { -  return new MipsTargetAsmInfo(); +  RegisterAsmInfo<MipsTargetAsmInfo> A(TheMipsTarget); +  RegisterAsmInfo<MipsTargetAsmInfo> B(TheMipselTarget);  }  // DataLayout --> Big-endian, 32-bit pointer/ABI/alignment diff --git a/llvm/lib/Target/Mips/MipsTargetMachine.h b/llvm/lib/Target/Mips/MipsTargetMachine.h index 5f5de75dab3..c3428be48f5 100644 --- a/llvm/lib/Target/Mips/MipsTargetMachine.h +++ b/llvm/lib/Target/Mips/MipsTargetMachine.h @@ -30,10 +30,6 @@ namespace llvm {      MipsInstrInfo       InstrInfo;      TargetFrameInfo     FrameInfo;      MipsTargetLowering  TLInfo; -   -  protected: -    virtual const TargetAsmInfo *createTargetAsmInfo() const; -        public:      MipsTargetMachine(const Target &T, const std::string &TT,                        const std::string &FS, bool isLittle); diff --git a/llvm/lib/Target/PIC16/PIC16AsmPrinter.cpp b/llvm/lib/Target/PIC16/PIC16AsmPrinter.cpp index 39ebfa44399..a981d837524 100644 --- a/llvm/lib/Target/PIC16/PIC16AsmPrinter.cpp +++ b/llvm/lib/Target/PIC16/PIC16AsmPrinter.cpp @@ -480,4 +480,7 @@ extern "C" void LLVMInitializePIC16Target() {    RegisterTargetMachine<CooperTargetMachine> B(TheCooperTarget);    RegisterAsmPrinter<PIC16AsmPrinter> C(ThePIC16Target);    RegisterAsmPrinter<PIC16AsmPrinter> D(TheCooperTarget); + +  RegisterAsmInfo<PIC16TargetAsmInfo> E(ThePIC16Target); +  RegisterAsmInfo<PIC16TargetAsmInfo> F(TheCooperTarget);  } diff --git a/llvm/lib/Target/PIC16/PIC16TargetAsmInfo.cpp b/llvm/lib/Target/PIC16/PIC16TargetAsmInfo.cpp index fdd1ae008e0..8b302916753 100644 --- a/llvm/lib/Target/PIC16/PIC16TargetAsmInfo.cpp +++ b/llvm/lib/Target/PIC16/PIC16TargetAsmInfo.cpp @@ -19,8 +19,7 @@  #include "PIC16ISelLowering.h"  using namespace llvm; -PIC16TargetAsmInfo:: -PIC16TargetAsmInfo() { +PIC16TargetAsmInfo::PIC16TargetAsmInfo(const Target &T, const StringRef &TT) {    CommentString = ";";    GlobalPrefix = PAN::getTagName(PAN::PREFIX_SYMBOL);    GlobalDirective = "\tglobal\t"; diff --git a/llvm/lib/Target/PIC16/PIC16TargetAsmInfo.h b/llvm/lib/Target/PIC16/PIC16TargetAsmInfo.h index d24aa6bd620..23c5ebced63 100644 --- a/llvm/lib/Target/PIC16/PIC16TargetAsmInfo.h +++ b/llvm/lib/Target/PIC16/PIC16TargetAsmInfo.h @@ -17,12 +17,15 @@  #include "llvm/Target/TargetAsmInfo.h"  namespace llvm { +  class Target; +  class StringRef; +    class PIC16TargetAsmInfo : public TargetAsmInfo {      const char *RomData8bitsDirective;      const char *RomData16bitsDirective;      const char *RomData32bitsDirective;    public:     -    PIC16TargetAsmInfo(); +    PIC16TargetAsmInfo(const Target &T, const StringRef &TT);      virtual const char *getDataASDirective(unsigned size, unsigned AS) const;    }; diff --git a/llvm/lib/Target/PIC16/PIC16TargetMachine.cpp b/llvm/lib/Target/PIC16/PIC16TargetMachine.cpp index d09097c17f3..6af693f11c0 100644 --- a/llvm/lib/Target/PIC16/PIC16TargetMachine.cpp +++ b/llvm/lib/Target/PIC16/PIC16TargetMachine.cpp @@ -36,10 +36,6 @@ CooperTargetMachine::CooperTargetMachine(const Target &T, const std::string &TT,    : PIC16TargetMachine(T, TT, FS, true) {} -const TargetAsmInfo *PIC16TargetMachine::createTargetAsmInfo() const { -  return new PIC16TargetAsmInfo(); -} -  bool PIC16TargetMachine::addInstSelector(PassManagerBase &PM,                                           CodeGenOpt::Level OptLevel) {    // Install an instruction selector. diff --git a/llvm/lib/Target/PIC16/PIC16TargetMachine.h b/llvm/lib/Target/PIC16/PIC16TargetMachine.h index 649c7ea1dc9..51efdb22446 100644 --- a/llvm/lib/Target/PIC16/PIC16TargetMachine.h +++ b/llvm/lib/Target/PIC16/PIC16TargetMachine.h @@ -37,9 +37,6 @@ class PIC16TargetMachine : public LLVMTargetMachine {    // any PIC16 specific FrameInfo class.    TargetFrameInfo       FrameInfo; -protected: -  virtual const TargetAsmInfo *createTargetAsmInfo() const; -  public:    PIC16TargetMachine(const Target &T, const std::string &TT,                       const std::string &FS, bool Cooper = false); diff --git a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp index 07667117a04..41f4699fc06 100644 --- a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp +++ b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp @@ -20,17 +20,25 @@  #include "llvm/Support/FormattedStream.h"  using namespace llvm; +static const TargetAsmInfo *createTargetAsmInfo(const Target &T, +                                                const StringRef &TT) { +  Triple TheTriple(TT); +  bool isPPC64 = TheTriple.getArch() == Triple::ppc64; +  if (TheTriple.getOS() == Triple::Darwin) +    return new PPCDarwinTargetAsmInfo(isPPC64); +  return new PPCLinuxTargetAsmInfo(isPPC64); +   +} +  extern "C" void LLVMInitializePowerPCTarget() {    // Register the targets    RegisterTargetMachine<PPC32TargetMachine> A(ThePPC32Target);      RegisterTargetMachine<PPC64TargetMachine> B(ThePPC64Target); +   +  RegisterAsmInfoFn C(ThePPC32Target, createTargetAsmInfo); +  RegisterAsmInfoFn D(ThePPC64Target, createTargetAsmInfo);  } -const TargetAsmInfo *PPCTargetMachine::createTargetAsmInfo() const { -  if (Subtarget.isDarwin()) -    return new PPCDarwinTargetAsmInfo(Subtarget.isPPC64()); -  return new PPCLinuxTargetAsmInfo(Subtarget.isPPC64()); -}  PPCTargetMachine::PPCTargetMachine(const Target &T, const std::string &TT,                                     const std::string &FS, bool is64Bit) diff --git a/llvm/lib/Target/PowerPC/PPCTargetMachine.h b/llvm/lib/Target/PowerPC/PPCTargetMachine.h index b7ac6ef8bc3..3399ac89188 100644 --- a/llvm/lib/Target/PowerPC/PPCTargetMachine.h +++ b/llvm/lib/Target/PowerPC/PPCTargetMachine.h @@ -39,9 +39,6 @@ class PPCTargetMachine : public LLVMTargetMachine {    InstrItineraryData  InstrItins;    PPCMachOWriterInfo  MachOWriterInfo; -protected: -  virtual const TargetAsmInfo *createTargetAsmInfo() const; -  public:    PPCTargetMachine(const Target &T, const std::string &TT,                     const std::string &FS, bool is64Bit); diff --git a/llvm/lib/Target/Sparc/SparcTargetAsmInfo.cpp b/llvm/lib/Target/Sparc/SparcTargetAsmInfo.cpp index 6ec74e6e4fc..1794ebc5876 100644 --- a/llvm/lib/Target/Sparc/SparcTargetAsmInfo.cpp +++ b/llvm/lib/Target/Sparc/SparcTargetAsmInfo.cpp @@ -15,7 +15,8 @@  #include "llvm/ADT/SmallVector.h"  using namespace llvm; -SparcELFTargetAsmInfo::SparcELFTargetAsmInfo() { +SparcELFTargetAsmInfo::SparcELFTargetAsmInfo(const Target &T, +                                             const StringRef &TT) {    Data16bitsDirective = "\t.half\t";    Data32bitsDirective = "\t.word\t";    Data64bitsDirective = 0;  // .xword is only supported by V9. diff --git a/llvm/lib/Target/Sparc/SparcTargetAsmInfo.h b/llvm/lib/Target/Sparc/SparcTargetAsmInfo.h index 255a2dfb2d1..edf81462428 100644 --- a/llvm/lib/Target/Sparc/SparcTargetAsmInfo.h +++ b/llvm/lib/Target/Sparc/SparcTargetAsmInfo.h @@ -17,9 +17,10 @@  #include "llvm/Target/TargetAsmInfo.h"  namespace llvm { - +  class Target; +  class StringRef;    struct SparcELFTargetAsmInfo : public TargetAsmInfo { -    explicit SparcELFTargetAsmInfo(); +    explicit SparcELFTargetAsmInfo(const Target &T, const StringRef &TT);    };  } // namespace llvm diff --git a/llvm/lib/Target/Sparc/SparcTargetMachine.cpp b/llvm/lib/Target/Sparc/SparcTargetMachine.cpp index c9a3cdd6c7b..505e2b11d59 100644 --- a/llvm/lib/Target/Sparc/SparcTargetMachine.cpp +++ b/llvm/lib/Target/Sparc/SparcTargetMachine.cpp @@ -20,11 +20,8 @@ using namespace llvm;  extern "C" void LLVMInitializeSparcTarget() {    // Register the target.    RegisterTargetMachine<SparcTargetMachine> X(TheSparcTarget); -} +  RegisterAsmInfo<SparcELFTargetAsmInfo> Y(TheSparcTarget); -const TargetAsmInfo *SparcTargetMachine::createTargetAsmInfo() const { -  // FIXME: Handle Solaris subtarget someday :) -  return new SparcELFTargetAsmInfo();  }  /// SparcTargetMachine ctor - Create an ILP32 architecture model diff --git a/llvm/lib/Target/Sparc/SparcTargetMachine.h b/llvm/lib/Target/Sparc/SparcTargetMachine.h index 8cdfba3a50a..cce55105e76 100644 --- a/llvm/lib/Target/Sparc/SparcTargetMachine.h +++ b/llvm/lib/Target/Sparc/SparcTargetMachine.h @@ -29,10 +29,6 @@ class SparcTargetMachine : public LLVMTargetMachine {    SparcTargetLowering TLInfo;    SparcInstrInfo InstrInfo;    TargetFrameInfo FrameInfo; -   -protected: -  virtual const TargetAsmInfo *createTargetAsmInfo() const; -    public:    SparcTargetMachine(const Target &T, const std::string &TT,                       const std::string &FS); diff --git a/llvm/lib/Target/SystemZ/SystemZTargetAsmInfo.cpp b/llvm/lib/Target/SystemZ/SystemZTargetAsmInfo.cpp index a2e15d1d953..fc102124ba4 100644 --- a/llvm/lib/Target/SystemZ/SystemZTargetAsmInfo.cpp +++ b/llvm/lib/Target/SystemZ/SystemZTargetAsmInfo.cpp @@ -14,7 +14,8 @@  #include "SystemZTargetAsmInfo.h"  using namespace llvm; -SystemZTargetAsmInfo::SystemZTargetAsmInfo() { +SystemZTargetAsmInfo::SystemZTargetAsmInfo(const Target &T, +                                           const StringRef &TT) {    AlignmentIsInBytes = true;    PrivateGlobalPrefix = ".L"; diff --git a/llvm/lib/Target/SystemZ/SystemZTargetAsmInfo.h b/llvm/lib/Target/SystemZ/SystemZTargetAsmInfo.h index 672524b5b24..72345c87956 100644 --- a/llvm/lib/Target/SystemZ/SystemZTargetAsmInfo.h +++ b/llvm/lib/Target/SystemZ/SystemZTargetAsmInfo.h @@ -17,9 +17,11 @@  #include "llvm/Target/TargetAsmInfo.h"  namespace llvm { +  class Target; +  class StringRef;    struct SystemZTargetAsmInfo : public TargetAsmInfo { -    explicit SystemZTargetAsmInfo(); +    explicit SystemZTargetAsmInfo(const Target &T, const StringRef &TT);    };  } // namespace llvm diff --git a/llvm/lib/Target/SystemZ/SystemZTargetMachine.cpp b/llvm/lib/Target/SystemZ/SystemZTargetMachine.cpp index cfd1f39cd35..48ea5f5ebd7 100644 --- a/llvm/lib/Target/SystemZ/SystemZTargetMachine.cpp +++ b/llvm/lib/Target/SystemZ/SystemZTargetMachine.cpp @@ -6,9 +6,6 @@  // License. See LICENSE.TXT for details.  //  //===----------------------------------------------------------------------===// -// -// -//===----------------------------------------------------------------------===//  #include "SystemZTargetAsmInfo.h"  #include "SystemZTargetMachine.h" @@ -20,10 +17,7 @@ using namespace llvm;  extern "C" void LLVMInitializeSystemZTarget() {    // Register the target.    RegisterTargetMachine<SystemZTargetMachine> X(TheSystemZTarget); -} - -const TargetAsmInfo *SystemZTargetMachine::createTargetAsmInfo() const { -  return new SystemZTargetAsmInfo(); +  RegisterAsmInfo<SystemZTargetAsmInfo> Y(TheSystemZTarget);  }  /// SystemZTargetMachine ctor - Create an ILP64 architecture model diff --git a/llvm/lib/Target/SystemZ/SystemZTargetMachine.h b/llvm/lib/Target/SystemZ/SystemZTargetMachine.h index 6626fd0e50f..551aeb5a3e4 100644 --- a/llvm/lib/Target/SystemZ/SystemZTargetMachine.h +++ b/llvm/lib/Target/SystemZ/SystemZTargetMachine.h @@ -36,10 +36,6 @@ class SystemZTargetMachine : public LLVMTargetMachine {    // SystemZ does not have any call stack frame, therefore not having    // any SystemZ specific FrameInfo class.    TargetFrameInfo       FrameInfo; - -protected: -  virtual const TargetAsmInfo *createTargetAsmInfo() const; -  public:    SystemZTargetMachine(const Target &T, const std::string &TT,                         const std::string &FS); diff --git a/llvm/lib/Target/X86/X86TargetAsmInfo.cpp b/llvm/lib/Target/X86/X86TargetAsmInfo.cpp index 859ced7728f..d978eb179de 100644 --- a/llvm/lib/Target/X86/X86TargetAsmInfo.cpp +++ b/llvm/lib/Target/X86/X86TargetAsmInfo.cpp @@ -13,6 +13,7 @@  #include "X86TargetAsmInfo.h"  #include "X86TargetMachine.h" +#include "llvm/ADT/Triple.h"  #include "llvm/Support/CommandLine.h"  using namespace llvm; @@ -42,12 +43,11 @@ static const char *const x86_asm_table[] = {    "{cc}", "cc",    0,0}; -X86DarwinTargetAsmInfo::X86DarwinTargetAsmInfo(const X86TargetMachine &TM) { +X86DarwinTargetAsmInfo::X86DarwinTargetAsmInfo(const Triple &Triple) {    AsmTransCBE = x86_asm_table;    AssemblerDialect = AsmWriterFlavor; -  const X86Subtarget *Subtarget = &TM.getSubtarget<X86Subtarget>(); -  bool is64Bit = Subtarget->is64Bit(); +  bool is64Bit = Triple.getArch() == Triple::x86_64;    TextAlignFillValue = 0x90; @@ -55,7 +55,7 @@ X86DarwinTargetAsmInfo::X86DarwinTargetAsmInfo(const X86TargetMachine &TM) {      Data64bitsDirective = 0;       // we can't emit a 64-bit unit    // Leopard and above support aligned common symbols. -  COMMDirectiveTakesAlignment = (Subtarget->getDarwinVers() >= 9); +  COMMDirectiveTakesAlignment = Triple.getDarwinMajorNumber() >= 9;    if (is64Bit) {      PersonalityPrefix = ""; @@ -76,7 +76,7 @@ X86DarwinTargetAsmInfo::X86DarwinTargetAsmInfo(const X86TargetMachine &TM) {    AbsoluteEHSectionOffsets = false;  } -X86ELFTargetAsmInfo::X86ELFTargetAsmInfo(const X86TargetMachine &TM) { +X86ELFTargetAsmInfo::X86ELFTargetAsmInfo(const Triple &Triple) {    AsmTransCBE = x86_asm_table;    AssemblerDialect = AsmWriterFlavor; @@ -97,17 +97,17 @@ X86ELFTargetAsmInfo::X86ELFTargetAsmInfo(const X86TargetMachine &TM) {    AbsoluteEHSectionOffsets = false;    // On Linux we must declare when we can use a non-executable stack. -  if (TM.getSubtarget<X86Subtarget>().isLinux()) +  if (Triple.getOS() == Triple::Linux)      NonexecutableStackDirective = "\t.section\t.note.GNU-stack,\"\",@progbits";  } -X86COFFTargetAsmInfo::X86COFFTargetAsmInfo(const X86TargetMachine &TM) { +X86COFFTargetAsmInfo::X86COFFTargetAsmInfo(const Triple &Triple) {    AsmTransCBE = x86_asm_table;    AssemblerDialect = AsmWriterFlavor;  } -X86WinTargetAsmInfo::X86WinTargetAsmInfo(const X86TargetMachine &TM) { +X86WinTargetAsmInfo::X86WinTargetAsmInfo(const Triple &Triple) {    AsmTransCBE = x86_asm_table;    AssemblerDialect = AsmWriterFlavor; diff --git a/llvm/lib/Target/X86/X86TargetAsmInfo.h b/llvm/lib/Target/X86/X86TargetAsmInfo.h index 8879b4ba10e..91de3682591 100644 --- a/llvm/lib/Target/X86/X86TargetAsmInfo.h +++ b/llvm/lib/Target/X86/X86TargetAsmInfo.h @@ -14,27 +14,27 @@  #ifndef X86TARGETASMINFO_H  #define X86TARGETASMINFO_H -#include "X86TargetMachine.h"  #include "llvm/Target/TargetAsmInfo.h"  #include "llvm/Target/COFFTargetAsmInfo.h"  #include "llvm/Target/DarwinTargetAsmInfo.h"  namespace llvm { +  class Triple;    struct X86DarwinTargetAsmInfo : public DarwinTargetAsmInfo { -    explicit X86DarwinTargetAsmInfo(const X86TargetMachine &TM); +    explicit X86DarwinTargetAsmInfo(const Triple &Triple);    };    struct X86ELFTargetAsmInfo : public TargetAsmInfo { -    explicit X86ELFTargetAsmInfo(const X86TargetMachine &TM); +    explicit X86ELFTargetAsmInfo(const Triple &Triple);    };    struct X86COFFTargetAsmInfo : public COFFTargetAsmInfo { -    explicit X86COFFTargetAsmInfo(const X86TargetMachine &TM); +    explicit X86COFFTargetAsmInfo(const Triple &Triple);    };    struct X86WinTargetAsmInfo : public TargetAsmInfo { -    explicit X86WinTargetAsmInfo(const X86TargetMachine &TM); +    explicit X86WinTargetAsmInfo(const Triple &Triple);    };  } // namespace llvm diff --git a/llvm/lib/Target/X86/X86TargetMachine.cpp b/llvm/lib/Target/X86/X86TargetMachine.cpp index 76d0165c86e..8c4e5d02bec 100644 --- a/llvm/lib/Target/X86/X86TargetMachine.cpp +++ b/llvm/lib/Target/X86/X86TargetMachine.cpp @@ -22,27 +22,34 @@  #include "llvm/Target/TargetRegistry.h"  using namespace llvm; +static const TargetAsmInfo *createTargetAsmInfo(const Target &T, +                                                const StringRef &TT) { +  Triple TheTriple(TT); +  switch (TheTriple.getOS()) { +  case Triple::Darwin: +    return new X86DarwinTargetAsmInfo(TheTriple); +  case Triple::MinGW32: +  case Triple::MinGW64: +  case Triple::Cygwin: +    return new X86COFFTargetAsmInfo(TheTriple); +  case Triple::Win32: +    return new X86WinTargetAsmInfo(TheTriple); +  default: +    return new X86ELFTargetAsmInfo(TheTriple); +  } +} +  extern "C" void LLVMInitializeX86Target() {     // Register the target.    RegisterTargetMachine<X86_32TargetMachine> X(TheX86_32Target);    RegisterTargetMachine<X86_64TargetMachine> Y(TheX86_64Target); -} -const TargetAsmInfo *X86TargetMachine::createTargetAsmInfo() const { -  switch (Subtarget.TargetType) { -  default: llvm_unreachable("unknown subtarget type"); -  case X86Subtarget::isDarwin: -    return new X86DarwinTargetAsmInfo(*this); -  case X86Subtarget::isELF: -    return new X86ELFTargetAsmInfo(*this); -  case X86Subtarget::isMingw: -  case X86Subtarget::isCygwin: -    return new X86COFFTargetAsmInfo(*this); -  case X86Subtarget::isWindows: -    return new X86WinTargetAsmInfo(*this); -  } +  // Register the target asm info. +  RegisterAsmInfoFn A(TheX86_32Target, createTargetAsmInfo); +  RegisterAsmInfoFn B(TheX86_64Target, createTargetAsmInfo);  } +  X86_32TargetMachine::X86_32TargetMachine(const Target &T, const std::string &TT,                                           const std::string &FS)    : X86TargetMachine(T, TT, FS, false) { diff --git a/llvm/lib/Target/X86/X86TargetMachine.h b/llvm/lib/Target/X86/X86TargetMachine.h index d6187c773c5..b538408e8a4 100644 --- a/llvm/lib/Target/X86/X86TargetMachine.h +++ b/llvm/lib/Target/X86/X86TargetMachine.h @@ -38,9 +38,6 @@ class X86TargetMachine : public LLVMTargetMachine {    X86ELFWriterInfo  ELFWriterInfo;    Reloc::Model      DefRelocModel; // Reloc model before it's overridden. -protected: -  virtual const TargetAsmInfo *createTargetAsmInfo() const; -  public:    X86TargetMachine(const Target &T, const std::string &TT,                      const std::string &FS, bool is64Bit); diff --git a/llvm/lib/Target/XCore/XCoreAsmPrinter.cpp b/llvm/lib/Target/XCore/XCoreAsmPrinter.cpp index 4604b74c833..2b706ee3f86 100644 --- a/llvm/lib/Target/XCore/XCoreAsmPrinter.cpp +++ b/llvm/lib/Target/XCore/XCoreAsmPrinter.cpp @@ -16,6 +16,7 @@  #include "XCore.h"  #include "XCoreInstrInfo.h"  #include "XCoreSubtarget.h" +#include "XCoreTargetAsmInfo.h"  #include "XCoreTargetMachine.h"  #include "llvm/Constants.h"  #include "llvm/DerivedTypes.h" @@ -26,7 +27,6 @@  #include "llvm/CodeGen/MachineFunctionPass.h"  #include "llvm/CodeGen/MachineConstantPool.h"  #include "llvm/CodeGen/MachineInstr.h" -#include "llvm/Target/TargetAsmInfo.h"  #include "llvm/Target/TargetData.h"  #include "llvm/Target/TargetLoweringObjectFile.h"  #include "llvm/Target/TargetRegistry.h" @@ -380,4 +380,5 @@ bool XCoreAsmPrinter::doInitialization(Module &M) {  extern "C" void LLVMInitializeXCoreTarget() {     RegisterTargetMachine<XCoreTargetMachine> X(TheXCoreTarget);    RegisterAsmPrinter<XCoreAsmPrinter> Y(TheXCoreTarget); +  RegisterAsmInfo<XCoreTargetAsmInfo> Z(TheXCoreTarget);  } diff --git a/llvm/lib/Target/XCore/XCoreTargetAsmInfo.cpp b/llvm/lib/Target/XCore/XCoreTargetAsmInfo.cpp index eebd6c96ed5..9cd87a57551 100644 --- a/llvm/lib/Target/XCore/XCoreTargetAsmInfo.cpp +++ b/llvm/lib/Target/XCore/XCoreTargetAsmInfo.cpp @@ -10,7 +10,7 @@  #include "XCoreTargetAsmInfo.h"  using namespace llvm; -XCoreTargetAsmInfo::XCoreTargetAsmInfo() { +XCoreTargetAsmInfo::XCoreTargetAsmInfo(const Target &T, const StringRef &TT) {    SupportsDebugInformation = true;    Data16bitsDirective = "\t.short\t";    Data32bitsDirective = "\t.long\t"; diff --git a/llvm/lib/Target/XCore/XCoreTargetAsmInfo.h b/llvm/lib/Target/XCore/XCoreTargetAsmInfo.h index c4f71e43137..784288633ff 100644 --- a/llvm/lib/Target/XCore/XCoreTargetAsmInfo.h +++ b/llvm/lib/Target/XCore/XCoreTargetAsmInfo.h @@ -17,9 +17,11 @@  #include "llvm/Target/TargetAsmInfo.h"  namespace llvm { +  class Target; +  class StringRef;    class XCoreTargetAsmInfo : public TargetAsmInfo {    public: -    explicit XCoreTargetAsmInfo(); +    explicit XCoreTargetAsmInfo(const Target &T, const StringRef &TT);    };  } // namespace llvm diff --git a/llvm/lib/Target/XCore/XCoreTargetMachine.cpp b/llvm/lib/Target/XCore/XCoreTargetMachine.cpp index 0a5daf8792e..57176cca2b6 100644 --- a/llvm/lib/Target/XCore/XCoreTargetMachine.cpp +++ b/llvm/lib/Target/XCore/XCoreTargetMachine.cpp @@ -17,10 +17,6 @@  #include "llvm/PassManager.h"  using namespace llvm; -const TargetAsmInfo *XCoreTargetMachine::createTargetAsmInfo() const { -  return new XCoreTargetAsmInfo(); -} -  /// XCoreTargetMachine ctor - Create an ILP32 architecture model  ///  XCoreTargetMachine::XCoreTargetMachine(const Target &T, const std::string &TT, diff --git a/llvm/lib/Target/XCore/XCoreTargetMachine.h b/llvm/lib/Target/XCore/XCoreTargetMachine.h index 136cea29e75..b0b1464dbe0 100644 --- a/llvm/lib/Target/XCore/XCoreTargetMachine.h +++ b/llvm/lib/Target/XCore/XCoreTargetMachine.h @@ -29,10 +29,6 @@ class XCoreTargetMachine : public LLVMTargetMachine {    XCoreInstrInfo InstrInfo;    XCoreFrameInfo FrameInfo;    XCoreTargetLowering TLInfo; - -protected: -  virtual const TargetAsmInfo *createTargetAsmInfo() const; -  public:    XCoreTargetMachine(const Target &T, const std::string &TT,                       const std::string &FS);  | 

