mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-20 02:58:10 +00:00
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:
parent
93cacf131d
commit
84e160e265
@ -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;
|
||||
};
|
||||
|
@ -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 {
|
||||
|
@ -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*
|
||||
|
Loading…
Reference in New Issue
Block a user