[PATCH] D112832: [X86] Don't affect jump tables under +tagged-globals.
Matt Morehouse via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 29 09:57:20 PDT 2021
morehouse created this revision.
morehouse added reviewers: eugenis, pcc, vitalybuka.
Herald added subscribers: pengfei, hiraditya.
morehouse requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
`classifyLocalReference(nullptr)` is called to get the appropriate
relocation type for jump tables. We should not use @GOTPCREL for this
case.
The new test cases trigger assertions without this patch.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D112832
Files:
llvm/lib/Target/X86/X86Subtarget.cpp
llvm/test/CodeGen/X86/tagged-globals-pic.ll
llvm/test/CodeGen/X86/tagged-globals-static.ll
Index: llvm/test/CodeGen/X86/tagged-globals-static.ll
===================================================================
--- llvm/test/CodeGen/X86/tagged-globals-static.ll
+++ llvm/test/CodeGen/X86/tagged-globals-static.ll
@@ -42,4 +42,27 @@
ret void ()* @func
}
+; Jump tables shouldn't go through the GOT.
+define i32 @jump_table(i32 %x) #0 {
+ ; CHECK-LABEL: jump_table:
+ ; CHECK-NOT: @GOT
+
+ switch i32 %x, label %default [
+ i32 0, label %1
+ i32 1, label %2
+ i32 2, label %3
+ i32 3, label %4
+ ]
+1:
+ ret i32 7
+2:
+ ret i32 42
+3:
+ ret i32 3
+4:
+ ret i32 8
+default:
+ ret i32 %x
+}
+
attributes #0 = { "target-features"="+tagged-globals" }
Index: llvm/test/CodeGen/X86/tagged-globals-pic.ll
===================================================================
--- llvm/test/CodeGen/X86/tagged-globals-pic.ll
+++ llvm/test/CodeGen/X86/tagged-globals-pic.ll
@@ -42,4 +42,27 @@
ret void ()* @func
}
+; Jump tables shouldn't go through the GOT.
+define i32 @jump_table(i32 %x) #0 {
+ ; CHECK-LABEL: jump_table:
+ ; CHECK-NOT: @GOT
+
+ switch i32 %x, label %default [
+ i32 0, label %1
+ i32 1, label %2
+ i32 2, label %3
+ i32 3, label %4
+ ]
+1:
+ ret i32 7
+2:
+ ret i32 42
+3:
+ ret i32 3
+4:
+ ret i32 8
+default:
+ ret i32 %x
+}
+
attributes #0 = { "target-features"="+tagged-globals" }
Index: llvm/lib/Target/X86/X86Subtarget.cpp
===================================================================
--- llvm/lib/Target/X86/X86Subtarget.cpp
+++ llvm/lib/Target/X86/X86Subtarget.cpp
@@ -70,8 +70,8 @@
// Tagged globals have non-zero upper bits, which makes direct references
// require a 64-bit immediate. On the small code model this causes relocation
// errors, so we go through the GOT instead.
- if (AllowTaggedGlobals && TM.getCodeModel() == CodeModel::Small &&
- !isa_and_nonnull<Function>(GV))
+ if (AllowTaggedGlobals && TM.getCodeModel() == CodeModel::Small && GV &&
+ !isa<Function>(GV))
return X86II::MO_GOTPCREL;
// If we're not PIC, it's not very interesting.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D112832.383407.patch
Type: text/x-patch
Size: 2075 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20211029/66f0e9d9/attachment.bin>
More information about the llvm-commits
mailing list