expose SectionKindForGlobal to curious clients, named as

getKindForGlobal.

llvm-svn: 78156
This commit is contained in:
Chris Lattner 2009-08-05 04:25:40 +00:00
parent d3a44b52c6
commit cbc7b26542
2 changed files with 23 additions and 10 deletions

View File

@ -141,12 +141,26 @@ public:
return K; return K;
} }
/// getKindForGlobal - Classify the specified global variable into a set of
/// target independent categories embodied in SectionKind.
static SectionKind getKindForGlobal(const GlobalValue *GV,
const TargetMachine &TM);
/// SectionForGlobal - This method computes the appropriate section to emit
/// the specified global variable or function definition. This should not
/// be passed external (or available externally) globals.
const MCSection *SectionForGlobal(const GlobalValue *GV,
SectionKind Kind, Mangler *Mang,
const TargetMachine &TM) const;
/// SectionForGlobal - This method computes the appropriate section to emit /// SectionForGlobal - This method computes the appropriate section to emit
/// the specified global variable or function definition. This should not /// the specified global variable or function definition. This should not
/// be passed external (or available externally) globals. /// be passed external (or available externally) globals.
const MCSection *SectionForGlobal(const GlobalValue *GV, const MCSection *SectionForGlobal(const GlobalValue *GV,
Mangler *Mang, Mangler *Mang,
const TargetMachine &TM) const; const TargetMachine &TM) const {
return SectionForGlobal(GV, getKindForGlobal(GV, TM), Mang, TM);
}
/// getSpecialCasedSectionGlobals - Allow the target to completely override /// getSpecialCasedSectionGlobals - Allow the target to completely override
/// section assignment of a global. /// section assignment of a global.

View File

@ -110,13 +110,16 @@ static bool IsNullTerminatedString(const Constant *C) {
return false; return false;
} }
/// SectionKindForGlobal - This is a top-level target-independent classifier for /// getKindForGlobal - This is a top-level target-independent classifier for
/// a global variable. Given an global variable and information from TM, it /// a global variable. Given an global variable and information from TM, it
/// classifies the global in a variety of ways that make various target /// classifies the global in a variety of ways that make various target
/// implementations simpler. The target implementation is free to ignore this /// implementations simpler. The target implementation is free to ignore this
/// extra info of course. /// extra info of course.
static SectionKind SectionKindForGlobal(const GlobalValue *GV, SectionKind TargetLoweringObjectFile::getKindForGlobal(const GlobalValue *GV,
const TargetMachine &TM) { const TargetMachine &TM){
assert(!GV->isDeclaration() && !GV->hasAvailableExternallyLinkage() &&
"Can only be used for global definitions");
Reloc::Model ReloModel = TM.getRelocationModel(); Reloc::Model ReloModel = TM.getRelocationModel();
// Early exit - functions should be always in text sections. // Early exit - functions should be always in text sections.
@ -227,13 +230,8 @@ static SectionKind SectionKindForGlobal(const GlobalValue *GV,
/// the specified global variable or function definition. This should not /// the specified global variable or function definition. This should not
/// be passed external (or available externally) globals. /// be passed external (or available externally) globals.
const MCSection *TargetLoweringObjectFile:: const MCSection *TargetLoweringObjectFile::
SectionForGlobal(const GlobalValue *GV, Mangler *Mang, SectionForGlobal(const GlobalValue *GV, SectionKind Kind, Mangler *Mang,
const TargetMachine &TM) const { const TargetMachine &TM) const {
assert(!GV->isDeclaration() && !GV->hasAvailableExternallyLinkage() &&
"Can only be used for global definitions");
SectionKind Kind = SectionKindForGlobal(GV, TM);
// Select section name. // Select section name.
if (GV->hasSection()) { if (GV->hasSection()) {
// If the target has special section hacks for specifically named globals, // If the target has special section hacks for specifically named globals,
@ -254,6 +252,7 @@ SectionForGlobal(const GlobalValue *GV, Mangler *Mang,
return SelectSectionForGlobal(GV, Kind, Mang, TM); return SelectSectionForGlobal(GV, Kind, Mang, TM);
} }
// Lame default implementation. Calculate the section name for global. // Lame default implementation. Calculate the section name for global.
const MCSection * const MCSection *
TargetLoweringObjectFile::SelectSectionForGlobal(const GlobalValue *GV, TargetLoweringObjectFile::SelectSectionForGlobal(const GlobalValue *GV,