mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-30 22:18:46 +00:00
make Constant::getRelocationInfo return an enum, as suggested by Duncan.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76938 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -47,14 +47,7 @@ public:
|
|||||||
/// getRelocationInfo - This method classifies the entry according to
|
/// getRelocationInfo - This method classifies the entry according to
|
||||||
/// whether or not it may generate a relocation entry. This must be
|
/// whether or not it may generate a relocation entry. This must be
|
||||||
/// conservative, so if it might codegen to a relocatable entry, it should say
|
/// conservative, so if it might codegen to a relocatable entry, it should say
|
||||||
/// so. The return values are:
|
/// so. The return values are the same as Constant::getRelocationInfo().
|
||||||
///
|
|
||||||
/// 0: This constant pool entry is guaranteed to never have a relocation
|
|
||||||
/// applied to it (because it holds a simple constant like '4').
|
|
||||||
/// 1: This entry has relocations, but the entries are guaranteed to be
|
|
||||||
/// resolvable by the static linker, so the dynamic linker will never see
|
|
||||||
/// them.
|
|
||||||
/// 2: This entry may have arbitrary relocations.
|
|
||||||
virtual unsigned getRelocationInfo() const = 0;
|
virtual unsigned getRelocationInfo() const = 0;
|
||||||
|
|
||||||
virtual int getExistingMachineCPValue(MachineConstantPool *CP,
|
virtual int getExistingMachineCPValue(MachineConstantPool *CP,
|
||||||
|
@@ -59,20 +59,27 @@ public:
|
|||||||
/// true for things like constant expressions that could divide by zero.
|
/// true for things like constant expressions that could divide by zero.
|
||||||
bool canTrap() const;
|
bool canTrap() const;
|
||||||
|
|
||||||
|
enum PossibleRelocationsTy {
|
||||||
|
NoRelocation = 0,
|
||||||
|
LocalRelocation = 1,
|
||||||
|
GlobalRelocations = 2
|
||||||
|
};
|
||||||
|
|
||||||
/// getRelocationInfo - This method classifies the entry according to
|
/// getRelocationInfo - This method classifies the entry according to
|
||||||
/// whether or not it may generate a relocation entry. This must be
|
/// whether or not it may generate a relocation entry. This must be
|
||||||
/// conservative, so if it might codegen to a relocatable entry, it should say
|
/// conservative, so if it might codegen to a relocatable entry, it should say
|
||||||
/// so. The return values are:
|
/// so. The return values are:
|
||||||
///
|
///
|
||||||
/// 0: This constant pool entry is guaranteed to never have a relocation
|
/// NoRelocation: This constant pool entry is guaranteed to never have a
|
||||||
/// applied to it (because it holds a simple constant like '4').
|
/// relocation applied to it (because it holds a simple constant like
|
||||||
/// 1: This entry has relocations, but the entries are guaranteed to be
|
/// '4').
|
||||||
/// resolvable by the static linker, so the dynamic linker will never see
|
/// LocalRelocation: This entry has relocations, but the entries are
|
||||||
/// them.
|
/// guaranteed to be resolvable by the static linker, so the dynamic
|
||||||
/// 2: This entry may have arbitrary relocations.
|
/// linker will never see them.
|
||||||
|
/// GlobalRelocations: This entry may have arbitrary relocations.
|
||||||
///
|
///
|
||||||
/// FIXME: This really should not be in VMCore.
|
/// FIXME: This really should not be in VMCore.
|
||||||
unsigned getRelocationInfo() const;
|
PossibleRelocationsTy getRelocationInfo() const;
|
||||||
|
|
||||||
// Specialize get/setOperand for Constants as their operands are always
|
// Specialize get/setOperand for Constants as their operands are always
|
||||||
// constants as well.
|
// constants as well.
|
||||||
|
@@ -62,10 +62,10 @@ ELFTargetAsmInfo::SectionKindForGlobal(const GlobalValue *GV) const {
|
|||||||
// placed in r/w section.
|
// placed in r/w section.
|
||||||
switch (C->getRelocationInfo()) {
|
switch (C->getRelocationInfo()) {
|
||||||
default: break;
|
default: break;
|
||||||
case 1:
|
case Constant::LocalRelocation:
|
||||||
return isConstant ? SectionKind::DataRelROLocal :
|
return isConstant ? SectionKind::DataRelROLocal :
|
||||||
SectionKind::DataRelLocal;
|
SectionKind::DataRelLocal;
|
||||||
case 2:
|
case Constant::GlobalRelocations:
|
||||||
return isConstant ? SectionKind::DataRelRO : SectionKind::DataRel;
|
return isConstant ? SectionKind::DataRelRO : SectionKind::DataRel;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -107,22 +107,23 @@ bool Constant::canTrap() const {
|
|||||||
/// conservative, so if it might codegen to a relocatable entry, it should say
|
/// conservative, so if it might codegen to a relocatable entry, it should say
|
||||||
/// so. The return values are:
|
/// so. The return values are:
|
||||||
///
|
///
|
||||||
/// 0: This constant pool entry is guaranteed to never have a relocation
|
/// NoRelocation: This constant pool entry is guaranteed to never have a
|
||||||
/// applied to it (because it holds a simple constant like '4').
|
/// relocation applied to it (because it holds a simple constant like
|
||||||
/// 1: This entry has relocations, but the entries are guaranteed to be
|
/// '4').
|
||||||
/// resolvable by the static linker, so the dynamic linker will never see
|
/// LocalRelocation: This entry has relocations, but the entries are
|
||||||
/// them.
|
/// guaranteed to be resolvable by the static linker, so the dynamic
|
||||||
/// 2: This entry may have arbitrary relocations.
|
/// linker will never see them.
|
||||||
|
/// GlobalRelocations: This entry may have arbitrary relocations.
|
||||||
///
|
///
|
||||||
/// FIXME: This really should not be in VMCore.
|
/// FIXME: This really should not be in VMCore.
|
||||||
unsigned Constant::getRelocationInfo() const {
|
Constant::PossibleRelocationsTy Constant::getRelocationInfo() const {
|
||||||
if (const GlobalValue* GV = dyn_cast<GlobalValue>(this)) {
|
if (const GlobalValue *GV = dyn_cast<GlobalValue>(this)) {
|
||||||
if (GV->hasLocalLinkage() || GV->hasHiddenVisibility())
|
if (GV->hasLocalLinkage() || GV->hasHiddenVisibility())
|
||||||
return 1; // Local to this file/library.
|
return LocalRelocation; // Local to this file/library.
|
||||||
return 2; // Global reference.
|
return GlobalRelocations; // Global reference.
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned Result = 0;
|
PossibleRelocationsTy Result = NoRelocation;
|
||||||
for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
|
for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
|
||||||
Result = std::max(Result, getOperand(i)->getRelocationInfo());
|
Result = std::max(Result, getOperand(i)->getRelocationInfo());
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user