}
; 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 {
}
; 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
; 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
%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
; 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:
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:
%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:
; 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:
;
; 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:
;
; 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:
;
; 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()
@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) {
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 {
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 {
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.
; 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:
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:
; 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]
; 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:
; 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:
; 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:
; 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:
; 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:
; 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:
; 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
; 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()
; 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()
; 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:
; 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:
; 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:
; 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:
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:
; 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:
; 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:
; 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
; 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
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:
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:
; 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:
; 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
; 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:
; }
; }
;
-@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
; }
;
-@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
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:
; 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:
;; 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:
; 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
; 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:
; 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:
; 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:
; 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:
; 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:
; 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
; 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>)
%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:
; 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:
; - 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:
; 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
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)
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
; 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)
ret i64 %ret
}
-@z = external global i8
+@z = external dso_local global i8
; PR1339
@"$bar" = global i32 zeroinitializer
-@"$qux" = external global i32
+@"$qux" = external dso_local global i32
define i32 @"$foo"() nounwind {
; CHECK: movl ($bar),
; 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:
; 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
; 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 {
; 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:
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()
%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)
; 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
; 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:
; 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:
!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)
; 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:
; 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:
%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:
%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:
; 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:
; 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:
; 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 {
}
; PR13578
-@t2_global = external global i32
+@t2_global = external dso_local global i32
declare i1 @t2_func()
; 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:
; 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)
; 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
; 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)
; 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
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:
%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:
; 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:
; 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:
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:
; 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:
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 {
; 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)
; 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
; 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:
; 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:
; 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:
%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 {
; 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:
; 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() {
; 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:
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:
}
-@var_7 = external global i8, align 1
+@var_7 = external dso_local global i8, align 1
define void @f2() {
; X86-O0-LABEL: f2:
}
-@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:
%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:
; 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:
; 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:
; 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:
; 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:
; 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
; 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:
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
; 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:
; 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:
; 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:
; 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:
; 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() {
; 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:
; 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:
; 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() {
; 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:
; 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:
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:
; 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:
; 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:
; 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:
; 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:
; 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:
declare void @bar() nounwind
-@a = external constant float
+@a = external dso_local constant float
declare void @qux(float %f) nounwind
; 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 {
; 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 {
; 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:
%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:
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:
; 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
;
; 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:
; 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:
; 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)
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:
; 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:
; 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)
; 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:
; 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:
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.
; 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()
;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) {
; 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:
; 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:
; 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:
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:
; 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
; 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)
; 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
; 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:
; 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 {
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) {
-; 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
%t = load i32, i32* @foo
ret i32 %t
}
+
+!llvm.module.flags = !{!0}
+!0 = !{i32 1, !"PIC Level", i32 2}
--- /dev/null
+; 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
+}