diff options
Diffstat (limited to 'llvm')
13 files changed, 78 insertions, 68 deletions
diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp index 59e1b8eb810..26ef1827e7b 100644 --- a/llvm/lib/MC/ELFObjectWriter.cpp +++ b/llvm/lib/MC/ELFObjectWriter.cpp @@ -29,7 +29,7 @@  #include "llvm/ADT/Statistic.h"  #include "../Target/X86/X86FixupKinds.h" -#include "../Target/ARM/ARMFixupKinds.h" +#include "../Target/ARM/MCTargetDesc/ARMFixupKinds.h"  #include <vector>  using namespace llvm; diff --git a/llvm/lib/Target/ARM/ARM.h b/llvm/lib/Target/ARM/ARM.h index 08dc340f854..a8c0e70b5a0 100644 --- a/llvm/lib/Target/ARM/ARM.h +++ b/llvm/lib/Target/ARM/ARM.h @@ -15,7 +15,7 @@  #ifndef TARGET_ARM_H  #define TARGET_ARM_H -#include "ARMBaseInfo.h" +#include "MCTargetDesc/ARMBaseInfo.h"  #include "MCTargetDesc/ARMMCTargetDesc.h"  #include "llvm/Support/DataTypes.h"  #include "llvm/Support/ErrorHandling.h" @@ -37,12 +37,6 @@ class MCSubtargetInfo;  class TargetAsmBackend;  class formatted_raw_ostream; -MCCodeEmitter *createARMMCCodeEmitter(const MCInstrInfo &MCII, -                                      const MCSubtargetInfo &STI, -                                      MCContext &Ctx); - -TargetAsmBackend *createARMAsmBackend(const Target &, const std::string &); -  FunctionPass *createARMISelDag(ARMBaseTargetMachine &TM,                                 CodeGenOpt::Level OptLevel); @@ -61,12 +55,6 @@ FunctionPass *createThumb2SizeReductionPass();  void LowerARMMachineInstrToMCInst(const MachineInstr *MI, MCInst &OutMI,                                    ARMAsmPrinter &AP); -/// createARMMachObjectWriter - Construct an ARM Mach-O object writer. -MCObjectWriter *createARMMachObjectWriter(raw_ostream &OS, -                                          bool Is64Bit, -                                          uint32_t CPUType, -                                          uint32_t CPUSubtype); -  } // end namespace llvm;  #endif diff --git a/llvm/lib/Target/ARM/ARMTargetMachine.cpp b/llvm/lib/Target/ARM/ARMTargetMachine.cpp index 3758b0ddf0f..b7a3fe12a44 100644 --- a/llvm/lib/Target/ARM/ARMTargetMachine.cpp +++ b/llvm/lib/Target/ARM/ARMTargetMachine.cpp @@ -21,43 +21,10 @@  #include "llvm/Target/TargetRegistry.h"  using namespace llvm; -// This is duplicated code. Refactor this. -static MCStreamer *createMCStreamer(const Target &T, const std::string &TT, -                                    MCContext &Ctx, TargetAsmBackend &TAB, -                                    raw_ostream &OS, -                                    MCCodeEmitter *Emitter, -                                    bool RelaxAll, -                                    bool NoExecStack) { -  Triple TheTriple(TT); - -  if (TheTriple.isOSDarwin()) -    return createMachOStreamer(Ctx, TAB, OS, Emitter, RelaxAll); - -  if (TheTriple.isOSWindows()) { -    llvm_unreachable("ARM does not support Windows COFF format"); -    return NULL; -  } - -  return createELFStreamer(Ctx, TAB, OS, Emitter, RelaxAll, NoExecStack); -} -  extern "C" void LLVMInitializeARMTarget() {    // Register the target.    RegisterTargetMachine<ARMTargetMachine> X(TheARMTarget);    RegisterTargetMachine<ThumbTargetMachine> Y(TheThumbTarget); - -  // Register the MC Code Emitter -  TargetRegistry::RegisterCodeEmitter(TheARMTarget, createARMMCCodeEmitter); -  TargetRegistry::RegisterCodeEmitter(TheThumbTarget, createARMMCCodeEmitter); - -  // Register the asm backend. -  TargetRegistry::RegisterAsmBackend(TheARMTarget, createARMAsmBackend); -  TargetRegistry::RegisterAsmBackend(TheThumbTarget, createARMAsmBackend); - -  // Register the object streamer. -  TargetRegistry::RegisterObjectStreamer(TheARMTarget, createMCStreamer); -  TargetRegistry::RegisterObjectStreamer(TheThumbTarget, createMCStreamer); -  }  /// TargetMachine ctor - Create an ARM architecture model. diff --git a/llvm/lib/Target/ARM/CMakeLists.txt b/llvm/lib/Target/ARM/CMakeLists.txt index f60e403c84f..c015c126901 100644 --- a/llvm/lib/Target/ARM/CMakeLists.txt +++ b/llvm/lib/Target/ARM/CMakeLists.txt @@ -15,7 +15,6 @@ tablegen(ARMGenEDInfo.inc -gen-enhanced-disassembly-info)  tablegen(ARMGenDecoderTables.inc -gen-arm-decoder)  add_llvm_target(ARMCodeGen -  ARMAsmBackend.cpp    ARMAsmPrinter.cpp    ARMBaseInstrInfo.cpp    ARMBaseRegisterInfo.cpp @@ -32,8 +31,6 @@ add_llvm_target(ARMCodeGen    ARMISelLowering.cpp    ARMInstrInfo.cpp    ARMJITInfo.cpp -  ARMMachObjectWriter.cpp -  ARMMCCodeEmitter.cpp    ARMLoadStoreOptimizer.cpp    ARMMCInstLower.cpp    ARMRegisterInfo.cpp diff --git a/llvm/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp b/llvm/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp index 1bd92b52f1e..c130d0e8fa2 100644 --- a/llvm/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp +++ b/llvm/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp @@ -12,8 +12,8 @@  //===----------------------------------------------------------------------===//  #define DEBUG_TYPE "asm-printer" -#include "ARMBaseInfo.h"  #include "ARMInstPrinter.h" +#include "MCTargetDesc/ARMBaseInfo.h"  #include "MCTargetDesc/ARMAddressingModes.h"  #include "llvm/MC/MCInst.h"  #include "llvm/MC/MCAsmInfo.h" diff --git a/llvm/lib/Target/ARM/ARMAsmBackend.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp index fa6e67807ae..9b293c13181 100644 --- a/llvm/lib/Target/ARM/ARMAsmBackend.cpp +++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp @@ -7,8 +7,8 @@  //  //===----------------------------------------------------------------------===// -#include "ARM.h" -#include "ARMFixupKinds.h" +#include "MCTargetDesc/ARMBaseInfo.h" +#include "MCTargetDesc/ARMFixupKinds.h"  #include "MCTargetDesc/ARMAddressingModes.h"  #include "llvm/ADT/Twine.h"  #include "llvm/MC/MCAssembler.h" @@ -24,7 +24,6 @@  #include "llvm/Support/ErrorHandling.h"  #include "llvm/Support/raw_ostream.h"  #include "llvm/Target/TargetAsmBackend.h" -#include "llvm/Target/TargetRegistry.h"  using namespace llvm;  namespace { diff --git a/llvm/lib/Target/ARM/ARMBaseInfo.h b/llvm/lib/Target/ARM/MCTargetDesc/ARMBaseInfo.h index aa7483cc31c..11e8fa8fdc8 100644 --- a/llvm/lib/Target/ARM/ARMBaseInfo.h +++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMBaseInfo.h @@ -17,7 +17,7 @@  #ifndef ARMBASEINFO_H  #define ARMBASEINFO_H -#include "MCTargetDesc/ARMMCTargetDesc.h" +#include "ARMMCTargetDesc.h"  #include "llvm/Support/ErrorHandling.h"  // Note that the following auto-generated files only defined enum types, and diff --git a/llvm/lib/Target/ARM/ARMFixupKinds.h b/llvm/lib/Target/ARM/MCTargetDesc/ARMFixupKinds.h index 350c92decdc..350c92decdc 100644 --- a/llvm/lib/Target/ARM/ARMFixupKinds.h +++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMFixupKinds.h diff --git a/llvm/lib/Target/ARM/ARMMCCodeEmitter.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp index d7bd62443b2..57439df1530 100644 --- a/llvm/lib/Target/ARM/ARMMCCodeEmitter.cpp +++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp @@ -12,15 +12,16 @@  //===----------------------------------------------------------------------===//  #define DEBUG_TYPE "mccodeemitter" -#include "ARM.h" -#include "ARMFixupKinds.h" -#include "ARMInstrInfo.h"  #include "MCTargetDesc/ARMAddressingModes.h" +#include "MCTargetDesc/ARMBaseInfo.h" +#include "MCTargetDesc/ARMFixupKinds.h"  #include "MCTargetDesc/ARMMCExpr.h" +#include "MCTargetDesc/ARMMCTargetDesc.h"  #include "llvm/MC/MCCodeEmitter.h"  #include "llvm/MC/MCExpr.h"  #include "llvm/MC/MCInst.h"  #include "llvm/MC/MCInstrInfo.h" +#include "llvm/MC/MCRegisterInfo.h"  #include "llvm/MC/MCSubtargetInfo.h"  #include "llvm/ADT/APFloat.h"  #include "llvm/ADT/Statistic.h" @@ -285,9 +286,6 @@ public:    unsigned getMsbOpValue(const MCInst &MI, unsigned Op,                           SmallVectorImpl<MCFixup> &Fixups) const; -  unsigned getSsatBitPosValue(const MCInst &MI, unsigned Op, -                              SmallVectorImpl<MCFixup> &Fixups) const; -    unsigned getRegisterListOpValue(const MCInst &MI, unsigned Op,                                    SmallVectorImpl<MCFixup> &Fixups) const;    unsigned getAddrMode6AddressOpValue(const MCInst &MI, unsigned Op, @@ -1170,6 +1168,11 @@ getMsbOpValue(const MCInst &MI, unsigned Op,    return msb;  } +namespace llvm { +  // FIXME: TableGen this? +  extern MCRegisterClass ARMMCRegisterClasses[]; // In ARMGenRegisterInfo.inc. +} +  unsigned ARMMCCodeEmitter::  getRegisterListOpValue(const MCInst &MI, unsigned Op,                         SmallVectorImpl<MCFixup> &Fixups) const { @@ -1180,8 +1183,8 @@ getRegisterListOpValue(const MCInst &MI, unsigned Op,    // LDM/STM:    //   {15-0}  = Bitfield of GPRs.    unsigned Reg = MI.getOperand(Op).getReg(); -  bool SPRRegs = ARM::SPRRegClass.contains(Reg); -  bool DPRRegs = ARM::DPRRegClass.contains(Reg); +  bool SPRRegs = llvm::ARMMCRegisterClasses[ARM::SPRRegClassID].contains(Reg); +  bool DPRRegs = llvm::ARMMCRegisterClasses[ARM::DPRRegClassID].contains(Reg);    unsigned Binary = 0; diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.cpp index dc8103d4912..4bbd991751e 100644 --- a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.cpp +++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.cpp @@ -15,8 +15,10 @@  #include "ARMMCAsmInfo.h"  #include "llvm/MC/MCInstrInfo.h"  #include "llvm/MC/MCRegisterInfo.h" +#include "llvm/MC/MCStreamer.h"  #include "llvm/MC/MCSubtargetInfo.h"  #include "llvm/Target/TargetRegistry.h" +#include "llvm/Support/ErrorHandling.h"  #define GET_REGINFO_MC_DESC  #include "ARMGenRegisterInfo.inc" @@ -119,8 +121,8 @@ static MCAsmInfo *createARMMCAsmInfo(const Target &T, StringRef TT) {    return new ARMELFMCAsmInfo();  } -MCCodeGenInfo *createARMMCCodeGenInfo(StringRef TT, Reloc::Model RM, -                                      CodeModel::Model CM) { +static MCCodeGenInfo *createARMMCCodeGenInfo(StringRef TT, Reloc::Model RM, +                                             CodeModel::Model CM) {    MCCodeGenInfo *X = new MCCodeGenInfo();    if (RM == Reloc::Default)      RM = Reloc::DynamicNoPIC; @@ -128,6 +130,27 @@ MCCodeGenInfo *createARMMCCodeGenInfo(StringRef TT, Reloc::Model RM,    return X;  } +// This is duplicated code. Refactor this. +static MCStreamer *createMCStreamer(const Target &T, const std::string &TT, +                                    MCContext &Ctx, TargetAsmBackend &TAB, +                                    raw_ostream &OS, +                                    MCCodeEmitter *Emitter, +                                    bool RelaxAll, +                                    bool NoExecStack) { +  Triple TheTriple(TT); + +  if (TheTriple.isOSDarwin()) +    return createMachOStreamer(Ctx, TAB, OS, Emitter, RelaxAll); + +  if (TheTriple.isOSWindows()) { +    llvm_unreachable("ARM does not support Windows COFF format"); +    return NULL; +  } + +  return createELFStreamer(Ctx, TAB, OS, Emitter, RelaxAll, NoExecStack); +} + +  // Force static initialization.  extern "C" void LLVMInitializeARMTargetMC() {    // Register the MC asm info. @@ -151,4 +174,16 @@ extern "C" void LLVMInitializeARMTargetMC() {                                            ARM_MC::createARMMCSubtargetInfo);    TargetRegistry::RegisterMCSubtargetInfo(TheThumbTarget,                                            ARM_MC::createARMMCSubtargetInfo); + +  // Register the MC Code Emitter +  TargetRegistry::RegisterCodeEmitter(TheARMTarget, createARMMCCodeEmitter); +  TargetRegistry::RegisterCodeEmitter(TheThumbTarget, createARMMCCodeEmitter); + +  // Register the asm backend. +  TargetRegistry::RegisterAsmBackend(TheARMTarget, createARMAsmBackend); +  TargetRegistry::RegisterAsmBackend(TheThumbTarget, createARMAsmBackend); + +  // Register the object streamer. +  TargetRegistry::RegisterObjectStreamer(TheARMTarget, createMCStreamer); +  TargetRegistry::RegisterObjectStreamer(TheThumbTarget, createMCStreamer);  } diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.h b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.h index 74701e3516d..901251fbe14 100644 --- a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.h +++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.h @@ -17,9 +17,15 @@  #include <string>  namespace llvm { +class MCCodeEmitter; +class MCContext; +class MCInstrInfo; +class MCObjectWriter;  class MCSubtargetInfo; -class Target;  class StringRef; +class Target; +class TargetAsmBackend; +class raw_ostream;  extern Target TheARMTarget, TheThumbTarget; @@ -33,6 +39,18 @@ namespace ARM_MC {                                              StringRef FS);  } +MCCodeEmitter *createARMMCCodeEmitter(const MCInstrInfo &MCII, +                                      const MCSubtargetInfo &STI, +                                      MCContext &Ctx); + +TargetAsmBackend *createARMAsmBackend(const Target&, const std::string &); + +/// createARMMachObjectWriter - Construct an ARM Mach-O object writer. +MCObjectWriter *createARMMachObjectWriter(raw_ostream &OS, +                                          bool Is64Bit, +                                          uint32_t CPUType, +                                          uint32_t CPUSubtype); +  } // End llvm namespace  // Defines symbolic names for ARM registers.  This defines a mapping from diff --git a/llvm/lib/Target/ARM/ARMMachObjectWriter.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMMachObjectWriter.cpp index a36e47da06d..bc1bf3a312d 100644 --- a/llvm/lib/Target/ARM/ARMMachObjectWriter.cpp +++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMMachObjectWriter.cpp @@ -7,8 +7,8 @@  //  //===----------------------------------------------------------------------===// -#include "ARM.h" -#include "ARMFixupKinds.h" +#include "MCTargetDesc/ARMBaseInfo.h" +#include "MCTargetDesc/ARMFixupKinds.h"  #include "llvm/ADT/Twine.h"  #include "llvm/MC/MCAssembler.h"  #include "llvm/MC/MCAsmLayout.h" diff --git a/llvm/lib/Target/ARM/MCTargetDesc/CMakeLists.txt b/llvm/lib/Target/ARM/MCTargetDesc/CMakeLists.txt index c5321f90e2a..89208c0301c 100644 --- a/llvm/lib/Target/ARM/MCTargetDesc/CMakeLists.txt +++ b/llvm/lib/Target/ARM/MCTargetDesc/CMakeLists.txt @@ -1,7 +1,10 @@  add_llvm_library(LLVMARMDesc +  ARMAsmBackend.cpp    ARMMCTargetDesc.cpp    ARMMCAsmInfo.cpp +  ARMMCCodeEmitter.cpp    ARMMCExpr.cpp +  ARMMachObjectWriter.cpp    )  # Hack: we need to include 'main' target directory to grab private headers  | 

