1 ; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr8 \
2 ; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=AIX32,AIXDATA
3 ; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr8 \
4 ; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=AIX64,AIXDATA
5 ; RUN: llc -verify-machineinstrs -mtriple powerpc64-unknown-linux -mcpu=pwr8 \
6 ; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=LINUX64BE,LINUXDATA
7 ; RUN: llc -verify-machineinstrs -mtriple powerpc64le-unknown-linux -mcpu=pwr8 \
8 ; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=LINUX64LE,LINUXDATA
11 ;; This @GLOBALSTRING is a user of @.str which causes @.str to not get pooled.
12 @.str = private unnamed_addr constant [47 x i8] c"This is the global string that is at the top.\0A\00", align 1
13 @GLOBALSTRING = dso_local local_unnamed_addr global ptr @.str, align 8
15 @IntArray2 = dso_local global [7 x i32] [i32 5, i32 7, i32 9, i32 11, i32 17, i32 1235, i32 32], align 4
16 @.str.1 = private unnamed_addr constant [12 x i8] c"str1_STRING\00", align 1
17 @.str.2 = private unnamed_addr constant [12 x i8] c"str2_STRING\00", align 1
18 @.str.3 = private unnamed_addr constant [12 x i8] c"str3_STRING\00", align 1
19 @.str.4 = private unnamed_addr constant [12 x i8] c"str4_STRING\00", align 1
20 @.str.5 = private unnamed_addr constant [183 x i8] c"longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_STRING\00", align 1
21 @__const.str6.TheString = private unnamed_addr constant [10 x i8] c"ABCABCABC\00", align 1
22 @.str.6 = private unnamed_addr constant [12 x i8] c"MixedString\00", align 1
23 @__const.mixed2.IntArray = private unnamed_addr constant [7 x i32] [i32 5, i32 7, i32 9, i32 11, i32 17, i32 1235, i32 32], align 4
24 @__const.IntArray3 = private unnamed_addr constant [14 x i64] [i64 15, i64 7, i64 19, i64 11, i64 17, i64 1235, i64 72, i64 51, i64 32, i64 231, i64 86, i64 64, i64 754, i64 281], align 8
25 @__const.IntArray4 = private unnamed_addr constant [14 x i64] [i64 15, i64 7, i64 19, i64 11, i64 17, i64 1235, i64 72, i64 51, i64 32, i64 231, i64 86, i64 64, i64 754, i64 281], align 8
26 @__const.IntArray5 = private unnamed_addr constant [17 x i64] [i64 15, i64 7, i64 19, i64 11, i64 17, i64 1235, i64 72, i64 51, i64 32, i64 231, i64 86, i64 64, i64 754, i64 281, i64 61, i64 63, i64 67], align 8
27 @.str.7 = private unnamed_addr constant [20 x i8] c"Different String 01\00", align 1
28 @.str.8 = private unnamed_addr constant [15 x i8] c"Static Global\0A\00", align 1
30 ;; Special alignment of 128 on this string will force it to go first and have padding added.
31 ;; TODO: At the momment these will not be pooled because the extra alignment may be lost.
32 @.str.9 = private unnamed_addr constant [17 x i8] c"str9_STRING.....\00", align 128
33 @.str.10 = private unnamed_addr constant [17 x i8] c"str10_STRING....\00", align 128
36 @.str.11 = private unnamed_addr constant [10 x i8] undef, align 1
38 define dso_local signext i32 @str1() local_unnamed_addr #0 {
40 ; AIX32: # %bb.0: # %entry
42 ; AIX32-NEXT: stwu r1, -64(r1)
43 ; AIX32-NEXT: lwz r3, L..C0(r2) # @_MergedGlobals
44 ; AIX32-NEXT: stw r0, 72(r1)
45 ; AIX32-NEXT: addi r3, r3, 20
46 ; AIX32-NEXT: bl .callee[PR]
48 ; AIX32-NEXT: addi r1, r1, 64
49 ; AIX32-NEXT: lwz r0, 8(r1)
54 ; AIX64: # %bb.0: # %entry
56 ; AIX64-NEXT: stdu r1, -112(r1)
57 ; AIX64-NEXT: ld r3, L..C0(r2) # @_MergedGlobals
58 ; AIX64-NEXT: std r0, 128(r1)
59 ; AIX64-NEXT: addi r3, r3, 20
60 ; AIX64-NEXT: bl .callee[PR]
62 ; AIX64-NEXT: addi r1, r1, 112
63 ; AIX64-NEXT: ld r0, 16(r1)
67 ; LINUX64BE-LABEL: str1:
68 ; LINUX64BE: # %bb.0: # %entry
69 ; LINUX64BE-NEXT: mflr r0
70 ; LINUX64BE-NEXT: stdu r1, -112(r1)
71 ; LINUX64BE-NEXT: addis r3, r2, .L_MergedGlobals@toc@ha
72 ; LINUX64BE-NEXT: std r0, 128(r1)
73 ; LINUX64BE-NEXT: addi r3, r3, .L_MergedGlobals@toc@l
74 ; LINUX64BE-NEXT: addi r3, r3, 20
75 ; LINUX64BE-NEXT: bl callee
77 ; LINUX64BE-NEXT: addi r1, r1, 112
78 ; LINUX64BE-NEXT: ld r0, 16(r1)
79 ; LINUX64BE-NEXT: mtlr r0
82 ; LINUX64LE-LABEL: str1:
83 ; LINUX64LE: # %bb.0: # %entry
84 ; LINUX64LE-NEXT: mflr r0
85 ; LINUX64LE-NEXT: stdu r1, -32(r1)
86 ; LINUX64LE-NEXT: addis r3, r2, .L_MergedGlobals@toc@ha
87 ; LINUX64LE-NEXT: std r0, 48(r1)
88 ; LINUX64LE-NEXT: addi r3, r3, .L_MergedGlobals@toc@l
89 ; LINUX64LE-NEXT: addi r3, r3, 20
90 ; LINUX64LE-NEXT: bl callee
92 ; LINUX64LE-NEXT: addi r1, r1, 32
93 ; LINUX64LE-NEXT: ld r0, 16(r1)
94 ; LINUX64LE-NEXT: mtlr r0
97 %call = tail call signext i32 @callee(ptr noundef nonnull @.str.1)
101 declare signext i32 @callee(ptr noundef) local_unnamed_addr
103 define dso_local signext i32 @str2() local_unnamed_addr #0 {
105 ; AIX32: # %bb.0: # %entry
106 ; AIX32-NEXT: mflr r0
107 ; AIX32-NEXT: stwu r1, -64(r1)
108 ; AIX32-NEXT: lwz r3, L..C0(r2) # @_MergedGlobals
109 ; AIX32-NEXT: stw r0, 72(r1)
110 ; AIX32-NEXT: addi r3, r3, 32
111 ; AIX32-NEXT: bl .callee[PR]
113 ; AIX32-NEXT: addi r1, r1, 64
114 ; AIX32-NEXT: lwz r0, 8(r1)
115 ; AIX32-NEXT: mtlr r0
119 ; AIX64: # %bb.0: # %entry
120 ; AIX64-NEXT: mflr r0
121 ; AIX64-NEXT: stdu r1, -112(r1)
122 ; AIX64-NEXT: ld r3, L..C0(r2) # @_MergedGlobals
123 ; AIX64-NEXT: std r0, 128(r1)
124 ; AIX64-NEXT: addi r3, r3, 32
125 ; AIX64-NEXT: bl .callee[PR]
127 ; AIX64-NEXT: addi r1, r1, 112
128 ; AIX64-NEXT: ld r0, 16(r1)
129 ; AIX64-NEXT: mtlr r0
132 ; LINUX64BE-LABEL: str2:
133 ; LINUX64BE: # %bb.0: # %entry
134 ; LINUX64BE-NEXT: mflr r0
135 ; LINUX64BE-NEXT: stdu r1, -112(r1)
136 ; LINUX64BE-NEXT: addis r3, r2, .L_MergedGlobals@toc@ha
137 ; LINUX64BE-NEXT: std r0, 128(r1)
138 ; LINUX64BE-NEXT: addi r3, r3, .L_MergedGlobals@toc@l
139 ; LINUX64BE-NEXT: addi r3, r3, 32
140 ; LINUX64BE-NEXT: bl callee
141 ; LINUX64BE-NEXT: nop
142 ; LINUX64BE-NEXT: addi r1, r1, 112
143 ; LINUX64BE-NEXT: ld r0, 16(r1)
144 ; LINUX64BE-NEXT: mtlr r0
145 ; LINUX64BE-NEXT: blr
147 ; LINUX64LE-LABEL: str2:
148 ; LINUX64LE: # %bb.0: # %entry
149 ; LINUX64LE-NEXT: mflr r0
150 ; LINUX64LE-NEXT: stdu r1, -32(r1)
151 ; LINUX64LE-NEXT: addis r3, r2, .L_MergedGlobals@toc@ha
152 ; LINUX64LE-NEXT: std r0, 48(r1)
153 ; LINUX64LE-NEXT: addi r3, r3, .L_MergedGlobals@toc@l
154 ; LINUX64LE-NEXT: addi r3, r3, 32
155 ; LINUX64LE-NEXT: bl callee
156 ; LINUX64LE-NEXT: nop
157 ; LINUX64LE-NEXT: addi r1, r1, 32
158 ; LINUX64LE-NEXT: ld r0, 16(r1)
159 ; LINUX64LE-NEXT: mtlr r0
160 ; LINUX64LE-NEXT: blr
162 %call = tail call signext i32 @callee(ptr noundef nonnull @.str.2)
166 define dso_local signext i32 @str3() local_unnamed_addr #0 {
168 ; AIX32: # %bb.0: # %entry
169 ; AIX32-NEXT: mflr r0
170 ; AIX32-NEXT: stwu r1, -64(r1)
171 ; AIX32-NEXT: stw r0, 72(r1)
172 ; AIX32-NEXT: stw r30, 56(r1) # 4-byte Folded Spill
173 ; AIX32-NEXT: lwz r30, L..C0(r2) # @_MergedGlobals
174 ; AIX32-NEXT: addi r3, r30, 44
175 ; AIX32-NEXT: stw r31, 60(r1) # 4-byte Folded Spill
176 ; AIX32-NEXT: bl .callee[PR]
178 ; AIX32-NEXT: mr r31, r3
179 ; AIX32-NEXT: addi r3, r30, 32
180 ; AIX32-NEXT: bl .callee[PR]
182 ; AIX32-NEXT: add r3, r3, r31
183 ; AIX32-NEXT: lwz r31, 60(r1) # 4-byte Folded Reload
184 ; AIX32-NEXT: lwz r30, 56(r1) # 4-byte Folded Reload
185 ; AIX32-NEXT: addi r1, r1, 64
186 ; AIX32-NEXT: lwz r0, 8(r1)
187 ; AIX32-NEXT: mtlr r0
191 ; AIX64: # %bb.0: # %entry
192 ; AIX64-NEXT: mflr r0
193 ; AIX64-NEXT: stdu r1, -128(r1)
194 ; AIX64-NEXT: std r0, 144(r1)
195 ; AIX64-NEXT: std r30, 112(r1) # 8-byte Folded Spill
196 ; AIX64-NEXT: ld r30, L..C0(r2) # @_MergedGlobals
197 ; AIX64-NEXT: addi r3, r30, 44
198 ; AIX64-NEXT: std r31, 120(r1) # 8-byte Folded Spill
199 ; AIX64-NEXT: bl .callee[PR]
201 ; AIX64-NEXT: mr r31, r3
202 ; AIX64-NEXT: addi r3, r30, 32
203 ; AIX64-NEXT: bl .callee[PR]
205 ; AIX64-NEXT: add r3, r3, r31
206 ; AIX64-NEXT: ld r31, 120(r1) # 8-byte Folded Reload
207 ; AIX64-NEXT: ld r30, 112(r1) # 8-byte Folded Reload
208 ; AIX64-NEXT: extsw r3, r3
209 ; AIX64-NEXT: addi r1, r1, 128
210 ; AIX64-NEXT: ld r0, 16(r1)
211 ; AIX64-NEXT: mtlr r0
214 ; LINUX64BE-LABEL: str3:
215 ; LINUX64BE: # %bb.0: # %entry
216 ; LINUX64BE-NEXT: mflr r0
217 ; LINUX64BE-NEXT: stdu r1, -144(r1)
218 ; LINUX64BE-NEXT: addis r3, r2, .L_MergedGlobals@toc@ha
219 ; LINUX64BE-NEXT: std r0, 160(r1)
220 ; LINUX64BE-NEXT: std r29, 120(r1) # 8-byte Folded Spill
221 ; LINUX64BE-NEXT: addi r29, r3, .L_MergedGlobals@toc@l
222 ; LINUX64BE-NEXT: std r30, 128(r1) # 8-byte Folded Spill
223 ; LINUX64BE-NEXT: addi r3, r29, 44
224 ; LINUX64BE-NEXT: bl callee
225 ; LINUX64BE-NEXT: nop
226 ; LINUX64BE-NEXT: mr r30, r3
227 ; LINUX64BE-NEXT: addi r3, r29, 32
228 ; LINUX64BE-NEXT: bl callee
229 ; LINUX64BE-NEXT: nop
230 ; LINUX64BE-NEXT: add r3, r3, r30
231 ; LINUX64BE-NEXT: ld r30, 128(r1) # 8-byte Folded Reload
232 ; LINUX64BE-NEXT: ld r29, 120(r1) # 8-byte Folded Reload
233 ; LINUX64BE-NEXT: extsw r3, r3
234 ; LINUX64BE-NEXT: addi r1, r1, 144
235 ; LINUX64BE-NEXT: ld r0, 16(r1)
236 ; LINUX64BE-NEXT: mtlr r0
237 ; LINUX64BE-NEXT: blr
239 ; LINUX64LE-LABEL: str3:
240 ; LINUX64LE: # %bb.0: # %entry
241 ; LINUX64LE-NEXT: mflr r0
242 ; LINUX64LE-NEXT: std r29, -24(r1) # 8-byte Folded Spill
243 ; LINUX64LE-NEXT: std r30, -16(r1) # 8-byte Folded Spill
244 ; LINUX64LE-NEXT: stdu r1, -64(r1)
245 ; LINUX64LE-NEXT: addis r3, r2, .L_MergedGlobals@toc@ha
246 ; LINUX64LE-NEXT: std r0, 80(r1)
247 ; LINUX64LE-NEXT: addi r29, r3, .L_MergedGlobals@toc@l
248 ; LINUX64LE-NEXT: addi r3, r29, 44
249 ; LINUX64LE-NEXT: bl callee
250 ; LINUX64LE-NEXT: nop
251 ; LINUX64LE-NEXT: mr r30, r3
252 ; LINUX64LE-NEXT: addi r3, r29, 32
253 ; LINUX64LE-NEXT: bl callee
254 ; LINUX64LE-NEXT: nop
255 ; LINUX64LE-NEXT: add r3, r3, r30
256 ; LINUX64LE-NEXT: extsw r3, r3
257 ; LINUX64LE-NEXT: addi r1, r1, 64
258 ; LINUX64LE-NEXT: ld r0, 16(r1)
259 ; LINUX64LE-NEXT: ld r30, -16(r1) # 8-byte Folded Reload
260 ; LINUX64LE-NEXT: ld r29, -24(r1) # 8-byte Folded Reload
261 ; LINUX64LE-NEXT: mtlr r0
262 ; LINUX64LE-NEXT: blr
264 %call = tail call signext i32 @callee(ptr noundef nonnull @.str.3)
265 %call1 = tail call signext i32 @callee(ptr noundef nonnull @.str.2)
266 %add = add nsw i32 %call1, %call
270 define dso_local signext i32 @str4() local_unnamed_addr #0 {
272 ; AIX32: # %bb.0: # %entry
273 ; AIX32-NEXT: mflr r0
274 ; AIX32-NEXT: stwu r1, -64(r1)
275 ; AIX32-NEXT: lwz r3, L..C0(r2) # @_MergedGlobals
276 ; AIX32-NEXT: stw r0, 72(r1)
277 ; AIX32-NEXT: addi r3, r3, 56
278 ; AIX32-NEXT: bl .callee[PR]
280 ; AIX32-NEXT: addi r1, r1, 64
281 ; AIX32-NEXT: lwz r0, 8(r1)
282 ; AIX32-NEXT: mtlr r0
286 ; AIX64: # %bb.0: # %entry
287 ; AIX64-NEXT: mflr r0
288 ; AIX64-NEXT: stdu r1, -112(r1)
289 ; AIX64-NEXT: ld r3, L..C0(r2) # @_MergedGlobals
290 ; AIX64-NEXT: std r0, 128(r1)
291 ; AIX64-NEXT: addi r3, r3, 56
292 ; AIX64-NEXT: bl .callee[PR]
294 ; AIX64-NEXT: addi r1, r1, 112
295 ; AIX64-NEXT: ld r0, 16(r1)
296 ; AIX64-NEXT: mtlr r0
299 ; LINUX64BE-LABEL: str4:
300 ; LINUX64BE: # %bb.0: # %entry
301 ; LINUX64BE-NEXT: mflr r0
302 ; LINUX64BE-NEXT: stdu r1, -112(r1)
303 ; LINUX64BE-NEXT: addis r3, r2, .L_MergedGlobals@toc@ha
304 ; LINUX64BE-NEXT: std r0, 128(r1)
305 ; LINUX64BE-NEXT: addi r3, r3, .L_MergedGlobals@toc@l
306 ; LINUX64BE-NEXT: addi r3, r3, 56
307 ; LINUX64BE-NEXT: bl callee
308 ; LINUX64BE-NEXT: nop
309 ; LINUX64BE-NEXT: addi r1, r1, 112
310 ; LINUX64BE-NEXT: ld r0, 16(r1)
311 ; LINUX64BE-NEXT: mtlr r0
312 ; LINUX64BE-NEXT: blr
314 ; LINUX64LE-LABEL: str4:
315 ; LINUX64LE: # %bb.0: # %entry
316 ; LINUX64LE-NEXT: mflr r0
317 ; LINUX64LE-NEXT: stdu r1, -32(r1)
318 ; LINUX64LE-NEXT: addis r3, r2, .L_MergedGlobals@toc@ha
319 ; LINUX64LE-NEXT: std r0, 48(r1)
320 ; LINUX64LE-NEXT: addi r3, r3, .L_MergedGlobals@toc@l
321 ; LINUX64LE-NEXT: addi r3, r3, 56
322 ; LINUX64LE-NEXT: bl callee
323 ; LINUX64LE-NEXT: nop
324 ; LINUX64LE-NEXT: addi r1, r1, 32
325 ; LINUX64LE-NEXT: ld r0, 16(r1)
326 ; LINUX64LE-NEXT: mtlr r0
327 ; LINUX64LE-NEXT: blr
329 %call = tail call signext i32 @callee(ptr noundef nonnull @.str.4)
333 define dso_local signext i32 @str5() local_unnamed_addr #0 {
335 ; AIX32: # %bb.0: # %entry
336 ; AIX32-NEXT: mflr r0
337 ; AIX32-NEXT: stwu r1, -64(r1)
338 ; AIX32-NEXT: lwz r3, L..C0(r2) # @_MergedGlobals
339 ; AIX32-NEXT: stw r0, 72(r1)
340 ; AIX32-NEXT: addi r3, r3, 736
341 ; AIX32-NEXT: bl .callee[PR]
343 ; AIX32-NEXT: addi r1, r1, 64
344 ; AIX32-NEXT: lwz r0, 8(r1)
345 ; AIX32-NEXT: mtlr r0
349 ; AIX64: # %bb.0: # %entry
350 ; AIX64-NEXT: mflr r0
351 ; AIX64-NEXT: stdu r1, -112(r1)
352 ; AIX64-NEXT: ld r3, L..C0(r2) # @_MergedGlobals
353 ; AIX64-NEXT: std r0, 128(r1)
354 ; AIX64-NEXT: addi r3, r3, 736
355 ; AIX64-NEXT: bl .callee[PR]
357 ; AIX64-NEXT: addi r1, r1, 112
358 ; AIX64-NEXT: ld r0, 16(r1)
359 ; AIX64-NEXT: mtlr r0
362 ; LINUX64BE-LABEL: str5:
363 ; LINUX64BE: # %bb.0: # %entry
364 ; LINUX64BE-NEXT: mflr r0
365 ; LINUX64BE-NEXT: stdu r1, -112(r1)
366 ; LINUX64BE-NEXT: addis r3, r2, .L_MergedGlobals@toc@ha
367 ; LINUX64BE-NEXT: std r0, 128(r1)
368 ; LINUX64BE-NEXT: addi r3, r3, .L_MergedGlobals@toc@l
369 ; LINUX64BE-NEXT: addi r3, r3, 736
370 ; LINUX64BE-NEXT: bl callee
371 ; LINUX64BE-NEXT: nop
372 ; LINUX64BE-NEXT: addi r1, r1, 112
373 ; LINUX64BE-NEXT: ld r0, 16(r1)
374 ; LINUX64BE-NEXT: mtlr r0
375 ; LINUX64BE-NEXT: blr
377 ; LINUX64LE-LABEL: str5:
378 ; LINUX64LE: # %bb.0: # %entry
379 ; LINUX64LE-NEXT: mflr r0
380 ; LINUX64LE-NEXT: stdu r1, -32(r1)
381 ; LINUX64LE-NEXT: addis r3, r2, .L_MergedGlobals@toc@ha
382 ; LINUX64LE-NEXT: std r0, 48(r1)
383 ; LINUX64LE-NEXT: addi r3, r3, .L_MergedGlobals@toc@l
384 ; LINUX64LE-NEXT: addi r3, r3, 736
385 ; LINUX64LE-NEXT: bl callee
386 ; LINUX64LE-NEXT: nop
387 ; LINUX64LE-NEXT: addi r1, r1, 32
388 ; LINUX64LE-NEXT: ld r0, 16(r1)
389 ; LINUX64LE-NEXT: mtlr r0
390 ; LINUX64LE-NEXT: blr
392 %call = tail call signext i32 @callee(ptr noundef nonnull @.str.5)
396 define dso_local signext i32 @array1() local_unnamed_addr #0 {
397 ; AIX32-LABEL: array1:
398 ; AIX32: # %bb.0: # %entry
399 ; AIX32-NEXT: mflr r0
400 ; AIX32-NEXT: stwu r1, -96(r1)
401 ; AIX32-NEXT: lwz r5, L..C0(r2) # @_MergedGlobals
402 ; AIX32-NEXT: li r6, 308
403 ; AIX32-NEXT: li r4, 12
404 ; AIX32-NEXT: addi r3, r1, 64
405 ; AIX32-NEXT: stw r0, 104(r1)
406 ; AIX32-NEXT: rlwimi r4, r3, 0, 30, 27
407 ; AIX32-NEXT: lxvw4x vs0, r5, r6
408 ; AIX32-NEXT: stxvw4x vs0, 0, r4
409 ; AIX32-NEXT: li r4, 296
410 ; AIX32-NEXT: lxvw4x vs0, r5, r4
411 ; AIX32-NEXT: stxvw4x vs0, 0, r3
412 ; AIX32-NEXT: bl .calleeInt[PR]
414 ; AIX32-NEXT: addi r1, r1, 96
415 ; AIX32-NEXT: lwz r0, 8(r1)
416 ; AIX32-NEXT: mtlr r0
419 ; AIX64-LABEL: array1:
420 ; AIX64: # %bb.0: # %entry
421 ; AIX64-NEXT: mflr r0
422 ; AIX64-NEXT: stdu r1, -144(r1)
423 ; AIX64-NEXT: ld r3, L..C0(r2) # @_MergedGlobals
424 ; AIX64-NEXT: li r4, 308
425 ; AIX64-NEXT: std r0, 160(r1)
426 ; AIX64-NEXT: lxvw4x vs0, r3, r4
427 ; AIX64-NEXT: addi r4, r1, 124
428 ; AIX64-NEXT: stxvw4x vs0, 0, r4
429 ; AIX64-NEXT: li r4, 296
430 ; AIX64-NEXT: lxvw4x vs0, r3, r4
431 ; AIX64-NEXT: addi r3, r1, 112
432 ; AIX64-NEXT: stxvw4x vs0, 0, r3
433 ; AIX64-NEXT: bl .calleeInt[PR]
435 ; AIX64-NEXT: addi r1, r1, 144
436 ; AIX64-NEXT: ld r0, 16(r1)
437 ; AIX64-NEXT: mtlr r0
440 ; LINUX64BE-LABEL: array1:
441 ; LINUX64BE: # %bb.0: # %entry
442 ; LINUX64BE-NEXT: mflr r0
443 ; LINUX64BE-NEXT: stdu r1, -144(r1)
444 ; LINUX64BE-NEXT: addis r3, r2, .L_MergedGlobals@toc@ha
445 ; LINUX64BE-NEXT: li r4, 308
446 ; LINUX64BE-NEXT: std r0, 160(r1)
447 ; LINUX64BE-NEXT: addi r3, r3, .L_MergedGlobals@toc@l
448 ; LINUX64BE-NEXT: lxvw4x vs0, r3, r4
449 ; LINUX64BE-NEXT: addi r4, r1, 124
450 ; LINUX64BE-NEXT: stxvw4x vs0, 0, r4
451 ; LINUX64BE-NEXT: li r4, 296
452 ; LINUX64BE-NEXT: lxvw4x vs0, r3, r4
453 ; LINUX64BE-NEXT: addi r3, r1, 112
454 ; LINUX64BE-NEXT: stxvw4x vs0, 0, r3
455 ; LINUX64BE-NEXT: bl calleeInt
456 ; LINUX64BE-NEXT: nop
457 ; LINUX64BE-NEXT: addi r1, r1, 144
458 ; LINUX64BE-NEXT: ld r0, 16(r1)
459 ; LINUX64BE-NEXT: mtlr r0
460 ; LINUX64BE-NEXT: blr
462 ; LINUX64LE-LABEL: array1:
463 ; LINUX64LE: # %bb.0: # %entry
464 ; LINUX64LE-NEXT: mflr r0
465 ; LINUX64LE-NEXT: stdu r1, -64(r1)
466 ; LINUX64LE-NEXT: addis r3, r2, .L_MergedGlobals@toc@ha
467 ; LINUX64LE-NEXT: li r4, 308
468 ; LINUX64LE-NEXT: std r0, 80(r1)
469 ; LINUX64LE-NEXT: addi r3, r3, .L_MergedGlobals@toc@l
470 ; LINUX64LE-NEXT: lxvd2x vs0, r3, r4
471 ; LINUX64LE-NEXT: addi r4, r1, 44
472 ; LINUX64LE-NEXT: stxvd2x vs0, 0, r4
473 ; LINUX64LE-NEXT: li r4, 296
474 ; LINUX64LE-NEXT: lxvd2x vs0, r3, r4
475 ; LINUX64LE-NEXT: addi r3, r1, 32
476 ; LINUX64LE-NEXT: stxvd2x vs0, 0, r3
477 ; LINUX64LE-NEXT: bl calleeInt
478 ; LINUX64LE-NEXT: nop
479 ; LINUX64LE-NEXT: addi r1, r1, 64
480 ; LINUX64LE-NEXT: ld r0, 16(r1)
481 ; LINUX64LE-NEXT: mtlr r0
482 ; LINUX64LE-NEXT: blr
484 %IntArray = alloca [7 x i32], align 4
485 call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %IntArray)
486 call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(28) %IntArray, ptr noundef nonnull align 4 dereferenceable(28) @__const.mixed2.IntArray, i64 28, i1 false)
487 %call = call signext i32 @calleeInt(ptr noundef nonnull %IntArray)
488 call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %IntArray)
492 declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture)
493 declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg)
494 declare signext i32 @calleeInt(ptr noundef) local_unnamed_addr
495 declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture)
497 define dso_local double @DValue1() local_unnamed_addr #0 {
498 ; LINUX-LABEL: DValue1:
499 ; LINUX: # %bb.0: # %entry
500 ; LINUX-NEXT: addis 3, 2, .LCPI6_0@toc@ha
501 ; LINUX-NEXT: lfd 1, .LCPI6_0@toc@l(3)
503 ; AIX32-LABEL: DValue1:
504 ; AIX32: # %bb.0: # %entry
505 ; AIX32-NEXT: lwz r3, L..C1(r2) # %const.0
506 ; AIX32-NEXT: lfd f1, 0(r3)
509 ; AIX64-LABEL: DValue1:
510 ; AIX64: # %bb.0: # %entry
511 ; AIX64-NEXT: ld r3, L..C1(r2) # %const.0
512 ; AIX64-NEXT: lfd f1, 0(r3)
515 ; LINUX64BE-LABEL: DValue1:
516 ; LINUX64BE: # %bb.0: # %entry
517 ; LINUX64BE-NEXT: addis r3, r2, .LCPI6_0@toc@ha
518 ; LINUX64BE-NEXT: lfd f1, .LCPI6_0@toc@l(r3)
519 ; LINUX64BE-NEXT: blr
521 ; LINUX64LE-LABEL: DValue1:
522 ; LINUX64LE: # %bb.0: # %entry
523 ; LINUX64LE-NEXT: addis r3, r2, .LCPI6_0@toc@ha
524 ; LINUX64LE-NEXT: lfd f1, .LCPI6_0@toc@l(r3)
525 ; LINUX64LE-NEXT: blr
527 ret double 3.141590e+00
530 define dso_local signext i32 @str6() local_unnamed_addr #0 {
532 ; AIX32: # %bb.0: # %entry
533 ; AIX32-NEXT: mflr r0
534 ; AIX32-NEXT: stwu r1, -80(r1)
535 ; AIX32-NEXT: li r3, 17152
536 ; AIX32-NEXT: stw r0, 88(r1)
537 ; AIX32-NEXT: stw r31, 76(r1) # 4-byte Folded Spill
538 ; AIX32-NEXT: sth r3, 72(r1)
539 ; AIX32-NEXT: lis r3, 16963
540 ; AIX32-NEXT: ori r3, r3, 16706
541 ; AIX32-NEXT: stw r3, 68(r1)
542 ; AIX32-NEXT: lis r3, 16706
543 ; AIX32-NEXT: ori r3, r3, 17217
544 ; AIX32-NEXT: stw r3, 64(r1)
545 ; AIX32-NEXT: addi r3, r1, 64
546 ; AIX32-NEXT: bl .callee[PR]
548 ; AIX32-NEXT: mr r31, r3
549 ; AIX32-NEXT: addi r3, r1, 69
550 ; AIX32-NEXT: bl .callee[PR]
552 ; AIX32-NEXT: add r3, r3, r31
553 ; AIX32-NEXT: lwz r31, 76(r1) # 4-byte Folded Reload
554 ; AIX32-NEXT: addi r1, r1, 80
555 ; AIX32-NEXT: lwz r0, 8(r1)
556 ; AIX32-NEXT: mtlr r0
560 ; AIX64: # %bb.0: # %entry
561 ; AIX64-NEXT: mflr r0
562 ; AIX64-NEXT: stdu r1, -144(r1)
563 ; AIX64-NEXT: li r3, 17152
564 ; AIX64-NEXT: std r0, 160(r1)
565 ; AIX64-NEXT: std r31, 136(r1) # 8-byte Folded Spill
566 ; AIX64-NEXT: sth r3, 128(r1)
567 ; AIX64-NEXT: lis r3, 16706
568 ; AIX64-NEXT: ori r3, r3, 17217
569 ; AIX64-NEXT: rldic r3, r3, 32, 1
570 ; AIX64-NEXT: oris r3, r3, 16963
571 ; AIX64-NEXT: ori r3, r3, 16706
572 ; AIX64-NEXT: std r3, 120(r1)
573 ; AIX64-NEXT: addi r3, r1, 120
574 ; AIX64-NEXT: bl .callee[PR]
576 ; AIX64-NEXT: mr r31, r3
577 ; AIX64-NEXT: addi r3, r1, 125
578 ; AIX64-NEXT: bl .callee[PR]
580 ; AIX64-NEXT: add r3, r3, r31
581 ; AIX64-NEXT: ld r31, 136(r1) # 8-byte Folded Reload
582 ; AIX64-NEXT: extsw r3, r3
583 ; AIX64-NEXT: addi r1, r1, 144
584 ; AIX64-NEXT: ld r0, 16(r1)
585 ; AIX64-NEXT: mtlr r0
588 ; LINUX64BE-LABEL: str6:
589 ; LINUX64BE: # %bb.0: # %entry
590 ; LINUX64BE-NEXT: mflr r0
591 ; LINUX64BE-NEXT: stdu r1, -144(r1)
592 ; LINUX64BE-NEXT: li r3, 17152
593 ; LINUX64BE-NEXT: std r0, 160(r1)
594 ; LINUX64BE-NEXT: std r30, 128(r1) # 8-byte Folded Spill
595 ; LINUX64BE-NEXT: sth r3, 120(r1)
596 ; LINUX64BE-NEXT: lis r3, 16706
597 ; LINUX64BE-NEXT: ori r3, r3, 17217
598 ; LINUX64BE-NEXT: rldic r3, r3, 32, 1
599 ; LINUX64BE-NEXT: oris r3, r3, 16963
600 ; LINUX64BE-NEXT: ori r3, r3, 16706
601 ; LINUX64BE-NEXT: std r3, 112(r1)
602 ; LINUX64BE-NEXT: addi r3, r1, 112
603 ; LINUX64BE-NEXT: bl callee
604 ; LINUX64BE-NEXT: nop
605 ; LINUX64BE-NEXT: mr r30, r3
606 ; LINUX64BE-NEXT: addi r3, r1, 117
607 ; LINUX64BE-NEXT: bl callee
608 ; LINUX64BE-NEXT: nop
609 ; LINUX64BE-NEXT: add r3, r3, r30
610 ; LINUX64BE-NEXT: ld r30, 128(r1) # 8-byte Folded Reload
611 ; LINUX64BE-NEXT: extsw r3, r3
612 ; LINUX64BE-NEXT: addi r1, r1, 144
613 ; LINUX64BE-NEXT: ld r0, 16(r1)
614 ; LINUX64BE-NEXT: mtlr r0
615 ; LINUX64BE-NEXT: blr
617 ; LINUX64LE-LABEL: str6:
618 ; LINUX64LE: # %bb.0: # %entry
619 ; LINUX64LE-NEXT: mflr r0
620 ; LINUX64LE-NEXT: std r30, -16(r1) # 8-byte Folded Spill
621 ; LINUX64LE-NEXT: stdu r1, -64(r1)
622 ; LINUX64LE-NEXT: li r3, 67
623 ; LINUX64LE-NEXT: std r0, 80(r1)
624 ; LINUX64LE-NEXT: sth r3, 40(r1)
625 ; LINUX64LE-NEXT: lis r3, 8480
626 ; LINUX64LE-NEXT: ori r3, r3, 41377
627 ; LINUX64LE-NEXT: rldic r3, r3, 33, 1
628 ; LINUX64LE-NEXT: oris r3, r3, 16707
629 ; LINUX64LE-NEXT: ori r3, r3, 16961
630 ; LINUX64LE-NEXT: std r3, 32(r1)
631 ; LINUX64LE-NEXT: addi r3, r1, 32
632 ; LINUX64LE-NEXT: bl callee
633 ; LINUX64LE-NEXT: nop
634 ; LINUX64LE-NEXT: mr r30, r3
635 ; LINUX64LE-NEXT: addi r3, r1, 37
636 ; LINUX64LE-NEXT: bl callee
637 ; LINUX64LE-NEXT: nop
638 ; LINUX64LE-NEXT: add r3, r3, r30
639 ; LINUX64LE-NEXT: extsw r3, r3
640 ; LINUX64LE-NEXT: addi r1, r1, 64
641 ; LINUX64LE-NEXT: ld r0, 16(r1)
642 ; LINUX64LE-NEXT: ld r30, -16(r1) # 8-byte Folded Reload
643 ; LINUX64LE-NEXT: mtlr r0
644 ; LINUX64LE-NEXT: blr
646 %TheString = alloca [10 x i8], align 1
647 call void @llvm.lifetime.start.p0(i64 10, ptr nonnull %TheString)
648 call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(10) %TheString, ptr noundef nonnull align 1 dereferenceable(10) @__const.str6.TheString, i64 10, i1 false)
649 %call = call signext i32 @callee(ptr noundef nonnull %TheString)
650 %add.ptr = getelementptr inbounds i8, ptr %TheString, i64 5
651 %call2 = call signext i32 @callee(ptr noundef nonnull %add.ptr)
652 %add = add nsw i32 %call2, %call
653 call void @llvm.lifetime.end.p0(i64 10, ptr nonnull %TheString)
657 define dso_local signext i32 @str7() local_unnamed_addr #0 {
659 ; AIX32: # %bb.0: # %entry
660 ; AIX32-NEXT: mflr r0
661 ; AIX32-NEXT: stwu r1, -64(r1)
662 ; AIX32-NEXT: lwz r3, L..C2(r2) # @GLOBALSTRING
663 ; AIX32-NEXT: stw r0, 72(r1)
664 ; AIX32-NEXT: stw r31, 60(r1) # 4-byte Folded Spill
665 ; AIX32-NEXT: lwz r3, 0(r3)
666 ; AIX32-NEXT: bl .callee[PR]
668 ; AIX32-NEXT: mr r31, r3
669 ; AIX32-NEXT: lwz r3, L..C0(r2) # @_MergedGlobals
670 ; AIX32-NEXT: addi r3, r3, 80
671 ; AIX32-NEXT: bl .callee[PR]
673 ; AIX32-NEXT: add r3, r3, r31
674 ; AIX32-NEXT: lwz r31, 60(r1) # 4-byte Folded Reload
675 ; AIX32-NEXT: addi r1, r1, 64
676 ; AIX32-NEXT: lwz r0, 8(r1)
677 ; AIX32-NEXT: mtlr r0
681 ; AIX64: # %bb.0: # %entry
682 ; AIX64-NEXT: mflr r0
683 ; AIX64-NEXT: stdu r1, -128(r1)
684 ; AIX64-NEXT: ld r3, L..C2(r2) # @GLOBALSTRING
685 ; AIX64-NEXT: std r0, 144(r1)
686 ; AIX64-NEXT: std r31, 120(r1) # 8-byte Folded Spill
687 ; AIX64-NEXT: ld r3, 0(r3)
688 ; AIX64-NEXT: bl .callee[PR]
690 ; AIX64-NEXT: mr r31, r3
691 ; AIX64-NEXT: ld r3, L..C0(r2) # @_MergedGlobals
692 ; AIX64-NEXT: addi r3, r3, 80
693 ; AIX64-NEXT: bl .callee[PR]
695 ; AIX64-NEXT: add r3, r3, r31
696 ; AIX64-NEXT: ld r31, 120(r1) # 8-byte Folded Reload
697 ; AIX64-NEXT: extsw r3, r3
698 ; AIX64-NEXT: addi r1, r1, 128
699 ; AIX64-NEXT: ld r0, 16(r1)
700 ; AIX64-NEXT: mtlr r0
703 ; LINUX64BE-LABEL: str7:
704 ; LINUX64BE: # %bb.0: # %entry
705 ; LINUX64BE-NEXT: mflr r0
706 ; LINUX64BE-NEXT: stdu r1, -128(r1)
707 ; LINUX64BE-NEXT: std r0, 144(r1)
708 ; LINUX64BE-NEXT: addis r3, r2, GLOBALSTRING@toc@ha
709 ; LINUX64BE-NEXT: ld r3, GLOBALSTRING@toc@l(r3)
710 ; LINUX64BE-NEXT: std r30, 112(r1) # 8-byte Folded Spill
711 ; LINUX64BE-NEXT: bl callee
712 ; LINUX64BE-NEXT: nop
713 ; LINUX64BE-NEXT: mr r30, r3
714 ; LINUX64BE-NEXT: addis r3, r2, .L_MergedGlobals@toc@ha
715 ; LINUX64BE-NEXT: addi r3, r3, .L_MergedGlobals@toc@l
716 ; LINUX64BE-NEXT: addi r3, r3, 80
717 ; LINUX64BE-NEXT: bl callee
718 ; LINUX64BE-NEXT: nop
719 ; LINUX64BE-NEXT: add r3, r3, r30
720 ; LINUX64BE-NEXT: ld r30, 112(r1) # 8-byte Folded Reload
721 ; LINUX64BE-NEXT: extsw r3, r3
722 ; LINUX64BE-NEXT: addi r1, r1, 128
723 ; LINUX64BE-NEXT: ld r0, 16(r1)
724 ; LINUX64BE-NEXT: mtlr r0
725 ; LINUX64BE-NEXT: blr
727 ; LINUX64LE-LABEL: str7:
728 ; LINUX64LE: # %bb.0: # %entry
729 ; LINUX64LE-NEXT: mflr r0
730 ; LINUX64LE-NEXT: std r30, -16(r1) # 8-byte Folded Spill
731 ; LINUX64LE-NEXT: stdu r1, -48(r1)
732 ; LINUX64LE-NEXT: std r0, 64(r1)
733 ; LINUX64LE-NEXT: addis r3, r2, GLOBALSTRING@toc@ha
734 ; LINUX64LE-NEXT: ld r3, GLOBALSTRING@toc@l(r3)
735 ; LINUX64LE-NEXT: bl callee
736 ; LINUX64LE-NEXT: nop
737 ; LINUX64LE-NEXT: mr r30, r3
738 ; LINUX64LE-NEXT: addis r3, r2, .L_MergedGlobals@toc@ha
739 ; LINUX64LE-NEXT: addi r3, r3, .L_MergedGlobals@toc@l
740 ; LINUX64LE-NEXT: addi r3, r3, 80
741 ; LINUX64LE-NEXT: bl callee
742 ; LINUX64LE-NEXT: nop
743 ; LINUX64LE-NEXT: add r3, r3, r30
744 ; LINUX64LE-NEXT: extsw r3, r3
745 ; LINUX64LE-NEXT: addi r1, r1, 48
746 ; LINUX64LE-NEXT: ld r0, 16(r1)
747 ; LINUX64LE-NEXT: ld r30, -16(r1) # 8-byte Folded Reload
748 ; LINUX64LE-NEXT: mtlr r0
749 ; LINUX64LE-NEXT: blr
751 %0 = load ptr, ptr @GLOBALSTRING, align 8
752 %call = tail call signext i32 @callee(ptr noundef %0)
753 %call1 = tail call signext i32 @callee(ptr noundef nonnull @.str.8)
754 %add = add nsw i32 %call1, %call
758 define dso_local signext i32 @mixed1() local_unnamed_addr #0 {
759 ; AIX32-LABEL: mixed1:
760 ; AIX32: # %bb.0: # %entry
761 ; AIX32-NEXT: mflr r0
762 ; AIX32-NEXT: stwu r1, -64(r1)
763 ; AIX32-NEXT: lwz r3, L..C3(r2) # @IntArray2
764 ; AIX32-NEXT: stw r0, 72(r1)
765 ; AIX32-NEXT: stw r31, 60(r1) # 4-byte Folded Spill
766 ; AIX32-NEXT: bl .calleeInt[PR]
768 ; AIX32-NEXT: mr r31, r3
769 ; AIX32-NEXT: lwz r3, L..C0(r2) # @_MergedGlobals
770 ; AIX32-NEXT: addi r3, r3, 68
771 ; AIX32-NEXT: bl .callee[PR]
773 ; AIX32-NEXT: add r3, r3, r31
774 ; AIX32-NEXT: lwz r31, 60(r1) # 4-byte Folded Reload
775 ; AIX32-NEXT: addi r1, r1, 64
776 ; AIX32-NEXT: lwz r0, 8(r1)
777 ; AIX32-NEXT: mtlr r0
780 ; AIX64-LABEL: mixed1:
781 ; AIX64: # %bb.0: # %entry
782 ; AIX64-NEXT: mflr r0
783 ; AIX64-NEXT: stdu r1, -128(r1)
784 ; AIX64-NEXT: ld r3, L..C3(r2) # @IntArray2
785 ; AIX64-NEXT: std r0, 144(r1)
786 ; AIX64-NEXT: std r31, 120(r1) # 8-byte Folded Spill
787 ; AIX64-NEXT: bl .calleeInt[PR]
789 ; AIX64-NEXT: mr r31, r3
790 ; AIX64-NEXT: ld r3, L..C0(r2) # @_MergedGlobals
791 ; AIX64-NEXT: addi r3, r3, 68
792 ; AIX64-NEXT: bl .callee[PR]
794 ; AIX64-NEXT: add r3, r3, r31
795 ; AIX64-NEXT: ld r31, 120(r1) # 8-byte Folded Reload
796 ; AIX64-NEXT: extsw r3, r3
797 ; AIX64-NEXT: addi r1, r1, 128
798 ; AIX64-NEXT: ld r0, 16(r1)
799 ; AIX64-NEXT: mtlr r0
802 ; LINUX64BE-LABEL: mixed1:
803 ; LINUX64BE: # %bb.0: # %entry
804 ; LINUX64BE-NEXT: mflr r0
805 ; LINUX64BE-NEXT: stdu r1, -128(r1)
806 ; LINUX64BE-NEXT: addis r3, r2, IntArray2@toc@ha
807 ; LINUX64BE-NEXT: std r0, 144(r1)
808 ; LINUX64BE-NEXT: std r30, 112(r1) # 8-byte Folded Spill
809 ; LINUX64BE-NEXT: addi r3, r3, IntArray2@toc@l
810 ; LINUX64BE-NEXT: bl calleeInt
811 ; LINUX64BE-NEXT: nop
812 ; LINUX64BE-NEXT: mr r30, r3
813 ; LINUX64BE-NEXT: addis r3, r2, .L_MergedGlobals@toc@ha
814 ; LINUX64BE-NEXT: addi r3, r3, .L_MergedGlobals@toc@l
815 ; LINUX64BE-NEXT: addi r3, r3, 68
816 ; LINUX64BE-NEXT: bl callee
817 ; LINUX64BE-NEXT: nop
818 ; LINUX64BE-NEXT: add r3, r3, r30
819 ; LINUX64BE-NEXT: ld r30, 112(r1) # 8-byte Folded Reload
820 ; LINUX64BE-NEXT: extsw r3, r3
821 ; LINUX64BE-NEXT: addi r1, r1, 128
822 ; LINUX64BE-NEXT: ld r0, 16(r1)
823 ; LINUX64BE-NEXT: mtlr r0
824 ; LINUX64BE-NEXT: blr
826 ; LINUX64LE-LABEL: mixed1:
827 ; LINUX64LE: # %bb.0: # %entry
828 ; LINUX64LE-NEXT: mflr r0
829 ; LINUX64LE-NEXT: std r30, -16(r1) # 8-byte Folded Spill
830 ; LINUX64LE-NEXT: stdu r1, -48(r1)
831 ; LINUX64LE-NEXT: addis r3, r2, IntArray2@toc@ha
832 ; LINUX64LE-NEXT: std r0, 64(r1)
833 ; LINUX64LE-NEXT: addi r3, r3, IntArray2@toc@l
834 ; LINUX64LE-NEXT: bl calleeInt
835 ; LINUX64LE-NEXT: nop
836 ; LINUX64LE-NEXT: mr r30, r3
837 ; LINUX64LE-NEXT: addis r3, r2, .L_MergedGlobals@toc@ha
838 ; LINUX64LE-NEXT: addi r3, r3, .L_MergedGlobals@toc@l
839 ; LINUX64LE-NEXT: addi r3, r3, 68
840 ; LINUX64LE-NEXT: bl callee
841 ; LINUX64LE-NEXT: nop
842 ; LINUX64LE-NEXT: add r3, r3, r30
843 ; LINUX64LE-NEXT: extsw r3, r3
844 ; LINUX64LE-NEXT: addi r1, r1, 48
845 ; LINUX64LE-NEXT: ld r0, 16(r1)
846 ; LINUX64LE-NEXT: ld r30, -16(r1) # 8-byte Folded Reload
847 ; LINUX64LE-NEXT: mtlr r0
848 ; LINUX64LE-NEXT: blr
850 %call = tail call signext i32 @calleeInt(ptr noundef nonnull @IntArray2)
851 %call1 = tail call signext i32 @callee(ptr noundef nonnull @.str.6)
852 %add = add nsw i32 %call1, %call
856 define dso_local signext i32 @mixed2() local_unnamed_addr #0 {
857 ; AIX32-LABEL: mixed2:
858 ; AIX32: # %bb.0: # %entry
859 ; AIX32-NEXT: mflr r0
860 ; AIX32-NEXT: stwu r1, -112(r1)
861 ; AIX32-NEXT: stw r0, 120(r1)
862 ; AIX32-NEXT: stw r30, 104(r1) # 4-byte Folded Spill
863 ; AIX32-NEXT: lwz r30, L..C0(r2) # @_MergedGlobals
864 ; AIX32-NEXT: li r5, 308
865 ; AIX32-NEXT: li r4, 12
866 ; AIX32-NEXT: addi r3, r1, 64
867 ; AIX32-NEXT: stw r31, 108(r1) # 4-byte Folded Spill
868 ; AIX32-NEXT: rlwimi r4, r3, 0, 30, 27
869 ; AIX32-NEXT: lxvw4x vs0, r30, r5
870 ; AIX32-NEXT: stxvw4x vs0, 0, r4
871 ; AIX32-NEXT: li r4, 296
872 ; AIX32-NEXT: lxvw4x vs0, r30, r4
873 ; AIX32-NEXT: stxvw4x vs0, 0, r3
874 ; AIX32-NEXT: bl .calleeInt[PR]
876 ; AIX32-NEXT: mr r31, r3
877 ; AIX32-NEXT: lwz r3, L..C3(r2) # @IntArray2
878 ; AIX32-NEXT: bl .calleeInt[PR]
880 ; AIX32-NEXT: add r31, r3, r31
881 ; AIX32-NEXT: addi r3, r30, 68
882 ; AIX32-NEXT: bl .callee[PR]
884 ; AIX32-NEXT: add r31, r31, r3
885 ; AIX32-NEXT: addi r3, r30, 273
886 ; AIX32-NEXT: bl .callee[PR]
888 ; AIX32-NEXT: add r3, r31, r3
889 ; AIX32-NEXT: lwz r31, 108(r1) # 4-byte Folded Reload
890 ; AIX32-NEXT: lwz r30, 104(r1) # 4-byte Folded Reload
891 ; AIX32-NEXT: addi r1, r1, 112
892 ; AIX32-NEXT: lwz r0, 8(r1)
893 ; AIX32-NEXT: mtlr r0
896 ; AIX64-LABEL: mixed2:
897 ; AIX64: # %bb.0: # %entry
898 ; AIX64-NEXT: mflr r0
899 ; AIX64-NEXT: stdu r1, -160(r1)
900 ; AIX64-NEXT: std r0, 176(r1)
901 ; AIX64-NEXT: std r30, 144(r1) # 8-byte Folded Spill
902 ; AIX64-NEXT: ld r30, L..C0(r2) # @_MergedGlobals
903 ; AIX64-NEXT: li r3, 308
904 ; AIX64-NEXT: std r31, 152(r1) # 8-byte Folded Spill
905 ; AIX64-NEXT: lxvw4x vs0, r30, r3
906 ; AIX64-NEXT: addi r3, r1, 124
907 ; AIX64-NEXT: stxvw4x vs0, 0, r3
908 ; AIX64-NEXT: li r3, 296
909 ; AIX64-NEXT: lxvw4x vs0, r30, r3
910 ; AIX64-NEXT: addi r3, r1, 112
911 ; AIX64-NEXT: stxvw4x vs0, 0, r3
912 ; AIX64-NEXT: bl .calleeInt[PR]
914 ; AIX64-NEXT: mr r31, r3
915 ; AIX64-NEXT: ld r3, L..C3(r2) # @IntArray2
916 ; AIX64-NEXT: bl .calleeInt[PR]
918 ; AIX64-NEXT: add r31, r3, r31
919 ; AIX64-NEXT: addi r3, r30, 68
920 ; AIX64-NEXT: bl .callee[PR]
922 ; AIX64-NEXT: add r31, r31, r3
923 ; AIX64-NEXT: addi r3, r30, 273
924 ; AIX64-NEXT: bl .callee[PR]
926 ; AIX64-NEXT: add r3, r31, r3
927 ; AIX64-NEXT: ld r31, 152(r1) # 8-byte Folded Reload
928 ; AIX64-NEXT: ld r30, 144(r1) # 8-byte Folded Reload
929 ; AIX64-NEXT: extsw r3, r3
930 ; AIX64-NEXT: addi r1, r1, 160
931 ; AIX64-NEXT: ld r0, 16(r1)
932 ; AIX64-NEXT: mtlr r0
935 ; LINUX64BE-LABEL: mixed2:
936 ; LINUX64BE: # %bb.0: # %entry
937 ; LINUX64BE-NEXT: mflr r0
938 ; LINUX64BE-NEXT: stdu r1, -176(r1)
939 ; LINUX64BE-NEXT: addis r3, r2, .L_MergedGlobals@toc@ha
940 ; LINUX64BE-NEXT: std r0, 192(r1)
941 ; LINUX64BE-NEXT: std r29, 152(r1) # 8-byte Folded Spill
942 ; LINUX64BE-NEXT: li r4, 308
943 ; LINUX64BE-NEXT: std r30, 160(r1) # 8-byte Folded Spill
944 ; LINUX64BE-NEXT: addi r29, r3, .L_MergedGlobals@toc@l
945 ; LINUX64BE-NEXT: addi r3, r1, 124
946 ; LINUX64BE-NEXT: lxvw4x vs0, r29, r4
947 ; LINUX64BE-NEXT: stxvw4x vs0, 0, r3
948 ; LINUX64BE-NEXT: li r3, 296
949 ; LINUX64BE-NEXT: lxvw4x vs0, r29, r3
950 ; LINUX64BE-NEXT: addi r3, r1, 112
951 ; LINUX64BE-NEXT: stxvw4x vs0, 0, r3
952 ; LINUX64BE-NEXT: bl calleeInt
953 ; LINUX64BE-NEXT: nop
954 ; LINUX64BE-NEXT: mr r30, r3
955 ; LINUX64BE-NEXT: addis r3, r2, IntArray2@toc@ha
956 ; LINUX64BE-NEXT: addi r3, r3, IntArray2@toc@l
957 ; LINUX64BE-NEXT: bl calleeInt
958 ; LINUX64BE-NEXT: nop
959 ; LINUX64BE-NEXT: add r30, r3, r30
960 ; LINUX64BE-NEXT: addi r3, r29, 68
961 ; LINUX64BE-NEXT: bl callee
962 ; LINUX64BE-NEXT: nop
963 ; LINUX64BE-NEXT: add r30, r30, r3
964 ; LINUX64BE-NEXT: addi r3, r29, 273
965 ; LINUX64BE-NEXT: bl callee
966 ; LINUX64BE-NEXT: nop
967 ; LINUX64BE-NEXT: add r3, r30, r3
968 ; LINUX64BE-NEXT: ld r30, 160(r1) # 8-byte Folded Reload
969 ; LINUX64BE-NEXT: ld r29, 152(r1) # 8-byte Folded Reload
970 ; LINUX64BE-NEXT: extsw r3, r3
971 ; LINUX64BE-NEXT: addi r1, r1, 176
972 ; LINUX64BE-NEXT: ld r0, 16(r1)
973 ; LINUX64BE-NEXT: mtlr r0
974 ; LINUX64BE-NEXT: blr
976 ; LINUX64LE-LABEL: mixed2:
977 ; LINUX64LE: # %bb.0: # %entry
978 ; LINUX64LE-NEXT: mflr r0
979 ; LINUX64LE-NEXT: std r29, -24(r1) # 8-byte Folded Spill
980 ; LINUX64LE-NEXT: std r30, -16(r1) # 8-byte Folded Spill
981 ; LINUX64LE-NEXT: stdu r1, -96(r1)
982 ; LINUX64LE-NEXT: addis r3, r2, .L_MergedGlobals@toc@ha
983 ; LINUX64LE-NEXT: li r4, 308
984 ; LINUX64LE-NEXT: std r0, 112(r1)
985 ; LINUX64LE-NEXT: addi r29, r3, .L_MergedGlobals@toc@l
986 ; LINUX64LE-NEXT: addi r3, r1, 44
987 ; LINUX64LE-NEXT: lxvd2x vs0, r29, r4
988 ; LINUX64LE-NEXT: stxvd2x vs0, 0, r3
989 ; LINUX64LE-NEXT: li r3, 296
990 ; LINUX64LE-NEXT: lxvd2x vs0, r29, r3
991 ; LINUX64LE-NEXT: addi r3, r1, 32
992 ; LINUX64LE-NEXT: stxvd2x vs0, 0, r3
993 ; LINUX64LE-NEXT: bl calleeInt
994 ; LINUX64LE-NEXT: nop
995 ; LINUX64LE-NEXT: mr r30, r3
996 ; LINUX64LE-NEXT: addis r3, r2, IntArray2@toc@ha
997 ; LINUX64LE-NEXT: addi r3, r3, IntArray2@toc@l
998 ; LINUX64LE-NEXT: bl calleeInt
999 ; LINUX64LE-NEXT: nop
1000 ; LINUX64LE-NEXT: add r30, r3, r30
1001 ; LINUX64LE-NEXT: addi r3, r29, 68
1002 ; LINUX64LE-NEXT: bl callee
1003 ; LINUX64LE-NEXT: nop
1004 ; LINUX64LE-NEXT: add r30, r30, r3
1005 ; LINUX64LE-NEXT: addi r3, r29, 273
1006 ; LINUX64LE-NEXT: bl callee
1007 ; LINUX64LE-NEXT: nop
1008 ; LINUX64LE-NEXT: add r3, r30, r3
1009 ; LINUX64LE-NEXT: extsw r3, r3
1010 ; LINUX64LE-NEXT: addi r1, r1, 96
1011 ; LINUX64LE-NEXT: ld r0, 16(r1)
1012 ; LINUX64LE-NEXT: ld r30, -16(r1) # 8-byte Folded Reload
1013 ; LINUX64LE-NEXT: ld r29, -24(r1) # 8-byte Folded Reload
1014 ; LINUX64LE-NEXT: mtlr r0
1015 ; LINUX64LE-NEXT: blr
1017 %IntArray = alloca [7 x i32], align 4
1018 call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %IntArray)
1019 call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(28) %IntArray, ptr noundef nonnull align 4 dereferenceable(28) @__const.mixed2.IntArray, i64 28, i1 false)
1020 %call = call signext i32 @calleeInt(ptr noundef nonnull %IntArray)
1021 %call1 = call signext i32 @calleeInt(ptr noundef nonnull @IntArray2)
1022 %add = add nsw i32 %call1, %call
1023 %call2 = call signext i32 @callee(ptr noundef nonnull @.str.6)
1024 %add3 = add nsw i32 %add, %call2
1025 %call4 = call signext i32 @callee(ptr noundef nonnull @.str.7)
1026 %add5 = add nsw i32 %add3, %call4
1027 call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %IntArray)
1031 define dso_local signext i32 @str9() local_unnamed_addr #0 {
1032 ; AIX32-LABEL: str9:
1033 ; AIX32: # %bb.0: # %entry
1034 ; AIX32-NEXT: mflr r0
1035 ; AIX32-NEXT: stwu r1, -64(r1)
1036 ; AIX32-NEXT: lwz r3, L..C0(r2) # @_MergedGlobals
1037 ; AIX32-NEXT: stw r0, 72(r1)
1038 ; AIX32-NEXT: addi r3, r3, 128
1039 ; AIX32-NEXT: bl .callee[PR]
1041 ; AIX32-NEXT: addi r1, r1, 64
1042 ; AIX32-NEXT: lwz r0, 8(r1)
1043 ; AIX32-NEXT: mtlr r0
1046 ; AIX64-LABEL: str9:
1047 ; AIX64: # %bb.0: # %entry
1048 ; AIX64-NEXT: mflr r0
1049 ; AIX64-NEXT: stdu r1, -112(r1)
1050 ; AIX64-NEXT: ld r3, L..C0(r2) # @_MergedGlobals
1051 ; AIX64-NEXT: std r0, 128(r1)
1052 ; AIX64-NEXT: addi r3, r3, 128
1053 ; AIX64-NEXT: bl .callee[PR]
1055 ; AIX64-NEXT: addi r1, r1, 112
1056 ; AIX64-NEXT: ld r0, 16(r1)
1057 ; AIX64-NEXT: mtlr r0
1060 ; LINUX64BE-LABEL: str9:
1061 ; LINUX64BE: # %bb.0: # %entry
1062 ; LINUX64BE-NEXT: mflr r0
1063 ; LINUX64BE-NEXT: stdu r1, -112(r1)
1064 ; LINUX64BE-NEXT: addis r3, r2, .L_MergedGlobals@toc@ha
1065 ; LINUX64BE-NEXT: std r0, 128(r1)
1066 ; LINUX64BE-NEXT: addi r3, r3, .L_MergedGlobals@toc@l
1067 ; LINUX64BE-NEXT: addi r3, r3, 128
1068 ; LINUX64BE-NEXT: bl callee
1069 ; LINUX64BE-NEXT: nop
1070 ; LINUX64BE-NEXT: addi r1, r1, 112
1071 ; LINUX64BE-NEXT: ld r0, 16(r1)
1072 ; LINUX64BE-NEXT: mtlr r0
1073 ; LINUX64BE-NEXT: blr
1075 ; LINUX64LE-LABEL: str9:
1076 ; LINUX64LE: # %bb.0: # %entry
1077 ; LINUX64LE-NEXT: mflr r0
1078 ; LINUX64LE-NEXT: stdu r1, -32(r1)
1079 ; LINUX64LE-NEXT: addis r3, r2, .L_MergedGlobals@toc@ha
1080 ; LINUX64LE-NEXT: std r0, 48(r1)
1081 ; LINUX64LE-NEXT: addi r3, r3, .L_MergedGlobals@toc@l
1082 ; LINUX64LE-NEXT: addi r3, r3, 128
1083 ; LINUX64LE-NEXT: bl callee
1084 ; LINUX64LE-NEXT: nop
1085 ; LINUX64LE-NEXT: addi r1, r1, 32
1086 ; LINUX64LE-NEXT: ld r0, 16(r1)
1087 ; LINUX64LE-NEXT: mtlr r0
1088 ; LINUX64LE-NEXT: blr
1090 %call = tail call signext i32 @callee(ptr noundef nonnull @.str.9)
1094 define dso_local signext i32 @str10() local_unnamed_addr #0 {
1095 ; AIX32-LABEL: str10:
1096 ; AIX32: # %bb.0: # %entry
1097 ; AIX32-NEXT: mflr r0
1098 ; AIX32-NEXT: stwu r1, -64(r1)
1099 ; AIX32-NEXT: lwz r3, L..C0(r2) # @_MergedGlobals
1100 ; AIX32-NEXT: stw r0, 72(r1)
1101 ; AIX32-NEXT: addi r3, r3, 256
1102 ; AIX32-NEXT: bl .callee[PR]
1104 ; AIX32-NEXT: addi r1, r1, 64
1105 ; AIX32-NEXT: lwz r0, 8(r1)
1106 ; AIX32-NEXT: mtlr r0
1109 ; AIX64-LABEL: str10:
1110 ; AIX64: # %bb.0: # %entry
1111 ; AIX64-NEXT: mflr r0
1112 ; AIX64-NEXT: stdu r1, -112(r1)
1113 ; AIX64-NEXT: ld r3, L..C0(r2) # @_MergedGlobals
1114 ; AIX64-NEXT: std r0, 128(r1)
1115 ; AIX64-NEXT: addi r3, r3, 256
1116 ; AIX64-NEXT: bl .callee[PR]
1118 ; AIX64-NEXT: addi r1, r1, 112
1119 ; AIX64-NEXT: ld r0, 16(r1)
1120 ; AIX64-NEXT: mtlr r0
1123 ; LINUX64BE-LABEL: str10:
1124 ; LINUX64BE: # %bb.0: # %entry
1125 ; LINUX64BE-NEXT: mflr r0
1126 ; LINUX64BE-NEXT: stdu r1, -112(r1)
1127 ; LINUX64BE-NEXT: addis r3, r2, .L_MergedGlobals@toc@ha
1128 ; LINUX64BE-NEXT: std r0, 128(r1)
1129 ; LINUX64BE-NEXT: addi r3, r3, .L_MergedGlobals@toc@l
1130 ; LINUX64BE-NEXT: addi r3, r3, 256
1131 ; LINUX64BE-NEXT: bl callee
1132 ; LINUX64BE-NEXT: nop
1133 ; LINUX64BE-NEXT: addi r1, r1, 112
1134 ; LINUX64BE-NEXT: ld r0, 16(r1)
1135 ; LINUX64BE-NEXT: mtlr r0
1136 ; LINUX64BE-NEXT: blr
1138 ; LINUX64LE-LABEL: str10:
1139 ; LINUX64LE: # %bb.0: # %entry
1140 ; LINUX64LE-NEXT: mflr r0
1141 ; LINUX64LE-NEXT: stdu r1, -32(r1)
1142 ; LINUX64LE-NEXT: addis r3, r2, .L_MergedGlobals@toc@ha
1143 ; LINUX64LE-NEXT: std r0, 48(r1)
1144 ; LINUX64LE-NEXT: addi r3, r3, .L_MergedGlobals@toc@l
1145 ; LINUX64LE-NEXT: addi r3, r3, 256
1146 ; LINUX64LE-NEXT: bl callee
1147 ; LINUX64LE-NEXT: nop
1148 ; LINUX64LE-NEXT: addi r1, r1, 32
1149 ; LINUX64LE-NEXT: ld r0, 16(r1)
1150 ; LINUX64LE-NEXT: mtlr r0
1151 ; LINUX64LE-NEXT: blr
1153 %call = tail call signext i32 @callee(ptr noundef nonnull @.str.10)
1157 attributes #0 = { nounwind }
1159 ; AIXDATA: .csect L.._MergedGlobals[RO],7
1160 ; AIXDATA: .align 7 # @_MergedGlobals
1161 ; AIXDATA: .string "ABCABCABC"
1162 ; AIXDATA: .string "str1_STRING"
1163 ; AIXDATA: .string "str2_STRING"
1164 ; AIXDATA: .string "str3_STRING"
1165 ; AIXDATA: .string "str4_STRING"
1166 ; AIXDATA: .string "MixedString"
1167 ; AIXDATA: .byte 'S,'t,'a,'t,'i,'c,' ,'G,'l,'o,'b,'a,'l,0012,0000
1168 ; AIXDATA: .string "str9_STRING....."
1169 ; AIXDATA: .string "str10_STRING...."
1170 ; AIXDATA: .string "Different String 01"
1171 ; AIXDATA: .vbyte 4, 5 # 0x5
1172 ; AIXDATA: .vbyte 4, 7 # 0x7
1173 ; AIXDATA: .vbyte 4, 9 # 0x9
1174 ; AIXDATA: .vbyte 4, 11 # 0xb
1175 ; AIXDATA: .vbyte 4, 17 # 0x11
1176 ; AIXDATA: .vbyte 4, 1235 # 0x4d3
1177 ; AIXDATA: .vbyte 4, 32 # 0x20
1178 ; AIXDATA: .string "longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_STRING"
1180 ; LINUXDATA: .L_MergedGlobals:
1181 ; LINUXDATA: .asciz "ABCABCABC"
1182 ; LINUXDATA: .asciz "str1_STRING"
1183 ; LINUXDATA: .asciz "str2_STRING"
1184 ; LINUXDATA: .asciz "str3_STRING"
1185 ; LINUXDATA: .asciz "str4_STRING"
1186 ; LINUXDATA: .asciz "MixedString"
1187 ; LINUXDATA: .asciz "Static Global\n"
1188 ; LINUXDATA: .asciz "str9_STRING....."
1189 ; LINUXDATA: .asciz "str10_STRING...."
1190 ; LINUXDATA: .asciz "Different String 01"
1191 ; LINUXDATA: .long 5 # 0x5
1192 ; LINUXDATA: .long 7 # 0x7
1193 ; LINUXDATA: .long 9 # 0x9
1194 ; LINUXDATA: .long 11 # 0xb
1195 ; LINUXDATA: .long 17 # 0x11
1196 ; LINUXDATA: .long 1235 # 0x4d3
1197 ; LINUXDATA: .long 32 # 0x20
1198 ; LINUXDATA: .asciz "This is the global string that is at the top.\n"
1199 ; LINUXDATA: .asciz "longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_STRING"