From 57ddfb8bca95a586773e458dae5e3b09e7b34d55 Mon Sep 17 00:00:00 2001 From: Konstantin Zhuravlyov Date: Tue, 5 Apr 2016 16:00:58 +0000 Subject: [PATCH] [AMDGPU] Emit linkonce and linkonce_odr symbols Differential Revision: http://reviews.llvm.org/D18726 llvm-svn: 265408 --- lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp | 2 + test/CodeGen/AMDGPU/hsa-globals.ll | 56 ++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp b/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp index 1ef9f597dc2..0c494e37d1e 100644 --- a/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp +++ b/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp @@ -134,6 +134,8 @@ void AMDGPUAsmPrinter::EmitFunctionEntryLabel() { static bool isModuleLinkage(const GlobalValue *GV) { switch (GV->getLinkage()) { + case GlobalValue::LinkOnceODRLinkage: + case GlobalValue::LinkOnceAnyLinkage: case GlobalValue::InternalLinkage: case GlobalValue::CommonLinkage: return true; diff --git a/test/CodeGen/AMDGPU/hsa-globals.ll b/test/CodeGen/AMDGPU/hsa-globals.ll index 90322ac3dc0..a19a33492a7 100644 --- a/test/CodeGen/AMDGPU/hsa-globals.ll +++ b/test/CodeGen/AMDGPU/hsa-globals.ll @@ -1,10 +1,14 @@ ; RUN: llc < %s -mtriple=amdgcn--amdhsa -mcpu=kaveri | FileCheck --check-prefix=ASM %s ; RUN: llc < %s -mtriple=amdgcn--amdhsa -mcpu=kaveri | llvm-mc -filetype=obj -triple amdgcn--amdhsa -mcpu=kaveri | llvm-readobj -symbols -s | FileCheck %s --check-prefix=ELF +@linkonce_odr_global_program = linkonce_odr addrspace(1) global i32 0 +@linkonce_global_program = linkonce addrspace(1) global i32 0 @internal_global_program = internal addrspace(1) global i32 0 @common_global_program = common addrspace(1) global i32 0 @external_global_program = addrspace(1) global i32 0 +@linkonce_odr_global_agent = linkonce_odr addrspace(1) global i32 0, section ".hsadata_global_agent" +@linkonce_global_agent = linkonce addrspace(1) global i32 0, section ".hsadata_global_agent" @internal_global_agent = internal addrspace(1) global i32 0, section ".hsadata_global_agent" @common_global_agent = common addrspace(1) global i32 0, section ".hsadata_global_agent" @external_global_agent = addrspace(1) global i32 0, section ".hsadata_global_agent" @@ -16,6 +20,18 @@ define void @test() { ret void } +; ASM: .amdgpu_hsa_module_global linkonce_odr_global +; ASM: .size linkonce_odr_global_program, 4 +; ASM: .hsadata_global_program +; ASM: linkonce_odr_global_program: +; ASM: .long 0 + +; ASM: .amdgpu_hsa_module_global linkonce_global +; ASM: .size linkonce_global_program, 4 +; ASM: .hsadata_global_program +; ASM: linkonce_global_program: +; ASM: .long 0 + ; ASM: .amdgpu_hsa_module_global internal_global ; ASM: .size internal_global_program, 4 ; ASM: .hsadata_global_program @@ -34,6 +50,18 @@ define void @test() { ; ASM: external_global_program: ; ASM: .long 0 +; ASM: .amdgpu_hsa_module_global linkonce_odr_global +; ASM: .size linkonce_odr_global_agent, 4 +; ASM: .hsadata_global_agent +; ASM: linkonce_odr_global_agent: +; ASM: .long 0 + +; ASM: .amdgpu_hsa_module_global linkonce_global +; ASM: .size linkonce_global_agent, 4 +; ASM: .hsadata_global_agent +; ASM: linkonce_global_agent: +; ASM: .long 0 + ; ASM: .amdgpu_hsa_module_global internal_global ; ASM: .size internal_global_agent, 4 ; ASM: .hsadata_global_agent @@ -123,6 +151,34 @@ define void @test() { ; ELF: Section: .hsatext ; ELF: } +; ELF: Symbol { +; ELF: Name: linkonce_global_agent +; ELF: Size: 4 +; ELF: Binding: Local +; ELF: Section: .hsadata_global_agent +; ELF: } + +; ELF: Symbol { +; ELF: Name: linkonce_global_program +; ELF: Size: 4 +; ELF: Binding: Local +; ELF: Section: .hsadata_global_program +; ELF: } + +; ELF: Symbol { +; ELF: Name: linkonce_odr_global_agent +; ELF: Size: 4 +; ELF: Binding: Local +; ELF: Section: .hsadata_global_agent +; ELF: } + +; ELF: Symbol { +; ELF: Name: linkonce_odr_global_program +; ELF: Size: 4 +; ELF: Binding: Local +; ELF: Section: .hsadata_global_program +; ELF: } + ; ELF: Symbol { ; ELF: Name: external_global_agent ; ELF: Size: 4