[PATCH] D25548: [AMDGPU] Add 32-bit lo/hi got and pc relative variant kinds and emit appropriate relocations

Konstantin Zhuravlyov via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 12 22:47:45 PDT 2016


kzhuravl created this revision.
kzhuravl added reviewers: tstellarAMD, tony-tye.
kzhuravl added a subscriber: llvm-commits.
Herald added subscribers: yaxunl, nhaehnle, wdng, arsenm.

https://reviews.llvm.org/D25548

Files:
  include/llvm/MC/MCExpr.h
  lib/MC/MCExpr.cpp
  lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp
  test/MC/AMDGPU/reloc.s


Index: test/MC/AMDGPU/reloc.s
===================================================================
--- test/MC/AMDGPU/reloc.s
+++ test/MC/AMDGPU/reloc.s
@@ -4,7 +4,11 @@
 // CHECK: .rel.text {
 // CHECK: R_AMDGPU_ABS32_LO SCRATCH_RSRC_DWORD0 0x0
 // CHECK: R_AMDGPU_ABS32_HI SCRATCH_RSRC_DWORD1 0x0
-// CHECK: R_AMDGPU_GOTPCREL global_var 0x0
+// CHECK: R_AMDGPU_GOTPCREL global_var0 0x0
+// CHECK: R_AMDGPU_GOTPCREL32_LO global_var1 0x0
+// CHECK: R_AMDGPU_GOTPCREL32_HI global_var2 0x0
+// CHECK: R_AMDGPU_REL32_LO global_var3 0x0
+// CHECK: R_AMDGPU_REL32_HI global_var4 0x0
 // CHECK: R_AMDGPU_ABS32 var 0x0
 // CHECK: }
 // CHECK: .rel.data {
@@ -15,9 +19,17 @@
 kernel:
   s_mov_b32 s0, SCRATCH_RSRC_DWORD0
   s_mov_b32 s1, SCRATCH_RSRC_DWORD1
-  s_mov_b32 s2, global_var at GOTPCREL
+  s_mov_b32 s2, global_var0 at GOTPCREL
+  s_mov_b32 s3, global_var1 at gotpcrel32@lo
+  s_mov_b32 s4, global_var2 at gotpcrel32@hi
+  s_mov_b32 s5, global_var3 at rel32@lo
+  s_mov_b32 s6, global_var4 at rel32@hi
 
-.globl global_var
+.globl global_var0
+.globl global_var1
+.globl global_var2
+.globl global_var3
+.globl global_var4
 
 .globl SCRATCH_RSRC_DWORD0
 
Index: lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp
===================================================================
--- lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp
+++ lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp
@@ -53,6 +53,14 @@
     break;
   case MCSymbolRefExpr::VK_GOTPCREL:
     return ELF::R_AMDGPU_GOTPCREL;
+  case MCSymbolRefExpr::VK_AMDGPU_GOTPCREL32_LO:
+    return ELF::R_AMDGPU_GOTPCREL32_LO;
+  case MCSymbolRefExpr::VK_AMDGPU_GOTPCREL32_HI:
+    return ELF::R_AMDGPU_GOTPCREL32_HI;
+  case MCSymbolRefExpr::VK_AMDGPU_REL32_LO:
+    return ELF::R_AMDGPU_REL32_LO;
+  case MCSymbolRefExpr::VK_AMDGPU_REL32_HI:
+    return ELF::R_AMDGPU_REL32_HI;
   }
 
   switch (Fixup.getKind()) {
Index: lib/MC/MCExpr.cpp
===================================================================
--- lib/MC/MCExpr.cpp
+++ lib/MC/MCExpr.cpp
@@ -275,6 +275,10 @@
   case VK_Hexagon_IE: return "IE";
   case VK_Hexagon_IE_GOT: return "IEGOT";
   case VK_WebAssembly_FUNCTION: return "FUNCTION";
+  case VK_AMDGPU_GOTPCREL32_LO: return "gotpcrel32 at lo";
+  case VK_AMDGPU_GOTPCREL32_HI: return "gotpcrel32 at hi";
+  case VK_AMDGPU_REL32_LO: return "rel32 at lo";
+  case VK_AMDGPU_REL32_HI: return "rel32 at hi";
   }
   llvm_unreachable("Invalid variant kind");
 }
@@ -372,6 +376,10 @@
     .Case("prel31", VK_ARM_PREL31)
     .Case("sbrel", VK_ARM_SBREL)
     .Case("tlsldo", VK_ARM_TLSLDO)
+    .Case("gotpcrel32 at lo", VK_AMDGPU_GOTPCREL32_LO)
+    .Case("gotpcrel32 at hi", VK_AMDGPU_GOTPCREL32_HI)
+    .Case("rel32 at lo", VK_AMDGPU_REL32_LO)
+    .Case("rel32 at hi", VK_AMDGPU_REL32_HI)
     .Default(VK_Invalid);
 }
 
Index: include/llvm/MC/MCExpr.h
===================================================================
--- include/llvm/MC/MCExpr.h
+++ include/llvm/MC/MCExpr.h
@@ -266,6 +266,11 @@
 
     VK_WebAssembly_FUNCTION, // Function table index, rather than virtual addr
 
+    VK_AMDGPU_GOTPCREL32_LO, // symbol at gotpcrel32@lo
+    VK_AMDGPU_GOTPCREL32_HI, // symbol at gotpcrel32@hi
+    VK_AMDGPU_REL32_LO,      // symbol at rel32@lo
+    VK_AMDGPU_REL32_HI,      // symbol at rel32@hi
+
     VK_TPREL,
     VK_DTPREL
   };


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D25548.74475.patch
Type: text/x-patch
Size: 3287 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161013/9d67b6d7/attachment.bin>


More information about the llvm-commits mailing list