forked from OSchip/llvm-project
remove more remnants of small section support.
llvm-svn: 76936
This commit is contained in:
parent
26aff56462
commit
bc63d8bfbf
|
@ -216,37 +216,6 @@ AddLiveIn(MachineFunction &MF, unsigned PReg, TargetRegisterClass *RC)
|
|||
return VReg;
|
||||
}
|
||||
|
||||
// A address must be loaded from a small section if its size is less than the
|
||||
// small section size threshold. Data in this section must be addressed using
|
||||
// gp_rel operator.
|
||||
bool MipsTargetLowering::IsInSmallSection(unsigned Size) {
|
||||
return (Size > 0 && (Size <= Subtarget->getSSectionThreshold()));
|
||||
}
|
||||
|
||||
// Discover if this global address can be placed into small data/bss section.
|
||||
bool MipsTargetLowering::IsGlobalInSmallSection(GlobalValue *GV)
|
||||
{
|
||||
const TargetData *TD = getTargetData();
|
||||
const GlobalVariable *GVA = dyn_cast<GlobalVariable>(GV);
|
||||
|
||||
if (!GVA)
|
||||
return false;
|
||||
|
||||
const Type *Ty = GV->getType()->getElementType();
|
||||
unsigned Size = TD->getTypeAllocSize(Ty);
|
||||
|
||||
// if this is a internal constant string, there is a special
|
||||
// section for it, but not in small data/bss.
|
||||
if (GVA->hasInitializer() && GV->hasLocalLinkage()) {
|
||||
Constant *C = GVA->getInitializer();
|
||||
const ConstantArray *CVA = dyn_cast<ConstantArray>(C);
|
||||
if (CVA && CVA->isCString())
|
||||
return false;
|
||||
}
|
||||
|
||||
return IsInSmallSection(Size);
|
||||
}
|
||||
|
||||
// Get fp branch code (not opcode) from condition code.
|
||||
static Mips::FPBranchCode GetFPBranchCodeFromCond(Mips::CondCode CC) {
|
||||
if (CC >= Mips::FCOND_F && CC <= Mips::FCOND_NGT)
|
||||
|
@ -532,15 +501,8 @@ LowerGlobalAddress(SDValue Op, SelectionDAG &DAG)
|
|||
|
||||
if (!Subtarget->hasABICall()) {
|
||||
SDVTList VTs = DAG.getVTList(MVT::i32);
|
||||
SDValue Ops[] = { GA };
|
||||
// %gp_rel relocation
|
||||
if (!isa<Function>(GV) && IsGlobalInSmallSection(GV)) {
|
||||
SDValue GPRelNode = DAG.getNode(MipsISD::GPRel, dl, VTs, Ops, 1);
|
||||
SDValue GOT = DAG.getGLOBAL_OFFSET_TABLE(MVT::i32);
|
||||
return DAG.getNode(ISD::ADD, dl, MVT::i32, GOT, GPRelNode);
|
||||
}
|
||||
// %hi/%lo relocation
|
||||
SDValue HiPart = DAG.getNode(MipsISD::Hi, dl, VTs, Ops, 1);
|
||||
SDValue HiPart = DAG.getNode(MipsISD::Hi, dl, VTs, &GA, 1);
|
||||
SDValue Lo = DAG.getNode(MipsISD::Lo, dl, MVT::i32, GA);
|
||||
return DAG.getNode(ISD::ADD, dl, MVT::i32, HiPart, Lo);
|
||||
|
||||
|
|
|
@ -91,8 +91,6 @@ namespace llvm {
|
|||
// Lower Operand helpers
|
||||
SDNode *LowerCallResult(SDValue Chain, SDValue InFlag, CallSDNode *TheCall,
|
||||
unsigned CallingConv, SelectionDAG &DAG);
|
||||
bool IsGlobalInSmallSection(GlobalValue *GV);
|
||||
bool IsInSmallSection(unsigned Size);
|
||||
|
||||
// Lower Operand specifics
|
||||
SDValue LowerANDOR(SDValue Op, SelectionDAG &DAG);
|
||||
|
|
|
@ -24,10 +24,6 @@ NotABICall("disable-mips-abicall", cl::Hidden,
|
|||
static cl::opt<bool>
|
||||
AbsoluteCall("enable-mips-absolute-call", cl::Hidden,
|
||||
cl::desc("Enable absolute call within abicall"));
|
||||
static cl::opt<unsigned>
|
||||
SSThreshold("mips-ssection-threshold", cl::Hidden,
|
||||
cl::desc("Small data and bss section threshold size (default=8)"),
|
||||
cl::init(8));
|
||||
|
||||
MipsSubtarget::MipsSubtarget(const TargetMachine &TM, const Module &M,
|
||||
const std::string &FS, bool little) :
|
||||
|
@ -43,9 +39,6 @@ MipsSubtarget::MipsSubtarget(const TargetMachine &TM, const Module &M,
|
|||
ParseSubtargetFeatures(FS, CPU);
|
||||
const std::string& TT = M.getTargetTriple();
|
||||
|
||||
// Small section size threshold
|
||||
SSectionThreshold = SSThreshold;
|
||||
|
||||
// Is the target system Linux ?
|
||||
if (TT.find("linux") == std::string::npos)
|
||||
IsLinux = false;
|
||||
|
|
|
@ -68,10 +68,6 @@ protected:
|
|||
// isLinux - Target system is Linux. Is false we consider ELFOS for now.
|
||||
bool IsLinux;
|
||||
|
||||
// Put global and static items less than or equal to SSectionThreshold
|
||||
// bytes into the small data or bss section. The default is 8.
|
||||
unsigned SSectionThreshold;
|
||||
|
||||
/// Features related to the presence of specific instructions.
|
||||
|
||||
// HasSEInReg - SEB and SEH (signext in register) instructions.
|
||||
|
@ -124,7 +120,6 @@ public:
|
|||
bool hasABICall() const { return HasABICall; };
|
||||
bool hasAbsoluteCall() const { return HasAbsoluteCall; };
|
||||
bool isLinux() const { return IsLinux; };
|
||||
unsigned getSSectionThreshold() const { return SSectionThreshold; }
|
||||
|
||||
/// Features related to the presence of specific instructions.
|
||||
bool hasSEInReg() const { return HasSEInReg; };
|
||||
|
|
Loading…
Reference in New Issue