[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 10:38:12 PDT 2021


This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG33cc0cfd4677: [X86] Don't affect jump tables under +tagged-globals. (authored by morehouse).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112832/new/

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.383426.patch
Type: text/x-patch
Size: 2075 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20211029/a8ac598b/attachment.bin>


More information about the llvm-commits mailing list