Fix jump tables to match gcc (and the ABI and whatnot)
authorAndrew Lenharth <andrewl@lenharth.org>
Sun, 24 Sep 2006 19:46:56 +0000 (19:46 +0000)
committerAndrew Lenharth <andrewl@lenharth.org>
Sun, 24 Sep 2006 19:46:56 +0000 (19:46 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30594 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/Alpha/AlphaISelLowering.cpp
lib/Target/Alpha/AlphaTargetAsmInfo.cpp
lib/Target/Alpha/AlphaTargetMachine.cpp

index bcd60ed753526dbeada7cfa682ada01adf36bd49..cbbad5328553a5c46150717d2446a22225fe58a5 100644 (file)
@@ -129,6 +129,8 @@ AlphaTargetLowering::AlphaTargetLowering(TargetMachine &TM) : TargetLowering(TM)
   setOperationAction(ISD::RET,     MVT::Other, Custom);
 
   setOperationAction(ISD::JumpTable, MVT::i64, Custom);
+  setOperationAction(ISD::JumpTable, MVT::i32, Custom);
+  setOperationAction(ISD::JumpTableRelocBase, MVT::i64, Custom);
 
   setStackPointerRegisterToSaveRestore(Alpha::R30);
 
@@ -412,6 +414,8 @@ SDOperand AlphaTargetLowering::LowerOperation(SDOperand Op, SelectionDAG &DAG) {
                                                           GP, RA);
   case ISD::RET: return LowerRET(Op,DAG, getVRegRA());
   case ISD::JumpTable: return LowerJumpTable(Op, DAG);
+  case ISD::JumpTableRelocBase: 
+    return DAG.getNode(AlphaISD::GlobalBaseReg, MVT::i64);
 
   case ISD::SINT_TO_FP: {
     assert(MVT::i64 == Op.getOperand(0).getValueType() && 
index fd77b87f2d947e89e0b93c009023180c478c482f..ed8f6cbe4aa92e20eb0b378abd3c53a853296cca 100644 (file)
@@ -18,4 +18,6 @@ using namespace llvm;
 AlphaTargetAsmInfo::AlphaTargetAsmInfo(const AlphaTargetMachine &TM) {
   AlignmentIsInBytes = false;
   PrivateGlobalPrefix = "$";
+  JumpTableDirective = ".gprel32";
+  JumpTableTextSection = "\t.section .rodata\n";
 }
index 6204998b24063869b2f16f549b536f28c609c957..a1aab94d9a9a3e3561c89cff8ba72586b0ad9401 100644 (file)
@@ -59,6 +59,7 @@ AlphaTargetMachine::AlphaTargetMachine(const Module &M, const std::string &FS)
     FrameInfo(TargetFrameInfo::StackGrowsDown, 16, 0),
     JITInfo(*this),
     Subtarget(M, FS) {
+  setRelocationModel(Reloc::PIC_);
 }