Add hook for constant pool section selection for darwin.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@54449 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Anton Korobeynikov 2008-08-07 09:51:02 +00:00
parent 93cacf131d
commit 84e160e265
3 changed files with 24 additions and 5 deletions

View File

@ -21,6 +21,7 @@
namespace llvm {
class GlobalValue;
class GlobalVariable;
class Type;
struct DarwinTargetAsmInfo: public virtual TargetAsmInfo {
const Section* TextCoalSection;
@ -33,7 +34,9 @@ namespace llvm {
virtual std::string UniqueSectionForGlobal(const GlobalValue* GV,
SectionKind::Kind kind) const;
const Section* MergeableConstSection(const GlobalVariable *GV) const;
const Section* MergeableConstSection(const Type *Ty) const;
const Section* MergeableStringSection(const GlobalVariable *GV) const;
const Section* SelectSectionForMachineConst(const Type *Ty) const;
protected:
const TargetMachine* DTM;
};

View File

@ -107,10 +107,16 @@ DarwinTargetAsmInfo::MergeableStringSection(const GlobalVariable *GV) const {
const Section*
DarwinTargetAsmInfo::MergeableConstSection(const GlobalVariable *GV) const {
const TargetData *TD = DTM->getTargetData();
Constant *C = cast<GlobalVariable>(GV)->getInitializer();
unsigned Size = TD->getABITypeSize(C->getType());
return MergeableConstSection(C->getType());
}
inline const Section*
DarwinTargetAsmInfo::MergeableConstSection(const Type *Ty) const {
const TargetData *TD = DTM->getTargetData();
unsigned Size = TD->getABITypeSize(Ty);
if (Size == 4)
return FourByteConstantSection_;
else if (Size == 8)
@ -121,6 +127,18 @@ DarwinTargetAsmInfo::MergeableConstSection(const GlobalVariable *GV) const {
return getReadOnlySection_();
}
const Section*
DarwinTargetAsmInfo::SelectSectionForMachineConst(const Type *Ty) const {
const Section* S = MergeableConstSection(Ty);
// Handle weird special case, when compiling PIC stuff.
if (S == getReadOnlySection_() &&
DTM->getRelocationModel() != Reloc::Static)
return ConstDataSection;
return S;
}
std::string
DarwinTargetAsmInfo::UniqueSectionForGlobal(const GlobalValue* GV,
SectionKind::Kind kind) const {

View File

@ -99,9 +99,7 @@ ELFTargetAsmInfo::SelectSectionForMachineConst(const Type *Ty) const {
const Section*
ELFTargetAsmInfo::MergeableConstSection(const GlobalVariable *GV) const {
Constant *C = cast<GlobalVariable>(GV)->getInitializer();
const Type *Ty = C->getType();
return MergeableConstSection(Ty);
return MergeableConstSection(C->getType());
}
inline const Section*