[test] Add explicit dso_local to constant/global variable declarations
authorFangrui Song <i@maskray.me>
Fri, 4 Dec 2020 21:51:01 +0000 (13:51 -0800)
committerFangrui Song <i@maskray.me>
Fri, 4 Dec 2020 21:51:01 +0000 (13:51 -0800)
They are currently implicit because TargetMachine::shouldAssumeDSOLocal implies
dso_local.

For external data, clang -fno-pic emits the dso_local specifier for ELF and
non-MinGW COFF. Adding explicit dso_local makes these tests in align with the
clang behavior and helps implementing an option to use GOT indirection for
external data access in -fno-pic mode (to avoid copy relocations).

150 files changed:
llvm/test/CodeGen/AArch64/arm64-bitfield-extract.ll
llvm/test/CodeGen/AArch64/arm64-csldst-mmo.ll
llvm/test/CodeGen/AArch64/arm64-memcpy-inline.ll
llvm/test/CodeGen/AArch64/ghc-cc.ll
llvm/test/CodeGen/AArch64/global-alignment.ll
llvm/test/CodeGen/AArch64/ldradr.ll
llvm/test/CodeGen/AArch64/merge-store.ll
llvm/test/CodeGen/SystemZ/ghc-cc-01.ll
llvm/test/CodeGen/SystemZ/ipra.ll
llvm/test/CodeGen/SystemZ/la-01.ll
llvm/test/CodeGen/SystemZ/memcpy-02.ll
llvm/test/CodeGen/SystemZ/subregliveness-01.ll
llvm/test/CodeGen/SystemZ/subregliveness-05.ll
llvm/test/CodeGen/WebAssembly/offset-folding.ll
llvm/test/CodeGen/X86/2005-01-17-CycleInDAG.ll
llvm/test/CodeGen/X86/2006-01-19-ISelFoldingBug.ll
llvm/test/CodeGen/X86/2006-05-02-InstrSched1.ll
llvm/test/CodeGen/X86/2006-05-08-CoalesceSubRegClass.ll
llvm/test/CodeGen/X86/2006-05-08-InstrSched.ll
llvm/test/CodeGen/X86/2006-10-10-FindModifiedNodeSlotBug.ll
llvm/test/CodeGen/X86/2006-10-13-CycleInDAG.ll
llvm/test/CodeGen/X86/2007-05-05-VecCastExpand.ll
llvm/test/CodeGen/X86/2008-02-05-ISelCrash.ll
llvm/test/CodeGen/X86/2008-04-24-MemCpyBug.ll
llvm/test/CodeGen/X86/2008-07-19-movups-spills.ll
llvm/test/CodeGen/X86/2008-07-22-CombinerCrash.ll
llvm/test/CodeGen/X86/2008-09-11-CoalescerBug.ll
llvm/test/CodeGen/X86/2008-09-11-CoalescerBug2.ll
llvm/test/CodeGen/X86/2008-12-02-IllegalResultType.ll
llvm/test/CodeGen/X86/2008-12-23-crazy-address.ll
llvm/test/CodeGen/X86/2009-02-03-AnalyzedTwice.ll
llvm/test/CodeGen/X86/2009-03-23-MultiUseSched.ll
llvm/test/CodeGen/X86/2009-04-12-picrel.ll
llvm/test/CodeGen/X86/2009-08-19-LoadNarrowingMiscompile.ll
llvm/test/CodeGen/X86/2009-08-23-SubRegReuseUndo.ll
llvm/test/CodeGen/X86/2009-10-19-atomic-cmp-eflags.ll
llvm/test/CodeGen/X86/2009-11-18-TwoAddrKill.ll
llvm/test/CodeGen/X86/2010-07-15-Crash.ll
llvm/test/CodeGen/X86/2010-11-18-SelectOfExtload.ll
llvm/test/CodeGen/X86/2012-01-16-mfence-nosse-flags.ll
llvm/test/CodeGen/X86/atom-call-reg-indirect-foldedreload32.ll
llvm/test/CodeGen/X86/atom-call-reg-indirect-foldedreload64.ll
llvm/test/CodeGen/X86/atom-call-reg-indirect.ll
llvm/test/CodeGen/X86/atomic-minmax-i6432.ll
llvm/test/CodeGen/X86/atomic-unordered.ll
llvm/test/CodeGen/X86/atomic16.ll
llvm/test/CodeGen/X86/atomic32.ll
llvm/test/CodeGen/X86/atomic64.ll
llvm/test/CodeGen/X86/atomic6432.ll
llvm/test/CodeGen/X86/atomic8.ll
llvm/test/CodeGen/X86/avoid-loop-align-2.ll
llvm/test/CodeGen/X86/basic-block-sections-eh.ll
llvm/test/CodeGen/X86/bug37521.ll
llvm/test/CodeGen/X86/callbr-asm-blockplacement.ll
llvm/test/CodeGen/X86/cmov.ll
llvm/test/CodeGen/X86/cmpxchg8b_alloca_regalloc_handling.ll
llvm/test/CodeGen/X86/code_placement.ll
llvm/test/CodeGen/X86/codegen-prepare-cast.ll
llvm/test/CodeGen/X86/codemodel.ll
llvm/test/CodeGen/X86/commute-two-addr.ll
llvm/test/CodeGen/X86/divrem8_ext.ll
llvm/test/CodeGen/X86/dollar-name.ll
llvm/test/CodeGen/X86/extractps.ll
llvm/test/CodeGen/X86/fastcc-sret.ll
llvm/test/CodeGen/X86/fold-load.ll
llvm/test/CodeGen/X86/fold-mul-lohi.ll
llvm/test/CodeGen/X86/fold-rmw-ops.ll
llvm/test/CodeGen/X86/fold-sext-trunc.ll
llvm/test/CodeGen/X86/fold-vector-bv-crash.ll
llvm/test/CodeGen/X86/ghc-cc.ll
llvm/test/CodeGen/X86/ghc-cc64.ll
llvm/test/CodeGen/X86/hipe-cc.ll
llvm/test/CodeGen/X86/inline-asm-out-regs.ll
llvm/test/CodeGen/X86/keylocker-intrinsics.ll
llvm/test/CodeGen/X86/lea-opt.ll
llvm/test/CodeGen/X86/lsr-i386.ll
llvm/test/CodeGen/X86/lsr-interesting-step.ll
llvm/test/CodeGen/X86/lsr-static-addr.ll
llvm/test/CodeGen/X86/lvi-hardening-indirectbr.ll
llvm/test/CodeGen/X86/machine-cse.ll
llvm/test/CodeGen/X86/merge-consecutive-loads-256.ll
llvm/test/CodeGen/X86/movtopush.ll
llvm/test/CodeGen/X86/movtopush64.ll
llvm/test/CodeGen/X86/mul128.ll
llvm/test/CodeGen/X86/musttail-varargs.ll
llvm/test/CodeGen/X86/negative-offset.ll
llvm/test/CodeGen/X86/negative-subscript.ll
llvm/test/CodeGen/X86/no-sse-x86.ll
llvm/test/CodeGen/X86/overlap-shift.ll
llvm/test/CodeGen/X86/packed_struct.ll
llvm/test/CodeGen/X86/peephole-na-phys-copy-folding.ll
llvm/test/CodeGen/X86/post-ra-sched.ll
llvm/test/CodeGen/X86/pr15981.ll
llvm/test/CodeGen/X86/pr21792.ll
llvm/test/CodeGen/X86/pr2585.ll
llvm/test/CodeGen/X86/pr31045.ll
llvm/test/CodeGen/X86/pr31271.ll
llvm/test/CodeGen/X86/pr32256.ll
llvm/test/CodeGen/X86/pr32284.ll
llvm/test/CodeGen/X86/pr32329.ll
llvm/test/CodeGen/X86/pr32340.ll
llvm/test/CodeGen/X86/pr32345.ll
llvm/test/CodeGen/X86/pr3241.ll
llvm/test/CodeGen/X86/pr3244.ll
llvm/test/CodeGen/X86/pr32515.ll
llvm/test/CodeGen/X86/pr32588.ll
llvm/test/CodeGen/X86/pr32659.ll
llvm/test/CodeGen/X86/pr33828.ll
llvm/test/CodeGen/X86/pr33960.ll
llvm/test/CodeGen/X86/pr34137.ll
llvm/test/CodeGen/X86/pr34292.ll
llvm/test/CodeGen/X86/pr34381.ll
llvm/test/CodeGen/X86/pr3522.ll
llvm/test/CodeGen/X86/pr35316.ll
llvm/test/CodeGen/X86/pr35443.ll
llvm/test/CodeGen/X86/pr36274.ll
llvm/test/CodeGen/X86/pr37916.ll
llvm/test/CodeGen/X86/pr40539.ll
llvm/test/CodeGen/X86/pr42452.ll
llvm/test/CodeGen/X86/pr47482.ll
llvm/test/CodeGen/X86/pr5145.ll
llvm/test/CodeGen/X86/rd-mod-wr-eflags.ll
llvm/test/CodeGen/X86/remat-constant.ll
llvm/test/CodeGen/X86/retpoline-external.ll
llvm/test/CodeGen/X86/retpoline.ll
llvm/test/CodeGen/X86/shift-one.ll
llvm/test/CodeGen/X86/shift-parts.ll
llvm/test/CodeGen/X86/shl-crash-on-legalize.ll
llvm/test/CodeGen/X86/shrink_vmul.ll
llvm/test/CodeGen/X86/shrink_vmul_sse.ll
llvm/test/CodeGen/X86/sink-hoist.ll
llvm/test/CodeGen/X86/sink-local-value.ll
llvm/test/CodeGen/X86/sse2.ll
llvm/test/CodeGen/X86/sse3.ll
llvm/test/CodeGen/X86/store-fp-constant.ll
llvm/test/CodeGen/X86/stride-nine-with-base-reg.ll
llvm/test/CodeGen/X86/stride-reuse.ll
llvm/test/CodeGen/X86/tail-merge-identical.ll
llvm/test/CodeGen/X86/tail-opts.ll
llvm/test/CodeGen/X86/v4i32load-crash.ll
llvm/test/CodeGen/X86/vec_zero_cse.ll
llvm/test/CodeGen/X86/volatile.ll
llvm/test/CodeGen/X86/x32-function_pointer-1.ll
llvm/test/CodeGen/X86/x86-64-disp.ll
llvm/test/CodeGen/XCore/codemodel.ll
llvm/test/CodeGen/XCore/offset_folding.ll
llvm/test/DebugInfo/X86/fission-ranges.ll
llvm/test/Transforms/CodeGenPrepare/X86/sink-addrmode-select.ll
llvm/test/tools/gold/X86/relocation-model-pic.ll
llvm/test/tools/gold/X86/relocation-model-static.ll [new file with mode: 0644]

index 7b792bc..5673373 100644 (file)
@@ -793,7 +793,7 @@ define i64 @fct18(i32 %xor72) nounwind ssp {
 }
 
 ; Using the access to the global array to keep the instruction and control flow.
-@first_ones = external global [65536 x i8]
+@first_ones = external dso_local global [65536 x i8]
 
 ; Function Attrs: nounwind readonly ssp
 define i32 @fct19(i64 %arg1) nounwind readonly ssp  {
@@ -965,7 +965,7 @@ end:
 }
 
 ; Check if we can still catch UBFX when "AND" is used by SHL.
-@arr = external global [8 x [64 x i64]]
+@arr = external dso_local global [8 x [64 x i64]]
 define i64 @fct21(i64 %x) {
 ; LLC-LABEL: fct21:
 ; LLC:       // %bb.0: // %entry
index 40c82ec..e02a3a8 100644 (file)
@@ -2,7 +2,7 @@
 ; RUN: llc < %s -mtriple=arm64-linux-gnu -mcpu=cortex-a57 -enable-misched=0 -debug-only=machine-scheduler -o - 2>&1 > /dev/null | FileCheck %s
 ; REQUIRES: asserts
 
-@G = external global [0 x i32], align 4
+@G = external dso_local global [0 x i32], align 4
 
 ; Check that MMOs are added to epilogue calle-save restore loads so
 ; that the store to G is not considered dependant on the callee-save
index 9c27d15..5a27cd8 100644 (file)
@@ -2,8 +2,8 @@
 
 %struct.x = type { i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8 }
 
-@src = external global %struct.x
-@dst = external global %struct.x
+@src = external dso_local global %struct.x
+@dst = external dso_local global %struct.x
 
 @.str1 = private unnamed_addr constant [31 x i8] c"DHRYSTONE PROGRAM, SOME STRING\00", align 1
 @.str2 = private unnamed_addr constant [36 x i8] c"DHRYSTONE PROGRAM, SOME STRING BLAH\00", align 1
index 01ed785..390cce8 100644 (file)
@@ -2,26 +2,26 @@
 
 ; Check the GHC call convention works (aarch64)
 
-@base  = external global i64 ; assigned to register: r19
-@sp    = external global i64 ; assigned to register: r20
-@hp    = external global i64 ; assigned to register: r21
-@r1    = external global i64 ; assigned to register: r22
-@r2    = external global i64 ; assigned to register: r23
-@r3    = external global i64 ; assigned to register: r24
-@r4    = external global i64 ; assigned to register: r25
-@r5    = external global i64 ; assigned to register: r26
-@r6    = external global i64 ; assigned to register: r27
-@splim = external global i64 ; assigned to register: r28
+@base  = external dso_local global i64 ; assigned to register: r19
+@sp    = external dso_local global i64 ; assigned to register: r20
+@hp    = external dso_local global i64 ; assigned to register: r21
+@r1    = external dso_local global i64 ; assigned to register: r22
+@r2    = external dso_local global i64 ; assigned to register: r23
+@r3    = external dso_local global i64 ; assigned to register: r24
+@r4    = external dso_local global i64 ; assigned to register: r25
+@r5    = external dso_local global i64 ; assigned to register: r26
+@r6    = external dso_local global i64 ; assigned to register: r27
+@splim = external dso_local global i64 ; assigned to register: r28
 
-@f1 = external global float  ; assigned to register: s8
-@f2 = external global float  ; assigned to register: s9
-@f3 = external global float  ; assigned to register: s10
-@f4 = external global float  ; assigned to register: s11
+@f1 = external dso_local global float  ; assigned to register: s8
+@f2 = external dso_local global float  ; assigned to register: s9
+@f3 = external dso_local global float  ; assigned to register: s10
+@f4 = external dso_local global float  ; assigned to register: s11
 
-@d1 = external global double ; assigned to register: d12
-@d2 = external global double ; assigned to register: d13
-@d3 = external global double ; assigned to register: d14
-@d4 = external global double ; assigned to register: d15
+@d1 = external dso_local global double ; assigned to register: d12
+@d2 = external dso_local global double ; assigned to register: d13
+@d3 = external dso_local global double ; assigned to register: d14
+@d4 = external dso_local global double ; assigned to register: d15
 
 define ghccc i64 @addtwo(i64 %x, i64 %y) nounwind {
 entry:
index 84bf20d..ae90df2 100644 (file)
@@ -60,7 +60,7 @@ define i64 @test_var32_alias() {
   ret i64 %val
 }
 
-@yet_another_var = external global {i32, i32}
+@yet_another_var = external dso_local global {i32, i32}
 
 define i64 @test_yet_another_var() {
 ; CHECK-LABEL: test_yet_another_var:
index bd295ea..2e6ca86 100644 (file)
@@ -3,12 +3,12 @@
 
 %struct.T = type <{ i32, i64, i8, i32 }>
 
-@ptr = external local_unnamed_addr global i32*, align 8
-@ch = external local_unnamed_addr global i32, align 4
-@ch8 = external local_unnamed_addr global i8, align 4
-@t = external local_unnamed_addr global %struct.T, align 4
-@t2 = external local_unnamed_addr global %struct.T, align 2
-@f = external local_unnamed_addr global float, align 4
+@ptr = external dso_local local_unnamed_addr global i32*, align 8
+@ch = external dso_local local_unnamed_addr global i32, align 4
+@ch8 = external dso_local local_unnamed_addr global i8, align 4
+@t = external dso_local local_unnamed_addr global %struct.T, align 4
+@t2 = external dso_local local_unnamed_addr global %struct.T, align 2
+@f = external dso_local local_unnamed_addr global float, align 4
 
 define i32 @barp() {
 ; CHECK-LABEL: barp:
index f0a5338..f780af5 100644 (file)
@@ -2,8 +2,8 @@
 ; RUN: llc < %s -mtriple=aarch64-unknown-unknown -mcpu=cyclone -mattr=+slow-misaligned-128store | FileCheck %s --check-prefixes=CHECK,SPLITTING
 ; RUN: llc < %s -mtriple=aarch64-eabi -mattr=-slow-misaligned-128store | FileCheck %s --check-prefixes=CHECK,MISALIGNED
 
-@g0 = external global <3 x float>, align 16
-@g1 = external global <3 x float>, align 4
+@g0 = external dso_local global <3 x float>, align 16
+@g1 = external dso_local global <3 x float>, align 4
 
 define void @blam() {
 ; SPLITTING-LABEL: blam:
index dc8052d..9a26dda 100644 (file)
@@ -2,32 +2,32 @@
 ;
 ; RUN: llc -mtriple=s390x-ibm-linux < %s | FileCheck %s
 
-@base  = external global i64 ; assigned to register: r7
-@sp    = external global i64 ; assigned to register: r8
-@hp    = external global i64 ; assigned to register: r10
-@r1    = external global i64 ; assigned to register: r11
-@r2    = external global i64 ; assigned to register: r12
-@r3    = external global i64 ; assigned to register: r13
-@r4    = external global i64 ; assigned to register: r6
-@r5    = external global i64 ; assigned to register: r2
-@r6    = external global i64 ; assigned to register: r3
-@r7    = external global i64 ; assigned to register: r4
-@r8    = external global i64 ; assigned to register: r5
-@splim = external global i64 ; assigned to register: r9
+@base  = external dso_local global i64 ; assigned to register: r7
+@sp    = external dso_local global i64 ; assigned to register: r8
+@hp    = external dso_local global i64 ; assigned to register: r10
+@r1    = external dso_local global i64 ; assigned to register: r11
+@r2    = external dso_local global i64 ; assigned to register: r12
+@r3    = external dso_local global i64 ; assigned to register: r13
+@r4    = external dso_local global i64 ; assigned to register: r6
+@r5    = external dso_local global i64 ; assigned to register: r2
+@r6    = external dso_local global i64 ; assigned to register: r3
+@r7    = external dso_local global i64 ; assigned to register: r4
+@r8    = external dso_local global i64 ; assigned to register: r5
+@splim = external dso_local global i64 ; assigned to register: r9
 
-@f1 = external global float  ; assigned to register: s8
-@f2 = external global float  ; assigned to register: s9
-@f3 = external global float  ; assigned to register: s10
-@f4 = external global float  ; assigned to register: s11
-@f5 = external global float  ; assigned to register: s0
-@f6 = external global float  ; assigned to register: s1
+@f1 = external dso_local global float  ; assigned to register: s8
+@f2 = external dso_local global float  ; assigned to register: s9
+@f3 = external dso_local global float  ; assigned to register: s10
+@f4 = external dso_local global float  ; assigned to register: s11
+@f5 = external dso_local global float  ; assigned to register: s0
+@f6 = external dso_local global float  ; assigned to register: s1
 
-@d1 = external global double ; assigned to register: d12
-@d2 = external global double ; assigned to register: d13
-@d3 = external global double ; assigned to register: d14
-@d4 = external global double ; assigned to register: d15
-@d5 = external global double ; assigned to register: d2
-@d6 = external global double ; assigned to register: d3
+@d1 = external dso_local global double ; assigned to register: d12
+@d2 = external dso_local global double ; assigned to register: d13
+@d3 = external dso_local global double ; assigned to register: d14
+@d4 = external dso_local global double ; assigned to register: d15
+@d5 = external dso_local global double ; assigned to register: d2
+@d6 = external dso_local global double ; assigned to register: d3
 
 define ghccc void @foo() nounwind {
 entry:
index 42bfccc..951b2d9 100644 (file)
@@ -8,8 +8,8 @@
 ;
 ; CHECK: fn2 Clobbered Registers: {{.*}} $r0h
 
-@h = external global [0 x i32], align 4
-@n = external global i32*, align 8
+@h = external dso_local global [0 x i32], align 4
+@n = external dso_local global i32*, align 8
 
 define void @fn1() {
 bb:
index 31d2041..303d057 100644 (file)
@@ -3,11 +3,11 @@
 ;
 ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
 
-@e4 = external global i32
+@e4 = external dso_local global i32
 @d4 = global i32 1
-@e2 = external global i32, align 2
+@e2 = external dso_local global i32, align 2
 @d2 = global i32 1, align 2
-@e1 = external global i32, align 1
+@e1 = external dso_local global i32, align 1
 @d1 = global i32 1, align 1
 
 declare void @ef()
index bb676ec..f86ad50 100644 (file)
@@ -8,8 +8,8 @@
 @g2dst = global i16 2
 @g3 = global i32 3
 @g4 = global i64 4
-@g5src = external global fp128, align 16
-@g5dst = external global fp128, align 16
+@g5src = external dso_local global fp128, align 16
+@g5dst = external dso_local global fp128, align 16
 
 ; Test the simple i8 case.
 define void @f1(i8 *%ptr1) {
index 15bb014..83a3579 100644 (file)
@@ -6,8 +6,8 @@
 target datalayout = "E-m:e-i1:8:16-i8:8:16-i64:64-f128:64-v128:64-a:8:16-n32:64"
 target triple = "s390x-ibm-linux"
 
-@g_439 = external global i32, align 4
-@g_399 = external global { i8, i8, i8, i8, i8, i8 }, align 8
+@g_439 = external dso_local global i32, align 4
+@g_399 = external dso_local global { i8, i8, i8, i8, i8, i8 }, align 8
 
 ; Function Attrs: nounwind
 define void @main() #0 {
index a143852..da1e37d 100644 (file)
@@ -6,7 +6,7 @@
 target datalayout = "E-m:e-i1:8:16-i8:8:16-i64:64-f128:64-a:8:16-n32:64"
 target triple = "s390x-ibm-linux"
 
-@g_65 = external global i32, align 4
+@g_65 = external dso_local global i32, align 4
 
 ; Function Attrs: nounwind
 define void @main(i1 %x) #0 {
index 54a8636..79ebafb 100644 (file)
@@ -5,7 +5,7 @@
 target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
 target triple = "wasm32-unknown-unknown"
 
-@x = external global [0 x i32]
+@x = external dso_local global [0 x i32]
 @y = global [50 x i32] zeroinitializer
 
 ; Test basic constant offsets of both defined and external symbols.
index 1f9f2c6..97d8ff5 100644 (file)
@@ -5,7 +5,7 @@
 
 ; RUN: llc < %s -mtriple=i686-- | FileCheck %s
 
-@GLOBAL = external global i32
+@GLOBAL = external dso_local global i32
 
 define i32 @test(i32* %P1, i32* %P2, i32* %P3) nounwind {
 ; CHECK-LABEL: test:
index 288e292..fc57d50 100644 (file)
@@ -6,7 +6,7 @@
 
 target triple = "i686-unknown-unknown"
 
-@A = external global i32
+@A = external dso_local global i32
 
 define i32 @test5(i32 %B, i8 %C) {
 ; CHECK-LABEL: test5:
index acd32e4..5600ffa 100644 (file)
@@ -5,8 +5,8 @@
 ; It's possible to schedule this in 14 instructions by avoiding
 ; callee-save registers, but the scheduler isn't currently that
 ; conervative with registers.
-@size20 = external global i32          ; <i32*> [#uses=1]
-@in5 = external global i8*             ; <i8**> [#uses=1]
+@size20 = external dso_local global i32                ; <i32*> [#uses=1]
+@in5 = external dso_local global i8*           ; <i8**> [#uses=1]
 
 define i32 @compare(i8* %a, i8* %b) nounwind {
        %tmp = bitcast i8* %a to i32*           ; <i32*> [#uses=1]
index 25bed30..ad2cf25 100644 (file)
@@ -4,8 +4,8 @@
 
 ; RUN: llc < %s -mtriple=i686-- -relocation-model=static | FileCheck %s
 
-@B = external global i32               ; <i32*> [#uses=2]
-@C = external global i16*              ; <i16**> [#uses=2]
+@B = external dso_local global i32             ; <i32*> [#uses=2]
+@C = external dso_local global i16*            ; <i16**> [#uses=2]
 
 define void @test(i32 %A) {
 ; CHECK-LABEL: test:
index dfa003a..49478c5 100644 (file)
@@ -1,9 +1,9 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 ; RUN: llc < %s -mtriple=i686-- -relocation-model=static | FileCheck %s
 
-@A = external global i16*              ; <i16**> [#uses=1]
-@B = external global i32               ; <i32*> [#uses=1]
-@C = external global i32               ; <i32*> [#uses=2]
+@A = external dso_local global i16*            ; <i16**> [#uses=1]
+@B = external dso_local global i32             ; <i32*> [#uses=1]
+@C = external dso_local global i32             ; <i32*> [#uses=2]
 
 define void @test() {
 ; CHECK-LABEL: test:
index 09ad58a..0bb920f 100644 (file)
@@ -2,7 +2,7 @@
 ; RUN: llc < %s -mtriple=i686-- | FileCheck %s
 ; Bug in FindModifiedNodeSlot cause tmp14 load to become a zextload and shr 31
 ; is then optimized away.
-@tree_code_type = external global [0 x i32]            ; <[0 x i32]*> [#uses=1]
+@tree_code_type = external dso_local global [0 x i32]          ; <[0 x i32]*> [#uses=1]
 
 define void @copy_if_shared_r() {
 ; CHECK-LABEL: copy_if_shared_r:
index 9d2ec80..5c7102b 100644 (file)
@@ -1,5 +1,5 @@
 ; RUN: llc < %s -mtriple=i686--
-@str = external global [18 x i8]               ; <[18 x i8]*> [#uses=1]
+@str = external dso_local global [18 x i8]             ; <[18 x i8]*> [#uses=1]
 
 define void @test() {
 bb.i:
index 19b9224..8064725 100644 (file)
@@ -1,7 +1,7 @@
 ; RUN: llc < %s -mtriple=i686-- -mcpu=i386 -mattr=+sse
 ; PR1371
 
-@str = external global [18 x i8]               ; <[18 x i8]*> [#uses=1]
+@str = external dso_local global [18 x i8]             ; <[18 x i8]*> [#uses=1]
 
 define void @test() {
 bb.i:
index a74e7fc..c41481d 100644 (file)
@@ -1,7 +1,7 @@
 ; RUN: llc < %s -mtriple=i686--
 ; PR1975
 
-@nodes = external global i64           ; <i64*> [#uses=2]
+@nodes = external dso_local global i64         ; <i64*> [#uses=2]
 
 define fastcc i32 @ab(i32 %alpha, i32 %beta) nounwind  {
 entry:
index a450e88..a931220 100644 (file)
@@ -3,7 +3,7 @@
 ; Don't accidentally add the offset twice for trailing bytes.
 
        %struct.S63 = type { [63 x i8] }
-@g1s63 = external global %struct.S63           ; <%struct.S63*> [#uses=1]
+@g1s63 = external dso_local global %struct.S63         ; <%struct.S63*> [#uses=1]
 
 declare void @test63(%struct.S63* byval(%struct.S63) align 4 ) nounwind
 
index 052cf97..58376c4 100644 (file)
@@ -4,38 +4,38 @@
 ; Verify that movups is still generated with an aligned stack for the globals
 ; that must be accessed unaligned
 
-@0 = external global <4 x float>, align 1      ; <<4 x float>*>:0 [#uses=2]
-@1 = external global <4 x float>, align 1      ; <<4 x float>*>:1 [#uses=1]
-@2 = external global <4 x float>, align 1      ; <<4 x float>*>:2 [#uses=1]
-@3 = external global <4 x float>, align 1      ; <<4 x float>*>:3 [#uses=1]
-@4 = external global <4 x float>, align 1      ; <<4 x float>*>:4 [#uses=1]
-@5 = external global <4 x float>, align 1      ; <<4 x float>*>:5 [#uses=1]
-@6 = external global <4 x float>, align 1      ; <<4 x float>*>:6 [#uses=1]
-@7 = external global <4 x float>, align 1      ; <<4 x float>*>:7 [#uses=1]
-@8 = external global <4 x float>, align 1      ; <<4 x float>*>:8 [#uses=1]
-@9 = external global <4 x float>, align 1      ; <<4 x float>*>:9 [#uses=1]
-@10 = external global <4 x float>, align 1     ; <<4 x float>*>:10 [#uses=1]
-@11 = external global <4 x float>, align 1     ; <<4 x float>*>:11 [#uses=1]
-@12 = external global <4 x float>, align 1     ; <<4 x float>*>:12 [#uses=1]
-@13 = external global <4 x float>, align 1     ; <<4 x float>*>:13 [#uses=1]
-@14 = external global <4 x float>, align 1     ; <<4 x float>*>:14 [#uses=1]
-@15 = external global <4 x float>, align 1     ; <<4 x float>*>:15 [#uses=1]
-@16 = external global <4 x float>, align 1     ; <<4 x float>*>:16 [#uses=1]
-@17 = external global <4 x float>, align 1     ; <<4 x float>*>:17 [#uses=1]
-@18 = external global <4 x float>, align 1     ; <<4 x float>*>:18 [#uses=1]
-@19 = external global <4 x float>, align 1     ; <<4 x float>*>:19 [#uses=1]
-@20 = external global <4 x float>, align 1     ; <<4 x float>*>:20 [#uses=1]
-@21 = external global <4 x float>, align 1     ; <<4 x float>*>:21 [#uses=1]
-@22 = external global <4 x float>, align 1     ; <<4 x float>*>:22 [#uses=1]
-@23 = external global <4 x float>, align 1     ; <<4 x float>*>:23 [#uses=1]
-@24 = external global <4 x float>, align 1     ; <<4 x float>*>:24 [#uses=1]
-@25 = external global <4 x float>, align 1     ; <<4 x float>*>:25 [#uses=1]
-@26 = external global <4 x float>, align 1     ; <<4 x float>*>:26 [#uses=1]
-@27 = external global <4 x float>, align 1     ; <<4 x float>*>:27 [#uses=1]
-@28 = external global <4 x float>, align 1     ; <<4 x float>*>:28 [#uses=1]
-@29 = external global <4 x float>, align 1     ; <<4 x float>*>:29 [#uses=1]
-@30 = external global <4 x float>, align 1     ; <<4 x float>*>:30 [#uses=1]
-@31 = external global <4 x float>, align 1     ; <<4 x float>*>:31 [#uses=1]
+@0 = external dso_local global <4 x float>, align 1    ; <<4 x float>*>:0 [#uses=2]
+@1 = external dso_local global <4 x float>, align 1    ; <<4 x float>*>:1 [#uses=1]
+@2 = external dso_local global <4 x float>, align 1    ; <<4 x float>*>:2 [#uses=1]
+@3 = external dso_local global <4 x float>, align 1    ; <<4 x float>*>:3 [#uses=1]
+@4 = external dso_local global <4 x float>, align 1    ; <<4 x float>*>:4 [#uses=1]
+@5 = external dso_local global <4 x float>, align 1    ; <<4 x float>*>:5 [#uses=1]
+@6 = external dso_local global <4 x float>, align 1    ; <<4 x float>*>:6 [#uses=1]
+@7 = external dso_local global <4 x float>, align 1    ; <<4 x float>*>:7 [#uses=1]
+@8 = external dso_local global <4 x float>, align 1    ; <<4 x float>*>:8 [#uses=1]
+@9 = external dso_local global <4 x float>, align 1    ; <<4 x float>*>:9 [#uses=1]
+@10 = external dso_local global <4 x float>, align 1   ; <<4 x float>*>:10 [#uses=1]
+@11 = external dso_local global <4 x float>, align 1   ; <<4 x float>*>:11 [#uses=1]
+@12 = external dso_local global <4 x float>, align 1   ; <<4 x float>*>:12 [#uses=1]
+@13 = external dso_local global <4 x float>, align 1   ; <<4 x float>*>:13 [#uses=1]
+@14 = external dso_local global <4 x float>, align 1   ; <<4 x float>*>:14 [#uses=1]
+@15 = external dso_local global <4 x float>, align 1   ; <<4 x float>*>:15 [#uses=1]
+@16 = external dso_local global <4 x float>, align 1   ; <<4 x float>*>:16 [#uses=1]
+@17 = external dso_local global <4 x float>, align 1   ; <<4 x float>*>:17 [#uses=1]
+@18 = external dso_local global <4 x float>, align 1   ; <<4 x float>*>:18 [#uses=1]
+@19 = external dso_local global <4 x float>, align 1   ; <<4 x float>*>:19 [#uses=1]
+@20 = external dso_local global <4 x float>, align 1   ; <<4 x float>*>:20 [#uses=1]
+@21 = external dso_local global <4 x float>, align 1   ; <<4 x float>*>:21 [#uses=1]
+@22 = external dso_local global <4 x float>, align 1   ; <<4 x float>*>:22 [#uses=1]
+@23 = external dso_local global <4 x float>, align 1   ; <<4 x float>*>:23 [#uses=1]
+@24 = external dso_local global <4 x float>, align 1   ; <<4 x float>*>:24 [#uses=1]
+@25 = external dso_local global <4 x float>, align 1   ; <<4 x float>*>:25 [#uses=1]
+@26 = external dso_local global <4 x float>, align 1   ; <<4 x float>*>:26 [#uses=1]
+@27 = external dso_local global <4 x float>, align 1   ; <<4 x float>*>:27 [#uses=1]
+@28 = external dso_local global <4 x float>, align 1   ; <<4 x float>*>:28 [#uses=1]
+@29 = external dso_local global <4 x float>, align 1   ; <<4 x float>*>:29 [#uses=1]
+@30 = external dso_local global <4 x float>, align 1   ; <<4 x float>*>:30 [#uses=1]
+@31 = external dso_local global <4 x float>, align 1   ; <<4 x float>*>:31 [#uses=1]
 
 declare void @abort()
 
index 1d142e0..af30f65 100644 (file)
@@ -1,8 +1,8 @@
 ; RUN: llc < %s -mtriple=i686-- -mattr=+sse2
 ; PR2566
 
-@0 = external global i16               ; <i16*>:0 [#uses=1]
-@1 = external global <4 x i16>         ; <<4 x i16>*>:1 [#uses=1]
+@0 = external dso_local global i16             ; <i16*>:0 [#uses=1]
+@1 = external dso_local global <4 x i16>               ; <<4 x i16>*>:1 [#uses=1]
 
 declare void @abort()
 
index 1822dbe..886c6ea 100644 (file)
@@ -1,7 +1,7 @@
 ; RUN: llc < %s -mtriple=i686--
 ; PR2783
 
-@g_15 = external global i16            ; <i16*> [#uses=2]
+@g_15 = external dso_local global i16          ; <i16*> [#uses=2]
 
 define i32 @func_3(i32 %p_5) nounwind {
 entry:
index 2458852..67155f3 100644 (file)
@@ -3,8 +3,8 @@
 ; RUN: llc -pre-RA-sched=source < %s -mtriple=i686-unknown-linux -mcpu=corei7 | FileCheck %s --check-prefix=SOURCE-SCHED
 ; PR2748
 
-@g_73 = external global i32
-@g_5 = external global i32
+@g_73 = external dso_local global i32
+@g_5 = external dso_local global i32
 
 define i32 @func_44(i16 signext %p_46) nounwind {
 ; SOURCE-SCHED-LABEL: func_44:
index c828879..2c0a211 100644 (file)
@@ -2,8 +2,8 @@
 ; PR3117
 target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32"
 target triple = "i386-pc-linux-gnu"
-@g_118 = external global i8            ; <i8*> [#uses=1]
-@g_7 = external global i32             ; <i32*> [#uses=1]
+@g_118 = external dso_local global i8          ; <i8*> [#uses=1]
+@g_7 = external dso_local global i32           ; <i32*> [#uses=1]
 
 define i32 @func_73(i32 %p_74) nounwind {
 entry:
index de13fb5..b7e733e 100644 (file)
@@ -1,7 +1,7 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 ; RUN: llc < %s -mtriple=i686-- -relocation-model=static | FileCheck %s
 
-@X = external global [0 x i32]
+@X = external dso_local global [0 x i32]
 
 define void @foo() nounwind {
 ; CHECK-LABEL: foo:
index a18275a..661cf77 100644 (file)
@@ -3,7 +3,7 @@
 
 target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32"
 target triple = "i386-pc-linux-gnu"
-@g_3 = external global i32             ; <i32*> [#uses=1]
+@g_3 = external dso_local global i32           ; <i32*> [#uses=1]
 
 define void @bar(i64 %p_66) nounwind {
 entry:
index 28564ce..5c303f7 100644 (file)
@@ -5,7 +5,7 @@
 ; The register-pressure scheduler should be able to schedule this in a
 ; way that does not require spills.
 
-@X = external global i64               ; <i64*> [#uses=25]
+@X = external dso_local global i64             ; <i64*> [#uses=25]
 
 define fastcc i64 @foo() nounwind {
 ; CHECK-LABEL: foo:
index 319fc93..ce875e5 100644 (file)
@@ -1,8 +1,8 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -relocation-model=static -code-model=small | FileCheck %s
 
-@dst = external global [131072 x i32]
-@ptr = external global i32*
+@dst = external dso_local global [131072 x i32]
+@ptr = external dso_local global i32*
 
 define void @off01(i64 %i) nounwind {
 ; CHECK-LABEL: off01:
index 058ffcf..2715a31 100644 (file)
@@ -1,7 +1,7 @@
 ; RUN: llc < %s -mtriple=i386-pc-linux | FileCheck %s
 
-@a = external global i96, align 4
-@b = external global i64, align 8
+@a = external dso_local global i96, align 4
+@b = external dso_local global i64, align 8
 
 define void @c() nounwind {
 ; CHECK: movl a+8, %eax
index 0169de7..62013eb 100644 (file)
@@ -3,7 +3,7 @@
 
 ; This function has a sub-register reuse undone.
 
-@uint8 = external global i32                      ; <i32*> [#uses=3]
+@uint8 = external dso_local global i32                      ; <i32*> [#uses=3]
 
 declare signext i8 @foo(i32, i8 signext) nounwind readnone
 
index bca1c03..dc8405a 100644 (file)
@@ -4,8 +4,8 @@
 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
 target triple = "x86_64-unknown-linux-gnu"
 
-@.str76843 = external constant [45 x i8]          ; <[45 x i8]*> [#uses=1]
-@__profiling_callsite_timestamps_live = external global [1216 x i64] ; <[1216 x i64]*> [#uses=2]
+@.str76843 = external dso_local constant [45 x i8]          ; <[45 x i8]*> [#uses=1]
+@__profiling_callsite_timestamps_live = external dso_local global [1216 x i64] ; <[1216 x i64]*> [#uses=2]
 
 define i32 @cl_init(i32 %initoptions) nounwind {
 entry:
index 0edaa70..1b8a8d5 100644 (file)
@@ -3,7 +3,7 @@
 target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32"
 target triple = "i386-pc-linux-gnu"
 
-@g_296 = external global i8, align 1              ; <i8*> [#uses=1]
+@g_296 = external dso_local global i8, align 1              ; <i8*> [#uses=1]
 
 define noalias i8** @func_31(i32** nocapture %int8p_33, i8** nocapture %p_34, i8* nocapture %p_35) nounwind {
 entry:
index 857dc3a..819e43f 100644 (file)
@@ -1,7 +1,7 @@
 ; RUN: llc -mtriple=x86_64-unknown-linux-gnu < %s -o /dev/null
 ; PR7653
 
-@__FUNCTION__.1623 = external constant [4 x i8]   ; <[4 x i8]*> [#uses=1]
+@__FUNCTION__.1623 = external dso_local constant [4 x i8]   ; <[4 x i8]*> [#uses=1]
 
 define void @foo() nounwind {
 entry:
index 1764922..43dc2bb 100644 (file)
@@ -1,7 +1,7 @@
 ; RUN: llc < %s -mtriple=i686-- -mattr=+cmov | FileCheck %s
 ; Both values were being zero extended.
-@u = external global i8
-@s = external global i8
+@u = external dso_local global i8
+@s = external dso_local global i8
 define i32 @foo(i1 %cond) {
 ; CHECK: @foo
   %u_base = load i8, i8* @u
index a6c34b8..8f44b75 100644 (file)
@@ -1,7 +1,7 @@
 ; RUN: llc < %s -verify-machineinstrs -mtriple=i686-linux -mattr=-sse | FileCheck %s
 ; PR11768
 
-@ptr = external global i8*
+@ptr = external dso_local global i8*
 
 define void @baz() nounwind ssp {
 entry:
index 2e144f8..e04ba90 100644 (file)
 ;     }
 ;   }
 ;
-@sum = external global i32
+@sum = external dso_local global i32
 @a = common global i32 0, align 4
 @i = common global i32 0, align 4
 @b = common global i32 0, align 4
-@funcp = external global i32 (i32, i32, i32, i32, i32, i32, i32, i32)*
+@funcp = external dso_local global i32 (i32, i32, i32, i32, i32, i32, i32, i32)*
 @c = common global i32 0, align 4
 @d = common global i32 0, align 4
 @e = common global i32 0, align 4
index e82626c..4a34ef5 100644 (file)
 ;   }
 ;   
 
-@sum = external global i32
+@sum = external dso_local global i32
 @a = common global i32 0, align 4
 @i = common global i32 0, align 4
 @b = common global i32 0, align 4
-@funcp = external global i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32)*
+@funcp = external dso_local global i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32)*
 @c = common global i32 0, align 4
 @d = common global i32 0, align 4
 @e = common global i32 0, align 4
index 8045abc..c62ab65 100644 (file)
@@ -35,7 +35,7 @@ entry:
 declare %class.A* @_Z3facv() #1
 
 ; virt_fn.ll
-@p = external global void (i32)**
+@p = external dso_local global void (i32)**
 
 define i32 @test2() #0 {
   ;ATOM-LABEL: test2:
index 4eb47c0..a918f6d 100644 (file)
@@ -2,7 +2,7 @@
 ; RUN: llc -mattr=+cmov -mtriple=i386-pc-linux -verify-machineinstrs < %s | FileCheck %s -check-prefix=LINUX
 ; RUN: llc -mattr=+cmov -mtriple=i386-macosx -relocation-model=pic -verify-machineinstrs < %s | FileCheck %s -check-prefix=PIC
 
-@sc64 = external global i64
+@sc64 = external dso_local global i64
 
 define i64 @atomic_max_i64() nounwind {
 ; LINUX-LABEL: atomic_max_i64:
index 7b255c7..fe34cc3 100644 (file)
@@ -2368,7 +2368,7 @@ define i64 @nofold_stfence(i64* %p) {
 
 ;; Next, test how well we can fold invariant loads.
 
-@Constant = external constant i64
+@Constant = external dso_local constant i64
 
 define i64 @fold_constant(i64 %arg) {
 ; CHECK-O0-LABEL: fold_constant:
index c96160f..5e07fbb 100644 (file)
@@ -1,8 +1,8 @@
 ; RUN: llc < %s -O0 -mtriple=x86_64-unknown-unknown -mcpu=corei7 -verify-machineinstrs -show-mc-encoding | FileCheck %s --check-prefix X64
 ; RUN: llc < %s -O0 -mtriple=i386-unknown-unknown -mcpu=corei7 -verify-machineinstrs | FileCheck %s --check-prefix X32
 
-@sc16 = external global i16
-@fsc16 = external global half
+@sc16 = external dso_local global i16
+@fsc16 = external dso_local global half
 
 define void @atomic_fetch_add16() nounwind {
 ; X64-LABEL:   atomic_fetch_add16
index 2e45661..565dd13 100644 (file)
@@ -4,8 +4,8 @@
 ; RUN: llc < %s -O0 -mtriple=i686-unknown-unknown -mcpu=corei7 -mattr=-cmov,-sse -verify-machineinstrs | FileCheck %s --check-prefixes=X86,X86-NOCMOV
 ; RUN: llc < %s -O0 -mtriple=i686-unknown-unknown -mcpu=corei7 -mattr=-cmov,-sse,-x87 -verify-machineinstrs | FileCheck %s --check-prefixes=X86,X86-NOX87
 
-@sc32 = external global i32
-@fsc32 = external global float
+@sc32 = external dso_local global i32
+@fsc32 = external dso_local global float
 
 define void @atomic_fetch_add32() nounwind {
 ; X64-LABEL: atomic_fetch_add32:
index 452bcb2..0e81663 100644 (file)
@@ -2,8 +2,8 @@
 ; RUN: llc < %s -O0 -mtriple=x86_64-- -mcpu=corei7 -verify-machineinstrs | FileCheck %s --check-prefix X64
 ; RUN: llc < %s -O0 -mtriple=i386-- -mcpu=i486 -verify-machineinstrs | FileCheck %s --check-prefix I486
 
-@sc64 = external global i64
-@fsc64 = external global double
+@sc64 = external dso_local global i64
+@fsc64 = external dso_local global double
 
 define void @atomic_fetch_add64() nounwind {
 ; X64-LABEL: atomic_fetch_add64:
index b83d7ba..5608439 100644 (file)
@@ -1,7 +1,7 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 ; RUN: llc < %s -O0 -mtriple=i686-- -mcpu=corei7 -verify-machineinstrs | FileCheck %s --check-prefix X32
 
-@sc64 = external global i64
+@sc64 = external dso_local global i64
 
 define void @atomic_fetch_add64() nounwind {
 ; X32-LABEL: atomic_fetch_add64:
index c78a919..3ac7c4b 100644 (file)
@@ -1,7 +1,7 @@
 ; RUN: llc < %s -O0 -mtriple=x86_64-- -mcpu=corei7 -verify-machineinstrs | FileCheck %s --check-prefix X64
 ; RUN: llc < %s -O0 -mtriple=i686-- -mcpu=corei7 -verify-machineinstrs | FileCheck %s --check-prefix X32
 
-@sc8 = external global i8
+@sc8 = external dso_local global i8
 
 define void @atomic_fetch_add8() nounwind {
 ; X64-LABEL:   atomic_fetch_add8:
index 7e5927e..a9a2e4b 100644 (file)
@@ -4,7 +4,7 @@
 ; knowing what their trip counts are, or other dynamic information. For
 ; now, CodeGen aligns all loops.
 
-@x = external global i32*              ; <i32**> [#uses=1]
+@x = external dso_local global i32*            ; <i32**> [#uses=1]
 
 define i32 @t(i32 %a, i32 %b) nounwind readonly ssp {
 entry:
index 3cc5979..f12e0fd 100644 (file)
@@ -1,7 +1,7 @@
 ; Check if landing pads are kept in a separate eh section
 ; RUN: llc < %s -mtriple=i386-unknown-linux-gnu  -function-sections -basic-block-sections=all -unique-basic-block-section-names | FileCheck %s -check-prefix=LINUX-SECTIONS
 
-@_ZTIb = external constant i8*
+@_ZTIb = external dso_local constant i8*
 define i32 @_Z3foob(i1 zeroext %0) #0 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
   %2 = alloca i32, align 4
   %3 = alloca i8, align 1
index 14e547a..9481fc1 100644 (file)
@@ -1,7 +1,7 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 ; RUN: llc -mtriple=x86_64-- < %s | FileCheck %s
 
-@a = external global <16 x float>, align 64
+@a = external dso_local global <16 x float>, align 64
 
 declare void @goo(<2 x i256>)
 
index fb658e3..afadf4e 100644 (file)
@@ -6,7 +6,7 @@
 %struct.wibble = type { %struct.pluto, i32, i8* }
 %struct.pluto = type { i32, i32, i32 }
 
-@global = external global [0 x %struct.wibble]
+@global = external dso_local global [0 x %struct.wibble]
 
 define i32 @foo(i32 %arg, i32 (i8*)* %arg3) nounwind {
 ; CHECK-LABEL: foo:
index b77d3c8..a014f12 100644 (file)
@@ -70,10 +70,10 @@ define void @test3(i64 %a, i64 %b, i1 %p) nounwind {
 ; PR4814
 
 
-@g_3 = external global i8
-@g_96 = external global i8
-@g_100 = external global i8
-@_2E_str = external constant [15 x i8], align 1
+@g_3 = external dso_local global i8
+@g_96 = external dso_local global i8
+@g_100 = external dso_local global i8
+@_2E_str = external dso_local constant [15 x i8], align 1
 
 define i1 @test4() nounwind {
 ; CHECK-LABEL: test4:
index 364d78a..ab8265d 100644 (file)
@@ -69,7 +69,7 @@ done:
 ; - base pointer for stack frame (VLA + alignment)
 ; - cmpxchg8b global + index reg
 
-@Counters = external global [19 x i64]
+@Counters = external dso_local global [19 x i64]
 
 define void @foo_alloca_index_global(i32 %i, i64 %val) {
 entry:
index 2706128..b0376c7 100644 (file)
@@ -1,8 +1,8 @@
 ; RUN: llc -mtriple=i686-- < %s | FileCheck %s
 
-@Te0 = external global [256 x i32]             ; <[256 x i32]*> [#uses=5]
-@Te1 = external global [256 x i32]             ; <[256 x i32]*> [#uses=4]
-@Te3 = external global [256 x i32]             ; <[256 x i32]*> [#uses=2]
+@Te0 = external dso_local global [256 x i32]           ; <[256 x i32]*> [#uses=5]
+@Te1 = external dso_local global [256 x i32]           ; <[256 x i32]*> [#uses=4]
+@Te3 = external dso_local global [256 x i32]           ; <[256 x i32]*> [#uses=2]
 
 ; CHECK: %entry
 ; CHECK: %bb
index 08371d8..30d1d3d 100644 (file)
@@ -7,7 +7,7 @@ target datalayout =
 target triple = "x86_64-unknown-linux-gnu"
         %"byte[]" = type { i64, i8* }
         %"char[][]" = type { i64, %"byte[]"* }
-@.str = external constant [7 x i8]              ; <[7 x i8]*> [#uses=1]
+@.str = external dso_local constant [7 x i8]              ; <[7 x i8]*> [#uses=1]
 
 ; CHECK-LABEL: @_Dmain
 ; CHECK: load i8, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i32 0, i32 0)
index 9aba38a..1d9818c 100644 (file)
@@ -4,7 +4,7 @@
 
 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
 target triple = "x86_64-unknown-linux-gnu"
-@data = external global [0 x i32]              ; <[0 x i32]*> [#uses=5]
+@data = external dso_local global [0 x i32]            ; <[0 x i32]*> [#uses=5]
 
 ; CHECK-TINY:    Target does not support the tiny CodeModel
 
index 656c385..663bbfa 100644 (file)
@@ -6,7 +6,7 @@
 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7 | FileCheck %s -check-prefix=DARWIN
 
 
-@G = external global i32                ; <i32*> [#uses=2]
+@G = external dso_local global i32                ; <i32*> [#uses=2]
 
 declare void @ext(i32)
 
index e54b357..a6644b3 100644 (file)
@@ -207,4 +207,4 @@ define i64 @pr25754(i8 %a, i8 %c) {
   ret i64 %ret
 }
 
-@z = external global i8
+@z = external dso_local global i8
index 78ca900..2efc5a6 100644 (file)
@@ -2,7 +2,7 @@
 ; PR1339
 
 @"$bar" = global i32 zeroinitializer
-@"$qux" = external global i32
+@"$qux" = external dso_local global i32
 
 define i32 @"$foo"() nounwind {
 ; CHECK: movl  ($bar),
index ca4a47a..5d1fa1f 100644 (file)
@@ -2,7 +2,7 @@
 ; RUN: llc < %s -mtriple=i686-- -mcpu=penryn | FileCheck %s
 ; PR2647
 
-@0 = external global float, align 16         ; <float*>:0 [#uses=2]
+@0 = external dso_local global float, align 16         ; <float*>:0 [#uses=2]
 
 define internal void @a() nounwind {
 ; CHECK-LABEL: a:
index ce715b6..7060bcc 100644 (file)
@@ -12,7 +12,7 @@ entry:
 ; CHECK: bar
 ; CHECK: ret{{[^4]*$}}
 
-@dst = external global i32
+@dst = external dso_local global i32
 
 define void @foo() nounwind {
        %memtmp = alloca %struct.foo, align 4
index 263ad72..aad38c1 100644 (file)
@@ -2,7 +2,7 @@
 ; RUN: llc < %s -mcpu=generic -mtriple=i686-- | FileCheck %s
        %struct._obstack_chunk = type { i8*, %struct._obstack_chunk*, [4 x i8] }
        %struct.obstack = type { i32, %struct._obstack_chunk*, i8*, i8*, i8*, i32, i32, %struct._obstack_chunk* (...)*, void (...)*, i8*, i8 }
-@stmt_obstack = external global %struct.obstack                ; <%struct.obstack*> [#uses=1]
+@stmt_obstack = external dso_local global %struct.obstack              ; <%struct.obstack*> [#uses=1]
 
 ; This should just not crash.
 define void @test1() nounwind {
index f0f6849..a23c286 100644 (file)
@@ -2,9 +2,9 @@
 ; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s
 ; CHECK-NOT: lea
 
-@B = external global [1000 x i8], align 32
-@A = external global [1000 x i8], align 32
-@P = external global [1000 x i8], align 32
+@B = external dso_local global [1000 x i8], align 32
+@A = external dso_local global [1000 x i8], align 32
+@P = external dso_local global [1000 x i8], align 32
 
 define void @foo(i32 %m) nounwind {
 entry:
index 87008b1..52db791 100644 (file)
@@ -3,10 +3,10 @@
 
 target triple = "x86_64-unknown-unknown"
 
-@g64 = external global i64, align 8
-@g32 = external global i32, align 4
-@g16 = external global i16, align 2
-@g8 = external global i8, align 1
+@g64 = external dso_local global i64, align 8
+@g32 = external dso_local global i32, align 4
+@g16 = external dso_local global i16, align 2
+@g8 = external dso_local global i8, align 1
 
 declare void @a()
 declare void @b()
index b6af452..a3a4ee8 100644 (file)
@@ -5,7 +5,7 @@
 %0 = type { i64 }
 %struct.S1 = type { i16, i32 }
 
-@g_10 = external global %struct.S1
+@g_10 = external dso_local global %struct.S1
 
 declare void @func_28(i64, i64)
 
index 8c72afb..ce452be 100644 (file)
@@ -6,7 +6,7 @@
 ; truncation bug from constant folding after legalization.
 ;
 
-@G = external global i32
+@G = external dso_local global i32
 
 define void @bv_crash_test() {
   %I = insertelement <4 x i64> zeroinitializer, i64 15910, i32 0
index 1a03c6a..c9ded6c 100644 (file)
@@ -2,10 +2,10 @@
 
 ; Test the GHC call convention works (x86-32)
 
-@base = external global i32 ; assigned to register: ebx
-@sp   = external global i32 ; assigned to register: ebp
-@hp   = external global i32 ; assigned to register: edi
-@r1   = external global i32 ; assigned to register: esi
+@base = external dso_local global i32 ; assigned to register: ebx
+@sp   = external dso_local global i32 ; assigned to register: ebp
+@hp   = external dso_local global i32 ; assigned to register: edi
+@r1   = external dso_local global i32 ; assigned to register: esi
 
 define void @zap(i32 %a, i32 %b) nounwind {
 entry:
index 9abd40b..bed3367 100644 (file)
@@ -2,23 +2,23 @@
 
 ; Check the GHC call convention works (x86-64)
 
-@base  = external global i64 ; assigned to register: R13
-@sp    = external global i64 ; assigned to register: rbp
-@hp    = external global i64 ; assigned to register: R12
-@r1    = external global i64 ; assigned to register: rbx
-@r2    = external global i64 ; assigned to register: R14
-@r3    = external global i64 ; assigned to register: rsi
-@r4    = external global i64 ; assigned to register: rdi
-@r5    = external global i64 ; assigned to register: R8
-@r6    = external global i64 ; assigned to register: R9
-@splim = external global i64 ; assigned to register: R15
+@base  = external dso_local global i64 ; assigned to register: R13
+@sp    = external dso_local global i64 ; assigned to register: rbp
+@hp    = external dso_local global i64 ; assigned to register: R12
+@r1    = external dso_local global i64 ; assigned to register: rbx
+@r2    = external dso_local global i64 ; assigned to register: R14
+@r3    = external dso_local global i64 ; assigned to register: rsi
+@r4    = external dso_local global i64 ; assigned to register: rdi
+@r5    = external dso_local global i64 ; assigned to register: R8
+@r6    = external dso_local global i64 ; assigned to register: R9
+@splim = external dso_local global i64 ; assigned to register: R15
 
-@f1 = external global float  ; assigned to register: xmm1
-@f2 = external global float  ; assigned to register: xmm2
-@f3 = external global float  ; assigned to register: xmm3
-@f4 = external global float  ; assigned to register: xmm4
-@d1 = external global double ; assigned to register: xmm5
-@d2 = external global double ; assigned to register: xmm6
+@f1 = external dso_local global float  ; assigned to register: xmm1
+@f2 = external dso_local global float  ; assigned to register: xmm2
+@f3 = external dso_local global float  ; assigned to register: xmm3
+@f4 = external dso_local global float  ; assigned to register: xmm4
+@d1 = external dso_local global double ; assigned to register: xmm5
+@d2 = external dso_local global double ; assigned to register: xmm6
 
 define void @zap(i64 %a, i64 %b) nounwind {
 entry:
index 86469da..96a61ef 100644 (file)
@@ -86,6 +86,6 @@ define cc 11 { i32, i32, i32 } @tailcaller(i32 %hp, i32 %p) nounwind {
 !0 = !{ !"P_NSP_LIMIT", i32 84 }
 !1 = !{ !"X86_LEAF_WORDS", i32 24 }
 !2 = !{ !"AMD64_LEAF_WORDS", i32 24 }
-@clos = external constant i32
+@clos = external dso_local constant i32
 declare cc 11 void @bar(i32, i32, i32, i32, i32)
 declare cc 11 { i32, i32, i32 } @tailcallee(i32, i32, i32, i32, i32, i32)
index 8e47f81..9ba9cbf 100644 (file)
@@ -1,8 +1,8 @@
 ; RUN: llc < %s -mtriple=i386-unknown-linux-gnu
 ; PR3391
 
-@pci_indirect = external global { }             ; <{ }*> [#uses=1]
-@pcibios_last_bus = external global i32         ; <i32*> [#uses=2]
+@pci_indirect = external dso_local global { }             ; <{ }*> [#uses=1]
+@pcibios_last_bus = external dso_local global i32         ; <i32*> [#uses=2]
 
 define void @pci_pcbios_init() nounwind section ".init.text" {
 entry:
index 2f9797e..15716f3 100644 (file)
@@ -543,7 +543,7 @@ entry:
 
 ; Tests to make sure we can select an appropriate addressing mode for a global.
 
-@foo = external global [64 x i8]
+@foo = external dso_local global [64 x i8]
 
 define i8 @test_mm_aesenc256kl_u8_global(<2 x i64> %data, <2 x i64>* %out) {
 ; X64-LABEL: test_mm_aesenc256kl_u8_global:
index 55dbd02..3241455 100644 (file)
@@ -5,8 +5,8 @@
 %struct.anon1 = type { i32, i32, i32 }
 %struct.anon2 = type { i32, [32 x i32], i32 }
 
-@arr1 = external global [65 x %struct.anon1], align 16
-@arr2 = external global [65 x %struct.anon2], align 16
+@arr1 = external dso_local global [65 x %struct.anon1], align 16
+@arr2 = external dso_local global [65 x %struct.anon2], align 16
 
 define void @test1(i64 %x) nounwind {
 ; ENABLED-LABEL: test1:
index c6fba85..c63627d 100644 (file)
@@ -13,7 +13,7 @@ target triple = "i386-pc-linux-gnu"
 
 %struct.anon = type { [72 x i32], i32 }
 
-@mp2grad_ = external global %struct.anon
+@mp2grad_ = external dso_local global %struct.anon
 
 define void @chomp2g_setup_(i32 %n, i32 %m) nounwind {
 entry:
index 53f7fb2..c909615 100644 (file)
@@ -9,7 +9,7 @@
 ; CHECK-NEXT:   cmpq    $8192, %rcx
 ; CHECK-NEXT:   jl
 
-@flags = external global [8192 x i8], align 16 ; <[8192 x i8]*> [#uses=1]
+@flags = external dso_local global [8192 x i8], align 16 ; <[8192 x i8]*> [#uses=1]
 
 define void @foo() nounwind {
 entry:
index 6609c3d..fc70b98 100644 (file)
@@ -2,7 +2,7 @@
 ; RUN: llc -mtriple=x86_64-unknown-linux-gnu -relocation-model=static < %s | FileCheck %s --check-prefix=CHECK
 ; RUN: llc -mcpu=atom -mtriple=x86_64-unknown-linux-gnu -relocation-model=static < %s | FileCheck %s --check-prefix=ATOM
 
-@A = external global [0 x double]
+@A = external dso_local global [0 x double]
 
 define void @foo(i64 %n) nounwind {
 ; CHECK-LABEL: foo:
index d2caf6e..41518cd 100644 (file)
@@ -36,7 +36,7 @@ entry:
 ; X64FAST:       jmp __llvm_lvi_thunk_r11 # TAILCALL
 
 
-@global_fp = external global void (i32)*
+@global_fp = external dso_local global void (i32)*
 
 ; Test an indirect call through a global variable.
 define void @icall_global_fp(i32 %x, void (i32)** %fpp) #0 {
index 281aaca..124928b 100644 (file)
@@ -178,7 +178,7 @@ return:
 }
 
 ; PR13578
-@t2_global = external global i32
+@t2_global = external dso_local global i32
 
 declare i1 @t2_func()
 
index 1505757..210ad51 100644 (file)
@@ -675,7 +675,7 @@ define <16 x i16> @merge_16i16_i16_0uu3zzuuuuuzCuEF_volatile(i16* %ptr) nounwind
 ; Volatile tests.
 ;
 
-@l = external global <32 x i8>, align 32
+@l = external dso_local global <32 x i8>, align 32
 
 define <2 x i8> @PR42846(<2 x i8>* %j, <2 x i8> %k) {
 ; AVX-LABEL: PR42846:
index ae70919..fa200c2 100644 (file)
@@ -176,7 +176,7 @@ entry:
 ; NORMAL: pushl    $_ext
 ; NORMAL-NEXT: call
 declare void @f(i8*)
-@ext = external constant i8
+@ext = external dso_local constant i8
 
 define void @test6() {
   call void @f(i8* @ext)
@@ -288,7 +288,7 @@ define void @test10() optsize {
 ; NORMAL-NEXT: pushl [[EAX]]
 ; NORMAL-NEXT: call
 ; NORMAL-NEXT: addl $16, %esp
-@the_global = external global i32
+@the_global = external dso_local global i32
 define void @test11() optsize {
   %myload = load i32, i32* @the_global
   store i32 42, i32* @the_global
index 76dd740..a59db44 100644 (file)
@@ -99,7 +99,7 @@ entry:
 ; NORMAL: pushq $ext
 ; NORMAL: pushq $7
 ; NORMAL: callq ten_params_ptr
-@ext = external constant i8
+@ext = external dso_local constant i8
 define void @test5() {
 entry:
   call void @ten_params_ptr(i32 1, i64 2, i32 3, i64 4, i32 5, i64 6, i32 7, i8* @ext, i32 9, i64 10)
@@ -157,7 +157,7 @@ entry:
 ; NORMAL: pushq [[REG]]
 ; NORMAL: pushq $7
 ; NORMAL: callq ten_params
-@the_global = external global i64
+@the_global = external dso_local global i64
 define void @test8() {
   %myload = load i64, i64* @the_global
   store i64 42, i64* @the_global
index 66d2f3b..df7e5dd 100644 (file)
@@ -100,8 +100,8 @@ define i128 @foo(i128 %t, i128 %u) {
   ret i128 %k
 }
 
-@aaa = external global i128
-@bbb = external global i128
+@aaa = external dso_local global i128
+@bbb = external dso_local global i128
 
 define void @PR13897() nounwind {
 ; X64-LABEL: PR13897:
index f99bdec..34c98dd 100644 (file)
@@ -324,7 +324,7 @@ define void @g_thunk(i8* %fptr_i8, ...) {
 
 %struct.Foo = type { i1, i8*, i8* }
 
-@g = external global i32
+@g = external dso_local global i32
 
 define void @h_thunk(%struct.Foo* %this, ...) {
 ; LINUX-LABEL: h_thunk:
index b1789dd..90b2c89 100644 (file)
@@ -7,7 +7,7 @@ target triple = "x86_64-unknown-linux-gnu"
 ; Test that a constant consisting of a global symbol with a negative offset
 ; is properly folded and isel'd.
 
-@G = external global [8 x i32]
+@G = external dso_local global [8 x i32]
 define i8* @negative_offset(i8* %a) {
 ; CHECK-LABEL: negative_offset:
 ; CHECK:       # %bb.0:
index f5dac9c..30de08c 100644 (file)
@@ -1,7 +1,7 @@
 ; RUN: llc < %s -mtriple=i686--
 ; rdar://6559995
 
-@a = external global [255 x i8*], align 32
+@a = external dso_local global [255 x i8*], align 32
 
 define i32 @main() nounwind {
 entry:
index 45fea53..b3af316 100644 (file)
@@ -4,8 +4,8 @@
 
 target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32"
 target triple = "i386-unknown-linux-gnu"
-@f = external global float
-@d = external global double
+@f = external dso_local global float
+@d = external dso_local global double
 
 define void @test() nounwind {
 ; CHECK-LABEL: test:
index 7f51bae..06e7ca2 100644 (file)
@@ -9,7 +9,7 @@
 
 ; Check that the shift gets turned into an LEA.
 
-@G = external global i32                ; <i32*> [#uses=1]
+@G = external dso_local global i32                ; <i32*> [#uses=1]
 
 define i32 @test1(i32 %X) {
 ; CHECK-LABEL: test1:
index b0c4ea0..a0281c3 100644 (file)
@@ -8,7 +8,7 @@
 target datalayout = "e-p:32:32"
 target triple = "i686-pc-linux-gnu"
        %struct.anon = type <{ i8, i32, i32, i32 }>
-@foos = external global %struct.anon           ; <%struct.anon*> [#uses=3]
+@foos = external dso_local global %struct.anon         ; <%struct.anon*> [#uses=3]
 @bara = weak global [4 x <{ i32, i8 }>] zeroinitializer                ; <[4 x <{ i32, i8 }>]*> [#uses=2]
 
 define i32 @foo() nounwind {
index 63b7617..d12043f 100644 (file)
@@ -6,8 +6,8 @@
 ; EFLAGS. Make sure the flags are used directly, instead of needlessly using
 ; saving and restoring specific conditions.
 
-@L = external global i32
-@M = external global i8
+@L = external dso_local global i32
+@M = external dso_local global i8
 
 declare i32 @bar(i64)
 
index f6de77a..cfa9566 100644 (file)
@@ -9,7 +9,7 @@
 ; happens during the post-RA-scheduler, which should be enabled by
 ; default with the above specified cpus.
 
-@ptrs = external global [0 x i32*], align 4
+@ptrs = external dso_local global [0 x i32*], align 4
 @idxa = common global i32 0, align 4
 @idxb = common global i32 0, align 4
 @res = common global i32 0, align 4
index db66de5..58007de 100644 (file)
@@ -2,9 +2,9 @@
 ; RUN: llc < %s -mtriple=i686-unknown-unknown | FileCheck %s --check-prefix=X86
 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefix=X64
 
-@a = external global i32
-@b = external global i32
-@c = external global i32
+@a = external dso_local global i32
+@b = external dso_local global i32
+@c = external dso_local global i32
 
 define i32 @fn1(i32, i32) {
 ; X86-LABEL: fn1:
index 721aae9..67d64c0 100644 (file)
@@ -4,7 +4,7 @@
 ; This fixes a missing cases in the MI scheduler's constrainLocalCopy exposed by
 ; PR21792
 
-@stuff = external constant [256 x double], align 16
+@stuff = external dso_local constant [256 x double], align 16
 
 define void @func(<4 x float> %vx) {
 ; CHECK-LABEL: func:
index 415164c..e846925 100644 (file)
@@ -2,8 +2,8 @@
 ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=X32
 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=X64
 
-@0 = external constant <4 x i32>               ; <<4 x i32>*>:0 [#uses=1]
-@1 = external constant <4 x i16>               ; <<4 x i16>*>:1 [#uses=1]
+@0 = external dso_local constant <4 x i32>             ; <<4 x i32>*>:0 [#uses=1]
+@1 = external dso_local constant <4 x i16>             ; <<4 x i16>*>:1 [#uses=1]
 
 define internal void @PR2585() {
 ; X32-LABEL: PR2585:
index 395c827..eaddcb7 100644 (file)
@@ -6,13 +6,13 @@
 %struct.a.0.4.8.12.36.68.72.88.92.96.104.120.360 = type <{ i8, i16 }>
 %struct.d.3.7.11.15.39.71.75.91.95.99.107.123.363 = type <{ %struct.c.2.6.10.14.38.70.74.90.94.98.106.122.362, %struct.c.2.6.10.14.38.70.74.90.94.98.106.122.362, i8, i8 }>
 
-@var_46 = external local_unnamed_addr global i8, align 1
-@var_44 = external local_unnamed_addr global i8, align 1
-@var_163 = external local_unnamed_addr global i8, align 1
-@struct_obj_12 = external local_unnamed_addr global %struct.c.2.6.10.14.38.70.74.90.94.98.106.122.362, align 2
-@struct_obj_3 = external local_unnamed_addr global %struct.d.3.7.11.15.39.71.75.91.95.99.107.123.363, align 2
-@struct_obj_8 = external local_unnamed_addr global %struct.d.3.7.11.15.39.71.75.91.95.99.107.123.363, align 2
-@var_49 = external local_unnamed_addr constant i8, align 1
+@var_46 = external dso_local local_unnamed_addr global i8, align 1
+@var_44 = external dso_local local_unnamed_addr global i8, align 1
+@var_163 = external dso_local local_unnamed_addr global i8, align 1
+@struct_obj_12 = external dso_local local_unnamed_addr global %struct.c.2.6.10.14.38.70.74.90.94.98.106.122.362, align 2
+@struct_obj_3 = external dso_local local_unnamed_addr global %struct.d.3.7.11.15.39.71.75.91.95.99.107.123.363, align 2
+@struct_obj_8 = external dso_local local_unnamed_addr global %struct.d.3.7.11.15.39.71.75.91.95.99.107.123.363, align 2
+@var_49 = external dso_local local_unnamed_addr constant i8, align 1
 
 ; Function Attrs: norecurse nounwind uwtable
 define void @_Z1av() local_unnamed_addr #0 {
index cef6bd4..9b0e13b 100644 (file)
@@ -1,7 +1,7 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 ; RUN: llc -mtriple=i386-unknown-linux-gnu < %s | FileCheck %s
 
-@c = external global [1 x i32], align 4
+@c = external dso_local global [1 x i32], align 4
 
 define void @fn1(i32 %k, i32* %p) {
 ; CHECK-LABEL: fn1:
index e898295..8cfc9e0 100644 (file)
@@ -1,7 +1,7 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 ; RUN: llc < %s -fast-isel -mtriple=i686-unknown-unknown -O0 -mcpu=skx | FileCheck %s
 
-@c = external global i8, align 1
+@c = external dso_local global i8, align 1
 
 ; Function Attrs: noinline nounwind
 define void @_Z1av() {
index cb9b33c..ad3a3ff 100644 (file)
@@ -4,7 +4,7 @@
 ; RUN: llc -fast-isel-sink-local-values -O0 -mtriple=i686-unknown   -mcpu=skx -o - %s | FileCheck %s --check-prefix=686-O0
 ; RUN: llc -fast-isel-sink-local-values     -mtriple=i686-unknown   -mcpu=skx -o - %s | FileCheck %s --check-prefix=686
 
-@c = external constant i8, align 1
+@c = external dso_local constant i8, align 1
 
 define void @foo() {
 ; X86-O0-LABEL: foo:
@@ -115,9 +115,9 @@ entry:
   ret void
 }
 
-@var_5 = external global i32, align 4
-@var_57 = external global i64, align 8
-@_ZN8struct_210member_2_0E = external global i64, align 8
+@var_5 = external dso_local global i32, align 4
+@var_57 = external dso_local global i64, align 8
+@_ZN8struct_210member_2_0E = external dso_local global i64, align 8
 
 define void @f1() {
 ; X86-O0-LABEL: f1:
@@ -280,7 +280,7 @@ entry:
 }
 
 
-@var_7 = external global i8, align 1
+@var_7 = external dso_local global i8, align 1
 
 define void @f2() {
 ; X86-O0-LABEL: f2:
@@ -406,9 +406,9 @@ entry:
 }
 
 
-@var_13 = external global i32, align 4
-@var_16 = external global i32, align 4
-@var_46 = external global i32, align 4
+@var_13 = external dso_local global i32, align 4
+@var_16 = external dso_local global i32, align 4
+@var_46 = external dso_local global i32, align 4
 
 define void @f3() #0 {
 ; X86-O0-LABEL: f3:
index 8323bd1..33e2ec1 100644 (file)
@@ -5,14 +5,14 @@
 
 %struct.AA = type { i24, [4 x i8] }
 
-@obj = external local_unnamed_addr global %struct.AA, align 8
-@var_27 = external local_unnamed_addr constant i8, align 1
-@var_2 = external local_unnamed_addr constant i16, align 2
-@var_24 = external local_unnamed_addr constant i64, align 8
-@var_310 = external local_unnamed_addr global i64, align 8
-@var_50 = external local_unnamed_addr global i64, align 8
-@var_205 = external local_unnamed_addr global i8, align 1
-@var_218 = external local_unnamed_addr global i8, align 1
+@obj = external dso_local local_unnamed_addr global %struct.AA, align 8
+@var_27 = external dso_local local_unnamed_addr constant i8, align 1
+@var_2 = external dso_local local_unnamed_addr constant i16, align 2
+@var_24 = external dso_local local_unnamed_addr constant i64, align 8
+@var_310 = external dso_local local_unnamed_addr global i64, align 8
+@var_50 = external dso_local local_unnamed_addr global i64, align 8
+@var_205 = external dso_local local_unnamed_addr global i8, align 1
+@var_218 = external dso_local local_unnamed_addr global i8, align 1
 
 define void @foo() local_unnamed_addr {
 ; X86-LABEL: foo:
index 15774d6..ab48ad2 100644 (file)
@@ -1,14 +1,14 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 ; RUN: llc -fast-isel-sink-local-values -O0 -mtriple=x86_64-unknown-linux-gnu -fast-isel-abort=1 -o - %s | FileCheck %s -check-prefix=X64
 
-@var_825 = external global i16, align 2
-@var_32 = external global i16, align 2
-@var_901 = external global i16, align 2
-@var_826 = external global i64, align 8
-@var_57 = external global i64, align 8
-@var_900 = external global i16, align 2
-@var_28 = external constant i64, align 8
-@var_827 = external global i16, align 2
+@var_825 = external dso_local global i16, align 2
+@var_32 = external dso_local global i16, align 2
+@var_901 = external dso_local global i16, align 2
+@var_826 = external dso_local global i64, align 8
+@var_57 = external dso_local global i64, align 8
+@var_900 = external dso_local global i16, align 2
+@var_28 = external dso_local constant i64, align 8
+@var_827 = external dso_local global i16, align 2
 
 define void @foo() {
 ; X64-LABEL: foo:
index 2182e8b..2ac36b2 100644 (file)
@@ -4,8 +4,8 @@
 ; RUN: llc -fast-isel-sink-local-values     -mtriple=x86_64-unknown-linux-gnu -o - %s | FileCheck %s -check-prefix=X64
 ; RUN: llc -fast-isel-sink-local-values     -mtriple=i686-unknown             -o - %s | FileCheck %s -check-prefix=686
 
-@var_22 = external global i16, align 2
-@var_27 = external global i16, align 2
+@var_22 = external dso_local global i16, align 2
+@var_27 = external dso_local global i16, align 2
 
 define void @foo() {
 ; X640-LABEL: foo:
index a324cf2..1129778 100644 (file)
@@ -1,7 +1,7 @@
 ; RUN: llc < %s -mtriple=i686--
 ; PR3241
 
-@g_620 = external global i32
+@g_620 = external dso_local global i32
 
 define void @func_18(i32 %p_21) nounwind {
 entry:
index 166ca90..957c245 100644 (file)
@@ -1,8 +1,8 @@
 ; RUN: llc < %s -mtriple=i686--
 ; PR3244
 
-@g_62 = external global i16             ; <i16*> [#uses=1]
-@g_487 = external global i32            ; <i32*> [#uses=1]
+@g_62 = external dso_local global i16             ; <i16*> [#uses=1]
+@g_487 = external dso_local global i32            ; <i32*> [#uses=1]
 
 define i32 @func_42(i32 %p_43, i32 %p_44, i32 %p_45, i32 %p_46) nounwind {
 entry:
index aeb6803..b5a7c64 100644 (file)
@@ -4,7 +4,7 @@
 ; RUN: llc     -mtriple=i686-unknown   -mcpu=skx -o - %s
 ; REQUIRES: asserts
 
-@var_26 = external global i16, align 2
+@var_26 = external dso_local global i16, align 2
 
 define void @foo() #0 {
  %1 = alloca i16, align 2
index e6222f6..223fd5d 100644 (file)
@@ -1,9 +1,9 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux | FileCheck %s
 
-@c = external local_unnamed_addr global i32, align 4
-@b = external local_unnamed_addr global i32, align 4
-@d = external local_unnamed_addr global i32, align 4
+@c = external dso_local local_unnamed_addr global i32, align 4
+@b = external dso_local local_unnamed_addr global i32, align 4
+@d = external dso_local local_unnamed_addr global i32, align 4
 
 define void @fn1() {
 ; CHECK-LABEL: fn1:
index ad3a780..e60929b 100644 (file)
@@ -3,17 +3,17 @@
 
 target triple = "i386-unknown-linux-gnu"
 
-@a = external global i32, align 4
-@d = external global i32*, align 4
-@k = external global i32**, align 4
-@j = external global i32***, align 4
-@h = external global i32, align 4
-@c = external global i32, align 4
-@i = external global i32, align 4
-@b = external global i32, align 4
-@f = external global i64, align 8
-@e = external global i64, align 8
-@g = external global i32, align 4
+@a = external dso_local global i32, align 4
+@d = external dso_local global i32*, align 4
+@k = external dso_local global i32**, align 4
+@j = external dso_local global i32***, align 4
+@h = external dso_local global i32, align 4
+@c = external dso_local global i32, align 4
+@i = external dso_local global i32, align 4
+@b = external dso_local global i32, align 4
+@f = external dso_local global i64, align 8
+@e = external dso_local global i64, align 8
+@g = external dso_local global i32, align 4
 
 declare i32 @fn1(i32 returned) optsize readnone
 
index 1c2489a..5673720 100644 (file)
@@ -2,7 +2,7 @@
 ; RUN: llc < %s -mtriple=i686-unknown-unknown -mcpu=haswell | FileCheck %s --check-prefix=X86
 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=haswell | FileCheck %s --check-prefix=X64
 
-@var_580 = external local_unnamed_addr global i8, align 1
+@var_580 = external dso_local local_unnamed_addr global i8, align 1
 
 define void @foo(i8 %a0) {
 ; X86-LABEL: foo:
index fd5a9a4..582d2e9 100644 (file)
@@ -2,7 +2,7 @@
 ; RUN: llc < %s -mtriple=i686-unknown -mattr=+avx | FileCheck %s --check-prefix=X86
 ; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx | FileCheck %s --check-prefix=X64
 
-@b = external local_unnamed_addr global i32, align 4
+@b = external dso_local local_unnamed_addr global i32, align 4
 
 define void @PR33960() {
 ; X86-LABEL: PR33960:
index 1a85a66..f24b96f 100644 (file)
@@ -1,9 +1,9 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu | FileCheck %s
 
-@var_3 = external global i16, align 2
-@var_13 = external global i16, align 2
-@var_212 = external global i64, align 8
+@var_3 = external dso_local global i16, align 2
+@var_13 = external dso_local global i16, align 2
+@var_212 = external dso_local global i64, align 8
 
 define void @pr34127() {
 ; CHECK-LABEL: pr34127:
index 4e1a3a3..01f7d55 100644 (file)
@@ -3,7 +3,7 @@
 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+adx | FileCheck %s
 
 ; PR34292
-@_ZL1c = external global i8
+@_ZL1c = external dso_local global i8
 define void @sum_unroll(i64* nocapture readonly, i64* nocapture) {
 ; CHECK-LABEL: sum_unroll:
 ; CHECK:       # %bb.0:
index 831b1d2..fd91f75 100644 (file)
@@ -1,11 +1,11 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 ;RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=slow-incdec | FileCheck %s
 
-@var_21 = external constant i32, align 4
-@var_29 = external constant i8, align 1
-@var_390 = external global i32, align 4
-@var_11 = external constant i8, align 1
-@var_370 = external global i8, align 1
+@var_21 = external dso_local constant i32, align 4
+@var_29 = external dso_local constant i8, align 1
+@var_390 = external dso_local global i32, align 4
+@var_11 = external dso_local constant i8, align 1
+@var_370 = external dso_local global i8, align 1
 
 ; Function Attrs: noinline nounwind optnone uwtable
 define void @_Z3foov() {
index d7a332b..f518d0e 100644 (file)
@@ -3,7 +3,7 @@
 ; PR3522
 
 target triple = "i386-pc-linux-gnu"
-@.str = external constant [13 x i8]            ; <[13 x i8]*> [#uses=1]
+@.str = external dso_local constant [13 x i8]          ; <[13 x i8]*> [#uses=1]
 
 define void @_ada_c34018a() personality i32 (...)* @__gxx_personality_v0 {
 entry:
index 45c771f..2cb9733 100644 (file)
@@ -3,9 +3,9 @@
 
 ; This tests for a cyclic dependencies in the generated DAG. 
 
-@c = external local_unnamed_addr global i32, align 4
-@a = external local_unnamed_addr global i32, align 4
-@b = external local_unnamed_addr global i32, align 4
+@c = external dso_local local_unnamed_addr global i32, align 4
+@a = external dso_local local_unnamed_addr global i32, align 4
+@b = external dso_local local_unnamed_addr global i32, align 4
 
 define void @foo() {
 ; CHECK-LABEL: foo:
index 01001b0..d8d6e51 100644 (file)
@@ -1,8 +1,8 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 ; RUN: llc < %s -mtriple=x86_64-unknown -mcpu=skx | FileCheck %s
 
-@ac = external local_unnamed_addr global [20 x i8], align 1
-@ai3 = external local_unnamed_addr global [20 x i32], align 16
+@ac = external dso_local local_unnamed_addr global [20 x i8], align 1
+@ai3 = external dso_local local_unnamed_addr global [20 x i32], align 16
 
 ; Function Attrs: norecurse nounwind uwtable
 define void @pr35443() {
index 97b958c..dba3231 100644 (file)
@@ -6,7 +6,7 @@
 ; to the load causing a cycle. Here the dependence in question comes
 ; from the carry in input of the adcl.
 
-@vx = external local_unnamed_addr global <2 x i32>, align 8
+@vx = external dso_local local_unnamed_addr global <2 x i32>, align 8
 
 define void @pr36274(i32* %somewhere) {
 ; CHECK-LABEL: pr36274:
index 484104d..84b8c08 100644 (file)
@@ -1,8 +1,8 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 ; RUN: llc -mtriple=i386-unknown-linux-gnu %s -o - | FileCheck %s
 
-@f = external local_unnamed_addr global i64*, align 4
-@a = external global i64, align 8
+@f = external dso_local local_unnamed_addr global i64*, align 4
+@a = external dso_local global i64, align 8
 
 define void @fn1() local_unnamed_addr {
 ; CHECK-LABEL: fn1:
index f2135cd..a727e83 100644 (file)
@@ -32,7 +32,7 @@ entry:
   ret i1 %3
 }
 
-@fpi = external global float, align 4
+@fpi = external dso_local global float, align 4
 
 define zeroext i1 @_Z8test_cosv() {
 ; CHECK-LABEL: _Z8test_cosv:
index 14a6f3d..cb141ad 100644 (file)
@@ -1,7 +1,7 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -O0 | FileCheck %s
 
-@b = external global i64, align 8
+@b = external dso_local global i64, align 8
 
 define void @foo(i1 %c, <2 x i64> %x) {
 ; CHECK-LABEL: foo:
index e0f01f3..d78b1ae 100644 (file)
@@ -1,8 +1,8 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=bmi | FileCheck %s
 
-@a = external local_unnamed_addr global i32, align 4
-@f = external local_unnamed_addr global i32, align 4
+@a = external dso_local local_unnamed_addr global i32, align 4
+@f = external dso_local local_unnamed_addr global i32, align 4
 
 define void @g(i32* %x, i32* %y, i32* %z) {
 ; CHECK-LABEL: g:
index 582d327..e3658d8 100644 (file)
@@ -1,6 +1,6 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 ; RUN: llc -mtriple=x86_64-- < %s | FileCheck %s
-@sc8 = external global i8
+@sc8 = external dso_local global i8
 
 define void @atomic_maxmin_i8() {
 ; CHECK-LABEL: atomic_maxmin_i8:
index a2fc94d..16dcea5 100644 (file)
@@ -226,7 +226,7 @@ return:
 
 ; Deal with TokenFactor chain
 ; rdar://11236106
-@foo = external global i64*, align 8
+@foo = external dso_local global i64*, align 8
 
 define void @test3() nounwind ssp {
 ; CHECK-LABEL: test3:
@@ -261,9 +261,9 @@ declare void @baz()
 ; scheduler.
 ; PR12565
 ; rdar://11451474
-@x = external global i32, align 4
-@y = external global i32, align 4
-@z = external global i32, align 4
+@x = external dso_local global i32, align 4
+@y = external dso_local global i32, align 4
+@z = external dso_local global i32, align 4
 
 define void @test4() nounwind uwtable ssp {
 ; CHECK-LABEL: test4:
index 332d635..ca56ac7 100644 (file)
@@ -3,7 +3,7 @@
 
 declare void @bar() nounwind
 
-@a = external constant float
+@a = external dso_local constant float
 
 declare void @qux(float %f) nounwind
 
index 849660c..c7f2974 100644 (file)
@@ -58,7 +58,7 @@ entry:
 ; X86FAST:       calll __x86_indirect_thunk_eax
 
 
-@global_fp = external global void (i32)*
+@global_fp = external dso_local global void (i32)*
 
 ; Test an indirect call through a global variable.
 define void @icall_global_fp(i32 %x, void (i32)** %fpp) #0 {
index 9a1673e..155c154 100644 (file)
@@ -58,7 +58,7 @@ entry:
 ; X86FAST:       calll __llvm_retpoline_eax
 
 
-@global_fp = external global void (i32)*
+@global_fp = external dso_local global void (i32)*
 
 ; Test an indirect call through a global variable.
 define void @icall_global_fp(i32 %x, void (i32)** %fpp) #0 {
index c4c50af..973b022 100644 (file)
@@ -1,7 +1,7 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 ; RUN: llc < %s -mtriple=i686-- | FileCheck %s
 
-@x = external global i32                ; <i32*> [#uses=1]
+@x = external dso_local global i32                ; <i32*> [#uses=1]
 
 define i32 @test() {
 ; CHECK-LABEL: test:
index da00f37..e33faed 100644 (file)
@@ -4,7 +4,7 @@
 
 %0 = type { i32, i8, [35 x i8] }
 
-@g_144 = external global %0, align 8              ; <%0*> [#uses=1]
+@g_144 = external dso_local global %0, align 8              ; <%0*> [#uses=1]
 
 define i32 @int87(i32 %uint64p_8, i1 %cond) nounwind {
 ; CHECK-LABEL: int87:
index 4c3c999..08f89d2 100644 (file)
@@ -6,7 +6,7 @@
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 
-@structMember = external local_unnamed_addr global i64, align 8
+@structMember = external dso_local local_unnamed_addr global i64, align 8
 
 define i32 @PR29058(i8 %x, i32 %y) {
 ; CHECK-LABEL: PR29058:
index 3f9c77a..e09b4ce 100644 (file)
@@ -6,7 +6,7 @@
 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx  | FileCheck %s --check-prefixes=X64-AVX,X64-AVX1
 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=X64-AVX,X64-AVX2
 
-@c = external global i32*, align 8
+@c = external dso_local global i32*, align 8
 
 ; %val1 = load <2 x i8>
 ; %op1 = zext<2 x i32> %val1
index 93bb2a4..a420069 100644 (file)
@@ -5,7 +5,7 @@
 ;
 ; RUN: llc -mtriple=i386-pc-linux-gnu -mattr=+sse < %s | FileCheck %s
 
-@c = external global i32*, align 8
+@c = external dso_local global i32*, align 8
 
 define void @mul_2xi8(i8* nocapture readonly %a, i8* nocapture readonly %b, i64 %index) nounwind {
 ; CHECK-LABEL: mul_2xi8:
index 8111aa7..fe1c25d 100644 (file)
@@ -153,7 +153,7 @@ declare <4 x float> @llvm.x86.sse2.cvtdq2ps(<4 x i32>) nounwind readnone
 ; CHECK-LABEL: default_get_pch_validity:
 ; CHECK: movl cl_options_count(%rip), %ecx
 
-@cl_options_count = external constant i32         ; <i32*> [#uses=2]
+@cl_options_count = external dso_local constant i32         ; <i32*> [#uses=2]
 
 define void @default_get_pch_validity() nounwind {
 entry:
index f7d861a..677f4fe 100644 (file)
@@ -5,7 +5,7 @@ target triple = "i386-linux-gnu"
 
 ; Try some simple cases that show how local value sinking improves line tables.
 
-@sink_across = external global i32
+@sink_across = external dso_local global i32
 
 declare void @simple_callee(i32, i32)
 
index ec1ed46..3dab8f9 100644 (file)
@@ -269,7 +269,7 @@ define void @test7() nounwind {
   ret void
 }
 
-@x = external global [4 x i32]
+@x = external dso_local global [4 x i32]
 
 define <2 x i64> @test8() nounwind {
 ; X86-SSE-LABEL: test8:
index a195144..750abba 100644 (file)
@@ -249,8 +249,8 @@ define void @t9(<4 x float>* %r, <2 x i32>* %A) nounwind {
 ; FIXME: This testcase produces icky code. It can be made much better!
 ; PR2585
 
-@g1 = external constant <4 x i32>
-@g2 = external constant <4 x i16>
+@g1 = external dso_local constant <4 x i32>
+@g2 = external dso_local constant <4 x i16>
 
 define void @t10() nounwind {
 ; X86-LABEL: t10:
index caf3c28..8e0de0d 100644 (file)
@@ -7,7 +7,7 @@
 ; Check that no FP constants in this testcase ends up in the 
 ; constant pool.
 
-@G = external global float              ; <float*> [#uses=1]
+@G = external dso_local global float              ; <float*> [#uses=1]
 
 declare void @extfloat(float)
 
index 7c8f362..de13404 100644 (file)
@@ -5,10 +5,10 @@
 ; P should be sunk into the loop and folded into the address mode. There
 ; shouldn't be any lea instructions inside the loop.
 
-@B = external global [1000 x i8], align 32
-@A = external global [1000 x i8], align 32
-@P = external global [1000 x i8], align 32
-@Q = external global [1000 x i8], align 32
+@B = external dso_local global [1000 x i8], align 32
+@A = external dso_local global [1000 x i8], align 32
+@P = external dso_local global [1000 x i8], align 32
+@Q = external dso_local global [1000 x i8], align 32
 
 define void @foo(i32 %m, i32 %p) nounwind {
 entry:
index 9862074..6674306 100644 (file)
@@ -2,9 +2,9 @@
 ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux | FileCheck %s
 ; CHECK-NOT:     lea
 
-@B = external global [1000 x float], align 32
-@A = external global [1000 x float], align 32
-@P = external global [1000 x i32], align 32
+@B = external dso_local global [1000 x float], align 32
+@A = external dso_local global [1000 x float], align 32
+@P = external dso_local global [1000 x i32], align 32
 
 define void @foo(i32 %m) nounwind {
 entry:
index 024ad58..b29d1c0 100644 (file)
@@ -2,8 +2,8 @@
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 
-@data = external global [3 x i32], align 4
-@store = external global i32, align 4
+@data = external dso_local global [3 x i32], align 4
+@store = external dso_local global i32, align 4
 
 ; %else1 and %then2 end up lowering to identical blocks. These blocks should be
 ; merged during tail-merging.
index 89c26df..e70ecf0 100644 (file)
@@ -428,7 +428,7 @@ declare void @func()
 
 ; one - One instruction may be tail-duplicated even with optsize.
 
-@XYZ = external global i32
+@XYZ = external dso_local global i32
 
 declare void @tail_call_me()
 
index 359e89e..1cf0a99 100644 (file)
@@ -7,8 +7,8 @@
 ;This node was generated by X86ISelLowering.cpp, EltsFromConsecutiveLoads
 ;static function after legalize stage.
 
-@e = external global [4 x i32], align 4
-@f = external global [4 x i32], align 4
+@e = external dso_local global [4 x i32], align 4
+@f = external dso_local global [4 x i32], align 4
 
 ; Function Attrs: nounwind
 define void @fn3(i32 %el) {
index 8629b21..7f20dde 100644 (file)
@@ -4,11 +4,11 @@
 
 ; 64-bit stores here do not use MMX.
 
-@M1 = external global <1 x i64>
-@M2 = external global <2 x i32>
+@M1 = external dso_local global <1 x i64>
+@M2 = external dso_local global <2 x i32>
 
-@S1 = external global <2 x i64>
-@S2 = external global <4 x i32>
+@S1 = external dso_local global <2 x i64>
+@S2 = external dso_local global <4 x i32>
 
 define void @test1() {
 ; X32-LABEL: test1:
index 8e293e4..089f72a 100644 (file)
@@ -2,7 +2,7 @@
 ; RUN: llc < %s -mtriple=i686-- -mattr=sse2 | FileCheck %s
 ; RUN: llc < %s -mtriple=i686-- -mattr=sse2 -O0 | FileCheck %s
 
-@x = external global double
+@x = external dso_local global double
 
 define void @foo() nounwind  {
 ; CHECK-LABEL: foo:
index 952add9..c44d7a8 100644 (file)
@@ -3,8 +3,8 @@
 
 ; Test for x32 function pointer tail call
 
-@foo1 = external global void (i8*)*
-@foo2 = external global void (i8*)*
+@foo1 = external dso_local global void (i8*)*
+@foo2 = external dso_local global void (i8*)*
 
 define void @bar(i8* %h) nounwind uwtable {
 entry:
index 7816802..6482200 100644 (file)
@@ -6,7 +6,7 @@
 
 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
 target triple = "x86_64-unknown-linux-gnu"
-@call_used_regs = external global [53 x i8], align 32
+@call_used_regs = external dso_local global [53 x i8], align 32
 
 define fastcc void @foo() nounwind {
 ; CHECK-LABEL: foo:
index fdc0d08..cf22385 100644 (file)
@@ -28,8 +28,8 @@
 ; LARGE: [[JUMP]]
 ; LARGE: ldw r0, r11[0]
 ; LARGE: retsp 0
-@A1 = external global [50000 x i32]
-@A2 = external global [50000 x i32]
+@A1 = external dso_local global [50000 x i32]
+@A2 = external dso_local global [50000 x i32]
 define [50000 x i32]* @test(i1 %bool) nounwind {
 entry:
   %Addr = select i1 %bool, [50000 x i32]* @A1, [50000 x i32]* @A2
@@ -130,7 +130,7 @@ entry:
 ; LARGE: ldw r0, cp[.LCPI{{[0-9_]*}}]
 ; LARGE-NEXT: ldw r0, r0[0]
 ; LARGE-NEXT: retsp 0
-@NoSize = external global [0 x i32]
+@NoSize = external dso_local global [0 x i32]
 define i32 @UnknownSize() nounwind {
 entry:
   %0 = load i32, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @NoSize, i32 0, i32 10)
@@ -150,7 +150,7 @@ entry:
 ; LARGE: ldw r0, cp[.LCPI{{[0-9_]*}}]
 ; LARGE-NEXT: retsp 0
 %Struct = type opaque
-@Unknown = external global %Struct
+@Unknown = external dso_local global %Struct
 define %Struct* @UnknownStruct() nounwind {
 entry:
   ret %Struct* @Unknown
index ab29ad5..8a633ee 100644 (file)
@@ -1,7 +1,7 @@
 ; RUN: llc < %s -march=xcore | FileCheck %s
 
-@a = external constant [0 x i32], section ".cp.rodata"
-@b = external global [0 x i32]
+@a = external dso_local constant [0 x i32], section ".cp.rodata"
+@b = external dso_local global [0 x i32]
 
 define i32 *@f1() nounwind {
 entry:
index bb6320f..1ee8087 100644 (file)
 
 ; clang -g -S -gsplit-dwarf -O1 small.c
 
-@c = external global i32
+@c = external dso_local global i32
 
 ; Function Attrs: nounwind uwtable
 define void @bar() #0 !dbg !4 {
index 12edf44..89c7686 100644 (file)
@@ -17,8 +17,8 @@ entry:
   ret i64 %v
 }
 
-@gv1 = external global i8, align 16
-@gv2 = external global i8, align 16
+@gv1 = external dso_local global i8, align 16
+@gv2 = external dso_local global i8, align 16
 
 ; Select when both GV and base reg are present.
 define i8 @test2(i1 %c, i64 %b) {
index 98034e4..30a55da 100644 (file)
@@ -1,9 +1,4 @@
-; RUN: cat %s >%t.pic.ll
-; RUN: echo '!llvm.module.flags = !{!0}' >>%t.pic.ll
-; RUN: echo '!0 = !{i32 1, !"PIC Level", i32 2}' >>%t.pic.ll
-
 ; RUN: llvm-as %s -o %t.o
-; RUN: llvm-as %t.pic.ll -o %t.pic.o
 
 ;; Non-PIC source.
 
 ; RUN:    --plugin-opt=save-temps %t.o -o %t-out
 ; RUN: llvm-readobj -r %t-out.lto.o | FileCheck %s --check-prefix=PIC
 
-; RUN: %gold -m elf_x86_64 -plugin %llvmshlibdir/LLVMgold%shlibext \
-; RUN:    --export-dynamic --noinhibit-exec \
-; RUN:    --plugin-opt=save-temps %t.o -o %t-out
-; RUN: llvm-readobj -r %t-out.lto.o | FileCheck %s --check-prefix=STATIC
-
-; RUN: %gold -m elf_x86_64 -plugin %llvmshlibdir/LLVMgold%shlibext \
-; RUN:    -r \
-; RUN:    --plugin-opt=save-temps %t.o -o %t-out
-; RUN: llvm-readobj -r %t-out.lto.o | FileCheck %s --check-prefix=STATIC
-
 ;; PIC source.
 
 ; RUN: %gold -m elf_x86_64 -plugin %llvmshlibdir/LLVMgold%shlibext \
 ; RUN:    --shared \
-; RUN:    --plugin-opt=save-temps %t.pic.o -o %t-out
+; RUN:    --plugin-opt=save-temps %t.o -o %t-out
 ; RUN: llvm-readobj -r %t-out.lto.o | FileCheck %s --check-prefix=PIC
 
 ; RUN: %gold -m elf_x86_64 -plugin %llvmshlibdir/LLVMgold%shlibext \
 ; RUN:    --export-dynamic --noinhibit-exec -pie \
-; RUN:    --plugin-opt=save-temps %t.pic.o -o %t-out
+; RUN:    --plugin-opt=save-temps %t.o -o %t-out
 ; RUN: llvm-readobj -r %t-out.lto.o | FileCheck %s --check-prefix=PIC
 
 ; RUN: %gold -m elf_x86_64 -plugin %llvmshlibdir/LLVMgold%shlibext \
 ; RUN:    --export-dynamic --noinhibit-exec \
-; RUN:    --plugin-opt=save-temps %t.pic.o -o %t-out
+; RUN:    --plugin-opt=save-temps %t.o -o %t-out
 ; RUN: llvm-readobj -r %t-out.lto.o | FileCheck %s --check-prefix=STATIC
 
 ; RUN: %gold -m elf_x86_64 -plugin %llvmshlibdir/LLVMgold%shlibext \
 ; RUN:    -r \
-; RUN:    --plugin-opt=save-temps %t.pic.o -o %t-out
+; RUN:    --plugin-opt=save-temps %t.o -o %t-out
 ; RUN: llvm-readobj -r %t-out.lto.o | FileCheck %s --check-prefix=PIC
 
 
@@ -61,3 +46,6 @@ define i32 @main() {
   %t = load i32, i32* @foo
   ret i32 %t
 }
+
+!llvm.module.flags = !{!0}
+!0 = !{i32 1, !"PIC Level", i32 2}
diff --git a/llvm/test/tools/gold/X86/relocation-model-static.ll b/llvm/test/tools/gold/X86/relocation-model-static.ll
new file mode 100644 (file)
index 0000000..157fbbd
--- /dev/null
@@ -0,0 +1,23 @@
+; RUN: llvm-as %s -o %t.o
+
+;; --noinhibit-exec allows undefined foo.
+; RUN: %gold -m elf_x86_64 -plugin %llvmshlibdir/LLVMgold%shlibext \
+; RUN:    --export-dynamic --noinhibit-exec \
+; RUN:    --plugin-opt=save-temps %t.o -o %t-out
+; RUN: llvm-readobj -r %t-out.lto.o | FileCheck %s --check-prefix=STATIC
+
+; RUN: %gold -m elf_x86_64 -plugin %llvmshlibdir/LLVMgold%shlibext \
+; RUN:    -r \
+; RUN:    --plugin-opt=save-temps %t.o -o %t-out
+; RUN: llvm-readobj -r %t-out.lto.o | FileCheck %s --check-prefix=STATIC
+
+; STATIC: R_X86_64_PC32 foo
+
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+@foo = external dso_local global i32
+define i32 @main() {
+  %t = load i32, i32* @foo
+  ret i32 %t
+}