From: Chris Lattner Date: Mon, 25 Jan 2010 23:38:14 +0000 (+0000) Subject: in 32-bit pic mode for targets with a GOT, x86 emits jump table X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=5e1df8d1f71f1a8a534b8b5929a7dd670fe010c6;p=oota-llvm.git in 32-bit pic mode for targets with a GOT, x86 emits jump table entries with @GOTOFF whih is EK_GPRel32BlockAddress. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@94474 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp index 02582a044f1..aae17a8cf1b 100644 --- a/lib/Target/X86/X86ISelLowering.cpp +++ b/lib/Target/X86/X86ISelLowering.cpp @@ -31,6 +31,7 @@ #include "llvm/CodeGen/MachineFrameInfo.h" #include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineInstrBuilder.h" +#include "llvm/CodeGen/MachineJumpTableInfo.h" #include "llvm/CodeGen/MachineModuleInfo.h" #include "llvm/CodeGen/MachineRegisterInfo.h" #include "llvm/CodeGen/PseudoSourceValue.h" @@ -1090,6 +1091,20 @@ X86TargetLowering::getOptimalMemOpType(uint64_t Size, unsigned Align, return MVT::i32; } +/// getJumpTableEncoding - Return the entry encoding for a jump table in the +/// current function. The returned value is a member of the +/// MachineJumpTableInfo::JTEntryKind enum. +unsigned X86TargetLowering::getJumpTableEncoding() const { + // In GOT pic mode, each entry in the jump table is emitted as a @GOTOFF + // symbol. + if (getTargetMachine().getRelocationModel() == Reloc::PIC_ && + Subtarget->isPICStyleGOT()) + return MachineJumpTableInfo::EK_GPRel32BlockAddress; + + // Otherwise, use the normal jump table encoding heuristics. + return TargetLowering::getJumpTableEncoding(); +} + /// getPICJumpTableRelocaBase - Returns relocation base for the given PIC /// jumptable. SDValue X86TargetLowering::getPICJumpTableRelocBase(SDValue Table, diff --git a/lib/Target/X86/X86ISelLowering.h b/lib/Target/X86/X86ISelLowering.h index 11b52257f69..8fc4ec9b33d 100644 --- a/lib/Target/X86/X86ISelLowering.h +++ b/lib/Target/X86/X86ISelLowering.h @@ -376,6 +376,8 @@ namespace llvm { public: explicit X86TargetLowering(X86TargetMachine &TM); + unsigned getJumpTableEncoding() const; + /// getPICJumpTableRelocaBase - Returns relocation base for the given PIC /// jumptable. SDValue getPICJumpTableRelocBase(SDValue Table,