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) # @__ModuleStringPool
44 ; AIX32-NEXT: stw r0, 72(r1)
45 ; AIX32-NEXT: addi r3, r3, 422
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) # @__ModuleStringPool
58 ; AIX64-NEXT: std r0, 128(r1)
59 ; AIX64-NEXT: addi r3, r3, 422
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__ModuleStringPool@toc@ha
72 ; LINUX64BE-NEXT: std r0, 128(r1)
73 ; LINUX64BE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l
74 ; LINUX64BE-NEXT: addi r3, r3, 422
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__ModuleStringPool@toc@ha
87 ; LINUX64LE-NEXT: std r0, 48(r1)
88 ; LINUX64LE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l
89 ; LINUX64LE-NEXT: addi r3, r3, 422
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) # @__ModuleStringPool
109 ; AIX32-NEXT: stw r0, 72(r1)
110 ; AIX32-NEXT: addi r3, r3, 388
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) # @__ModuleStringPool
123 ; AIX64-NEXT: std r0, 128(r1)
124 ; AIX64-NEXT: addi r3, r3, 388
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__ModuleStringPool@toc@ha
137 ; LINUX64BE-NEXT: std r0, 128(r1)
138 ; LINUX64BE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l
139 ; LINUX64BE-NEXT: addi r3, r3, 388
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__ModuleStringPool@toc@ha
152 ; LINUX64LE-NEXT: std r0, 48(r1)
153 ; LINUX64LE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l
154 ; LINUX64LE-NEXT: addi r3, r3, 388
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) # @__ModuleStringPool
174 ; AIX32-NEXT: addi r3, r30, 434
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, 388
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) # @__ModuleStringPool
197 ; AIX64-NEXT: addi r3, r30, 434
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, 388
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__ModuleStringPool@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__ModuleStringPool@toc@l
222 ; LINUX64BE-NEXT: std r30, 128(r1) # 8-byte Folded Spill
223 ; LINUX64BE-NEXT: addi r3, r29, 434
224 ; LINUX64BE-NEXT: bl callee
225 ; LINUX64BE-NEXT: nop
226 ; LINUX64BE-NEXT: mr r30, r3
227 ; LINUX64BE-NEXT: addi r3, r29, 388
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__ModuleStringPool@toc@ha
246 ; LINUX64LE-NEXT: std r0, 80(r1)
247 ; LINUX64LE-NEXT: addi r29, r3, .L__ModuleStringPool@toc@l
248 ; LINUX64LE-NEXT: addi r3, r29, 434
249 ; LINUX64LE-NEXT: bl callee
250 ; LINUX64LE-NEXT: nop
251 ; LINUX64LE-NEXT: mr r30, r3
252 ; LINUX64LE-NEXT: addi r3, r29, 388
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) # @__ModuleStringPool
276 ; AIX32-NEXT: stw r0, 72(r1)
277 ; AIX32-NEXT: addi r3, r3, 446
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) # @__ModuleStringPool
290 ; AIX64-NEXT: std r0, 128(r1)
291 ; AIX64-NEXT: addi r3, r3, 446
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__ModuleStringPool@toc@ha
304 ; LINUX64BE-NEXT: std r0, 128(r1)
305 ; LINUX64BE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l
306 ; LINUX64BE-NEXT: addi r3, r3, 446
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__ModuleStringPool@toc@ha
319 ; LINUX64LE-NEXT: std r0, 48(r1)
320 ; LINUX64LE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l
321 ; LINUX64LE-NEXT: addi r3, r3, 446
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) # @__ModuleStringPool
339 ; AIX32-NEXT: stw r0, 72(r1)
340 ; AIX32-NEXT: addi r3, r3, 493
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) # @__ModuleStringPool
353 ; AIX64-NEXT: std r0, 128(r1)
354 ; AIX64-NEXT: addi r3, r3, 493
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__ModuleStringPool@toc@ha
367 ; LINUX64BE-NEXT: std r0, 128(r1)
368 ; LINUX64BE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l
369 ; LINUX64BE-NEXT: addi r3, r3, 493
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__ModuleStringPool@toc@ha
382 ; LINUX64LE-NEXT: std r0, 48(r1)
383 ; LINUX64LE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l
384 ; LINUX64LE-NEXT: addi r3, r3, 493
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 r4, L..C0(r2) # @__ModuleStringPool
402 ; AIX32-NEXT: li r6, 372
403 ; AIX32-NEXT: li r5, 12
404 ; AIX32-NEXT: addi r3, r1, 64
405 ; AIX32-NEXT: stw r0, 104(r1)
406 ; AIX32-NEXT: rlwimi r5, r3, 0, 30, 27
407 ; AIX32-NEXT: lxvw4x vs0, r4, r6
408 ; AIX32-NEXT: stxvw4x vs0, 0, r5
409 ; AIX32-NEXT: li r5, 360
410 ; AIX32-NEXT: lxvw4x vs0, r4, r5
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) # @__ModuleStringPool
424 ; AIX64-NEXT: li r4, 372
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, 360
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__ModuleStringPool@toc@ha
445 ; LINUX64BE-NEXT: li r4, 372
446 ; LINUX64BE-NEXT: std r0, 160(r1)
447 ; LINUX64BE-NEXT: addi r3, r3, .L__ModuleStringPool@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, 360
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__ModuleStringPool@toc@ha
467 ; LINUX64LE-NEXT: li r4, 372
468 ; LINUX64LE-NEXT: std r0, 80(r1)
469 ; LINUX64LE-NEXT: addi r3, r3, .L__ModuleStringPool@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, 360
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) # @__ModuleStringPool
670 ; AIX32-NEXT: addi r3, r3, 458
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) # @__ModuleStringPool
692 ; AIX64-NEXT: addi r3, r3, 458
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__ModuleStringPool@toc@ha
715 ; LINUX64BE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l
716 ; LINUX64BE-NEXT: addi r3, r3, 458
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__ModuleStringPool@toc@ha
739 ; LINUX64LE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l
740 ; LINUX64LE-NEXT: addi r3, r3, 458
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) # @__ModuleStringPool
770 ; AIX32-NEXT: addi r3, r3, 400
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) # @__ModuleStringPool
791 ; AIX64-NEXT: addi r3, r3, 400
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__ModuleStringPool@toc@ha
814 ; LINUX64BE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l
815 ; LINUX64BE-NEXT: addi r3, r3, 400
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__ModuleStringPool@toc@ha
838 ; LINUX64LE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l
839 ; LINUX64LE-NEXT: addi r3, r3, 400
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) # @__ModuleStringPool
864 ; AIX32-NEXT: li r5, 372
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, 360
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, 400
882 ; AIX32-NEXT: bl .callee[PR]
884 ; AIX32-NEXT: add r31, r31, r3
885 ; AIX32-NEXT: addi r3, r30, 473
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) # @__ModuleStringPool
903 ; AIX64-NEXT: li r3, 372
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, 360
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, 400
920 ; AIX64-NEXT: bl .callee[PR]
922 ; AIX64-NEXT: add r31, r31, r3
923 ; AIX64-NEXT: addi r3, r30, 473
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__ModuleStringPool@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, 372
943 ; LINUX64BE-NEXT: std r30, 160(r1) # 8-byte Folded Spill
944 ; LINUX64BE-NEXT: addi r29, r3, .L__ModuleStringPool@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, 360
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, 400
961 ; LINUX64BE-NEXT: bl callee
962 ; LINUX64BE-NEXT: nop
963 ; LINUX64BE-NEXT: add r30, r30, r3
964 ; LINUX64BE-NEXT: addi r3, r29, 473
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__ModuleStringPool@toc@ha
983 ; LINUX64LE-NEXT: li r4, 372
984 ; LINUX64LE-NEXT: std r0, 112(r1)
985 ; LINUX64LE-NEXT: addi r29, r3, .L__ModuleStringPool@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, 360
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, 400
1002 ; LINUX64LE-NEXT: bl callee
1003 ; LINUX64LE-NEXT: nop
1004 ; LINUX64LE-NEXT: add r30, r30, r3
1005 ; LINUX64LE-NEXT: addi r3, r29, 473
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..C4(r2) # @.str.9
1037 ; AIX32-NEXT: stw r0, 72(r1)
1038 ; AIX32-NEXT: bl .callee[PR]
1040 ; AIX32-NEXT: addi r1, r1, 64
1041 ; AIX32-NEXT: lwz r0, 8(r1)
1042 ; AIX32-NEXT: mtlr r0
1045 ; AIX64-LABEL: str9:
1046 ; AIX64: # %bb.0: # %entry
1047 ; AIX64-NEXT: mflr r0
1048 ; AIX64-NEXT: stdu r1, -112(r1)
1049 ; AIX64-NEXT: ld r3, L..C4(r2) # @.str.9
1050 ; AIX64-NEXT: std r0, 128(r1)
1051 ; AIX64-NEXT: bl .callee[PR]
1053 ; AIX64-NEXT: addi r1, r1, 112
1054 ; AIX64-NEXT: ld r0, 16(r1)
1055 ; AIX64-NEXT: mtlr r0
1058 ; LINUX64BE-LABEL: str9:
1059 ; LINUX64BE: # %bb.0: # %entry
1060 ; LINUX64BE-NEXT: mflr r0
1061 ; LINUX64BE-NEXT: stdu r1, -112(r1)
1062 ; LINUX64BE-NEXT: addis r3, r2, .L.str.9@toc@ha
1063 ; LINUX64BE-NEXT: std r0, 128(r1)
1064 ; LINUX64BE-NEXT: addi r3, r3, .L.str.9@toc@l
1065 ; LINUX64BE-NEXT: bl callee
1066 ; LINUX64BE-NEXT: nop
1067 ; LINUX64BE-NEXT: addi r1, r1, 112
1068 ; LINUX64BE-NEXT: ld r0, 16(r1)
1069 ; LINUX64BE-NEXT: mtlr r0
1070 ; LINUX64BE-NEXT: blr
1072 ; LINUX64LE-LABEL: str9:
1073 ; LINUX64LE: # %bb.0: # %entry
1074 ; LINUX64LE-NEXT: mflr r0
1075 ; LINUX64LE-NEXT: stdu r1, -32(r1)
1076 ; LINUX64LE-NEXT: addis r3, r2, .L.str.9@toc@ha
1077 ; LINUX64LE-NEXT: std r0, 48(r1)
1078 ; LINUX64LE-NEXT: addi r3, r3, .L.str.9@toc@l
1079 ; LINUX64LE-NEXT: bl callee
1080 ; LINUX64LE-NEXT: nop
1081 ; LINUX64LE-NEXT: addi r1, r1, 32
1082 ; LINUX64LE-NEXT: ld r0, 16(r1)
1083 ; LINUX64LE-NEXT: mtlr r0
1084 ; LINUX64LE-NEXT: blr
1086 %call = tail call signext i32 @callee(ptr noundef nonnull @.str.9)
1090 define dso_local signext i32 @str10() local_unnamed_addr #0 {
1091 ; AIX32-LABEL: str10:
1092 ; AIX32: # %bb.0: # %entry
1093 ; AIX32-NEXT: mflr r0
1094 ; AIX32-NEXT: stwu r1, -64(r1)
1095 ; AIX32-NEXT: lwz r3, L..C5(r2) # @.str.10
1096 ; AIX32-NEXT: stw r0, 72(r1)
1097 ; AIX32-NEXT: bl .callee[PR]
1099 ; AIX32-NEXT: addi r1, r1, 64
1100 ; AIX32-NEXT: lwz r0, 8(r1)
1101 ; AIX32-NEXT: mtlr r0
1104 ; AIX64-LABEL: str10:
1105 ; AIX64: # %bb.0: # %entry
1106 ; AIX64-NEXT: mflr r0
1107 ; AIX64-NEXT: stdu r1, -112(r1)
1108 ; AIX64-NEXT: ld r3, L..C5(r2) # @.str.10
1109 ; AIX64-NEXT: std r0, 128(r1)
1110 ; AIX64-NEXT: bl .callee[PR]
1112 ; AIX64-NEXT: addi r1, r1, 112
1113 ; AIX64-NEXT: ld r0, 16(r1)
1114 ; AIX64-NEXT: mtlr r0
1117 ; LINUX64BE-LABEL: str10:
1118 ; LINUX64BE: # %bb.0: # %entry
1119 ; LINUX64BE-NEXT: mflr r0
1120 ; LINUX64BE-NEXT: stdu r1, -112(r1)
1121 ; LINUX64BE-NEXT: addis r3, r2, .L.str.10@toc@ha
1122 ; LINUX64BE-NEXT: std r0, 128(r1)
1123 ; LINUX64BE-NEXT: addi r3, r3, .L.str.10@toc@l
1124 ; LINUX64BE-NEXT: bl callee
1125 ; LINUX64BE-NEXT: nop
1126 ; LINUX64BE-NEXT: addi r1, r1, 112
1127 ; LINUX64BE-NEXT: ld r0, 16(r1)
1128 ; LINUX64BE-NEXT: mtlr r0
1129 ; LINUX64BE-NEXT: blr
1131 ; LINUX64LE-LABEL: str10:
1132 ; LINUX64LE: # %bb.0: # %entry
1133 ; LINUX64LE-NEXT: mflr r0
1134 ; LINUX64LE-NEXT: stdu r1, -32(r1)
1135 ; LINUX64LE-NEXT: addis r3, r2, .L.str.10@toc@ha
1136 ; LINUX64LE-NEXT: std r0, 48(r1)
1137 ; LINUX64LE-NEXT: addi r3, r3, .L.str.10@toc@l
1138 ; LINUX64LE-NEXT: bl callee
1139 ; LINUX64LE-NEXT: nop
1140 ; LINUX64LE-NEXT: addi r1, r1, 32
1141 ; LINUX64LE-NEXT: ld r0, 16(r1)
1142 ; LINUX64LE-NEXT: mtlr r0
1143 ; LINUX64LE-NEXT: blr
1145 %call = tail call signext i32 @callee(ptr noundef nonnull @.str.10)
1149 attributes #0 = { nounwind }
1151 ; AIXDATA: .csect L..__ModuleStringPool[RO],2
1152 ; AIXDATA: .align 3 # @__ModuleStringPool
1153 ; AIXDATA: .vbyte 4, 5 # 0x5
1154 ; AIXDATA: .vbyte 4, 7 # 0x7
1155 ; AIXDATA: .vbyte 4, 9 # 0x9
1156 ; AIXDATA: .vbyte 4, 11 # 0xb
1157 ; AIXDATA: .vbyte 4, 17 # 0x11
1158 ; AIXDATA: .vbyte 4, 1235 # 0x4d3
1159 ; AIXDATA: .vbyte 4, 32 # 0x20
1160 ; AIXDATA: .string "str2_STRING"
1161 ; AIXDATA: .string "MixedString"
1162 ; AIXDATA: .string "ABCABCABC"
1163 ; AIXDATA: .string "str1_STRING"
1164 ; AIXDATA: .string "str3_STRING"
1165 ; AIXDATA: .string "str4_STRING"
1166 ; AIXDATA: .byte 'S,'t,'a,'t,'i,'c,' ,'G,'l,'o,'b,'a,'l,0012,0000
1167 ; AIXDATA: .string "Different String 01"
1168 ; AIXDATA: .string "longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_STRING"
1170 ; LINUXDATA: .L__ModuleStringPool:
1171 ; LINUXDATA: .long 5 # 0x5
1172 ; LINUXDATA: .long 7 # 0x7
1173 ; LINUXDATA: .long 9 # 0x9
1174 ; LINUXDATA: .long 11 # 0xb
1175 ; LINUXDATA: .long 17 # 0x11
1176 ; LINUXDATA: .long 1235 # 0x4d3
1177 ; LINUXDATA: .long 32 # 0x20
1178 ; LINUXDATA: .asciz "str2_STRING"
1179 ; LINUXDATA: .asciz "MixedString"
1180 ; LINUXDATA: .asciz "ABCABCABC"
1181 ; LINUXDATA: .asciz "str1_STRING"
1182 ; LINUXDATA: .asciz "str3_STRING"
1183 ; LINUXDATA: .asciz "str4_STRING"
1184 ; LINUXDATA: .asciz "Static Global\n"
1185 ; LINUXDATA: .asciz "Different String 01"
1186 ; LINUXDATA: .asciz "longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_STRING"