From 2cc546db188d5e4d4537681cab3d52781125518c Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Wed, 30 Oct 2013 22:08:11 +0000 Subject: Produce .weak_def_can_be_hidden for some linkonce_odr values With this patch llvm produces a weak_def_can_be_hidden for linkonce_odr if they are also unnamed_addr or don't have their address taken. There is not a lot of documentation about .weak_def_can_be_hidden, but from the old discussion about linkonce_odr_auto_hide and the name of the directive this looks correct: these symbols can be hidden. Testing this with the ld64 in Xcode 5 linking clang reduces the number of exported symbols from 21053 to 19049. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@193718 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/CodeGen/X86/weak_def_can_be_hidden.ll | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 test/CodeGen/X86/weak_def_can_be_hidden.ll (limited to 'test/CodeGen/X86') diff --git a/test/CodeGen/X86/weak_def_can_be_hidden.ll b/test/CodeGen/X86/weak_def_can_be_hidden.ll new file mode 100644 index 0000000000..f78f3571ce --- /dev/null +++ b/test/CodeGen/X86/weak_def_can_be_hidden.ll @@ -0,0 +1,26 @@ +; RUN: llc -mtriple=x86_64-apple-darwin -O0 < %s | FileCheck %s + +@v1 = linkonce_odr global i32 32 +; CHECK: .globl _v1 +; CHECK: .weak_def_can_be_hidden _v1 + +define i32 @f1() { + %x = load i32 * @v1 + ret i32 %x +} + +@v2 = linkonce_odr global i32 32 +; CHECK: .globl _v2 +; CHECK: .weak_definition _v2 + +@v3 = linkonce_odr unnamed_addr global i32 32 +; CHECK: .globl _v3 +; CHECK: .weak_def_can_be_hidden _v3 + +define i32* @f2() { + ret i32* @v2 +} + +define i32* @f3() { + ret i32* @v3 +} -- cgit v1.2.3