aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-01-25 21:01:58 +0000
committerChris Lattner <sabre@nondot.org>2010-01-25 21:01:58 +0000
commita86106ed88582b913ac2394a5a4ad1868b299da4 (patch)
tree3db71f88edf8cb080dd7d89cc2e882ee07ccff23
parentcba386ccac87c2446579ef235d2b4dc7951c0941 (diff)
pull the non-pic jump table case out of printPICJumpTableEntry
and MCize the non-pic case. Now printPICJumpTableEntry really is just about printing PIC entries. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@94446 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/CodeGen/AsmPrinter/AsmPrinter.cpp23
-rw-r--r--lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp3
2 files changed, 15 insertions, 11 deletions
diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
index 39712ded4c..3077ae371d 100644
--- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
@@ -524,9 +524,16 @@ void AsmPrinter::EmitJumpTableInfo(MachineJumpTableInfo *MJTI,
OutStreamer.EmitLabel(GetJTISymbol(i));
- for (unsigned ii = 0, ee = JTBBs.size(); ii != ee; ++ii) {
- printPICJumpTableEntry(MJTI, JTBBs[ii], i);
- O << '\n';
+ if (!IsPic) {
+ unsigned EntrySize = MJTI->getEntrySize();
+ for (unsigned ii = 0, ee = JTBBs.size(); ii != ee; ++ii) {
+ MCSymbol *MBBSym = GetMBBSymbol(JTBBs[ii]->getNumber());
+ OutStreamer.EmitValue(MCSymbolRefExpr::Create(MBBSym, OutContext),
+ EntrySize, /*addrspace*/0);
+ }
+ } else {
+ for (unsigned ii = 0, ee = JTBBs.size(); ii != ee; ++ii)
+ printPICJumpTableEntry(MJTI, JTBBs[ii], i);
}
}
}
@@ -534,12 +541,9 @@ void AsmPrinter::EmitJumpTableInfo(MachineJumpTableInfo *MJTI,
void AsmPrinter::printPICJumpTableEntry(const MachineJumpTableInfo *MJTI,
const MachineBasicBlock *MBB,
unsigned uid) const {
- bool isPIC = TM.getRelocationModel() == Reloc::PIC_;
-
// Use JumpTableDirective otherwise honor the entry size from the jump table
// info.
- const char *JTEntryDirective = 0;
- if (isPIC) JTEntryDirective = MAI->getPICJumpTableDirective();
+ const char *JTEntryDirective = MAI->getPICJumpTableDirective();
bool HadJTEntryDirective = JTEntryDirective != NULL;
if (!HadJTEntryDirective) {
JTEntryDirective = MJTI->getEntrySize() == 4 ?
@@ -553,9 +557,7 @@ void AsmPrinter::printPICJumpTableEntry(const MachineJumpTableInfo *MJTI,
// emit the table entries as differences between two text section labels.
// If we're emitting non-PIC code, then emit the entries as direct
// references to the target basic blocks.
- if (!isPIC) {
- O << *GetMBBSymbol(MBB->getNumber());
- } else if (MAI->getSetDirective()) {
+ if (MAI->getSetDirective()) {
O << MAI->getPrivateGlobalPrefix() << getFunctionNumber()
<< '_' << uid << "_set_" << MBB->getNumber();
} else {
@@ -565,6 +567,7 @@ void AsmPrinter::printPICJumpTableEntry(const MachineJumpTableInfo *MJTI,
if (!HadJTEntryDirective)
O << '-' << *GetJTISymbol(uid);
}
+ O << '\n';
}
diff --git a/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp b/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp
index 44a9a28ef8..7fc6eba170 100644
--- a/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp
+++ b/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp
@@ -498,8 +498,9 @@ void X86AsmPrinter::printPICJumpTableEntry(const MachineJumpTableInfo *MJTI,
<< '_' << uid << "_set_" << MBB->getNumber();
} else if (Subtarget->isPICStyleGOT())
O << *GetMBBSymbol(MBB->getNumber()) << "@GOTOFF";
- else
+ else // mdynamic-no-pic
O << *GetMBBSymbol(MBB->getNumber());
+ O << '\n';
}
bool X86AsmPrinter::printAsmMRegister(const MachineOperand &MO, char Mode) {