mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
Select section for constant pool entries
llvm-svn: 54448
This commit is contained in:
parent
7f69239612
commit
d37daa2aeb
@ -21,6 +21,7 @@
|
||||
namespace llvm {
|
||||
class GlobalValue;
|
||||
class GlobalVariable;
|
||||
class Type;
|
||||
|
||||
struct ELFTargetAsmInfo: public virtual TargetAsmInfo {
|
||||
explicit ELFTargetAsmInfo(const TargetMachine &TM);
|
||||
@ -28,7 +29,10 @@ namespace llvm {
|
||||
virtual const Section* SelectSectionForGlobal(const GlobalValue *GV) const;
|
||||
virtual std::string PrintSectionFlags(unsigned flags) const;
|
||||
const Section* MergeableConstSection(const GlobalVariable *GV) const;
|
||||
inline const Section* MergeableConstSection(const Type *Ty) const;
|
||||
const Section* MergeableStringSection(const GlobalVariable *GV) const;
|
||||
virtual const Section*
|
||||
SelectSectionForMachineConst(const Type *Ty) const;
|
||||
protected:
|
||||
const TargetMachine* ETM;
|
||||
};
|
||||
|
@ -76,6 +76,7 @@ namespace llvm {
|
||||
class TargetMachine;
|
||||
class CallInst;
|
||||
class GlobalValue;
|
||||
class Type;
|
||||
|
||||
class Section {
|
||||
friend class TargetAsmInfo;
|
||||
@ -542,6 +543,8 @@ namespace llvm {
|
||||
|
||||
virtual const Section* SelectSectionForGlobal(const GlobalValue *GV) const;
|
||||
|
||||
virtual const Section* SelectSectionForMachineConst(const Type *Ty) const;
|
||||
|
||||
// Accessors.
|
||||
//
|
||||
const char *getTextSection() const {
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include "llvm/Function.h"
|
||||
#include "llvm/GlobalVariable.h"
|
||||
#include "llvm/ADT/StringExtras.h"
|
||||
#include "llvm/CodeGen/MachineConstantPool.h"
|
||||
#include "llvm/Target/ELFTargetAsmInfo.h"
|
||||
#include "llvm/Target/TargetMachine.h"
|
||||
#include "llvm/Target/TargetData.h"
|
||||
@ -89,16 +90,28 @@ ELFTargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV) const {
|
||||
assert(0 && "Unsupported global");
|
||||
}
|
||||
|
||||
const Section*
|
||||
ELFTargetAsmInfo::SelectSectionForMachineConst(const Type *Ty) const {
|
||||
// FIXME: Support data.rel stuff someday
|
||||
return MergeableConstSection(Ty);
|
||||
}
|
||||
|
||||
const Section*
|
||||
ELFTargetAsmInfo::MergeableConstSection(const GlobalVariable *GV) const {
|
||||
const TargetData *TD = ETM->getTargetData();
|
||||
Constant *C = cast<GlobalVariable>(GV)->getInitializer();
|
||||
const Type *Type = C->getType();
|
||||
const Type *Ty = C->getType();
|
||||
|
||||
return MergeableConstSection(Ty);
|
||||
}
|
||||
|
||||
inline const Section*
|
||||
ELFTargetAsmInfo::MergeableConstSection(const Type *Ty) const {
|
||||
const TargetData *TD = ETM->getTargetData();
|
||||
|
||||
// FIXME: string here is temporary, until stuff will fully land in.
|
||||
// We cannot use {Four,Eight,Sixteen}ByteConstantSection here, since it's
|
||||
// currently directly used by asmprinter.
|
||||
unsigned Size = TD->getABITypeSize(Type);
|
||||
unsigned Size = TD->getABITypeSize(Ty);
|
||||
if (Size == 4 || Size == 8 || Size == 16) {
|
||||
std::string Name = ".rodata.cst" + utostr(Size);
|
||||
|
||||
|
@ -321,6 +321,13 @@ TargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV) const {
|
||||
return getDataSection_();
|
||||
}
|
||||
|
||||
// Lame default implementation. Calculate the section name for machine const.
|
||||
const Section*
|
||||
TargetAsmInfo::SelectSectionForMachineConst(const Type *Ty) const {
|
||||
// FIXME: Support data.rel stuff someday
|
||||
return getDataSection_();
|
||||
}
|
||||
|
||||
std::string
|
||||
TargetAsmInfo::UniqueSectionForGlobal(const GlobalValue* GV,
|
||||
SectionKind::Kind Kind) const {
|
||||
|
Loading…
Reference in New Issue
Block a user