diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2009-08-03 02:22:28 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2009-08-03 02:22:28 +0000 |
commit | e2c74081998af2e64ed498d65cf501704796ccc0 (patch) | |
tree | 1d2bc6a9d597d16cbeaa8bf528c578dd9f9b2c80 /lib/Target/Mips | |
parent | 5eca4525f42a99eec29be1676a7a77928853c521 (diff) | |
download | external_llvm-e2c74081998af2e64ed498d65cf501704796ccc0.zip external_llvm-e2c74081998af2e64ed498d65cf501704796ccc0.tar.gz external_llvm-e2c74081998af2e64ed498d65cf501704796ccc0.tar.bz2 |
Remove -disable-mips-abicall and -enable-mips-absolute-call command-line
options, which don't appear to be useful. -enable-mips-absolute-call is
completely unused (and unless I'm mistaken, is supposed to have the
same effect that -relocation-model=dynamic-no-pic should have),
and -disable-mips-abicall appears to be effectively a
synonym for -relocation-model=static. Adjust the few users of hasABICall
to checks which seem more appropriate. Update MipsSubtarget,
MipsTargetMachine, and MipselTargetMachine to synchronize with recent
changes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77938 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/Mips')
-rw-r--r-- | lib/Target/Mips/MipsISelLowering.cpp | 8 | ||||
-rw-r--r-- | lib/Target/Mips/MipsSubtarget.cpp | 26 | ||||
-rw-r--r-- | lib/Target/Mips/MipsSubtarget.h | 12 | ||||
-rw-r--r-- | lib/Target/Mips/MipsTargetAsmInfo.cpp | 4 | ||||
-rw-r--r-- | lib/Target/Mips/MipsTargetMachine.cpp | 21 | ||||
-rw-r--r-- | lib/Target/Mips/MipsTargetMachine.h | 5 |
6 files changed, 26 insertions, 50 deletions
diff --git a/lib/Target/Mips/MipsISelLowering.cpp b/lib/Target/Mips/MipsISelLowering.cpp index ca94d39..ab3f144 100644 --- a/lib/Target/Mips/MipsISelLowering.cpp +++ b/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/lib/Target/Mips/MipsSubtarget.cpp b/lib/Target/Mips/MipsSubtarget.cpp index c56bc9d..a85028c 100644 --- a/lib/Target/Mips/MipsSubtarget.cpp +++ b/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/lib/Target/Mips/MipsSubtarget.h b/lib/Target/Mips/MipsSubtarget.h index 2485fef..1d6f87d 100644 --- a/lib/Target/Mips/MipsSubtarget.h +++ b/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/lib/Target/Mips/MipsTargetAsmInfo.cpp b/lib/Target/Mips/MipsTargetAsmInfo.cpp index 96bb8a1..aa40ff6 100644 --- a/lib/Target/Mips/MipsTargetAsmInfo.cpp +++ b/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/lib/Target/Mips/MipsTargetMachine.cpp b/lib/Target/Mips/MipsTargetMachine.cpp index 657d21d..a74af26 100644 --- a/lib/Target/Mips/MipsTargetMachine.cpp +++ b/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/lib/Target/Mips/MipsTargetMachine.h b/lib/Target/Mips/MipsTargetMachine.h index e2b83b7..5f5de75 100644 --- a/lib/Target/Mips/MipsTargetMachine.h +++ b/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 |