[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