[PATCH] D121428: [lld-macho] Extend lto-internalize-unnamed-addr.ll

Jez Ng via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 10 16:36:55 PST 2022


int3 created this revision.
int3 added reviewers: lld-macho, modimo.
Herald added subscribers: ormris, steven_wu, hiraditya, inglorion.
Herald added projects: lld-macho, All.
int3 requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

- Test the case where a symbol is sometimes linkonce_odr and sometimes weak_odr
- Test the visibility of the symbols at the IR level, after the internalize stage of LTO is done. (Previously we only checked the visibility of symbols in the final output binary.)


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D121428

Files:
  lld/test/MachO/lto-internalize-unnamed-addr.ll


Index: lld/test/MachO/lto-internalize-unnamed-addr.ll
===================================================================
--- lld/test/MachO/lto-internalize-unnamed-addr.ll
+++ lld/test/MachO/lto-internalize-unnamed-addr.ll
@@ -7,18 +7,49 @@
 ; RUN: opt -module-summary %t/test.ll -o %t/test.thinlto.o
 ; RUN: opt -module-summary %t/test2.ll -o %t/test2.thinlto.o
 
-; RUN: %lld -lSystem %t/test.o %t/test2.o -o %t/test
+; RUN: %lld -lSystem %t/test.o %t/test2.o -o %t/test -save-temps
 ; RUN: llvm-nm -m %t/test | FileCheck %s --check-prefix=LTO
+; RUN: llvm-dis < %t/test.0.2.internalize.bc | FileCheck %s --check-prefix=LTO-BC
 
-; RUN: %lld -lSystem -dylib %t/test.o %t/test2.o -o %t/test.dylib
+; RUN: %lld -lSystem -dylib %t/test.o %t/test2.o -o %t/test.dylib -save-temps
 ; RUN: llvm-nm -m %t/test.dylib | FileCheck %s --check-prefix=LTO-DYLIB
+; RUN: llvm-dis < %t/test.dylib.0.2.internalize.bc | FileCheck %s --check-prefix=LTO-BC-DYLIB
 
-; RUN: %lld -lSystem %t/test.thinlto.o %t/test2.thinlto.o -o %t/test.thinlto
+; RUN: %lld -lSystem %t/test.thinlto.o %t/test2.thinlto.o -o %t/test.thinlto \
+; RUN:   -save-temps
 ; RUN: llvm-nm -m %t/test.thinlto | FileCheck %s --check-prefix=THINLTO
+; RUN: llvm-dis < %t/test.thinlto.o.2.internalize.bc | FileCheck %s --check-prefix=THINLTO-BC
+; RUN: llvm-dis < %t/test2.thinlto.o.2.internalize.bc | FileCheck %s --check-prefix=THINLTO-BC-2
 
-; RUN: %lld -lSystem -dylib %t/test.thinlto.o %t/test2.thinlto.o -o %t/test.thinlto.dylib
+; RUN: %lld -lSystem -dylib %t/test.thinlto.o %t/test2.thinlto.o -o \
+; RUN:   %t/test.thinlto.dylib -save-temps
 ; RUN: llvm-nm -m %t/test.thinlto.dylib | FileCheck %s --check-prefix=THINLTO
 
+; LTO-BC-DAG: @global_unnamed = internal unnamed_addr global i8 42
+; LTO-BC-DAG: @global_unnamed_sometimes_linkonce = internal unnamed_addr global i8 42
+; LTO-BC-DAG: @local_unnamed_const = internal constant i8 42
+; LTO-BC-DAG: @local_unnamed = internal global i8 42
+; LTO-BC-DAG: @local_unnamed_always_const = internal constant i8 42
+; LTO-BC-DAG: @local_unnamed_sometimes_const = internal constant i8 42
+
+; LTO-BC-DYLIB-DAG: @global_unnamed = internal unnamed_addr global i8 42
+; LTO-BC-DYLIB-DAG: @local_unnamed_const = internal constant i8 42
+; LTO-BC-DYLIB-DAG: @local_unnamed = weak_odr global i8 42
+; LTO-BC-DYLIB-DAG: @global_unnamed_sometimes_linkonce = weak_odr unnamed_addr global i8 42
+; LTO-BC-DYLIB-DAG: @local_unnamed_always_const = internal constant i8 42
+; LTO-BC-DYLIB-DAG: @local_unnamed_sometimes_const = weak_odr constant i8 42
+
+; THINLTO-BC-DAG: @global_unnamed = weak_odr hidden unnamed_addr global i8 42
+; THINLTO-BC-DAG: @global_unnamed_sometimes_linkonce = weak_odr unnamed_addr global i8 42
+; THINLTO-BC-DAG: @local_unnamed_const = weak_odr hidden local_unnamed_addr constant i8 42
+; THINLTO-BC-DAG: @local_unnamed_always_const = weak_odr hidden local_unnamed_addr constant i8 42
+; THINLTO-BC-DAG: @local_unnamed_sometimes_const = weak_odr local_unnamed_addr constant i8 42
+; THINLTO-BC-DAG: @local_unnamed = weak_odr local_unnamed_addr global i8 42
+
+; THINLTO-BC-2-DAG: @global_unnamed_sometimes_linkonce = available_externally unnamed_addr global i8 42
+; THINLTO-BC-2-DAG: @local_unnamed_always_const = available_externally local_unnamed_addr constant i8 42
+; THINLTO-BC-2-DAG: @local_unnamed_sometimes_const = available_externally local_unnamed_addr global i8 42
+
 ; LTO-DAG: (__DATA,__data) non-external _global_unnamed
 ; LTO-DAG: (__DATA,__data) non-external _local_unnamed
 ;; LD64 marks this with (was a private external). IMO both LD64 and LLD should
@@ -33,6 +64,7 @@
 ;; symbols here are all marked as (was a private external) by LD64. LLD should
 ;; follow suit.
 ; LTO-DYLIB-DAG: (__DATA,__data) non-external _global_unnamed
+; LTO-DYLIB-DAG: (__DATA,__data) weak external _global_unnamed_sometimes_linkonce
 ; LTO-DYLIB-DAG: (__DATA,__data) weak external _local_unnamed
 ; LTO-DYLIB-DAG: (__TEXT,__const) non-external _local_unnamed_always_const
 ; LTO-DYLIB-DAG: (__TEXT,__const) non-external _local_unnamed_const
@@ -52,14 +84,16 @@
 target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
 
 @global_unnamed = linkonce_odr unnamed_addr global i8 42
+ at global_unnamed_sometimes_linkonce = linkonce_odr unnamed_addr global i8 42
 @local_unnamed_const = linkonce_odr local_unnamed_addr constant i8 42
 @local_unnamed_always_const = linkonce_odr local_unnamed_addr constant i8 42
 @local_unnamed_sometimes_const = linkonce_odr local_unnamed_addr constant i8 42
 @local_unnamed = linkonce_odr local_unnamed_addr global i8 42
- at used = hidden constant [5 x i8*] [i8* @global_unnamed, i8* @local_unnamed,
+ at used = hidden constant [6 x i8*] [i8* @global_unnamed,
+  i8* @global_unnamed_sometimes_linkonce, i8* @local_unnamed,
   i8* @local_unnamed_const, i8* @local_unnamed_always_const,
   i8* @local_unnamed_sometimes_const]
- at llvm.used = appending global [1 x [5 x i8*]*] [[5 x i8*]* @used]
+ at llvm.used = appending global [1 x [6 x i8*]*] [[6 x i8*]* @used]
 
 define void @main() {
   ret void
@@ -69,5 +103,6 @@
 target triple = "x86_64-apple-darwin"
 target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
 
+ at global_unnamed_sometimes_linkonce = weak_odr unnamed_addr global i8 42
 @local_unnamed_always_const = linkonce_odr local_unnamed_addr constant i8 42
 @local_unnamed_sometimes_const = linkonce_odr local_unnamed_addr global i8 42


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D121428.414527.patch
Type: text/x-patch
Size: 5461 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220311/826a11ed/attachment.bin>


More information about the llvm-commits mailing list