From dfab291702a9c6e88981047bf6a3fe42f7d508b0 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 11 Aug 2009 20:30:58 +0000 Subject: [PATCH] split "JumpTableDirective" (an existing hack) into a PIC and nonPIC version. This allows TAI implementations to specify the directive to use based on the mode being codegen'd for. The real fix for this is to remove JumpTableDirective, but I don't feel like diving into the jumptable snarl just now. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78709 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Target/TargetAsmInfo.h | 10 ++++++---- lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp | 10 +++------- lib/Target/Alpha/AlphaTargetAsmInfo.cpp | 2 +- lib/Target/Mips/MipsTargetAsmInfo.cpp | 4 +--- lib/Target/TargetAsmInfo.cpp | 1 + 5 files changed, 12 insertions(+), 15 deletions(-) diff --git a/include/llvm/Target/TargetAsmInfo.h b/include/llvm/Target/TargetAsmInfo.h index 2dd644c089f..2654025af2e 100644 --- a/include/llvm/Target/TargetAsmInfo.h +++ b/include/llvm/Target/TargetAsmInfo.h @@ -184,9 +184,11 @@ namespace llvm { //===--- Section Switching Directives ---------------------------------===// - /// JumpTableDirective - if non-null, the directive to emit before a jump - /// table. + /// JumpTableDirective - if non-null, the directive to emit before jump + /// table entries. FIXME: REMOVE THIS. const char *JumpTableDirective; + const char *PICJumpTableDirective; + //===--- Global Variable Emission Directives --------------------------===// @@ -418,8 +420,8 @@ namespace llvm { const char *getAscizDirective() const { return AscizDirective; } - const char *getJumpTableDirective() const { - return JumpTableDirective; + const char *getJumpTableDirective(bool isPIC) const { + return isPIC ? PICJumpTableDirective : JumpTableDirective; } const char *getAlignDirective() const { return AlignDirective; diff --git a/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp b/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp index 02ced4451f9..178e0851a0c 100644 --- a/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp +++ b/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp @@ -923,9 +923,7 @@ void ARMAsmPrinter::printJTBlockOperand(const MachineInstr *MI, int OpNum) { O << TAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber() << '_' << JTI << '_' << MO2.getImm() << ":\n"; - const char *JTEntryDirective = TAI->getJumpTableDirective(); - if (!JTEntryDirective) - JTEntryDirective = TAI->getData32bitsDirective(); + const char *JTEntryDirective = TAI->getData32bitsDirective(); const MachineFunction *MF = MI->getParent()->getParent(); const MachineJumpTableInfo *MJTI = MF->getJumpTableInfo(); @@ -947,10 +945,8 @@ void ARMAsmPrinter::printJTBlockOperand(const MachineInstr *MI, int OpNum) { << "_set_" << MBB->getNumber(); else if (TM.getRelocationModel() == Reloc::PIC_) { printBasicBlockLabel(MBB, false, false, false); - // If the arch uses custom Jump Table directives, don't calc relative to JT - if (!TAI->getJumpTableDirective()) - O << '-' << TAI->getPrivateGlobalPrefix() << "JTI" - << getFunctionNumber() << '_' << JTI << '_' << MO2.getImm(); + O << '-' << TAI->getPrivateGlobalPrefix() << "JTI" + << getFunctionNumber() << '_' << JTI << '_' << MO2.getImm(); } else { printBasicBlockLabel(MBB, false, false, false); } diff --git a/lib/Target/Alpha/AlphaTargetAsmInfo.cpp b/lib/Target/Alpha/AlphaTargetAsmInfo.cpp index 0abdce9c3b0..20be50eff95 100644 --- a/lib/Target/Alpha/AlphaTargetAsmInfo.cpp +++ b/lib/Target/Alpha/AlphaTargetAsmInfo.cpp @@ -17,6 +17,6 @@ using namespace llvm; AlphaTargetAsmInfo::AlphaTargetAsmInfo() { AlignmentIsInBytes = false; PrivateGlobalPrefix = "$"; - JumpTableDirective = ".gprel32"; + PICJumpTableDirective = ".gprel32"; WeakRefDirective = "\t.weak\t"; } diff --git a/lib/Target/Mips/MipsTargetAsmInfo.cpp b/lib/Target/Mips/MipsTargetAsmInfo.cpp index aa40ff6a5ac..8cb58c8bb97 100644 --- a/lib/Target/Mips/MipsTargetAsmInfo.cpp +++ b/lib/Target/Mips/MipsTargetAsmInfo.cpp @@ -24,7 +24,5 @@ MipsTargetAsmInfo::MipsTargetAsmInfo(const MipsTargetMachine &TM) { PrivateGlobalPrefix = "$"; CommentString = "#"; ZeroDirective = "\t.space\t"; - - if (TM.getRelocationModel() == Reloc::PIC_) - JumpTableDirective = "\t.gpword\t"; + PICJumpTableDirective = "\t.gpword\t"; } diff --git a/lib/Target/TargetAsmInfo.cpp b/lib/Target/TargetAsmInfo.cpp index 84a97710d67..51aeae43800 100644 --- a/lib/Target/TargetAsmInfo.cpp +++ b/lib/Target/TargetAsmInfo.cpp @@ -54,6 +54,7 @@ TargetAsmInfo::TargetAsmInfo() { AlignmentIsInBytes = true; TextAlignFillValue = 0; JumpTableDirective = 0; + PICJumpTableDirective = 0; GlobalDirective = "\t.globl\t"; SetDirective = 0; LCOMMDirective = 0; -- 2.34.1