split "JumpTableDirective" (an existing hack) into a PIC and nonPIC
authorChris Lattner <sabre@nondot.org>
Tue, 11 Aug 2009 20:30:58 +0000 (20:30 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 11 Aug 2009 20:30:58 +0000 (20:30 +0000)
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
lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
lib/Target/Alpha/AlphaTargetAsmInfo.cpp
lib/Target/Mips/MipsTargetAsmInfo.cpp
lib/Target/TargetAsmInfo.cpp

index 2dd644c089f5f44a6f8ac89fb3364e306f018dd0..2654025af2ecafffa5aaa68bba837b3734e4a47e 100644 (file)
@@ -184,9 +184,11 @@ namespace llvm {
 
     //===--- Section Switching Directives ---------------------------------===//
     
-    /// JumpTableDirective - if non-null, the directive to emit before 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;
index 02ced4451f948e032ce48abb7c12b72800758d41..178e0851a0c8b47040e40239f0b4f3b4a25b0e18 100644 (file)
@@ -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);
     }
index 0abdce9c3b040619c5a6c294bbdba3a8b506d89d..20be50eff957cc1742bfb717cd38e201254fe8d1 100644 (file)
@@ -17,6 +17,6 @@ using namespace llvm;
 AlphaTargetAsmInfo::AlphaTargetAsmInfo() {
   AlignmentIsInBytes = false;
   PrivateGlobalPrefix = "$";
-  JumpTableDirective = ".gprel32";
+  PICJumpTableDirective = ".gprel32";
   WeakRefDirective = "\t.weak\t";
 }
index aa40ff6a5ac7cedb61643d34ab806d952e89ab15..8cb58c8bb97aef6547a0ef52f3a42ba79de2182f 100644 (file)
@@ -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";
 }
index 84a97710d6781c02e569a9ec2be8ba313dbdd659..51aeae438002b8932c5fab840bdfe9abd475795e 100644 (file)
@@ -54,6 +54,7 @@ TargetAsmInfo::TargetAsmInfo() {
   AlignmentIsInBytes = true;
   TextAlignFillValue = 0;
   JumpTableDirective = 0;
+  PICJumpTableDirective = 0;
   GlobalDirective = "\t.globl\t";
   SetDirective = 0;
   LCOMMDirective = 0;