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.

llvm-svn: 77938
This commit is contained in:
Eli Friedman 2009-08-03 02:22:28 +00:00
parent 43fb93ab2f
commit 57c11da8df
6 changed files with 26 additions and 50 deletions

View File

@ -497,10 +497,9 @@ LowerGlobalAddress(SDValue Op, SelectionDAG &DAG)
GlobalValue *GV = cast<GlobalAddressSDNode>(Op)->getGlobal(); GlobalValue *GV = cast<GlobalAddressSDNode>(Op)->getGlobal();
SDValue GA = DAG.getTargetGlobalAddress(GV, MVT::i32); SDValue GA = DAG.getTargetGlobalAddress(GV, MVT::i32);
if (!Subtarget->hasABICall()) { if (getTargetMachine().getRelocationModel() != Reloc::PIC_) {
SDVTList VTs = DAG.getVTList(MVT::i32);
// %hi/%lo relocation // %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); SDValue Lo = DAG.getNode(MipsISD::Lo, dl, MVT::i32, GA);
return DAG.getNode(ISD::ADD, dl, MVT::i32, HiPart, Lo); 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 // but the asm printer currently doens't support this feature without
// hacking it. This feature should come soon so we can uncomment the // hacking it. This feature should come soon so we can uncomment the
// stuff below. // stuff below.
//if (!Subtarget->hasABICall() && //if (IsInSmallSection(C->getType())) {
// IsInSmallSection(getTargetData()->getTypeAllocSize(C->getType()))) {
// SDValue GPRelNode = DAG.getNode(MipsISD::GPRel, MVT::i32, CP); // SDValue GPRelNode = DAG.getNode(MipsISD::GPRel, MVT::i32, CP);
// SDValue GOT = DAG.getGLOBAL_OFFSET_TABLE(MVT::i32); // SDValue GOT = DAG.getGLOBAL_OFFSET_TABLE(MVT::i32);
// ResNode = DAG.getNode(ISD::ADD, MVT::i32, GOT, GPRelNode); // ResNode = DAG.getNode(ISD::ADD, MVT::i32, GOT, GPRelNode);

View File

@ -17,19 +17,12 @@
#include "llvm/Support/CommandLine.h" #include "llvm/Support/CommandLine.h"
using namespace llvm; using namespace llvm;
static cl::opt<bool> MipsSubtarget::MipsSubtarget(const std::string &TT, const std::string &FS,
NotABICall("disable-mips-abicall", cl::Hidden, bool little) :
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) :
MipsArchVersion(Mips1), MipsABI(O32), IsLittle(little), IsSingleFloat(false), MipsArchVersion(Mips1), MipsABI(O32), IsLittle(little), IsSingleFloat(false),
IsFP64bit(false), IsGP64bit(false), HasVFPU(false), HasABICall(true), IsFP64bit(false), IsGP64bit(false), HasVFPU(false), IsLinux(true),
HasAbsoluteCall(false), IsLinux(true), HasSEInReg(false), HasCondMov(false), HasSEInReg(false), HasCondMov(false), HasMulDivAdd(false), HasMinMax(false),
HasMulDivAdd(false), HasMinMax(false), HasSwap(false), HasBitCount(false) HasSwap(false), HasBitCount(false)
{ {
std::string CPU = "mips1"; std::string CPU = "mips1";
MipsArchVersion = Mips1; MipsArchVersion = Mips1;
@ -56,13 +49,4 @@ MipsSubtarget::MipsSubtarget(const TargetMachine &TM, const std::string &TT,
HasSwap = true; HasSwap = true;
HasCondMov = 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;
} }

View File

@ -57,13 +57,6 @@ protected:
// HasVFPU - Processor has a vector floating point unit. // HasVFPU - Processor has a vector floating point unit.
bool HasVFPU; 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. // isLinux - Target system is Linux. Is false we consider ELFOS for now.
bool IsLinux; bool IsLinux;
@ -99,8 +92,7 @@ public:
/// This constructor initializes the data members to match that /// This constructor initializes the data members to match that
/// of the specified triple. /// of the specified triple.
MipsSubtarget(const TargetMachine &TM, const std::string &TT, MipsSubtarget(const std::string &TT, const std::string &FS, bool little);
const std::string &FS, bool little);
/// ParseSubtargetFeatures - Parses features string setting specified /// ParseSubtargetFeatures - Parses features string setting specified
/// subtarget options. Definition of function is auto generated by tblgen. /// subtarget options. Definition of function is auto generated by tblgen.
@ -116,8 +108,6 @@ public:
bool isSingleFloat() const { return IsSingleFloat; }; bool isSingleFloat() const { return IsSingleFloat; };
bool isNotSingleFloat() const { return !IsSingleFloat; }; bool isNotSingleFloat() const { return !IsSingleFloat; };
bool hasVFPU() const { return HasVFPU; }; bool hasVFPU() const { return HasVFPU; };
bool hasABICall() const { return HasABICall; };
bool hasAbsoluteCall() const { return HasAbsoluteCall; };
bool isLinux() const { return IsLinux; }; bool isLinux() const { return IsLinux; };
/// Features related to the presence of specific instructions. /// Features related to the presence of specific instructions.

View File

@ -25,8 +25,6 @@ MipsTargetAsmInfo::MipsTargetAsmInfo(const MipsTargetMachine &TM) {
CommentString = "#"; CommentString = "#";
ZeroDirective = "\t.space\t"; ZeroDirective = "\t.space\t";
if (!TM.getSubtarget<MipsSubtarget>().hasABICall()) if (TM.getRelocationModel() == Reloc::PIC_)
JumpTableDirective = "\t.word\t";
else
JumpTableDirective = "\t.gpword\t"; JumpTableDirective = "\t.gpword\t";
} }

View File

@ -20,8 +20,8 @@ using namespace llvm;
extern "C" void LLVMInitializeMipsTarget() { extern "C" void LLVMInitializeMipsTarget() {
// Register the target. // Register the target.
RegisterTargetMachineDeprecated<MipsTargetMachine> X(TheMipsTarget); RegisterTargetMachine<MipsTargetMachine> X(TheMipsTarget);
RegisterTargetMachineDeprecated<MipselTargetMachine> Y(TheMipselTarget); RegisterTargetMachine<MipselTargetMachine> Y(TheMipselTarget);
} }
const TargetAsmInfo *MipsTargetMachine:: const TargetAsmInfo *MipsTargetMachine::
@ -38,10 +38,10 @@ createTargetAsmInfo() const
// an easier handling. // an easier handling.
// Using CodeModel::Large enables different CALL behavior. // Using CodeModel::Large enables different CALL behavior.
MipsTargetMachine:: 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): bool isLittle=false):
LLVMTargetMachine(T), 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") : 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")), std::string("E-p:32:32:32-i8:8:32-i16:16:32")),
InstrInfo(*this), InstrInfo(*this),
@ -49,8 +49,12 @@ MipsTargetMachine(const Target &T, const Module &M, const std::string &FS,
TLInfo(*this) TLInfo(*this)
{ {
// Abicall enables PIC by default // Abicall enables PIC by default
if (Subtarget.hasABICall()) if (getRelocationModel() == Reloc::Default) {
setRelocationModel(Reloc::PIC_); if (Subtarget.isABI_O32())
setRelocationModel(Reloc::PIC_);
else
setRelocationModel(Reloc::Static);
}
// TODO: create an option to enable long calls, like -mlong-calls, // TODO: create an option to enable long calls, like -mlong-calls,
// that would be our CodeModel::Large. It must not work with Abicall. // 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::
MipselTargetMachine(const Target &T, const Module &M, const std::string &FS) : MipselTargetMachine(const Target &T, const std::string &TT,
MipsTargetMachine(T, M, FS, true) {} const std::string &FS) :
MipsTargetMachine(T, TT, FS, true) {}
// Install an instruction selector pass using // Install an instruction selector pass using
// the ISelDag to gen Mips code. // the ISelDag to gen Mips code.

View File

@ -35,7 +35,7 @@ namespace llvm {
virtual const TargetAsmInfo *createTargetAsmInfo() const; virtual const TargetAsmInfo *createTargetAsmInfo() const;
public: public:
MipsTargetMachine(const Target &T, const Module &M, MipsTargetMachine(const Target &T, const std::string &TT,
const std::string &FS, bool isLittle); const std::string &FS, bool isLittle);
virtual const MipsInstrInfo *getInstrInfo() const virtual const MipsInstrInfo *getInstrInfo() const
@ -66,7 +66,8 @@ namespace llvm {
/// ///
class MipselTargetMachine : public MipsTargetMachine { class MipselTargetMachine : public MipsTargetMachine {
public: 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 } // End llvm namespace