[PATCH] D43139: [GlobalOpts] mark linkonce_odr unnamed_addr GV as hidden
Steven Wu via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Feb 9 12:37:22 PST 2018
steven_wu created this revision.
steven_wu added reviewers: rafael, pcc.
For the symbols are has linkonce_odr and unnamed_addr, it is safe to be
dropped from symbol table. Mark them as hidden visibility so they are
not exposed the runtime linker as weak externals.
Repository:
rL LLVM
https://reviews.llvm.org/D43139
Files:
lib/Transforms/IPO/GlobalOpt.cpp
test/Transforms/GlobalOpt/unnamed-addr.ll
Index: test/Transforms/GlobalOpt/unnamed-addr.ll
===================================================================
--- test/Transforms/GlobalOpt/unnamed-addr.ll
+++ test/Transforms/GlobalOpt/unnamed-addr.ll
@@ -5,12 +5,14 @@
@c = internal global i32 0, align 4
@d = internal constant [4 x i8] c"foo\00", align 1
@e = linkonce_odr global i32 0
+ at f = linkonce_odr unnamed_addr global i32 0
; CHECK: @a = internal global i32 0, align 4
; CHECK: @b = internal global i32 0, align 4
; CHECK: @c = internal unnamed_addr global i32 0, align 4
; CHECK: @d = internal unnamed_addr constant [4 x i8] c"foo\00", align 1
; CHECK: @e = linkonce_odr local_unnamed_addr global i32 0
+; CHECK: @f = linkonce_odr hidden unnamed_addr global i32 0
; CHECK: define internal fastcc void @used_internal() unnamed_addr {
define internal void @used_internal() {
@@ -43,6 +45,7 @@
store i32 %x, i32* @a, align 4
store i32 %x, i32* @b, align 4
store i32 %x, i32* @c, align 4
+ store i32 %x, i32* @f, align 4
ret void
}
Index: lib/Transforms/IPO/GlobalOpt.cpp
===================================================================
--- lib/Transforms/IPO/GlobalOpt.cpp
+++ lib/Transforms/IPO/GlobalOpt.cpp
@@ -78,6 +78,7 @@
STATISTIC(NumMarked , "Number of globals marked constant");
STATISTIC(NumUnnamed , "Number of globals marked unnamed_addr");
+STATISTIC(NumHidden , "Number of globals marked hidden visibility");
STATISTIC(NumSRA , "Number of aggregate globals broken into scalars");
STATISTIC(NumHeapSRA , "Number of heap objects SRA'd");
STATISTIC(NumSubstitute,"Number of globals with initializers stored into them");
@@ -2066,6 +2067,15 @@
}
}
+ // For the linkonce_odr that marked with global unnamed addr, they are safe
+ // to be hidden.
+ if (GV.hasGlobalUnnamedAddr() && GV.hasLinkOnceODRLinkage() &&
+ !GV.hasHiddenVisibility()) {
+ GV.setVisibility(GlobalValue::HiddenVisibility);
+ NumHidden++;
+ Changed = true;
+ }
+
// Do more involved optimizations if the global is internal.
if (!GV.hasLocalLinkage())
return Changed;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D43139.133669.patch
Type: text/x-patch
Size: 2104 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180209/5d4967d1/attachment.bin>
More information about the llvm-commits
mailing list