xref: /llvm-project/llvm/test/CodeGen/PowerPC/aix-tls-local-dynamic.ll (revision 5b058709536dd883980722ee000bb7b8c7b2cd8b)
1*5b058709SFelix (Ting Wang); RUN: llc -verify-machineinstrs -mcpu=pwr7 -mattr=-altivec -mtriple powerpc64-ibm-aix-xcoff \
2*5b058709SFelix (Ting Wang); RUN:     --code-model=small < %s | FileCheck %s --check-prefixes=SMALL64,SMALL
3*5b058709SFelix (Ting Wang); RUN: llc -verify-machineinstrs -mcpu=pwr7 -mattr=-altivec -mtriple powerpc64-ibm-aix-xcoff \
4*5b058709SFelix (Ting Wang); RUN:     --code-model=large < %s | FileCheck %s --check-prefixes=LARGE64,LARGE
5*5b058709SFelix (Ting Wang); RUN: llc -verify-machineinstrs -mcpu=pwr7 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff \
6*5b058709SFelix (Ting Wang); RUN:     --code-model=small < %s | FileCheck %s --check-prefixes=SMALL32,SMALL
7*5b058709SFelix (Ting Wang); RUN: llc -verify-machineinstrs -mcpu=pwr7 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff \
8*5b058709SFelix (Ting Wang); RUN:     --code-model=large < %s | FileCheck %s --check-prefixes=LARGE32,LARGE
9*5b058709SFelix (Ting Wang); RUN: llc -verify-machineinstrs -mcpu=pwr7 -mattr=-altivec -mtriple powerpc64-ibm-aix-xcoff \
10*5b058709SFelix (Ting Wang); RUN:     --code-model=small -O0 < %s | FileCheck %s --check-prefixes=WITHDUP
11*5b058709SFelix (Ting Wang); RUN: llc -verify-machineinstrs -mcpu=pwr7 -mattr=-altivec -mtriple powerpc64-ibm-aix-xcoff \
12*5b058709SFelix (Ting Wang); RUN:     --code-model=small -O1 < %s | FileCheck %s --check-prefixes=NODUP
13*5b058709SFelix (Ting Wang)
14*5b058709SFelix (Ting Wang)@TGInit = thread_local(localdynamic) global i32 42, align 4
15*5b058709SFelix (Ting Wang)@TGUninit = thread_local(localdynamic) global i32 0, align 4
16*5b058709SFelix (Ting Wang)@TIInit = internal thread_local(localdynamic) global i32 42, align 4
17*5b058709SFelix (Ting Wang)@TIUninit = internal thread_local(localdynamic) global i32 0, align 4
18*5b058709SFelix (Ting Wang)@TWInit = weak thread_local(localdynamic) global i32 42, align 4
19*5b058709SFelix (Ting Wang)@TWUninit = weak thread_local(localdynamic) global i32 0, align 4
20*5b058709SFelix (Ting Wang)@x = thread_local(localdynamic) global i32 42, align 4
21*5b058709SFelix (Ting Wang)@y = thread_local(localdynamic) global i32 42, align 4
22*5b058709SFelix (Ting Wang)
23*5b058709SFelix (Ting Wang)define i32 @loadTGInit() {
24*5b058709SFelix (Ting Wang); SMALL-LABEL:  loadTGInit:
25*5b058709SFelix (Ting Wang); SMALL64:      ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2)
26*5b058709SFelix (Ting Wang); SMALL32:      lwz [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2)
27*5b058709SFelix (Ting Wang); SMALL:        bla .__tls_get_mod[PR]
28*5b058709SFelix (Ting Wang); SMALL64:      ld [[OffsetR:[0-9]+]], [[TGInitL:L..C[0-9]+]](2)
29*5b058709SFelix (Ting Wang); SMALL32:      lwz [[OffsetR:[0-9]+]], [[TGInitL:L..C[0-9]+]](2)
30*5b058709SFelix (Ting Wang); SMALL:        lwzx [[TGInitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]]
31*5b058709SFelix (Ting Wang);
32*5b058709SFelix (Ting Wang); LARGE-LABEL:  loadTGInit:
33*5b058709SFelix (Ting Wang); LARGE64:      addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2)
34*5b058709SFelix (Ting Wang); LARGE:        addis [[OffsetHR:[0-9]+]], [[TGInitL:L..C[0-9]+]]@u(2)
35*5b058709SFelix (Ting Wang); LARGE32:      addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2)
36*5b058709SFelix (Ting Wang); LARGE64:      ld [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]])
37*5b058709SFelix (Ting Wang); LARGE32:      lwz [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]])
38*5b058709SFelix (Ting Wang); LARGE:        bla .__tls_get_mod[PR]
39*5b058709SFelix (Ting Wang); LARGE64:      ld [[OffsetR:[0-9]+]], [[TGInitL:L..C[0-9]+]]@l([[OffsetHR]])
40*5b058709SFelix (Ting Wang); LARGE32:      lwz [[OffsetR:[0-9]+]], [[TGInitL:L..C[0-9]+]]@l([[OffsetHR]])
41*5b058709SFelix (Ting Wang); LARGE:        lwzx [[TGInitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]]
42*5b058709SFelix (Ting Wang)entry:
43*5b058709SFelix (Ting Wang)  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @TGInit)
44*5b058709SFelix (Ting Wang)  %1 = load i32, ptr %0, align 4
45*5b058709SFelix (Ting Wang)  ret i32 %1
46*5b058709SFelix (Ting Wang)}
47*5b058709SFelix (Ting Wang)
48*5b058709SFelix (Ting Wang)define void @storeTGInit(i32 noundef signext %i) {
49*5b058709SFelix (Ting Wang); SMALL-LABEL:  storeTGInit:
50*5b058709SFelix (Ting Wang); SMALL64:      ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2)
51*5b058709SFelix (Ting Wang); SMALL32:      lwz [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2)
52*5b058709SFelix (Ting Wang); SMALL:        bla .__tls_get_mod[PR]
53*5b058709SFelix (Ting Wang); SMALL64:      ld [[OffsetR:[0-9]+]], [[TGInitL:L..C[0-9]+]](2)
54*5b058709SFelix (Ting Wang); SMALL32:      lwz [[OffsetR:[0-9]+]], [[TGInitL:L..C[0-9]+]](2)
55*5b058709SFelix (Ting Wang); SMALL:        stwx [[TGInitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]]
56*5b058709SFelix (Ting Wang);
57*5b058709SFelix (Ting Wang); LARGE-LABEL:  storeTGInit:
58*5b058709SFelix (Ting Wang); LARGE64:      addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2)
59*5b058709SFelix (Ting Wang); LARGE:        addis [[OffsetHR:[0-9]+]], [[TGInitL:L..C[0-9]+]]@u(2)
60*5b058709SFelix (Ting Wang); LARGE32:      addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2)
61*5b058709SFelix (Ting Wang); LARGE64:      ld [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]])
62*5b058709SFelix (Ting Wang); LARGE32:      lwz [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]])
63*5b058709SFelix (Ting Wang); LARGE:        bla .__tls_get_mod[PR]
64*5b058709SFelix (Ting Wang); LARGE64:      ld [[OffsetR:[0-9]+]], [[TGInitL:L..C[0-9]+]]@l([[OffsetHR]])
65*5b058709SFelix (Ting Wang); LARGE32:      lwz [[OffsetR:[0-9]+]], [[TGInitL:L..C[0-9]+]]@l([[OffsetHR]])
66*5b058709SFelix (Ting Wang); LARGE:        stwx [[TGInitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]]
67*5b058709SFelix (Ting Wang)entry:
68*5b058709SFelix (Ting Wang)  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @TGInit)
69*5b058709SFelix (Ting Wang)  store i32 %i, ptr %0, align 4
70*5b058709SFelix (Ting Wang)  ret void
71*5b058709SFelix (Ting Wang)}
72*5b058709SFelix (Ting Wang)
73*5b058709SFelix (Ting Wang)define i32 @loadTGUninit() {
74*5b058709SFelix (Ting Wang); SMALL-LABEL:  loadTGUninit:
75*5b058709SFelix (Ting Wang); SMALL64:      ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2)
76*5b058709SFelix (Ting Wang); SMALL32:      lwz [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2)
77*5b058709SFelix (Ting Wang); SMALL:        bla .__tls_get_mod[PR]
78*5b058709SFelix (Ting Wang); SMALL64:      ld [[OffsetR:[0-9]+]], [[TGUninitL:L..C[0-9]+]](2)
79*5b058709SFelix (Ting Wang); SMALL32:      lwz [[OffsetR:[0-9]+]], [[TGUninitL:L..C[0-9]+]](2)
80*5b058709SFelix (Ting Wang); SMALL:        lwzx [[TGInitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]]
81*5b058709SFelix (Ting Wang);
82*5b058709SFelix (Ting Wang); LARGE-LABEL:  loadTGUninit:
83*5b058709SFelix (Ting Wang); LARGE64:      addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2)
84*5b058709SFelix (Ting Wang); LARGE:        addis [[OffsetHR:[0-9]+]], [[TGUninitL:L..C[0-9]+]]@u(2)
85*5b058709SFelix (Ting Wang); LARGE32:      addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2)
86*5b058709SFelix (Ting Wang); LARGE64:      ld [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]])
87*5b058709SFelix (Ting Wang); LARGE32:      lwz [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]])
88*5b058709SFelix (Ting Wang); LARGE:        bla .__tls_get_mod[PR]
89*5b058709SFelix (Ting Wang); LARGE64:      ld [[OffsetR:[0-9]+]], [[TGUninitL:L..C[0-9]+]]@l([[OffsetHR]])
90*5b058709SFelix (Ting Wang); LARGE32:      lwz [[OffsetR:[0-9]+]], [[TGUninitL:L..C[0-9]+]]@l([[OffsetHR]])
91*5b058709SFelix (Ting Wang); LARGE:        lwzx [[TGUninitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]]
92*5b058709SFelix (Ting Wang)entry:
93*5b058709SFelix (Ting Wang)  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @TGUninit)
94*5b058709SFelix (Ting Wang)  %1 = load i32, ptr %0, align 4
95*5b058709SFelix (Ting Wang)  ret i32 %1
96*5b058709SFelix (Ting Wang)}
97*5b058709SFelix (Ting Wang)
98*5b058709SFelix (Ting Wang)define void @storeTGUninit(i32 noundef signext %i) {
99*5b058709SFelix (Ting Wang); SMALL-LABEL:  storeTGUninit:
100*5b058709SFelix (Ting Wang); SMALL64:      ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2)
101*5b058709SFelix (Ting Wang); SMALL32:      lwz [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2)
102*5b058709SFelix (Ting Wang); SMALL:        bla .__tls_get_mod[PR]
103*5b058709SFelix (Ting Wang); SMALL64:      ld [[OffsetR:[0-9]+]], [[TGUninitL:L..C[0-9]+]](2)
104*5b058709SFelix (Ting Wang); SMALL32:      lwz [[OffsetR:[0-9]+]], [[TGUninitL:L..C[0-9]+]](2)
105*5b058709SFelix (Ting Wang); SMALL:        stwx [[TGUninitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]]
106*5b058709SFelix (Ting Wang);
107*5b058709SFelix (Ting Wang); LARGE-LABEL:  storeTGUninit:
108*5b058709SFelix (Ting Wang); LARGE64:      addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2)
109*5b058709SFelix (Ting Wang); LARGE:        addis [[OffsetHR:[0-9]+]], [[TGUninitL:L..C[0-9]+]]@u(2)
110*5b058709SFelix (Ting Wang); LARGE32:      addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2)
111*5b058709SFelix (Ting Wang); LARGE64:      ld [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]])
112*5b058709SFelix (Ting Wang); LARGE32:      lwz [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]])
113*5b058709SFelix (Ting Wang); LARGE:        bla .__tls_get_mod[PR]
114*5b058709SFelix (Ting Wang); LARGE64:      ld [[OffsetR:[0-9]+]], [[TGUninitL:L..C[0-9]+]]@l([[OffsetHR]])
115*5b058709SFelix (Ting Wang); LARGE32:      lwz [[OffsetR:[0-9]+]], [[TGUninitL:L..C[0-9]+]]@l([[OffsetHR]])
116*5b058709SFelix (Ting Wang); LARGE:        stwx [[TGUninitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]]
117*5b058709SFelix (Ting Wang)entry:
118*5b058709SFelix (Ting Wang)  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @TGUninit)
119*5b058709SFelix (Ting Wang)  store i32 %i, ptr %0, align 4
120*5b058709SFelix (Ting Wang)  ret void
121*5b058709SFelix (Ting Wang)}
122*5b058709SFelix (Ting Wang)
123*5b058709SFelix (Ting Wang)define i32 @loadTIInit() {
124*5b058709SFelix (Ting Wang); SMALL-LABEL:  loadTIInit:
125*5b058709SFelix (Ting Wang); SMALL64:      ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2)
126*5b058709SFelix (Ting Wang); SMALL32:      lwz [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2)
127*5b058709SFelix (Ting Wang); SMALL:        bla .__tls_get_mod[PR]
128*5b058709SFelix (Ting Wang); SMALL64:      ld [[OffsetR:[0-9]+]], [[TIInitL:L..C[0-9]+]](2)
129*5b058709SFelix (Ting Wang); SMALL32:      lwz [[OffsetR:[0-9]+]], [[TIInitL:L..C[0-9]+]](2)
130*5b058709SFelix (Ting Wang); SMALL:        lwzx [[TIInitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]]
131*5b058709SFelix (Ting Wang);
132*5b058709SFelix (Ting Wang); LARGE-LABEL:  loadTIInit:
133*5b058709SFelix (Ting Wang); LARGE64:      addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2)
134*5b058709SFelix (Ting Wang); LARGE:        addis [[OffsetHR:[0-9]+]], [[TIInitL:L..C[0-9]+]]@u(2)
135*5b058709SFelix (Ting Wang); LARGE32:      addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2)
136*5b058709SFelix (Ting Wang); LARGE64:      ld [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]])
137*5b058709SFelix (Ting Wang); LARGE32:      lwz [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]])
138*5b058709SFelix (Ting Wang); LARGE:        bla .__tls_get_mod[PR]
139*5b058709SFelix (Ting Wang); LARGE64:      ld [[OffsetR:[0-9]+]], [[TIInitL:L..C[0-9]+]]@l([[OffsetHR]])
140*5b058709SFelix (Ting Wang); LARGE32:      lwz [[OffsetR:[0-9]+]], [[TIInitL:L..C[0-9]+]]@l([[OffsetHR]])
141*5b058709SFelix (Ting Wang); LARGE:        lwzx [[TIInitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]]
142*5b058709SFelix (Ting Wang)entry:
143*5b058709SFelix (Ting Wang)  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @TIInit)
144*5b058709SFelix (Ting Wang)  %1 = load i32, ptr %0, align 4
145*5b058709SFelix (Ting Wang)  ret i32 %1
146*5b058709SFelix (Ting Wang)}
147*5b058709SFelix (Ting Wang)
148*5b058709SFelix (Ting Wang)define void @storeTIInit(i32 noundef signext %i) {
149*5b058709SFelix (Ting Wang); SMALL-LABEL:  storeTIInit:
150*5b058709SFelix (Ting Wang); SMALL64:      ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2)
151*5b058709SFelix (Ting Wang); SMALL32:      lwz [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2)
152*5b058709SFelix (Ting Wang); SMALL:        bla .__tls_get_mod[PR]
153*5b058709SFelix (Ting Wang); SMALL64:      ld [[OffsetR:[0-9]+]], [[TIInitL:L..C[0-9]+]](2)
154*5b058709SFelix (Ting Wang); SMALL32:      lwz [[OffsetR:[0-9]+]], [[TIInitL:L..C[0-9]+]](2)
155*5b058709SFelix (Ting Wang); SMALL:        stwx [[TIInitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]]
156*5b058709SFelix (Ting Wang);
157*5b058709SFelix (Ting Wang); LARGE-LABEL:  storeTIInit:
158*5b058709SFelix (Ting Wang); LARGE64:      addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2)
159*5b058709SFelix (Ting Wang); LARGE:        addis [[OffsetHR:[0-9]+]], [[TIInitL:L..C[0-9]+]]@u(2)
160*5b058709SFelix (Ting Wang); LARGE32:      addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2)
161*5b058709SFelix (Ting Wang); LARGE64:      ld [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]])
162*5b058709SFelix (Ting Wang); LARGE32:      lwz [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]])
163*5b058709SFelix (Ting Wang); LARGE:        bla .__tls_get_mod[PR]
164*5b058709SFelix (Ting Wang); LARGE64:      ld [[OffsetR:[0-9]+]], [[TIInitL:L..C[0-9]+]]@l([[OffsetHR]])
165*5b058709SFelix (Ting Wang); LARGE32:      lwz [[OffsetR:[0-9]+]], [[TIInitL:L..C[0-9]+]]@l([[OffsetHR]])
166*5b058709SFelix (Ting Wang); LARGE:        stwx [[TIInitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]]
167*5b058709SFelix (Ting Wang)entry:
168*5b058709SFelix (Ting Wang)  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @TIInit)
169*5b058709SFelix (Ting Wang)  store i32 %i, ptr %0, align 4
170*5b058709SFelix (Ting Wang)  ret void
171*5b058709SFelix (Ting Wang)}
172*5b058709SFelix (Ting Wang)
173*5b058709SFelix (Ting Wang)define i32 @loadTIUninit() {
174*5b058709SFelix (Ting Wang); SMALL-LABEL:  loadTIUninit:
175*5b058709SFelix (Ting Wang); SMALL64:      ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2)
176*5b058709SFelix (Ting Wang); SMALL32:      lwz [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2)
177*5b058709SFelix (Ting Wang); SMALL:        bla .__tls_get_mod[PR]
178*5b058709SFelix (Ting Wang); SMALL64:      ld [[OffsetR:[0-9]+]], [[TIUninitL:L..C[0-9]+]](2)
179*5b058709SFelix (Ting Wang); SMALL32:      lwz [[OffsetR:[0-9]+]], [[TIUninitL:L..C[0-9]+]](2)
180*5b058709SFelix (Ting Wang); SMALL:        lwzx [[TIUninitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]]
181*5b058709SFelix (Ting Wang);
182*5b058709SFelix (Ting Wang); LARGE-LABEL:  loadTIUninit:
183*5b058709SFelix (Ting Wang); LARGE64:      addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2)
184*5b058709SFelix (Ting Wang); LARGE:        addis [[OffsetHR:[0-9]+]], [[TIUninitL:L..C[0-9]+]]@u(2)
185*5b058709SFelix (Ting Wang); LARGE32:      addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2)
186*5b058709SFelix (Ting Wang); LARGE64:      ld [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]])
187*5b058709SFelix (Ting Wang); LARGE32:      lwz [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]])
188*5b058709SFelix (Ting Wang); LARGE:        bla .__tls_get_mod[PR]
189*5b058709SFelix (Ting Wang); LARGE64:      ld [[OffsetR:[0-9]+]], [[TIUninitL:L..C[0-9]+]]@l([[OffsetHR]])
190*5b058709SFelix (Ting Wang); LARGE32:      lwz [[OffsetR:[0-9]+]], [[TIUninitL:L..C[0-9]+]]@l([[OffsetHR]])
191*5b058709SFelix (Ting Wang); LARGE:        lwzx [[TIUninitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]]
192*5b058709SFelix (Ting Wang)entry:
193*5b058709SFelix (Ting Wang)  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @TIUninit)
194*5b058709SFelix (Ting Wang)  %1 = load i32, ptr %0, align 4
195*5b058709SFelix (Ting Wang)  ret i32 %1
196*5b058709SFelix (Ting Wang)}
197*5b058709SFelix (Ting Wang)
198*5b058709SFelix (Ting Wang)define void @storeTIUninit(i32 noundef signext %i) {
199*5b058709SFelix (Ting Wang); SMALL-LABEL:  storeTIUninit:
200*5b058709SFelix (Ting Wang); SMALL64:      ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2)
201*5b058709SFelix (Ting Wang); SMALL32:      lwz [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2)
202*5b058709SFelix (Ting Wang); SMALL:        bla .__tls_get_mod[PR]
203*5b058709SFelix (Ting Wang); SMALL64:      ld [[OffsetR:[0-9]+]], [[TIUninitL:L..C[0-9]+]](2)
204*5b058709SFelix (Ting Wang); SMALL32:      lwz [[OffsetR:[0-9]+]], [[TIUninitL:L..C[0-9]+]](2)
205*5b058709SFelix (Ting Wang); SMALL:        stwx [[TIUninitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]]
206*5b058709SFelix (Ting Wang);
207*5b058709SFelix (Ting Wang); LARGE-LABEL:  storeTIUninit:
208*5b058709SFelix (Ting Wang); LARGE64:      addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2)
209*5b058709SFelix (Ting Wang); LARGE:        addis [[OffsetHR:[0-9]+]], [[TIUninitL:L..C[0-9]+]]@u(2)
210*5b058709SFelix (Ting Wang); LARGE32:      addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2)
211*5b058709SFelix (Ting Wang); LARGE64:      ld [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]])
212*5b058709SFelix (Ting Wang); LARGE32:      lwz [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]])
213*5b058709SFelix (Ting Wang); LARGE:        bla .__tls_get_mod[PR]
214*5b058709SFelix (Ting Wang); LARGE64:      ld [[OffsetR:[0-9]+]], [[TIUninitL:L..C[0-9]+]]@l([[OffsetHR]])
215*5b058709SFelix (Ting Wang); LARGE32:      lwz [[OffsetR:[0-9]+]], [[TIUninitL:L..C[0-9]+]]@l([[OffsetHR]])
216*5b058709SFelix (Ting Wang); LARGE:        stwx [[TIUninitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]]
217*5b058709SFelix (Ting Wang)entry:
218*5b058709SFelix (Ting Wang)  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @TIUninit)
219*5b058709SFelix (Ting Wang)  store i32 %i, ptr %0, align 4
220*5b058709SFelix (Ting Wang)  ret void
221*5b058709SFelix (Ting Wang)}
222*5b058709SFelix (Ting Wang)
223*5b058709SFelix (Ting Wang)define i32 @loadTWInit() {
224*5b058709SFelix (Ting Wang); SMALL-LABEL:  loadTWInit:
225*5b058709SFelix (Ting Wang); SMALL64:      ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2)
226*5b058709SFelix (Ting Wang); SMALL32:      lwz [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2)
227*5b058709SFelix (Ting Wang); SMALL:        bla .__tls_get_mod[PR]
228*5b058709SFelix (Ting Wang); SMALL64:      ld [[OffsetR:[0-9]+]], [[TWInitL:L..C[0-9]+]](2)
229*5b058709SFelix (Ting Wang); SMALL32:      lwz [[OffsetR:[0-9]+]], [[TWInitL:L..C[0-9]+]](2)
230*5b058709SFelix (Ting Wang); SMALL:        lwzx [[TWInitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]]
231*5b058709SFelix (Ting Wang);
232*5b058709SFelix (Ting Wang); LARGE-LABEL:  loadTWInit:
233*5b058709SFelix (Ting Wang); LARGE64:      addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2)
234*5b058709SFelix (Ting Wang); LARGE:        addis [[OffsetHR:[0-9]+]], [[TWInitL:L..C[0-9]+]]@u(2)
235*5b058709SFelix (Ting Wang); LARGE32:      addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2)
236*5b058709SFelix (Ting Wang); LARGE64:      ld [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]])
237*5b058709SFelix (Ting Wang); LARGE32:      lwz [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]])
238*5b058709SFelix (Ting Wang); LARGE:        bla .__tls_get_mod[PR]
239*5b058709SFelix (Ting Wang); LARGE64:      ld [[OffsetR:[0-9]+]], [[TWInitL:L..C[0-9]+]]@l([[OffsetHR]])
240*5b058709SFelix (Ting Wang); LARGE32:      lwz [[OffsetR:[0-9]+]], [[TWInitL:L..C[0-9]+]]@l([[OffsetHR]])
241*5b058709SFelix (Ting Wang); LARGE:        lwzx [[TWInitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]]
242*5b058709SFelix (Ting Wang)entry:
243*5b058709SFelix (Ting Wang)  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @TWInit)
244*5b058709SFelix (Ting Wang)  %1 = load i32, ptr %0, align 4
245*5b058709SFelix (Ting Wang)  ret i32 %1
246*5b058709SFelix (Ting Wang)}
247*5b058709SFelix (Ting Wang)
248*5b058709SFelix (Ting Wang)define void @storeTWInit(i32 noundef signext %i) {
249*5b058709SFelix (Ting Wang); SMALL-LABEL:  storeTWInit:
250*5b058709SFelix (Ting Wang); SMALL64:      ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2)
251*5b058709SFelix (Ting Wang); SMALL32:      lwz [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2)
252*5b058709SFelix (Ting Wang); SMALL:        bla .__tls_get_mod[PR]
253*5b058709SFelix (Ting Wang); SMALL64:      ld [[OffsetR:[0-9]+]], [[TWInitL:L..C[0-9]+]](2)
254*5b058709SFelix (Ting Wang); SMALL32:      lwz [[OffsetR:[0-9]+]], [[TWInitL:L..C[0-9]+]](2)
255*5b058709SFelix (Ting Wang); SMALL:        stwx [[TWInitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]]
256*5b058709SFelix (Ting Wang);
257*5b058709SFelix (Ting Wang); LARGE-LABEL:  storeTWInit:
258*5b058709SFelix (Ting Wang); LARGE64:      addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2)
259*5b058709SFelix (Ting Wang); LARGE:        addis [[OffsetHR:[0-9]+]], [[TWInitL:L..C[0-9]+]]@u(2)
260*5b058709SFelix (Ting Wang); LARGE32:      addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2)
261*5b058709SFelix (Ting Wang); LARGE64:      ld [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]])
262*5b058709SFelix (Ting Wang); LARGE32:      lwz [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]])
263*5b058709SFelix (Ting Wang); LARGE:        bla .__tls_get_mod[PR]
264*5b058709SFelix (Ting Wang); LARGE64:      ld [[OffsetR:[0-9]+]], [[TWInitL:L..C[0-9]+]]@l([[OffsetHR]])
265*5b058709SFelix (Ting Wang); LARGE32:      lwz [[OffsetR:[0-9]+]], [[TWInitL:L..C[0-9]+]]@l([[OffsetHR]])
266*5b058709SFelix (Ting Wang); LARGE:        stwx [[TWInitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]]
267*5b058709SFelix (Ting Wang)entry:
268*5b058709SFelix (Ting Wang)  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @TWInit)
269*5b058709SFelix (Ting Wang)  store i32 %i, ptr %0, align 4
270*5b058709SFelix (Ting Wang)  ret void
271*5b058709SFelix (Ting Wang)}
272*5b058709SFelix (Ting Wang)
273*5b058709SFelix (Ting Wang)define i32 @loadTWUninit() {
274*5b058709SFelix (Ting Wang); SMALL-LABEL:  loadTWUninit:
275*5b058709SFelix (Ting Wang); SMALL64:      ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2)
276*5b058709SFelix (Ting Wang); SMALL32:      lwz [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2)
277*5b058709SFelix (Ting Wang); SMALL:        bla .__tls_get_mod[PR]
278*5b058709SFelix (Ting Wang); SMALL64:      ld [[OffsetR:[0-9]+]], [[TWUninitL:L..C[0-9]+]](2)
279*5b058709SFelix (Ting Wang); SMALL32:      lwz [[OffsetR:[0-9]+]], [[TWUninitL:L..C[0-9]+]](2)
280*5b058709SFelix (Ting Wang); SMALL:        lwzx [[TWUninitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]]
281*5b058709SFelix (Ting Wang);
282*5b058709SFelix (Ting Wang); LARGE-LABEL:  loadTWUninit:
283*5b058709SFelix (Ting Wang); LARGE64:      addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2)
284*5b058709SFelix (Ting Wang); LARGE:        addis [[OffsetHR:[0-9]+]], [[TWUninitL:L..C[0-9]+]]@u(2)
285*5b058709SFelix (Ting Wang); LARGE32:      addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2)
286*5b058709SFelix (Ting Wang); LARGE64:      ld [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]])
287*5b058709SFelix (Ting Wang); LARGE32:      lwz [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]])
288*5b058709SFelix (Ting Wang); LARGE:        bla .__tls_get_mod[PR]
289*5b058709SFelix (Ting Wang); LARGE64:      ld [[OffsetR:[0-9]+]], [[TWUninitL:L..C[0-9]+]]@l([[OffsetHR]])
290*5b058709SFelix (Ting Wang); LARGE32:      lwz [[OffsetR:[0-9]+]], [[TWUninitL:L..C[0-9]+]]@l([[OffsetHR]])
291*5b058709SFelix (Ting Wang); LARGE:        lwzx [[TWUninitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]]
292*5b058709SFelix (Ting Wang)entry:
293*5b058709SFelix (Ting Wang)  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @TWUninit)
294*5b058709SFelix (Ting Wang)  %1 = load i32, ptr %0, align 4
295*5b058709SFelix (Ting Wang)  ret i32 %1
296*5b058709SFelix (Ting Wang)}
297*5b058709SFelix (Ting Wang)
298*5b058709SFelix (Ting Wang)define void @storeTWUninit(i32 noundef signext %i) {
299*5b058709SFelix (Ting Wang); SMALL-LABEL:  storeTWUninit:
300*5b058709SFelix (Ting Wang); SMALL64:      ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2)
301*5b058709SFelix (Ting Wang); SMALL32:      lwz [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2)
302*5b058709SFelix (Ting Wang); SMALL:        bla .__tls_get_mod[PR]
303*5b058709SFelix (Ting Wang); SMALL64:      ld [[OffsetR:[0-9]+]], [[TWUninitL:L..C[0-9]+]](2)
304*5b058709SFelix (Ting Wang); SMALL32:      lwz [[OffsetR:[0-9]+]], [[TWUninitL:L..C[0-9]+]](2)
305*5b058709SFelix (Ting Wang); SMALL:        stwx [[TWUninitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]]
306*5b058709SFelix (Ting Wang);
307*5b058709SFelix (Ting Wang); LARGE-LABEL:  storeTWUninit:
308*5b058709SFelix (Ting Wang); LARGE64:      addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2)
309*5b058709SFelix (Ting Wang); LARGE:        addis [[OffsetHR:[0-9]+]], [[TWUninitL:L..C[0-9]+]]@u(2)
310*5b058709SFelix (Ting Wang); LARGE32:      addis [[ModuleHandleHR:[0-9]+]], [[ModuleHandleL:L..C[0-9]+]]@u(2)
311*5b058709SFelix (Ting Wang); LARGE64:      ld [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]])
312*5b058709SFelix (Ting Wang); LARGE32:      lwz [[ModuleHandleR:3]], [[ModuleHandleL]]@l([[ModuleHandleHR]])
313*5b058709SFelix (Ting Wang); LARGE:        bla .__tls_get_mod[PR]
314*5b058709SFelix (Ting Wang); LARGE64:      ld [[OffsetR:[0-9]+]], [[TWUninitL:L..C[0-9]+]]@l([[OffsetHR]])
315*5b058709SFelix (Ting Wang); LARGE32:      lwz [[OffsetR:[0-9]+]], [[TWUninitL:L..C[0-9]+]]@l([[OffsetHR]])
316*5b058709SFelix (Ting Wang); LARGE:        stwx [[TWUninitValR:[0-9]+]], [[ModuleHandleR]], [[OffsetR]]
317*5b058709SFelix (Ting Wang)entry:
318*5b058709SFelix (Ting Wang)  %0 = tail call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @TWUninit)
319*5b058709SFelix (Ting Wang)  store i32 %i, ptr %0, align 4
320*5b058709SFelix (Ting Wang)  ret void
321*5b058709SFelix (Ting Wang)}
322*5b058709SFelix (Ting Wang)
323*5b058709SFelix (Ting Wang)define i32 @DedupTlsGetMod() #0 {
324*5b058709SFelix (Ting Wang); WITHDUP-LABEL:  DedupTlsGetMod:
325*5b058709SFelix (Ting Wang); WITHDUP:        ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2)
326*5b058709SFelix (Ting Wang); WITHDUP-NEXT:   bla .__tls_get_mod[PR]
327*5b058709SFelix (Ting Wang); WITHDUP-NEXT:   ld [[OffsetXR:[0-9]+]], [[X:L..C[0-9]+]](2)
328*5b058709SFelix (Ting Wang); WITHDUP:        ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2)
329*5b058709SFelix (Ting Wang); WITHDUP-NEXT:   bla .__tls_get_mod[PR]
330*5b058709SFelix (Ting Wang); WITHDUP:        ld [[OffsetYR:[0-9]+]], [[Y:L..C[0-9]+]](2)
331*5b058709SFelix (Ting Wang); WITHDUP-LABEL:  L..DedupTlsGetMod0:
332*5b058709SFelix (Ting Wang);
333*5b058709SFelix (Ting Wang); NODUP-LABEL:  DedupTlsGetMod:
334*5b058709SFelix (Ting Wang); NODUP:        ld [[ModuleHandleR:3]], [[ModuleHandleL:L..C[0-9]+]](2)
335*5b058709SFelix (Ting Wang); NODUP-NEXT:   bla .__tls_get_mod[PR]
336*5b058709SFelix (Ting Wang); NODUP-NEXT:   ld [[OffsetXR:[0-9]+]], [[X:L..C[0-9]+]](2)
337*5b058709SFelix (Ting Wang); NODUP-NEXT:   ld [[OffsetYR:[0-9]+]], [[Y:L..C[0-9]+]](2)
338*5b058709SFelix (Ting Wang); NODUP-NEXT:   lwzx [[XValR:[0-9]+]], [[ModuleHandleR]], [[OffsetXR]]
339*5b058709SFelix (Ting Wang); NODUP-NEXT:   lwzx [[YValR:[0-9]+]], [[ModuleHandleR]], [[OffsetYR]]
340*5b058709SFelix (Ting Wang); NODUP-LABEL:  L..DedupTlsGetMod0:
341*5b058709SFelix (Ting Wang)entry:
342*5b058709SFelix (Ting Wang)  %retval = alloca i32, align 4
343*5b058709SFelix (Ting Wang)  store i32 0, ptr %retval, align 4
344*5b058709SFelix (Ting Wang)  %0 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @x)
345*5b058709SFelix (Ting Wang)  %1 = load i32, ptr %0, align 4
346*5b058709SFelix (Ting Wang)  %2 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @y)
347*5b058709SFelix (Ting Wang)  %3 = load i32, ptr %2, align 4
348*5b058709SFelix (Ting Wang)  %add = add nsw i32 %1, %3
349*5b058709SFelix (Ting Wang)  ret i32 %add
350*5b058709SFelix (Ting Wang)}
351*5b058709SFelix (Ting Wang)
352*5b058709SFelix (Ting Wang); SMALL:          .extern .__tls_get_mod[PR]
353*5b058709SFelix (Ting Wang); LARGE:          .extern .__tls_get_mod[PR]
354*5b058709SFelix (Ting Wang); SMALL-NOT:      .extern _Renamed..5f24__TLSML[TC]
355*5b058709SFelix (Ting Wang); LARGE-NOT:      .extern _Renamed..5f24__TLSML[TC]
356*5b058709SFelix (Ting Wang)
357*5b058709SFelix (Ting Wang); SMALL:        [[ModuleHandleL]]:
358*5b058709SFelix (Ting Wang); SMALL-NEXT:   .tc _Renamed..5f24__TLSML[TC],_Renamed..5f24__TLSML[TC]@ml
359*5b058709SFelix (Ting Wang); SMALL-NEXT:   .rename _Renamed..5f24__TLSML[TC],"_$TLSML"
360*5b058709SFelix (Ting Wang); SMALL:        [[TGInitL]]:
361*5b058709SFelix (Ting Wang); SMALL-NEXT:   .tc TGInit[TC],TGInit[TL]@ld
362*5b058709SFelix (Ting Wang); SMALL:        [[TGUninitL]]:
363*5b058709SFelix (Ting Wang); SMALL-NEXT:   .tc TGUninit[TC],TGUninit[TL]@ld
364*5b058709SFelix (Ting Wang); SMALL:        [[TIInitL]]:
365*5b058709SFelix (Ting Wang); SMALL-NEXT:   .tc TIInit[TC],TIInit[TL]@ld
366*5b058709SFelix (Ting Wang); SMALL:        [[TIUninitL]]:
367*5b058709SFelix (Ting Wang); SMALL-NEXT:   .tc TIUninit[TC],TIUninit[UL]@ld
368*5b058709SFelix (Ting Wang); SMALL:        [[TWInitL]]:
369*5b058709SFelix (Ting Wang); SMALL-NEXT:   .tc TWInit[TC],TWInit[TL]@ld
370*5b058709SFelix (Ting Wang); SMALL:        [[TWUninitL]]:
371*5b058709SFelix (Ting Wang); SMALL-NEXT:   .tc TWUninit[TC],TWUninit[TL]@ld
372*5b058709SFelix (Ting Wang)
373*5b058709SFelix (Ting Wang); LARGE64:        [[ModuleHandleL]]:
374*5b058709SFelix (Ting Wang); LARGE64-NEXT:   .tc _Renamed..5f24__TLSML[TC],_Renamed..5f24__TLSML[TC]@ml
375*5b058709SFelix (Ting Wang); LARGE64-NEXT:   .rename _Renamed..5f24__TLSML[TC],"_$TLSML"
376*5b058709SFelix (Ting Wang); LARGE64:        [[TGInitL]]:
377*5b058709SFelix (Ting Wang); LARGE64-NEXT:   .tc TGInit[TE],TGInit[TL]@ld
378*5b058709SFelix (Ting Wang);
379*5b058709SFelix (Ting Wang); LARGE32:        [[TGInitL]]:
380*5b058709SFelix (Ting Wang); LARGE32-NEXT:   .tc TGInit[TE],TGInit[TL]@ld
381*5b058709SFelix (Ting Wang); LARGE32:        [[ModuleHandleL]]:
382*5b058709SFelix (Ting Wang); LARGE32-NEXT:   .tc _Renamed..5f24__TLSML[TC],_Renamed..5f24__TLSML[TC]@ml
383*5b058709SFelix (Ting Wang); LARGE32-NEXT:   .rename _Renamed..5f24__TLSML[TC],"_$TLSML"
384*5b058709SFelix (Ting Wang);
385*5b058709SFelix (Ting Wang); LARGE:        [[TGUninitL]]:
386*5b058709SFelix (Ting Wang); LARGE-NEXT:   .tc TGUninit[TE],TGUninit[TL]@ld
387*5b058709SFelix (Ting Wang); LARGE:        [[TIInitL]]:
388*5b058709SFelix (Ting Wang); LARGE-NEXT:   .tc TIInit[TE],TIInit[TL]@ld
389*5b058709SFelix (Ting Wang); LARGE:        [[TIUninitL]]:
390*5b058709SFelix (Ting Wang); LARGE-NEXT:   .tc TIUninit[TE],TIUninit[UL]@ld
391*5b058709SFelix (Ting Wang); LARGE:        [[TWInitL]]:
392*5b058709SFelix (Ting Wang); LARGE-NEXT:   .tc TWInit[TE],TWInit[TL]@ld
393*5b058709SFelix (Ting Wang); LARGE:        [[TWUninitL]]:
394*5b058709SFelix (Ting Wang); LARGE-NEXT:   .tc TWUninit[TE],TWUninit[TL]@ld
395*5b058709SFelix (Ting Wang)
396*5b058709SFelix (Ting Wang)declare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull)
397