summaryrefslogtreecommitdiff
path: root/include/llvm/CodeGen/MachineRelocation.h
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2006-07-27 18:18:13 +0000
committerEvan Cheng <evan.cheng@apple.com>2006-07-27 18:18:13 +0000
commitb4e80f8857ec40c6823f1f6bfa58bf920c05bf0d (patch)
tree90e56c3a9085faacaa4e2bdeaa187a735547f738 /include/llvm/CodeGen/MachineRelocation.h
parent7e6e44139429d1b8003426b29f14126b89591262 (diff)
downloadllvm-b4e80f8857ec40c6823f1f6bfa58bf920c05bf0d.tar.gz
llvm-b4e80f8857ec40c6823f1f6bfa58bf920c05bf0d.tar.bz2
llvm-b4e80f8857ec40c6823f1f6bfa58bf920c05bf0d.tar.xz
Add basic block machine relocation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29349 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/CodeGen/MachineRelocation.h')
-rw-r--r--include/llvm/CodeGen/MachineRelocation.h40
1 files changed, 35 insertions, 5 deletions
diff --git a/include/llvm/CodeGen/MachineRelocation.h b/include/llvm/CodeGen/MachineRelocation.h
index 58b4f87bc5..03dafc1112 100644
--- a/include/llvm/CodeGen/MachineRelocation.h
+++ b/include/llvm/CodeGen/MachineRelocation.h
@@ -19,6 +19,7 @@
namespace llvm {
class GlobalValue;
+class MachineBasicBlock;
/// MachineRelocation - This represents a target-specific relocation value,
/// produced by the code emitter. This relocation is resolved after the has
@@ -38,6 +39,7 @@ class MachineRelocation {
enum AddressType {
isResult, // Relocation has be transformed into its result pointer.
isGV, // The Target.GV field is valid.
+ isBB, // Relocation of BB address.
isExtSym, // The Target.ExtSym field is valid.
isConstPool, // Relocation of constant pool address.
isJumpTable, // Relocation of jump table address.
@@ -52,11 +54,12 @@ class MachineRelocation {
intptr_t ConstantVal;
union {
- void *Result; // If this has been resolved to a resolved pointer
- GlobalValue *GV; // If this is a pointer to an LLVM global
- const char *ExtSym; // If this is a pointer to a named symbol
- unsigned Index; // Constant pool / jump table index
- unsigned GOTIndex; // Index in the GOT of this symbol/global
+ void *Result; // If this has been resolved to a resolved pointer
+ GlobalValue *GV; // If this is a pointer to an LLVM global
+ MachineBasicBlock *MBB; // If this is a pointer to a LLVM BB
+ const char *ExtSym; // If this is a pointer to a named symbol
+ unsigned Index; // Constant pool / jump table index
+ unsigned GOTIndex; // Index in the GOT of this symbol/global
} Target;
unsigned TargetReloType : 6; // The target relocation ID.
@@ -83,6 +86,22 @@ public:
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
/// symbol, like "free".
///
@@ -160,6 +179,12 @@ public:
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.
///
bool isString() const {
@@ -200,6 +225,11 @@ public:
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.
///
const char *getString() const {