From a86106ed88582b913ac2394a5a4ad1868b299da4 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 25 Jan 2010 21:01:58 +0000 Subject: [PATCH] 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 --- lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 23 ++++++++++++--------- lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp | 3 ++- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 39712ded4c2..3077ae371d6 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 44a9a28ef89..7fc6eba170c 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) {