diff options
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/Target/Mips/MipsISelLowering.cpp | 8 | ||||
| -rw-r--r-- | llvm/lib/Target/Mips/MipsSubtarget.cpp | 26 | ||||
| -rw-r--r-- | llvm/lib/Target/Mips/MipsSubtarget.h | 12 | ||||
| -rw-r--r-- | llvm/lib/Target/Mips/MipsTargetAsmInfo.cpp | 4 | ||||
| -rw-r--r-- | llvm/lib/Target/Mips/MipsTargetMachine.cpp | 21 | ||||
| -rw-r--r-- | llvm/lib/Target/Mips/MipsTargetMachine.h | 5 | 
6 files changed, 26 insertions, 50 deletions
diff --git a/llvm/lib/Target/Mips/MipsISelLowering.cpp b/llvm/lib/Target/Mips/MipsISelLowering.cpp index ca94d39e467..ab3f144df2a 100644 --- a/llvm/lib/Target/Mips/MipsISelLowering.cpp +++ b/llvm/lib/Target/Mips/MipsISelLowering.cpp @@ -497,10 +497,9 @@ LowerGlobalAddress(SDValue Op, SelectionDAG &DAG)    GlobalValue *GV = cast<GlobalAddressSDNode>(Op)->getGlobal();    SDValue GA = DAG.getTargetGlobalAddress(GV, MVT::i32); -  if (!Subtarget->hasABICall()) { -    SDVTList VTs = DAG.getVTList(MVT::i32); +  if (getTargetMachine().getRelocationModel() != Reloc::PIC_) {      // %hi/%lo relocation -    SDValue HiPart = DAG.getNode(MipsISD::Hi, dl, VTs, &GA, 1); +    SDValue HiPart = DAG.getNode(MipsISD::Hi, dl, MVT::i32, GA);      SDValue Lo = DAG.getNode(MipsISD::Lo, dl, MVT::i32, GA);      return DAG.getNode(ISD::ADD, dl, MVT::i32, HiPart, Lo); @@ -566,8 +565,7 @@ LowerConstantPool(SDValue Op, SelectionDAG &DAG)    // but the asm printer currently doens't support this feature without    // hacking it. This feature should come soon so we can uncomment the     // stuff below. -  //if (!Subtarget->hasABICall() &&   -  //    IsInSmallSection(getTargetData()->getTypeAllocSize(C->getType()))) { +  //if (IsInSmallSection(C->getType())) {    //  SDValue GPRelNode = DAG.getNode(MipsISD::GPRel, MVT::i32, CP);    //  SDValue GOT = DAG.getGLOBAL_OFFSET_TABLE(MVT::i32);    //  ResNode = DAG.getNode(ISD::ADD, MVT::i32, GOT, GPRelNode);  diff --git a/llvm/lib/Target/Mips/MipsSubtarget.cpp b/llvm/lib/Target/Mips/MipsSubtarget.cpp index c56bc9d290d..a85028cb96f 100644 --- a/llvm/lib/Target/Mips/MipsSubtarget.cpp +++ b/llvm/lib/Target/Mips/MipsSubtarget.cpp @@ -17,19 +17,12 @@  #include "llvm/Support/CommandLine.h"  using namespace llvm; -static cl::opt<bool> -NotABICall("disable-mips-abicall", cl::Hidden, -           cl::desc("Disable code for SVR4-style dynamic objects")); -static cl::opt<bool> -AbsoluteCall("enable-mips-absolute-call", cl::Hidden, -             cl::desc("Enable absolute call within abicall")); - -MipsSubtarget::MipsSubtarget(const TargetMachine &TM, const std::string &TT, -                             const std::string &FS, bool little) :  +MipsSubtarget::MipsSubtarget(const std::string &TT, const std::string &FS, +                             bool little) :     MipsArchVersion(Mips1), MipsABI(O32), IsLittle(little), IsSingleFloat(false), -  IsFP64bit(false), IsGP64bit(false), HasVFPU(false), HasABICall(true),  -  HasAbsoluteCall(false), IsLinux(true), HasSEInReg(false), HasCondMov(false), -  HasMulDivAdd(false), HasMinMax(false), HasSwap(false), HasBitCount(false) +  IsFP64bit(false), IsGP64bit(false), HasVFPU(false), IsLinux(true), +  HasSEInReg(false), HasCondMov(false), HasMulDivAdd(false), HasMinMax(false), +  HasSwap(false), HasBitCount(false)  {    std::string CPU = "mips1";    MipsArchVersion = Mips1; @@ -56,13 +49,4 @@ MipsSubtarget::MipsSubtarget(const TargetMachine &TM, const std::string &TT,      HasSwap = true;      HasCondMov = true;    } - -  // Abicall is the default for O32 ABI, but is disabled within EABI and in -  // static code. -  if (NotABICall || isABI_EABI() || (TM.getRelocationModel() == Reloc::Static)) -    HasABICall = false; - -  // TODO: disable when handling 64 bit symbols in the future. -  if (HasABICall && AbsoluteCall) -    HasAbsoluteCall = true;  } diff --git a/llvm/lib/Target/Mips/MipsSubtarget.h b/llvm/lib/Target/Mips/MipsSubtarget.h index 2485fef887e..1d6f87d8c06 100644 --- a/llvm/lib/Target/Mips/MipsSubtarget.h +++ b/llvm/lib/Target/Mips/MipsSubtarget.h @@ -57,13 +57,6 @@ protected:    // HasVFPU - Processor has a vector floating point unit.    bool HasVFPU; -  // IsABICall - Enable SRV4 code for SVR4-style dynamic objects  -  bool HasABICall; - -  // HasAbsoluteCall - Enable code that is not fully position-independent. -  // Only works with HasABICall enabled. -  bool HasAbsoluteCall; -    // isLinux - Target system is Linux. Is false we consider ELFOS for now.    bool IsLinux; @@ -99,8 +92,7 @@ public:    /// This constructor initializes the data members to match that    /// of the specified triple. -  MipsSubtarget(const TargetMachine &TM, const std::string &TT,  -                const std::string &FS, bool little); +  MipsSubtarget(const std::string &TT, const std::string &FS, bool little);    /// ParseSubtargetFeatures - Parses features string setting specified     /// subtarget options.  Definition of function is auto generated by tblgen. @@ -116,8 +108,6 @@ public:    bool isSingleFloat() const { return IsSingleFloat; };    bool isNotSingleFloat() const { return !IsSingleFloat; };    bool hasVFPU() const { return HasVFPU; }; -  bool hasABICall() const { return HasABICall; }; -  bool hasAbsoluteCall() const { return HasAbsoluteCall; };    bool isLinux() const { return IsLinux; };    /// Features related to the presence of specific instructions. diff --git a/llvm/lib/Target/Mips/MipsTargetAsmInfo.cpp b/llvm/lib/Target/Mips/MipsTargetAsmInfo.cpp index 96bb8a18d9e..aa40ff6a5ac 100644 --- a/llvm/lib/Target/Mips/MipsTargetAsmInfo.cpp +++ b/llvm/lib/Target/Mips/MipsTargetAsmInfo.cpp @@ -25,8 +25,6 @@ MipsTargetAsmInfo::MipsTargetAsmInfo(const MipsTargetMachine &TM) {    CommentString               = "#";    ZeroDirective               = "\t.space\t"; -  if (!TM.getSubtarget<MipsSubtarget>().hasABICall()) -    JumpTableDirective = "\t.word\t"; -  else +  if (TM.getRelocationModel() == Reloc::PIC_)      JumpTableDirective = "\t.gpword\t";  } diff --git a/llvm/lib/Target/Mips/MipsTargetMachine.cpp b/llvm/lib/Target/Mips/MipsTargetMachine.cpp index 657d21d7c0f..a74af26add8 100644 --- a/llvm/lib/Target/Mips/MipsTargetMachine.cpp +++ b/llvm/lib/Target/Mips/MipsTargetMachine.cpp @@ -20,8 +20,8 @@ using namespace llvm;  extern "C" void LLVMInitializeMipsTarget() {    // Register the target. -  RegisterTargetMachineDeprecated<MipsTargetMachine> X(TheMipsTarget); -  RegisterTargetMachineDeprecated<MipselTargetMachine> Y(TheMipselTarget); +  RegisterTargetMachine<MipsTargetMachine> X(TheMipsTarget); +  RegisterTargetMachine<MipselTargetMachine> Y(TheMipselTarget);  }  const TargetAsmInfo *MipsTargetMachine:: @@ -38,10 +38,10 @@ createTargetAsmInfo() const  // an easier handling.  // Using CodeModel::Large enables different CALL behavior.  MipsTargetMachine:: -MipsTargetMachine(const Target &T, const Module &M, const std::string &FS, +MipsTargetMachine(const Target &T, const std::string &TT, const std::string &FS,                    bool isLittle=false):    LLVMTargetMachine(T), -  Subtarget(*this, M.getTargetTriple(), FS, isLittle),  +  Subtarget(TT, FS, isLittle),     DataLayout(isLittle ? std::string("e-p:32:32:32-i8:8:32-i16:16:32") :                          std::string("E-p:32:32:32-i8:8:32-i16:16:32")),     InstrInfo(*this),  @@ -49,8 +49,12 @@ MipsTargetMachine(const Target &T, const Module &M, const std::string &FS,    TLInfo(*this)   {    // Abicall enables PIC by default -  if (Subtarget.hasABICall()) -    setRelocationModel(Reloc::PIC_);   +  if (getRelocationModel() == Reloc::Default) { +    if (Subtarget.isABI_O32()) +      setRelocationModel(Reloc::PIC_); +    else +      setRelocationModel(Reloc::Static); +  }    // TODO: create an option to enable long calls, like -mlong-calls,     // that would be our CodeModel::Large. It must not work with Abicall. @@ -59,8 +63,9 @@ MipsTargetMachine(const Target &T, const Module &M, const std::string &FS,  }  MipselTargetMachine:: -MipselTargetMachine(const Target &T, const Module &M, const std::string &FS) : -  MipsTargetMachine(T, M, FS, true) {} +MipselTargetMachine(const Target &T, const std::string &TT, +                    const std::string &FS) : +  MipsTargetMachine(T, TT, FS, true) {}  // Install an instruction selector pass using   // the ISelDag to gen Mips code. diff --git a/llvm/lib/Target/Mips/MipsTargetMachine.h b/llvm/lib/Target/Mips/MipsTargetMachine.h index e2b83b721fc..5f5de75dab3 100644 --- a/llvm/lib/Target/Mips/MipsTargetMachine.h +++ b/llvm/lib/Target/Mips/MipsTargetMachine.h @@ -35,7 +35,7 @@ namespace llvm {      virtual const TargetAsmInfo *createTargetAsmInfo() const;    public: -    MipsTargetMachine(const Target &T, const Module &M, +    MipsTargetMachine(const Target &T, const std::string &TT,                        const std::string &FS, bool isLittle);      virtual const MipsInstrInfo   *getInstrInfo()     const  @@ -66,7 +66,8 @@ namespace llvm {  ///  class MipselTargetMachine : public MipsTargetMachine {  public: -  MipselTargetMachine(const Target &T, const Module &M, const std::string &FS); +  MipselTargetMachine(const Target &T, const std::string &TT, +                      const std::string &FS);  };  } // End llvm namespace  | 

