From 0607a2f554d1f8daa68c2cc8486cec0886232fbb Mon Sep 17 00:00:00 2001 From: Andrew Lenharth Date: Sun, 24 Sep 2006 19:46:56 +0000 Subject: [PATCH] Fix jump tables to match gcc (and the ABI and whatnot) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30594 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/Alpha/AlphaISelLowering.cpp | 4 ++++ lib/Target/Alpha/AlphaTargetAsmInfo.cpp | 2 ++ lib/Target/Alpha/AlphaTargetMachine.cpp | 1 + 3 files changed, 7 insertions(+) diff --git a/lib/Target/Alpha/AlphaISelLowering.cpp b/lib/Target/Alpha/AlphaISelLowering.cpp index bcd60ed7535..cbbad532855 100644 --- a/lib/Target/Alpha/AlphaISelLowering.cpp +++ b/lib/Target/Alpha/AlphaISelLowering.cpp @@ -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() && diff --git a/lib/Target/Alpha/AlphaTargetAsmInfo.cpp b/lib/Target/Alpha/AlphaTargetAsmInfo.cpp index fd77b87f2d9..ed8f6cbe4aa 100644 --- a/lib/Target/Alpha/AlphaTargetAsmInfo.cpp +++ b/lib/Target/Alpha/AlphaTargetAsmInfo.cpp @@ -18,4 +18,6 @@ using namespace llvm; AlphaTargetAsmInfo::AlphaTargetAsmInfo(const AlphaTargetMachine &TM) { AlignmentIsInBytes = false; PrivateGlobalPrefix = "$"; + JumpTableDirective = ".gprel32"; + JumpTableTextSection = "\t.section .rodata\n"; } diff --git a/lib/Target/Alpha/AlphaTargetMachine.cpp b/lib/Target/Alpha/AlphaTargetMachine.cpp index 6204998b240..a1aab94d9a9 100644 --- a/lib/Target/Alpha/AlphaTargetMachine.cpp +++ b/lib/Target/Alpha/AlphaTargetMachine.cpp @@ -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_); } -- 2.34.1