mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-23 14:25:07 +00:00
Add basic block machine relocation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29349 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
namespace llvm {
|
namespace llvm {
|
||||||
class GlobalValue;
|
class GlobalValue;
|
||||||
|
class MachineBasicBlock;
|
||||||
|
|
||||||
/// MachineRelocation - This represents a target-specific relocation value,
|
/// MachineRelocation - This represents a target-specific relocation value,
|
||||||
/// produced by the code emitter. This relocation is resolved after the has
|
/// produced by the code emitter. This relocation is resolved after the has
|
||||||
@@ -38,6 +39,7 @@ class MachineRelocation {
|
|||||||
enum AddressType {
|
enum AddressType {
|
||||||
isResult, // Relocation has be transformed into its result pointer.
|
isResult, // Relocation has be transformed into its result pointer.
|
||||||
isGV, // The Target.GV field is valid.
|
isGV, // The Target.GV field is valid.
|
||||||
|
isBB, // Relocation of BB address.
|
||||||
isExtSym, // The Target.ExtSym field is valid.
|
isExtSym, // The Target.ExtSym field is valid.
|
||||||
isConstPool, // Relocation of constant pool address.
|
isConstPool, // Relocation of constant pool address.
|
||||||
isJumpTable, // Relocation of jump table address.
|
isJumpTable, // Relocation of jump table address.
|
||||||
@@ -52,11 +54,12 @@ class MachineRelocation {
|
|||||||
intptr_t ConstantVal;
|
intptr_t ConstantVal;
|
||||||
|
|
||||||
union {
|
union {
|
||||||
void *Result; // If this has been resolved to a resolved pointer
|
void *Result; // If this has been resolved to a resolved pointer
|
||||||
GlobalValue *GV; // If this is a pointer to an LLVM global
|
GlobalValue *GV; // If this is a pointer to an LLVM global
|
||||||
const char *ExtSym; // If this is a pointer to a named symbol
|
MachineBasicBlock *MBB; // If this is a pointer to a LLVM BB
|
||||||
unsigned Index; // Constant pool / jump table index
|
const char *ExtSym; // If this is a pointer to a named symbol
|
||||||
unsigned GOTIndex; // Index in the GOT of this symbol/global
|
unsigned Index; // Constant pool / jump table index
|
||||||
|
unsigned GOTIndex; // Index in the GOT of this symbol/global
|
||||||
} Target;
|
} Target;
|
||||||
|
|
||||||
unsigned TargetReloType : 6; // The target relocation ID.
|
unsigned TargetReloType : 6; // The target relocation ID.
|
||||||
@@ -83,6 +86,22 @@ public:
|
|||||||
return Result;
|
return Result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// MachineRelocation::getBB - Return a relocation entry for a BB.
|
||||||
|
///
|
||||||
|
static MachineRelocation getBB(intptr_t offset,unsigned RelocationType,
|
||||||
|
MachineBasicBlock *MBB, intptr_t cst = 0) {
|
||||||
|
assert((RelocationType & ~63) == 0 && "Relocation type too large!");
|
||||||
|
MachineRelocation Result;
|
||||||
|
Result.Offset = offset;
|
||||||
|
Result.ConstantVal = cst;
|
||||||
|
Result.TargetReloType = RelocationType;
|
||||||
|
Result.AddrType = isBB;
|
||||||
|
Result.DoesntNeedFnStub = false;
|
||||||
|
Result.GOTRelative = false;
|
||||||
|
Result.Target.MBB = MBB;
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
/// MachineRelocation::getExtSym - Return a relocation entry for an external
|
/// MachineRelocation::getExtSym - Return a relocation entry for an external
|
||||||
/// symbol, like "free".
|
/// symbol, like "free".
|
||||||
///
|
///
|
||||||
@@ -160,6 +179,12 @@ public:
|
|||||||
return AddrType == isGV;
|
return AddrType == isGV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// isBasicBlock - Return true if this relocation is a basic block reference.
|
||||||
|
///
|
||||||
|
bool isBasicBlock() const {
|
||||||
|
return AddrType == isBB;
|
||||||
|
}
|
||||||
|
|
||||||
/// isString - Return true if this is a constant string.
|
/// isString - Return true if this is a constant string.
|
||||||
///
|
///
|
||||||
bool isString() const {
|
bool isString() const {
|
||||||
@@ -200,6 +225,11 @@ public:
|
|||||||
return Target.GV;
|
return Target.GV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MachineBasicBlock *getBasicBlock() const {
|
||||||
|
assert(isBasicBlock() && "This is not a basic block reference!");
|
||||||
|
return Target.MBB;
|
||||||
|
}
|
||||||
|
|
||||||
/// getString - If this is a string value, return the string reference.
|
/// getString - If this is a string value, return the string reference.
|
||||||
///
|
///
|
||||||
const char *getString() const {
|
const char *getString() const {
|
||||||
|
Reference in New Issue
Block a user