]> granicus.if.org Git - llvm/commitdiff
AMDGPU: Add support for R_AMDGPU_REL32 relocations
authorTom Stellard <thomas.stellard@amd.com>
Mon, 20 Jun 2016 17:33:43 +0000 (17:33 +0000)
committerTom Stellard <thomas.stellard@amd.com>
Mon, 20 Jun 2016 17:33:43 +0000 (17:33 +0000)
Reviewers: arsenm, kzhuravl, rafael

Subscribers: arsenm, llvm-commits, kzhuravl

Differential Revision: http://reviews.llvm.org/D21401

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273168 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp
lib/Target/AMDGPU/SIISelLowering.cpp
test/CodeGen/AMDGPU/global-zero-initializer.ll
test/CodeGen/AMDGPU/wqm.ll

index a4b4d25612344f8f2bc5b02f7903c8c98c3fa894..56e712ee2adcc1f412b6db3adfb4fcf4ff73a9f1 100644 (file)
@@ -45,6 +45,12 @@ unsigned AMDGPUELFObjectWriter::getRelocType(MCContext &Ctx,
   if (Target.getSymA()->getSymbol().getName() == "SCRATCH_RSRC_DWORD1")
     return ELF::R_AMDGPU_ABS32_HI;
 
+  switch (Fixup.getKind()) {
+  default: break;
+  case FK_PCRel_4:
+    return ELF::R_AMDGPU_REL32;
+  }
+
   llvm_unreachable("unhandled relocation type");
 }
 
index b40becfaab334864768b76fc83c7c139a55e37a3..f9acf40afc2b5d204463daed54067086c1304bce 100644 (file)
@@ -1420,7 +1420,8 @@ SDValue SITargetLowering::LowerGlobalAddress(AMDGPUMachineFunction *MFI,
                                              SelectionDAG &DAG) const {
   GlobalAddressSDNode *GSD = cast<GlobalAddressSDNode>(Op);
 
-  if (GSD->getAddressSpace() != AMDGPUAS::CONSTANT_ADDRESS)
+  if (GSD->getAddressSpace() != AMDGPUAS::CONSTANT_ADDRESS &&
+      GSD->getAddressSpace() != AMDGPUAS::GLOBAL_ADDRESS)
     return AMDGPUTargetLowering::LowerGlobalAddress(MFI, Op, DAG);
 
   SDLoc DL(GSD);
index 522a4b29775ee3b6ce48f6e6ff5343d8c787e318..59c3960c46e48575b7423c48e39fb78b48c61978 100644 (file)
@@ -1,12 +1,17 @@
-; RUN: not llc -march=amdgcn -mcpu=SI < %s 2>&1 | FileCheck %s
-; RUN: not llc -march=amdgcn -mcpu=tonga < %s 2>&1 | FileCheck %s
+; RUN: llc -march=amdgcn -mcpu=SI < %s 2>&1 | FileCheck %s
+; RUN: llc -march=amdgcn -mcpu=tonga < %s 2>&1 | FileCheck %s
 
-; CHECK: in function load_init_global_global{{.*}}: unsupported initializer for address space
-
-@lds = addrspace(1) global [256 x i32] zeroinitializer
+; CHECK: {{^}}load_init_global_global:
+; CHECK: s_getpc_b64 s{{\[}}[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]{{\]}}
+; CHECK: s_add_u32 s[[ADDR_LO:[0-9]+]], s[[PC_LO]], global+4
+; CHECK: s_addc_u32 s5, s[[PC_HI]], 0
+; CHECK: buffer_load_dword v{{[0-9]+}}, off, s{{\[}}[[ADDR_LO]]:7], 0 offset:40
+; CHECK: global:
+; CHECK: .zero 1024
+@global = addrspace(1) global [256 x i32] zeroinitializer
 
 define void @load_init_global_global(i32 addrspace(1)* %out, i1 %p) {
- %gep = getelementptr [256 x i32], [256 x i32] addrspace(1)* @lds, i32 0, i32 10
+ %gep = getelementptr [256 x i32], [256 x i32] addrspace(1)* @global, i32 0, i32 10
   %ld = load i32, i32 addrspace(1)* %gep
   store i32 %ld, i32 addrspace(1)* %out
   ret void
index 4eab0aec56b6acdaa8d50fba4d9ecb0d2b2dee30..ef9c96b5bd1c2220cf44010c2525394c2e220d8b 100644 (file)
@@ -40,6 +40,7 @@ main_body:
 ;CHECK: s_and_b64 exec, exec, [[ORIG]]
 ;CHECK: store
 ;CHECK-NOT: exec
+;CHECK: .size test3
 define amdgpu_ps <4 x float> @test3(<8 x i32> inreg %rsrc, <4 x i32> inreg %sampler, float addrspace(1)* inreg %ptr, <4 x i32> %c) {
 main_body:
   %tex = call <4 x float> @llvm.SI.image.sample.v4i32(<4 x i32> %c, <8 x i32> %rsrc, <4 x i32> %sampler, i32 15, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0)