[llvm-commits] CVS: llvm/include/llvm/CodeGen/MachineRelocation.h
Evan Cheng
evan.cheng at apple.com
Thu Jun 22 18:02:49 PDT 2006
Changes in directory llvm/include/llvm/CodeGen:
MachineRelocation.h updated: 1.9 -> 1.10
---
Log message:
Added jump table address relocation.
---
Diffs of the changes: (+35 -4)
MachineRelocation.h | 39 +++++++++++++++++++++++++++++++++++----
1 files changed, 35 insertions(+), 4 deletions(-)
Index: llvm/include/llvm/CodeGen/MachineRelocation.h
diff -u llvm/include/llvm/CodeGen/MachineRelocation.h:1.9 llvm/include/llvm/CodeGen/MachineRelocation.h:1.10
--- llvm/include/llvm/CodeGen/MachineRelocation.h:1.9 Wed May 3 15:30:20 2006
+++ llvm/include/llvm/CodeGen/MachineRelocation.h Thu Jun 22 20:02:37 2006
@@ -39,7 +39,8 @@
isResult, // Relocation has be transformed into its result pointer.
isGV, // The Target.GV field is valid.
isExtSym, // The Target.ExtSym field is valid.
- isConstPool, // The Target.ConstPool field is valid.
+ isConstPool, // Relocation of constant pool address.
+ isJumpTable, // Relocation of jump table address.
isGOTIndex // The Target.GOTIndex field is valid.
};
@@ -54,7 +55,7 @@
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 ConstPool; // In this is a pointer to a constant pool entry
+ unsigned Index; // Constant pool / jump table index
unsigned GOTIndex; // Index in the GOT of this symbol/global
} Target;
@@ -113,7 +114,24 @@
Result.AddrType = isConstPool;
Result.DoesntNeedFnStub = false;
Result.GOTRelative = false;
- Result.Target.ConstPool = CPI;
+ Result.Target.Index = CPI;
+ return Result;
+ }
+
+ /// MachineRelocation::getJumpTable - Return a relocation entry for a jump
+ /// table entry.
+ ///
+ static MachineRelocation getJumpTable(intptr_t offset,unsigned RelocationType,
+ unsigned JTI, 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 = isJumpTable;
+ Result.DoesntNeedFnStub = false;
+ Result.GOTRelative = false;
+ Result.Target.Index = JTI;
return Result;
}
@@ -154,6 +172,12 @@
return AddrType == isConstPool;
}
+ /// isJumpTableIndex - Return true if this is a jump table reference.
+ ///
+ bool isJumpTableIndex() const {
+ return AddrType == isJumpTable;
+ }
+
/// isGOTRelative - Return true the target wants the index into the GOT of
/// the symbol rather than the address of the symbol.
bool isGOTRelative() const {
@@ -187,7 +211,14 @@
/// the index into the constant pool.
unsigned getConstantPoolIndex() const {
assert(isConstantPoolIndex() && "This is not a constant pool reference!");
- return Target.ConstPool;
+ return Target.Index;
+ }
+
+ /// getJumpTableIndex - If this is a jump table reference, return
+ /// the index into the jump table.
+ unsigned getJumpTableIndex() const {
+ assert(isJumpTableIndex() && "This is not a jump table reference!");
+ return Target.Index;
}
/// getResultPointer - Once this has been resolved to point to an actual
More information about the llvm-commits
mailing list