1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=powerpc64le-linux-gnu -mcpu=pwr8 -verify-machineinstrs \
3 ; RUN: < %s | FileCheck %s
4 ; RUN: llc -mtriple=powerpc-aix- -mcpu=pwr7 -verify-machineinstrs \
5 ; RUN: < %s | FileCheck %s --check-prefix=AIX32
6 ; ModuleID = '../clang/test/CodeGen/Atomics.c'
8 @sc = dso_local global i8 0, align 1
9 @uc = dso_local global i8 0, align 1
10 @ss = dso_local global i16 0, align 2
11 @us = dso_local global i16 0, align 2
12 @si = dso_local global i32 0, align 4
13 @ui = dso_local global i32 0, align 4
14 @sll = dso_local global i64 0, align 8
15 @ull = dso_local global i64 0, align 8
16 @u128 = dso_local global i128 0, align 16
17 @s128 = dso_local global i128 0, align 16
19 define dso_local void @test_op_ignore() local_unnamed_addr #0 {
20 ; CHECK-LABEL: test_op_ignore:
21 ; CHECK: # %bb.0: # %entry
22 ; CHECK-NEXT: addis 3, 2, sc@toc@ha
23 ; CHECK-NEXT: std 26, -48(1) # 8-byte Folded Spill
24 ; CHECK-NEXT: std 27, -40(1) # 8-byte Folded Spill
25 ; CHECK-NEXT: addi 4, 3, sc@toc@l
26 ; CHECK-NEXT: std 28, -32(1) # 8-byte Folded Spill
27 ; CHECK-NEXT: std 29, -24(1) # 8-byte Folded Spill
28 ; CHECK-NEXT: std 30, -16(1) # 8-byte Folded Spill
31 ; CHECK-NEXT: .LBB0_1: # %entry
33 ; CHECK-NEXT: lbarx 5, 0, 4
34 ; CHECK-NEXT: addi 5, 5, 1
35 ; CHECK-NEXT: stbcx. 5, 0, 4
36 ; CHECK-NEXT: bne 0, .LBB0_1
37 ; CHECK-NEXT: # %bb.2: # %entry
38 ; CHECK-NEXT: addis 5, 2, uc@toc@ha
41 ; CHECK-NEXT: addi 5, 5, uc@toc@l
42 ; CHECK-NEXT: .LBB0_3: # %entry
44 ; CHECK-NEXT: lbarx 6, 0, 5
45 ; CHECK-NEXT: addi 6, 6, 1
46 ; CHECK-NEXT: stbcx. 6, 0, 5
47 ; CHECK-NEXT: bne 0, .LBB0_3
48 ; CHECK-NEXT: # %bb.4: # %entry
49 ; CHECK-NEXT: addis 6, 2, ss@toc@ha
52 ; CHECK-NEXT: addi 6, 6, ss@toc@l
53 ; CHECK-NEXT: .LBB0_5: # %entry
55 ; CHECK-NEXT: lharx 7, 0, 6
56 ; CHECK-NEXT: addi 7, 7, 1
57 ; CHECK-NEXT: sthcx. 7, 0, 6
58 ; CHECK-NEXT: bne 0, .LBB0_5
59 ; CHECK-NEXT: # %bb.6: # %entry
60 ; CHECK-NEXT: addis 7, 2, us@toc@ha
63 ; CHECK-NEXT: addi 8, 7, us@toc@l
64 ; CHECK-NEXT: .LBB0_7: # %entry
66 ; CHECK-NEXT: lharx 7, 0, 8
67 ; CHECK-NEXT: addi 7, 7, 1
68 ; CHECK-NEXT: sthcx. 7, 0, 8
69 ; CHECK-NEXT: bne 0, .LBB0_7
70 ; CHECK-NEXT: # %bb.8: # %entry
71 ; CHECK-NEXT: addis 7, 2, si@toc@ha
74 ; CHECK-NEXT: addi 9, 7, si@toc@l
75 ; CHECK-NEXT: .LBB0_9: # %entry
77 ; CHECK-NEXT: lwarx 7, 0, 9
78 ; CHECK-NEXT: addi 7, 7, 1
79 ; CHECK-NEXT: stwcx. 7, 0, 9
80 ; CHECK-NEXT: bne 0, .LBB0_9
81 ; CHECK-NEXT: # %bb.10: # %entry
82 ; CHECK-NEXT: addis 7, 2, ui@toc@ha
85 ; CHECK-NEXT: addi 10, 7, ui@toc@l
86 ; CHECK-NEXT: .LBB0_11: # %entry
88 ; CHECK-NEXT: lwarx 7, 0, 10
89 ; CHECK-NEXT: addi 7, 7, 1
90 ; CHECK-NEXT: stwcx. 7, 0, 10
91 ; CHECK-NEXT: bne 0, .LBB0_11
92 ; CHECK-NEXT: # %bb.12: # %entry
93 ; CHECK-NEXT: addis 7, 2, sll@toc@ha
96 ; CHECK-NEXT: addi 11, 7, sll@toc@l
98 ; CHECK-NEXT: .LBB0_13: # %entry
100 ; CHECK-NEXT: ldarx 12, 0, 11
101 ; CHECK-NEXT: addi 12, 12, 1
102 ; CHECK-NEXT: stdcx. 12, 0, 11
103 ; CHECK-NEXT: bne 0, .LBB0_13
104 ; CHECK-NEXT: # %bb.14: # %entry
105 ; CHECK-NEXT: addis 12, 2, ull@toc@ha
108 ; CHECK-NEXT: addi 12, 12, ull@toc@l
109 ; CHECK-NEXT: .LBB0_15: # %entry
111 ; CHECK-NEXT: ldarx 30, 0, 12
112 ; CHECK-NEXT: addi 0, 30, 1
113 ; CHECK-NEXT: stdcx. 0, 0, 12
114 ; CHECK-NEXT: bne 0, .LBB0_15
115 ; CHECK-NEXT: # %bb.16: # %entry
118 ; CHECK-NEXT: .LBB0_17: # %entry
120 ; CHECK-NEXT: lbarx 0, 0, 4
121 ; CHECK-NEXT: sub 0, 0, 3
122 ; CHECK-NEXT: stbcx. 0, 0, 4
123 ; CHECK-NEXT: bne 0, .LBB0_17
124 ; CHECK-NEXT: # %bb.18: # %entry
127 ; CHECK-NEXT: .LBB0_19: # %entry
129 ; CHECK-NEXT: lbarx 0, 0, 5
130 ; CHECK-NEXT: sub 0, 0, 3
131 ; CHECK-NEXT: stbcx. 0, 0, 5
132 ; CHECK-NEXT: bne 0, .LBB0_19
133 ; CHECK-NEXT: # %bb.20: # %entry
136 ; CHECK-NEXT: .LBB0_21: # %entry
138 ; CHECK-NEXT: lharx 0, 0, 6
139 ; CHECK-NEXT: sub 0, 0, 3
140 ; CHECK-NEXT: sthcx. 0, 0, 6
141 ; CHECK-NEXT: bne 0, .LBB0_21
142 ; CHECK-NEXT: # %bb.22: # %entry
145 ; CHECK-NEXT: .LBB0_23: # %entry
147 ; CHECK-NEXT: lharx 0, 0, 8
148 ; CHECK-NEXT: sub 0, 0, 3
149 ; CHECK-NEXT: sthcx. 0, 0, 8
150 ; CHECK-NEXT: bne 0, .LBB0_23
151 ; CHECK-NEXT: # %bb.24: # %entry
154 ; CHECK-NEXT: .LBB0_25: # %entry
156 ; CHECK-NEXT: lwarx 0, 0, 9
157 ; CHECK-NEXT: sub 0, 0, 3
158 ; CHECK-NEXT: stwcx. 0, 0, 9
159 ; CHECK-NEXT: bne 0, .LBB0_25
160 ; CHECK-NEXT: # %bb.26: # %entry
163 ; CHECK-NEXT: .LBB0_27: # %entry
165 ; CHECK-NEXT: lwarx 0, 0, 10
166 ; CHECK-NEXT: sub 0, 0, 3
167 ; CHECK-NEXT: stwcx. 0, 0, 10
168 ; CHECK-NEXT: bne 0, .LBB0_27
169 ; CHECK-NEXT: # %bb.28: # %entry
172 ; CHECK-NEXT: .LBB0_29: # %entry
174 ; CHECK-NEXT: ldarx 0, 0, 11
175 ; CHECK-NEXT: sub 0, 0, 7
176 ; CHECK-NEXT: stdcx. 0, 0, 11
177 ; CHECK-NEXT: bne 0, .LBB0_29
178 ; CHECK-NEXT: # %bb.30: # %entry
181 ; CHECK-NEXT: .LBB0_31: # %entry
183 ; CHECK-NEXT: ldarx 0, 0, 12
184 ; CHECK-NEXT: sub 0, 0, 7
185 ; CHECK-NEXT: stdcx. 0, 0, 12
186 ; CHECK-NEXT: bne 0, .LBB0_31
187 ; CHECK-NEXT: # %bb.32: # %entry
190 ; CHECK-NEXT: .LBB0_33: # %entry
192 ; CHECK-NEXT: lbarx 0, 0, 4
193 ; CHECK-NEXT: ori 0, 0, 1
194 ; CHECK-NEXT: stbcx. 0, 0, 4
195 ; CHECK-NEXT: bne 0, .LBB0_33
196 ; CHECK-NEXT: # %bb.34: # %entry
199 ; CHECK-NEXT: .LBB0_35: # %entry
201 ; CHECK-NEXT: lbarx 0, 0, 5
202 ; CHECK-NEXT: ori 0, 0, 1
203 ; CHECK-NEXT: stbcx. 0, 0, 5
204 ; CHECK-NEXT: bne 0, .LBB0_35
205 ; CHECK-NEXT: # %bb.36: # %entry
208 ; CHECK-NEXT: .LBB0_37: # %entry
210 ; CHECK-NEXT: lharx 0, 0, 6
211 ; CHECK-NEXT: ori 0, 0, 1
212 ; CHECK-NEXT: sthcx. 0, 0, 6
213 ; CHECK-NEXT: bne 0, .LBB0_37
214 ; CHECK-NEXT: # %bb.38: # %entry
217 ; CHECK-NEXT: .LBB0_39: # %entry
219 ; CHECK-NEXT: lharx 0, 0, 8
220 ; CHECK-NEXT: ori 0, 0, 1
221 ; CHECK-NEXT: sthcx. 0, 0, 8
222 ; CHECK-NEXT: bne 0, .LBB0_39
223 ; CHECK-NEXT: # %bb.40: # %entry
226 ; CHECK-NEXT: .LBB0_41: # %entry
228 ; CHECK-NEXT: lwarx 0, 0, 9
229 ; CHECK-NEXT: ori 0, 0, 1
230 ; CHECK-NEXT: stwcx. 0, 0, 9
231 ; CHECK-NEXT: bne 0, .LBB0_41
232 ; CHECK-NEXT: # %bb.42: # %entry
235 ; CHECK-NEXT: .LBB0_43: # %entry
237 ; CHECK-NEXT: lwarx 0, 0, 10
238 ; CHECK-NEXT: ori 0, 0, 1
239 ; CHECK-NEXT: stwcx. 0, 0, 10
240 ; CHECK-NEXT: bne 0, .LBB0_43
241 ; CHECK-NEXT: # %bb.44: # %entry
244 ; CHECK-NEXT: .LBB0_45: # %entry
246 ; CHECK-NEXT: ldarx 0, 0, 11
247 ; CHECK-NEXT: ori 0, 0, 1
248 ; CHECK-NEXT: stdcx. 0, 0, 11
249 ; CHECK-NEXT: bne 0, .LBB0_45
250 ; CHECK-NEXT: # %bb.46: # %entry
253 ; CHECK-NEXT: .LBB0_47: # %entry
255 ; CHECK-NEXT: ldarx 0, 0, 12
256 ; CHECK-NEXT: ori 0, 0, 1
257 ; CHECK-NEXT: stdcx. 0, 0, 12
258 ; CHECK-NEXT: bne 0, .LBB0_47
259 ; CHECK-NEXT: # %bb.48: # %entry
262 ; CHECK-NEXT: .LBB0_49: # %entry
264 ; CHECK-NEXT: lbarx 0, 0, 4
265 ; CHECK-NEXT: xori 0, 0, 1
266 ; CHECK-NEXT: stbcx. 0, 0, 4
267 ; CHECK-NEXT: bne 0, .LBB0_49
268 ; CHECK-NEXT: # %bb.50: # %entry
271 ; CHECK-NEXT: .LBB0_51: # %entry
273 ; CHECK-NEXT: lbarx 0, 0, 5
274 ; CHECK-NEXT: xori 0, 0, 1
275 ; CHECK-NEXT: stbcx. 0, 0, 5
276 ; CHECK-NEXT: bne 0, .LBB0_51
277 ; CHECK-NEXT: # %bb.52: # %entry
280 ; CHECK-NEXT: .LBB0_53: # %entry
282 ; CHECK-NEXT: lharx 0, 0, 6
283 ; CHECK-NEXT: xori 0, 0, 1
284 ; CHECK-NEXT: sthcx. 0, 0, 6
285 ; CHECK-NEXT: bne 0, .LBB0_53
286 ; CHECK-NEXT: # %bb.54: # %entry
289 ; CHECK-NEXT: .LBB0_55: # %entry
291 ; CHECK-NEXT: lharx 0, 0, 8
292 ; CHECK-NEXT: xori 0, 0, 1
293 ; CHECK-NEXT: sthcx. 0, 0, 8
294 ; CHECK-NEXT: bne 0, .LBB0_55
295 ; CHECK-NEXT: # %bb.56: # %entry
298 ; CHECK-NEXT: .LBB0_57: # %entry
300 ; CHECK-NEXT: lwarx 0, 0, 9
301 ; CHECK-NEXT: xori 0, 0, 1
302 ; CHECK-NEXT: stwcx. 0, 0, 9
303 ; CHECK-NEXT: bne 0, .LBB0_57
304 ; CHECK-NEXT: # %bb.58: # %entry
307 ; CHECK-NEXT: .LBB0_59: # %entry
309 ; CHECK-NEXT: lwarx 0, 0, 10
310 ; CHECK-NEXT: xori 0, 0, 1
311 ; CHECK-NEXT: stwcx. 0, 0, 10
312 ; CHECK-NEXT: bne 0, .LBB0_59
313 ; CHECK-NEXT: # %bb.60: # %entry
316 ; CHECK-NEXT: .LBB0_61: # %entry
318 ; CHECK-NEXT: ldarx 0, 0, 11
319 ; CHECK-NEXT: xori 0, 0, 1
320 ; CHECK-NEXT: stdcx. 0, 0, 11
321 ; CHECK-NEXT: bne 0, .LBB0_61
322 ; CHECK-NEXT: # %bb.62: # %entry
325 ; CHECK-NEXT: .LBB0_63: # %entry
327 ; CHECK-NEXT: ldarx 0, 0, 12
328 ; CHECK-NEXT: xori 0, 0, 1
329 ; CHECK-NEXT: stdcx. 0, 0, 12
330 ; CHECK-NEXT: bne 0, .LBB0_63
331 ; CHECK-NEXT: # %bb.64: # %entry
332 ; CHECK-NEXT: addis 30, 2, u128@toc@ha
335 ; CHECK-NEXT: addi 0, 30, u128@toc@l
336 ; CHECK-NEXT: li 30, 0
337 ; CHECK-NEXT: .LBB0_65: # %entry
339 ; CHECK-NEXT: lqarx 28, 0, 0
340 ; CHECK-NEXT: xor 27, 7, 29
341 ; CHECK-NEXT: xor 26, 30, 28
342 ; CHECK-NEXT: stqcx. 26, 0, 0
343 ; CHECK-NEXT: bne 0, .LBB0_65
344 ; CHECK-NEXT: # %bb.66: # %entry
345 ; CHECK-NEXT: addis 29, 2, s128@toc@ha
347 ; CHECK-NEXT: addi 0, 29, s128@toc@l
349 ; CHECK-NEXT: .LBB0_67: # %entry
351 ; CHECK-NEXT: lqarx 28, 0, 0
352 ; CHECK-NEXT: xor 27, 7, 29
353 ; CHECK-NEXT: xor 26, 30, 28
354 ; CHECK-NEXT: stqcx. 26, 0, 0
355 ; CHECK-NEXT: bne 0, .LBB0_67
356 ; CHECK-NEXT: # %bb.68: # %entry
359 ; CHECK-NEXT: .LBB0_69: # %entry
361 ; CHECK-NEXT: lbarx 0, 0, 4
362 ; CHECK-NEXT: nand 0, 3, 0
363 ; CHECK-NEXT: stbcx. 0, 0, 4
364 ; CHECK-NEXT: bne 0, .LBB0_69
365 ; CHECK-NEXT: # %bb.70: # %entry
368 ; CHECK-NEXT: .LBB0_71: # %entry
370 ; CHECK-NEXT: lbarx 0, 0, 5
371 ; CHECK-NEXT: nand 0, 3, 0
372 ; CHECK-NEXT: stbcx. 0, 0, 5
373 ; CHECK-NEXT: bne 0, .LBB0_71
374 ; CHECK-NEXT: # %bb.72: # %entry
377 ; CHECK-NEXT: .LBB0_73: # %entry
379 ; CHECK-NEXT: lharx 0, 0, 6
380 ; CHECK-NEXT: nand 0, 3, 0
381 ; CHECK-NEXT: sthcx. 0, 0, 6
382 ; CHECK-NEXT: bne 0, .LBB0_73
383 ; CHECK-NEXT: # %bb.74: # %entry
386 ; CHECK-NEXT: .LBB0_75: # %entry
388 ; CHECK-NEXT: lharx 0, 0, 8
389 ; CHECK-NEXT: nand 0, 3, 0
390 ; CHECK-NEXT: sthcx. 0, 0, 8
391 ; CHECK-NEXT: bne 0, .LBB0_75
392 ; CHECK-NEXT: # %bb.76: # %entry
395 ; CHECK-NEXT: .LBB0_77: # %entry
397 ; CHECK-NEXT: lwarx 0, 0, 9
398 ; CHECK-NEXT: nand 0, 3, 0
399 ; CHECK-NEXT: stwcx. 0, 0, 9
400 ; CHECK-NEXT: bne 0, .LBB0_77
401 ; CHECK-NEXT: # %bb.78: # %entry
404 ; CHECK-NEXT: .LBB0_79: # %entry
406 ; CHECK-NEXT: lwarx 0, 0, 10
407 ; CHECK-NEXT: nand 0, 3, 0
408 ; CHECK-NEXT: stwcx. 0, 0, 10
409 ; CHECK-NEXT: bne 0, .LBB0_79
410 ; CHECK-NEXT: # %bb.80: # %entry
413 ; CHECK-NEXT: .LBB0_81: # %entry
415 ; CHECK-NEXT: ldarx 0, 0, 11
416 ; CHECK-NEXT: nand 0, 7, 0
417 ; CHECK-NEXT: stdcx. 0, 0, 11
418 ; CHECK-NEXT: bne 0, .LBB0_81
419 ; CHECK-NEXT: # %bb.82: # %entry
422 ; CHECK-NEXT: .LBB0_83: # %entry
424 ; CHECK-NEXT: ldarx 0, 0, 12
425 ; CHECK-NEXT: nand 0, 7, 0
426 ; CHECK-NEXT: stdcx. 0, 0, 12
427 ; CHECK-NEXT: bne 0, .LBB0_83
428 ; CHECK-NEXT: # %bb.84: # %entry
431 ; CHECK-NEXT: .LBB0_85: # %entry
433 ; CHECK-NEXT: lbarx 0, 0, 4
434 ; CHECK-NEXT: and 0, 3, 0
435 ; CHECK-NEXT: stbcx. 0, 0, 4
436 ; CHECK-NEXT: bne 0, .LBB0_85
437 ; CHECK-NEXT: # %bb.86: # %entry
440 ; CHECK-NEXT: .LBB0_87: # %entry
442 ; CHECK-NEXT: lbarx 4, 0, 5
443 ; CHECK-NEXT: and 4, 3, 4
444 ; CHECK-NEXT: stbcx. 4, 0, 5
445 ; CHECK-NEXT: bne 0, .LBB0_87
446 ; CHECK-NEXT: # %bb.88: # %entry
449 ; CHECK-NEXT: .LBB0_89: # %entry
451 ; CHECK-NEXT: lharx 4, 0, 6
452 ; CHECK-NEXT: and 4, 3, 4
453 ; CHECK-NEXT: sthcx. 4, 0, 6
454 ; CHECK-NEXT: bne 0, .LBB0_89
455 ; CHECK-NEXT: # %bb.90: # %entry
458 ; CHECK-NEXT: .LBB0_91: # %entry
460 ; CHECK-NEXT: lharx 4, 0, 8
461 ; CHECK-NEXT: and 4, 3, 4
462 ; CHECK-NEXT: sthcx. 4, 0, 8
463 ; CHECK-NEXT: bne 0, .LBB0_91
464 ; CHECK-NEXT: # %bb.92: # %entry
467 ; CHECK-NEXT: .LBB0_93: # %entry
469 ; CHECK-NEXT: lwarx 4, 0, 9
470 ; CHECK-NEXT: and 4, 3, 4
471 ; CHECK-NEXT: stwcx. 4, 0, 9
472 ; CHECK-NEXT: bne 0, .LBB0_93
473 ; CHECK-NEXT: # %bb.94: # %entry
476 ; CHECK-NEXT: .LBB0_95: # %entry
478 ; CHECK-NEXT: lwarx 4, 0, 10
479 ; CHECK-NEXT: and 4, 3, 4
480 ; CHECK-NEXT: stwcx. 4, 0, 10
481 ; CHECK-NEXT: bne 0, .LBB0_95
482 ; CHECK-NEXT: # %bb.96: # %entry
485 ; CHECK-NEXT: .LBB0_97: # %entry
487 ; CHECK-NEXT: ldarx 3, 0, 11
488 ; CHECK-NEXT: and 3, 7, 3
489 ; CHECK-NEXT: stdcx. 3, 0, 11
490 ; CHECK-NEXT: bne 0, .LBB0_97
491 ; CHECK-NEXT: # %bb.98: # %entry
494 ; CHECK-NEXT: .LBB0_99: # %entry
496 ; CHECK-NEXT: ldarx 3, 0, 12
497 ; CHECK-NEXT: and 3, 7, 3
498 ; CHECK-NEXT: stdcx. 3, 0, 12
499 ; CHECK-NEXT: bne 0, .LBB0_99
500 ; CHECK-NEXT: # %bb.100: # %entry
502 ; CHECK-NEXT: ld 30, -16(1) # 8-byte Folded Reload
503 ; CHECK-NEXT: ld 29, -24(1) # 8-byte Folded Reload
504 ; CHECK-NEXT: ld 28, -32(1) # 8-byte Folded Reload
505 ; CHECK-NEXT: ld 27, -40(1) # 8-byte Folded Reload
506 ; CHECK-NEXT: ld 26, -48(1) # 8-byte Folded Reload
509 ; AIX32-LABEL: test_op_ignore:
510 ; AIX32: # %bb.0: # %entry
512 ; AIX32-NEXT: stwu 1, -160(1)
513 ; AIX32-NEXT: lwz 3, L..C0(2) # @sc
514 ; AIX32-NEXT: stw 0, 168(1)
515 ; AIX32-NEXT: rlwinm 4, 3, 3, 27, 28
516 ; AIX32-NEXT: stw 15, 92(1) # 4-byte Folded Spill
517 ; AIX32-NEXT: stw 26, 136(1) # 4-byte Folded Spill
518 ; AIX32-NEXT: stw 28, 144(1) # 4-byte Folded Spill
519 ; AIX32-NEXT: li 15, 1
520 ; AIX32-NEXT: rlwinm 28, 3, 0, 0, 29
521 ; AIX32-NEXT: li 3, 255
522 ; AIX32-NEXT: xori 26, 4, 24
523 ; AIX32-NEXT: stw 16, 96(1) # 4-byte Folded Spill
524 ; AIX32-NEXT: stw 17, 100(1) # 4-byte Folded Spill
525 ; AIX32-NEXT: stw 18, 104(1) # 4-byte Folded Spill
526 ; AIX32-NEXT: stw 19, 108(1) # 4-byte Folded Spill
527 ; AIX32-NEXT: stw 20, 112(1) # 4-byte Folded Spill
528 ; AIX32-NEXT: stw 21, 116(1) # 4-byte Folded Spill
529 ; AIX32-NEXT: stw 22, 120(1) # 4-byte Folded Spill
530 ; AIX32-NEXT: stw 23, 124(1) # 4-byte Folded Spill
531 ; AIX32-NEXT: stw 24, 128(1) # 4-byte Folded Spill
532 ; AIX32-NEXT: stw 25, 132(1) # 4-byte Folded Spill
533 ; AIX32-NEXT: stw 27, 140(1) # 4-byte Folded Spill
534 ; AIX32-NEXT: stw 29, 148(1) # 4-byte Folded Spill
535 ; AIX32-NEXT: stw 30, 152(1) # 4-byte Folded Spill
536 ; AIX32-NEXT: stw 31, 156(1) # 4-byte Folded Spill
538 ; AIX32-NEXT: slw 29, 15, 26
539 ; AIX32-NEXT: slw 3, 3, 26
540 ; AIX32-NEXT: L..BB0_1: # %entry
542 ; AIX32-NEXT: lwarx 4, 0, 28
543 ; AIX32-NEXT: add 5, 29, 4
544 ; AIX32-NEXT: andc 4, 4, 3
545 ; AIX32-NEXT: and 5, 5, 3
546 ; AIX32-NEXT: or 4, 5, 4
547 ; AIX32-NEXT: stwcx. 4, 0, 28
548 ; AIX32-NEXT: bne 0, L..BB0_1
549 ; AIX32-NEXT: # %bb.2: # %entry
550 ; AIX32-NEXT: lwz 3, L..C1(2) # @uc
553 ; AIX32-NEXT: rlwinm 4, 3, 3, 27, 28
554 ; AIX32-NEXT: rlwinm 27, 3, 0, 0, 29
555 ; AIX32-NEXT: li 3, 255
556 ; AIX32-NEXT: xori 24, 4, 24
557 ; AIX32-NEXT: slw 18, 15, 24
558 ; AIX32-NEXT: slw 3, 3, 24
559 ; AIX32-NEXT: L..BB0_3: # %entry
561 ; AIX32-NEXT: lwarx 4, 0, 27
562 ; AIX32-NEXT: add 5, 18, 4
563 ; AIX32-NEXT: andc 4, 4, 3
564 ; AIX32-NEXT: and 5, 5, 3
565 ; AIX32-NEXT: or 4, 5, 4
566 ; AIX32-NEXT: stwcx. 4, 0, 27
567 ; AIX32-NEXT: bne 0, L..BB0_3
568 ; AIX32-NEXT: # %bb.4: # %entry
569 ; AIX32-NEXT: lwz 3, L..C2(2) # @ss
572 ; AIX32-NEXT: rlwinm 4, 3, 3, 27, 27
573 ; AIX32-NEXT: rlwinm 25, 3, 0, 0, 29
574 ; AIX32-NEXT: li 3, 0
575 ; AIX32-NEXT: xori 22, 4, 16
576 ; AIX32-NEXT: ori 3, 3, 65535
577 ; AIX32-NEXT: slw 17, 15, 22
578 ; AIX32-NEXT: slw 3, 3, 22
579 ; AIX32-NEXT: L..BB0_5: # %entry
581 ; AIX32-NEXT: lwarx 4, 0, 25
582 ; AIX32-NEXT: add 5, 17, 4
583 ; AIX32-NEXT: andc 4, 4, 3
584 ; AIX32-NEXT: and 5, 5, 3
585 ; AIX32-NEXT: or 4, 5, 4
586 ; AIX32-NEXT: stwcx. 4, 0, 25
587 ; AIX32-NEXT: bne 0, L..BB0_5
588 ; AIX32-NEXT: # %bb.6: # %entry
589 ; AIX32-NEXT: lwz 3, L..C3(2) # @us
592 ; AIX32-NEXT: rlwinm 4, 3, 3, 27, 27
593 ; AIX32-NEXT: rlwinm 23, 3, 0, 0, 29
594 ; AIX32-NEXT: li 3, 0
595 ; AIX32-NEXT: xori 21, 4, 16
596 ; AIX32-NEXT: ori 3, 3, 65535
597 ; AIX32-NEXT: slw 16, 15, 21
598 ; AIX32-NEXT: slw 3, 3, 21
599 ; AIX32-NEXT: L..BB0_7: # %entry
601 ; AIX32-NEXT: lwarx 4, 0, 23
602 ; AIX32-NEXT: add 5, 16, 4
603 ; AIX32-NEXT: andc 4, 4, 3
604 ; AIX32-NEXT: and 5, 5, 3
605 ; AIX32-NEXT: or 4, 5, 4
606 ; AIX32-NEXT: stwcx. 4, 0, 23
607 ; AIX32-NEXT: bne 0, L..BB0_7
608 ; AIX32-NEXT: # %bb.8: # %entry
610 ; AIX32-NEXT: lwz 20, L..C4(2) # @si
612 ; AIX32-NEXT: L..BB0_9: # %entry
614 ; AIX32-NEXT: lwarx 3, 0, 20
615 ; AIX32-NEXT: addi 3, 3, 1
616 ; AIX32-NEXT: stwcx. 3, 0, 20
617 ; AIX32-NEXT: bne 0, L..BB0_9
618 ; AIX32-NEXT: # %bb.10: # %entry
620 ; AIX32-NEXT: lwz 19, L..C5(2) # @ui
622 ; AIX32-NEXT: L..BB0_11: # %entry
624 ; AIX32-NEXT: lwarx 3, 0, 19
625 ; AIX32-NEXT: addi 3, 3, 1
626 ; AIX32-NEXT: stwcx. 3, 0, 19
627 ; AIX32-NEXT: bne 0, L..BB0_11
628 ; AIX32-NEXT: # %bb.12: # %entry
629 ; AIX32-NEXT: lwz 31, L..C6(2) # @sll
631 ; AIX32-NEXT: li 4, 0
632 ; AIX32-NEXT: li 5, 1
633 ; AIX32-NEXT: li 6, 5
634 ; AIX32-NEXT: mr 3, 31
635 ; AIX32-NEXT: bl .__atomic_fetch_add_8[PR]
637 ; AIX32-NEXT: lwz 30, L..C7(2) # @ull
638 ; AIX32-NEXT: li 4, 0
639 ; AIX32-NEXT: li 5, 1
640 ; AIX32-NEXT: mr 3, 30
641 ; AIX32-NEXT: li 6, 5
642 ; AIX32-NEXT: bl .__atomic_fetch_add_8[PR]
644 ; AIX32-NEXT: li 3, 255
646 ; AIX32-NEXT: slw 3, 3, 26
647 ; AIX32-NEXT: L..BB0_13: # %entry
649 ; AIX32-NEXT: lwarx 4, 0, 28
650 ; AIX32-NEXT: sub 5, 4, 29
651 ; AIX32-NEXT: andc 4, 4, 3
652 ; AIX32-NEXT: and 5, 5, 3
653 ; AIX32-NEXT: or 4, 5, 4
654 ; AIX32-NEXT: stwcx. 4, 0, 28
655 ; AIX32-NEXT: bne 0, L..BB0_13
656 ; AIX32-NEXT: # %bb.14: # %entry
657 ; AIX32-NEXT: li 3, 255
660 ; AIX32-NEXT: slw 3, 3, 24
661 ; AIX32-NEXT: L..BB0_15: # %entry
663 ; AIX32-NEXT: lwarx 4, 0, 27
664 ; AIX32-NEXT: sub 5, 4, 18
665 ; AIX32-NEXT: andc 4, 4, 3
666 ; AIX32-NEXT: and 5, 5, 3
667 ; AIX32-NEXT: or 4, 5, 4
668 ; AIX32-NEXT: stwcx. 4, 0, 27
669 ; AIX32-NEXT: bne 0, L..BB0_15
670 ; AIX32-NEXT: # %bb.16: # %entry
671 ; AIX32-NEXT: li 3, 0
674 ; AIX32-NEXT: ori 3, 3, 65535
675 ; AIX32-NEXT: slw 3, 3, 22
676 ; AIX32-NEXT: L..BB0_17: # %entry
678 ; AIX32-NEXT: lwarx 4, 0, 25
679 ; AIX32-NEXT: sub 5, 4, 17
680 ; AIX32-NEXT: andc 4, 4, 3
681 ; AIX32-NEXT: and 5, 5, 3
682 ; AIX32-NEXT: or 4, 5, 4
683 ; AIX32-NEXT: stwcx. 4, 0, 25
684 ; AIX32-NEXT: bne 0, L..BB0_17
685 ; AIX32-NEXT: # %bb.18: # %entry
686 ; AIX32-NEXT: li 3, 0
689 ; AIX32-NEXT: ori 3, 3, 65535
690 ; AIX32-NEXT: slw 3, 3, 21
691 ; AIX32-NEXT: L..BB0_19: # %entry
693 ; AIX32-NEXT: lwarx 4, 0, 23
694 ; AIX32-NEXT: sub 5, 4, 16
695 ; AIX32-NEXT: andc 4, 4, 3
696 ; AIX32-NEXT: and 5, 5, 3
697 ; AIX32-NEXT: or 4, 5, 4
698 ; AIX32-NEXT: stwcx. 4, 0, 23
699 ; AIX32-NEXT: bne 0, L..BB0_19
700 ; AIX32-NEXT: # %bb.20: # %entry
703 ; AIX32-NEXT: L..BB0_21: # %entry
705 ; AIX32-NEXT: lwarx 3, 0, 20
706 ; AIX32-NEXT: sub 3, 3, 15
707 ; AIX32-NEXT: stwcx. 3, 0, 20
708 ; AIX32-NEXT: bne 0, L..BB0_21
709 ; AIX32-NEXT: # %bb.22: # %entry
712 ; AIX32-NEXT: L..BB0_23: # %entry
714 ; AIX32-NEXT: lwarx 3, 0, 19
715 ; AIX32-NEXT: sub 3, 3, 15
716 ; AIX32-NEXT: stwcx. 3, 0, 19
717 ; AIX32-NEXT: bne 0, L..BB0_23
718 ; AIX32-NEXT: # %bb.24: # %entry
720 ; AIX32-NEXT: li 4, 0
721 ; AIX32-NEXT: li 5, 1
722 ; AIX32-NEXT: mr 3, 31
723 ; AIX32-NEXT: li 6, 5
724 ; AIX32-NEXT: bl .__atomic_fetch_sub_8[PR]
726 ; AIX32-NEXT: li 4, 0
727 ; AIX32-NEXT: li 5, 1
728 ; AIX32-NEXT: mr 3, 30
729 ; AIX32-NEXT: li 6, 5
730 ; AIX32-NEXT: bl .__atomic_fetch_sub_8[PR]
732 ; AIX32-NEXT: li 3, 255
734 ; AIX32-NEXT: slw 3, 3, 26
735 ; AIX32-NEXT: L..BB0_25: # %entry
737 ; AIX32-NEXT: lwarx 4, 0, 28
738 ; AIX32-NEXT: or 5, 29, 4
739 ; AIX32-NEXT: andc 4, 4, 3
740 ; AIX32-NEXT: and 5, 5, 3
741 ; AIX32-NEXT: or 4, 5, 4
742 ; AIX32-NEXT: stwcx. 4, 0, 28
743 ; AIX32-NEXT: bne 0, L..BB0_25
744 ; AIX32-NEXT: # %bb.26: # %entry
745 ; AIX32-NEXT: li 3, 255
748 ; AIX32-NEXT: slw 3, 3, 24
749 ; AIX32-NEXT: L..BB0_27: # %entry
751 ; AIX32-NEXT: lwarx 4, 0, 27
752 ; AIX32-NEXT: or 5, 18, 4
753 ; AIX32-NEXT: andc 4, 4, 3
754 ; AIX32-NEXT: and 5, 5, 3
755 ; AIX32-NEXT: or 4, 5, 4
756 ; AIX32-NEXT: stwcx. 4, 0, 27
757 ; AIX32-NEXT: bne 0, L..BB0_27
758 ; AIX32-NEXT: # %bb.28: # %entry
759 ; AIX32-NEXT: li 3, 0
762 ; AIX32-NEXT: ori 3, 3, 65535
763 ; AIX32-NEXT: slw 3, 3, 22
764 ; AIX32-NEXT: L..BB0_29: # %entry
766 ; AIX32-NEXT: lwarx 4, 0, 25
767 ; AIX32-NEXT: or 5, 17, 4
768 ; AIX32-NEXT: andc 4, 4, 3
769 ; AIX32-NEXT: and 5, 5, 3
770 ; AIX32-NEXT: or 4, 5, 4
771 ; AIX32-NEXT: stwcx. 4, 0, 25
772 ; AIX32-NEXT: bne 0, L..BB0_29
773 ; AIX32-NEXT: # %bb.30: # %entry
774 ; AIX32-NEXT: li 3, 0
777 ; AIX32-NEXT: ori 3, 3, 65535
778 ; AIX32-NEXT: slw 3, 3, 21
779 ; AIX32-NEXT: L..BB0_31: # %entry
781 ; AIX32-NEXT: lwarx 4, 0, 23
782 ; AIX32-NEXT: or 5, 16, 4
783 ; AIX32-NEXT: andc 4, 4, 3
784 ; AIX32-NEXT: and 5, 5, 3
785 ; AIX32-NEXT: or 4, 5, 4
786 ; AIX32-NEXT: stwcx. 4, 0, 23
787 ; AIX32-NEXT: bne 0, L..BB0_31
788 ; AIX32-NEXT: # %bb.32: # %entry
791 ; AIX32-NEXT: L..BB0_33: # %entry
793 ; AIX32-NEXT: lwarx 3, 0, 20
794 ; AIX32-NEXT: ori 3, 3, 1
795 ; AIX32-NEXT: stwcx. 3, 0, 20
796 ; AIX32-NEXT: bne 0, L..BB0_33
797 ; AIX32-NEXT: # %bb.34: # %entry
800 ; AIX32-NEXT: L..BB0_35: # %entry
802 ; AIX32-NEXT: lwarx 3, 0, 19
803 ; AIX32-NEXT: ori 3, 3, 1
804 ; AIX32-NEXT: stwcx. 3, 0, 19
805 ; AIX32-NEXT: bne 0, L..BB0_35
806 ; AIX32-NEXT: # %bb.36: # %entry
808 ; AIX32-NEXT: li 4, 0
809 ; AIX32-NEXT: li 5, 1
810 ; AIX32-NEXT: mr 3, 31
811 ; AIX32-NEXT: li 6, 5
812 ; AIX32-NEXT: bl .__atomic_fetch_or_8[PR]
814 ; AIX32-NEXT: li 4, 0
815 ; AIX32-NEXT: li 5, 1
816 ; AIX32-NEXT: mr 3, 30
817 ; AIX32-NEXT: li 6, 5
818 ; AIX32-NEXT: bl .__atomic_fetch_or_8[PR]
820 ; AIX32-NEXT: li 3, 255
822 ; AIX32-NEXT: slw 3, 3, 26
823 ; AIX32-NEXT: L..BB0_37: # %entry
825 ; AIX32-NEXT: lwarx 4, 0, 28
826 ; AIX32-NEXT: xor 5, 29, 4
827 ; AIX32-NEXT: andc 4, 4, 3
828 ; AIX32-NEXT: and 5, 5, 3
829 ; AIX32-NEXT: or 4, 5, 4
830 ; AIX32-NEXT: stwcx. 4, 0, 28
831 ; AIX32-NEXT: bne 0, L..BB0_37
832 ; AIX32-NEXT: # %bb.38: # %entry
833 ; AIX32-NEXT: li 3, 255
836 ; AIX32-NEXT: slw 3, 3, 24
837 ; AIX32-NEXT: L..BB0_39: # %entry
839 ; AIX32-NEXT: lwarx 4, 0, 27
840 ; AIX32-NEXT: xor 5, 18, 4
841 ; AIX32-NEXT: andc 4, 4, 3
842 ; AIX32-NEXT: and 5, 5, 3
843 ; AIX32-NEXT: or 4, 5, 4
844 ; AIX32-NEXT: stwcx. 4, 0, 27
845 ; AIX32-NEXT: bne 0, L..BB0_39
846 ; AIX32-NEXT: # %bb.40: # %entry
847 ; AIX32-NEXT: li 3, 0
850 ; AIX32-NEXT: ori 3, 3, 65535
851 ; AIX32-NEXT: slw 3, 3, 22
852 ; AIX32-NEXT: L..BB0_41: # %entry
854 ; AIX32-NEXT: lwarx 4, 0, 25
855 ; AIX32-NEXT: xor 5, 17, 4
856 ; AIX32-NEXT: andc 4, 4, 3
857 ; AIX32-NEXT: and 5, 5, 3
858 ; AIX32-NEXT: or 4, 5, 4
859 ; AIX32-NEXT: stwcx. 4, 0, 25
860 ; AIX32-NEXT: bne 0, L..BB0_41
861 ; AIX32-NEXT: # %bb.42: # %entry
862 ; AIX32-NEXT: li 3, 0
865 ; AIX32-NEXT: ori 3, 3, 65535
866 ; AIX32-NEXT: slw 3, 3, 21
867 ; AIX32-NEXT: L..BB0_43: # %entry
869 ; AIX32-NEXT: lwarx 4, 0, 23
870 ; AIX32-NEXT: xor 5, 16, 4
871 ; AIX32-NEXT: andc 4, 4, 3
872 ; AIX32-NEXT: and 5, 5, 3
873 ; AIX32-NEXT: or 4, 5, 4
874 ; AIX32-NEXT: stwcx. 4, 0, 23
875 ; AIX32-NEXT: bne 0, L..BB0_43
876 ; AIX32-NEXT: # %bb.44: # %entry
879 ; AIX32-NEXT: L..BB0_45: # %entry
881 ; AIX32-NEXT: lwarx 3, 0, 20
882 ; AIX32-NEXT: xori 3, 3, 1
883 ; AIX32-NEXT: stwcx. 3, 0, 20
884 ; AIX32-NEXT: bne 0, L..BB0_45
885 ; AIX32-NEXT: # %bb.46: # %entry
888 ; AIX32-NEXT: L..BB0_47: # %entry
890 ; AIX32-NEXT: lwarx 3, 0, 19
891 ; AIX32-NEXT: xori 3, 3, 1
892 ; AIX32-NEXT: stwcx. 3, 0, 19
893 ; AIX32-NEXT: bne 0, L..BB0_47
894 ; AIX32-NEXT: # %bb.48: # %entry
896 ; AIX32-NEXT: li 4, 0
897 ; AIX32-NEXT: li 5, 1
898 ; AIX32-NEXT: mr 3, 31
899 ; AIX32-NEXT: li 6, 5
900 ; AIX32-NEXT: bl .__atomic_fetch_xor_8[PR]
902 ; AIX32-NEXT: li 4, 0
903 ; AIX32-NEXT: li 5, 1
904 ; AIX32-NEXT: mr 3, 30
905 ; AIX32-NEXT: li 6, 5
906 ; AIX32-NEXT: bl .__atomic_fetch_xor_8[PR]
908 ; AIX32-NEXT: lwz 31, L..C8(2) # @u128
909 ; AIX32-NEXT: addi 30, 1, 72
910 ; AIX32-NEXT: addi 29, 1, 56
911 ; AIX32-NEXT: lwz 5, 12(31)
912 ; AIX32-NEXT: lwz 4, 8(31)
913 ; AIX32-NEXT: lwz 6, 4(31)
914 ; AIX32-NEXT: lwz 7, 0(31)
915 ; AIX32-NEXT: .align 4
916 ; AIX32-NEXT: L..BB0_49: # %atomicrmw.start
918 ; AIX32-NEXT: xori 3, 5, 1
919 ; AIX32-NEXT: stw 7, 72(1)
920 ; AIX32-NEXT: stw 7, 56(1)
921 ; AIX32-NEXT: li 7, 5
922 ; AIX32-NEXT: stw 3, 68(1)
923 ; AIX32-NEXT: li 3, 16
924 ; AIX32-NEXT: li 8, 5
925 ; AIX32-NEXT: stw 6, 76(1)
926 ; AIX32-NEXT: stw 4, 80(1)
927 ; AIX32-NEXT: stw 5, 84(1)
928 ; AIX32-NEXT: stw 4, 64(1)
929 ; AIX32-NEXT: stw 6, 60(1)
930 ; AIX32-NEXT: mr 4, 31
931 ; AIX32-NEXT: mr 5, 30
932 ; AIX32-NEXT: mr 6, 29
933 ; AIX32-NEXT: bl .__atomic_compare_exchange[PR]
935 ; AIX32-NEXT: lwz 5, 84(1)
936 ; AIX32-NEXT: lwz 4, 80(1)
937 ; AIX32-NEXT: lwz 6, 76(1)
938 ; AIX32-NEXT: lwz 7, 72(1)
939 ; AIX32-NEXT: cmplwi 3, 0
940 ; AIX32-NEXT: beq 0, L..BB0_49
941 ; AIX32-NEXT: # %bb.50: # %atomicrmw.end
942 ; AIX32-NEXT: lwz 31, L..C9(2) # @s128
943 ; AIX32-NEXT: addi 30, 1, 72
944 ; AIX32-NEXT: addi 29, 1, 56
945 ; AIX32-NEXT: lwz 5, 12(31)
946 ; AIX32-NEXT: lwz 4, 8(31)
947 ; AIX32-NEXT: lwz 6, 4(31)
948 ; AIX32-NEXT: lwz 7, 0(31)
949 ; AIX32-NEXT: .align 4
950 ; AIX32-NEXT: L..BB0_51: # %atomicrmw.start2
952 ; AIX32-NEXT: xori 3, 5, 1
953 ; AIX32-NEXT: stw 7, 72(1)
954 ; AIX32-NEXT: stw 7, 56(1)
955 ; AIX32-NEXT: li 7, 5
956 ; AIX32-NEXT: stw 3, 68(1)
957 ; AIX32-NEXT: li 3, 16
958 ; AIX32-NEXT: li 8, 5
959 ; AIX32-NEXT: stw 6, 76(1)
960 ; AIX32-NEXT: stw 4, 80(1)
961 ; AIX32-NEXT: stw 5, 84(1)
962 ; AIX32-NEXT: stw 4, 64(1)
963 ; AIX32-NEXT: stw 6, 60(1)
964 ; AIX32-NEXT: mr 4, 31
965 ; AIX32-NEXT: mr 5, 30
966 ; AIX32-NEXT: mr 6, 29
967 ; AIX32-NEXT: bl .__atomic_compare_exchange[PR]
969 ; AIX32-NEXT: lwz 5, 84(1)
970 ; AIX32-NEXT: lwz 4, 80(1)
971 ; AIX32-NEXT: lwz 6, 76(1)
972 ; AIX32-NEXT: lwz 7, 72(1)
973 ; AIX32-NEXT: cmplwi 3, 0
974 ; AIX32-NEXT: beq 0, L..BB0_51
975 ; AIX32-NEXT: # %bb.52: # %atomicrmw.end1
976 ; AIX32-NEXT: li 29, 1
977 ; AIX32-NEXT: li 3, 255
979 ; AIX32-NEXT: slw 18, 29, 26
980 ; AIX32-NEXT: slw 3, 3, 26
981 ; AIX32-NEXT: L..BB0_53: # %atomicrmw.end1
983 ; AIX32-NEXT: lwarx 4, 0, 28
984 ; AIX32-NEXT: nand 5, 18, 4
985 ; AIX32-NEXT: andc 4, 4, 3
986 ; AIX32-NEXT: and 5, 5, 3
987 ; AIX32-NEXT: or 4, 5, 4
988 ; AIX32-NEXT: stwcx. 4, 0, 28
989 ; AIX32-NEXT: bne 0, L..BB0_53
990 ; AIX32-NEXT: # %bb.54: # %atomicrmw.end1
991 ; AIX32-NEXT: li 3, 255
993 ; AIX32-NEXT: slw 17, 29, 24
995 ; AIX32-NEXT: slw 3, 3, 24
996 ; AIX32-NEXT: L..BB0_55: # %atomicrmw.end1
998 ; AIX32-NEXT: lwarx 4, 0, 27
999 ; AIX32-NEXT: nand 5, 17, 4
1000 ; AIX32-NEXT: andc 4, 4, 3
1001 ; AIX32-NEXT: and 5, 5, 3
1002 ; AIX32-NEXT: or 4, 5, 4
1003 ; AIX32-NEXT: stwcx. 4, 0, 27
1004 ; AIX32-NEXT: bne 0, L..BB0_55
1005 ; AIX32-NEXT: # %bb.56: # %atomicrmw.end1
1006 ; AIX32-NEXT: li 3, 0
1007 ; AIX32-NEXT: lwsync
1008 ; AIX32-NEXT: slw 16, 29, 22
1010 ; AIX32-NEXT: ori 3, 3, 65535
1011 ; AIX32-NEXT: slw 3, 3, 22
1012 ; AIX32-NEXT: L..BB0_57: # %atomicrmw.end1
1014 ; AIX32-NEXT: lwarx 4, 0, 25
1015 ; AIX32-NEXT: nand 5, 16, 4
1016 ; AIX32-NEXT: andc 4, 4, 3
1017 ; AIX32-NEXT: and 5, 5, 3
1018 ; AIX32-NEXT: or 4, 5, 4
1019 ; AIX32-NEXT: stwcx. 4, 0, 25
1020 ; AIX32-NEXT: bne 0, L..BB0_57
1021 ; AIX32-NEXT: # %bb.58: # %atomicrmw.end1
1022 ; AIX32-NEXT: li 3, 0
1023 ; AIX32-NEXT: lwsync
1024 ; AIX32-NEXT: slw 15, 29, 21
1026 ; AIX32-NEXT: ori 3, 3, 65535
1027 ; AIX32-NEXT: slw 3, 3, 21
1028 ; AIX32-NEXT: L..BB0_59: # %atomicrmw.end1
1030 ; AIX32-NEXT: lwarx 4, 0, 23
1031 ; AIX32-NEXT: nand 5, 15, 4
1032 ; AIX32-NEXT: andc 4, 4, 3
1033 ; AIX32-NEXT: and 5, 5, 3
1034 ; AIX32-NEXT: or 4, 5, 4
1035 ; AIX32-NEXT: stwcx. 4, 0, 23
1036 ; AIX32-NEXT: bne 0, L..BB0_59
1037 ; AIX32-NEXT: # %bb.60: # %atomicrmw.end1
1038 ; AIX32-NEXT: lwsync
1040 ; AIX32-NEXT: L..BB0_61: # %atomicrmw.end1
1042 ; AIX32-NEXT: lwarx 3, 0, 20
1043 ; AIX32-NEXT: nand 3, 29, 3
1044 ; AIX32-NEXT: stwcx. 3, 0, 20
1045 ; AIX32-NEXT: bne 0, L..BB0_61
1046 ; AIX32-NEXT: # %bb.62: # %atomicrmw.end1
1047 ; AIX32-NEXT: lwsync
1049 ; AIX32-NEXT: L..BB0_63: # %atomicrmw.end1
1051 ; AIX32-NEXT: lwarx 3, 0, 19
1052 ; AIX32-NEXT: nand 3, 29, 3
1053 ; AIX32-NEXT: stwcx. 3, 0, 19
1054 ; AIX32-NEXT: bne 0, L..BB0_63
1055 ; AIX32-NEXT: # %bb.64: # %atomicrmw.end1
1056 ; AIX32-NEXT: lwz 31, L..C6(2) # @sll
1057 ; AIX32-NEXT: lwsync
1058 ; AIX32-NEXT: li 4, 0
1059 ; AIX32-NEXT: li 5, 1
1060 ; AIX32-NEXT: li 6, 5
1061 ; AIX32-NEXT: mr 3, 31
1062 ; AIX32-NEXT: bl .__atomic_fetch_nand_8[PR]
1064 ; AIX32-NEXT: lwz 30, L..C7(2) # @ull
1065 ; AIX32-NEXT: li 4, 0
1066 ; AIX32-NEXT: li 5, 1
1067 ; AIX32-NEXT: mr 3, 30
1068 ; AIX32-NEXT: li 6, 5
1069 ; AIX32-NEXT: bl .__atomic_fetch_nand_8[PR]
1071 ; AIX32-NEXT: li 3, 255
1073 ; AIX32-NEXT: slw 3, 3, 26
1074 ; AIX32-NEXT: L..BB0_65: # %atomicrmw.end1
1076 ; AIX32-NEXT: lwarx 4, 0, 28
1077 ; AIX32-NEXT: and 5, 18, 4
1078 ; AIX32-NEXT: andc 4, 4, 3
1079 ; AIX32-NEXT: and 5, 5, 3
1080 ; AIX32-NEXT: or 4, 5, 4
1081 ; AIX32-NEXT: stwcx. 4, 0, 28
1082 ; AIX32-NEXT: bne 0, L..BB0_65
1083 ; AIX32-NEXT: # %bb.66: # %atomicrmw.end1
1084 ; AIX32-NEXT: li 3, 255
1085 ; AIX32-NEXT: lwsync
1087 ; AIX32-NEXT: slw 3, 3, 24
1088 ; AIX32-NEXT: L..BB0_67: # %atomicrmw.end1
1090 ; AIX32-NEXT: lwarx 4, 0, 27
1091 ; AIX32-NEXT: and 5, 17, 4
1092 ; AIX32-NEXT: andc 4, 4, 3
1093 ; AIX32-NEXT: and 5, 5, 3
1094 ; AIX32-NEXT: or 4, 5, 4
1095 ; AIX32-NEXT: stwcx. 4, 0, 27
1096 ; AIX32-NEXT: bne 0, L..BB0_67
1097 ; AIX32-NEXT: # %bb.68: # %atomicrmw.end1
1098 ; AIX32-NEXT: li 3, 0
1099 ; AIX32-NEXT: lwsync
1101 ; AIX32-NEXT: ori 3, 3, 65535
1102 ; AIX32-NEXT: slw 3, 3, 22
1103 ; AIX32-NEXT: L..BB0_69: # %atomicrmw.end1
1105 ; AIX32-NEXT: lwarx 4, 0, 25
1106 ; AIX32-NEXT: and 5, 16, 4
1107 ; AIX32-NEXT: andc 4, 4, 3
1108 ; AIX32-NEXT: and 5, 5, 3
1109 ; AIX32-NEXT: or 4, 5, 4
1110 ; AIX32-NEXT: stwcx. 4, 0, 25
1111 ; AIX32-NEXT: bne 0, L..BB0_69
1112 ; AIX32-NEXT: # %bb.70: # %atomicrmw.end1
1113 ; AIX32-NEXT: li 3, 0
1114 ; AIX32-NEXT: lwsync
1116 ; AIX32-NEXT: ori 3, 3, 65535
1117 ; AIX32-NEXT: slw 3, 3, 21
1118 ; AIX32-NEXT: L..BB0_71: # %atomicrmw.end1
1120 ; AIX32-NEXT: lwarx 4, 0, 23
1121 ; AIX32-NEXT: and 5, 15, 4
1122 ; AIX32-NEXT: andc 4, 4, 3
1123 ; AIX32-NEXT: and 5, 5, 3
1124 ; AIX32-NEXT: or 4, 5, 4
1125 ; AIX32-NEXT: stwcx. 4, 0, 23
1126 ; AIX32-NEXT: bne 0, L..BB0_71
1127 ; AIX32-NEXT: # %bb.72: # %atomicrmw.end1
1128 ; AIX32-NEXT: lwsync
1130 ; AIX32-NEXT: L..BB0_73: # %atomicrmw.end1
1132 ; AIX32-NEXT: lwarx 3, 0, 20
1133 ; AIX32-NEXT: and 3, 29, 3
1134 ; AIX32-NEXT: stwcx. 3, 0, 20
1135 ; AIX32-NEXT: bne 0, L..BB0_73
1136 ; AIX32-NEXT: # %bb.74: # %atomicrmw.end1
1137 ; AIX32-NEXT: lwsync
1139 ; AIX32-NEXT: L..BB0_75: # %atomicrmw.end1
1141 ; AIX32-NEXT: lwarx 3, 0, 19
1142 ; AIX32-NEXT: and 3, 29, 3
1143 ; AIX32-NEXT: stwcx. 3, 0, 19
1144 ; AIX32-NEXT: bne 0, L..BB0_75
1145 ; AIX32-NEXT: # %bb.76: # %atomicrmw.end1
1146 ; AIX32-NEXT: lwsync
1147 ; AIX32-NEXT: li 4, 0
1148 ; AIX32-NEXT: li 5, 1
1149 ; AIX32-NEXT: mr 3, 31
1150 ; AIX32-NEXT: li 6, 5
1151 ; AIX32-NEXT: bl .__atomic_fetch_and_8[PR]
1153 ; AIX32-NEXT: li 4, 0
1154 ; AIX32-NEXT: li 5, 1
1155 ; AIX32-NEXT: mr 3, 30
1156 ; AIX32-NEXT: li 6, 5
1157 ; AIX32-NEXT: bl .__atomic_fetch_and_8[PR]
1159 ; AIX32-NEXT: lwz 31, 156(1) # 4-byte Folded Reload
1160 ; AIX32-NEXT: lwz 30, 152(1) # 4-byte Folded Reload
1161 ; AIX32-NEXT: lwz 29, 148(1) # 4-byte Folded Reload
1162 ; AIX32-NEXT: lwz 28, 144(1) # 4-byte Folded Reload
1163 ; AIX32-NEXT: lwz 27, 140(1) # 4-byte Folded Reload
1164 ; AIX32-NEXT: lwz 26, 136(1) # 4-byte Folded Reload
1165 ; AIX32-NEXT: lwz 25, 132(1) # 4-byte Folded Reload
1166 ; AIX32-NEXT: lwz 24, 128(1) # 4-byte Folded Reload
1167 ; AIX32-NEXT: lwz 23, 124(1) # 4-byte Folded Reload
1168 ; AIX32-NEXT: lwz 22, 120(1) # 4-byte Folded Reload
1169 ; AIX32-NEXT: lwz 21, 116(1) # 4-byte Folded Reload
1170 ; AIX32-NEXT: lwz 20, 112(1) # 4-byte Folded Reload
1171 ; AIX32-NEXT: lwz 19, 108(1) # 4-byte Folded Reload
1172 ; AIX32-NEXT: lwz 18, 104(1) # 4-byte Folded Reload
1173 ; AIX32-NEXT: lwz 17, 100(1) # 4-byte Folded Reload
1174 ; AIX32-NEXT: lwz 16, 96(1) # 4-byte Folded Reload
1175 ; AIX32-NEXT: lwz 15, 92(1) # 4-byte Folded Reload
1176 ; AIX32-NEXT: addi 1, 1, 160
1177 ; AIX32-NEXT: lwz 0, 8(1)
1178 ; AIX32-NEXT: mtlr 0
1181 %0 = atomicrmw add ptr @sc, i8 1 seq_cst, align 1
1182 %1 = atomicrmw add ptr @uc, i8 1 seq_cst, align 1
1183 %2 = atomicrmw add ptr @ss, i16 1 seq_cst, align 2
1184 %3 = atomicrmw add ptr @us, i16 1 seq_cst, align 2
1185 %4 = atomicrmw add ptr @si, i32 1 seq_cst, align 4
1186 %5 = atomicrmw add ptr @ui, i32 1 seq_cst, align 4
1187 %6 = atomicrmw add ptr @sll, i64 1 seq_cst, align 8
1188 %7 = atomicrmw add ptr @ull, i64 1 seq_cst, align 8
1189 %8 = atomicrmw sub ptr @sc, i8 1 seq_cst, align 1
1190 %9 = atomicrmw sub ptr @uc, i8 1 seq_cst, align 1
1191 %10 = atomicrmw sub ptr @ss, i16 1 seq_cst, align 2
1192 %11 = atomicrmw sub ptr @us, i16 1 seq_cst, align 2
1193 %12 = atomicrmw sub ptr @si, i32 1 seq_cst, align 4
1194 %13 = atomicrmw sub ptr @ui, i32 1 seq_cst, align 4
1195 %14 = atomicrmw sub ptr @sll, i64 1 seq_cst, align 8
1196 %15 = atomicrmw sub ptr @ull, i64 1 seq_cst, align 8
1197 %16 = atomicrmw or ptr @sc, i8 1 seq_cst, align 1
1198 %17 = atomicrmw or ptr @uc, i8 1 seq_cst, align 1
1199 %18 = atomicrmw or ptr @ss, i16 1 seq_cst, align 2
1200 %19 = atomicrmw or ptr @us, i16 1 seq_cst, align 2
1201 %20 = atomicrmw or ptr @si, i32 1 seq_cst, align 4
1202 %21 = atomicrmw or ptr @ui, i32 1 seq_cst, align 4
1203 %22 = atomicrmw or ptr @sll, i64 1 seq_cst, align 8
1204 %23 = atomicrmw or ptr @ull, i64 1 seq_cst, align 8
1205 %24 = atomicrmw xor ptr @sc, i8 1 seq_cst, align 1
1206 %25 = atomicrmw xor ptr @uc, i8 1 seq_cst, align 1
1207 %26 = atomicrmw xor ptr @ss, i16 1 seq_cst, align 2
1208 %27 = atomicrmw xor ptr @us, i16 1 seq_cst, align 2
1209 %28 = atomicrmw xor ptr @si, i32 1 seq_cst, align 4
1210 %29 = atomicrmw xor ptr @ui, i32 1 seq_cst, align 4
1211 %30 = atomicrmw xor ptr @sll, i64 1 seq_cst, align 8
1212 %31 = atomicrmw xor ptr @ull, i64 1 seq_cst, align 8
1213 %32 = atomicrmw xor ptr @u128, i128 1 seq_cst, align 16
1214 %33 = atomicrmw xor ptr @s128, i128 1 seq_cst, align 16
1215 %34 = atomicrmw nand ptr @sc, i8 1 seq_cst, align 1
1216 %35 = atomicrmw nand ptr @uc, i8 1 seq_cst, align 1
1217 %36 = atomicrmw nand ptr @ss, i16 1 seq_cst, align 2
1218 %37 = atomicrmw nand ptr @us, i16 1 seq_cst, align 2
1219 %38 = atomicrmw nand ptr @si, i32 1 seq_cst, align 4
1220 %39 = atomicrmw nand ptr @ui, i32 1 seq_cst, align 4
1221 %40 = atomicrmw nand ptr @sll, i64 1 seq_cst, align 8
1222 %41 = atomicrmw nand ptr @ull, i64 1 seq_cst, align 8
1223 %42 = atomicrmw and ptr @sc, i8 1 seq_cst, align 1
1224 %43 = atomicrmw and ptr @uc, i8 1 seq_cst, align 1
1225 %44 = atomicrmw and ptr @ss, i16 1 seq_cst, align 2
1226 %45 = atomicrmw and ptr @us, i16 1 seq_cst, align 2
1227 %46 = atomicrmw and ptr @si, i32 1 seq_cst, align 4
1228 %47 = atomicrmw and ptr @ui, i32 1 seq_cst, align 4
1229 %48 = atomicrmw and ptr @sll, i64 1 seq_cst, align 8
1230 %49 = atomicrmw and ptr @ull, i64 1 seq_cst, align 8
1234 define dso_local void @test_fetch_and_op() local_unnamed_addr #0 {
1235 ; CHECK-LABEL: test_fetch_and_op:
1236 ; CHECK: # %bb.0: # %entry
1237 ; CHECK-NEXT: addis 4, 2, sc@toc@ha
1238 ; CHECK-NEXT: std 22, -80(1) # 8-byte Folded Spill
1239 ; CHECK-NEXT: std 23, -72(1) # 8-byte Folded Spill
1240 ; CHECK-NEXT: li 3, 11
1241 ; CHECK-NEXT: std 24, -64(1) # 8-byte Folded Spill
1242 ; CHECK-NEXT: std 25, -56(1) # 8-byte Folded Spill
1243 ; CHECK-NEXT: addi 6, 4, sc@toc@l
1244 ; CHECK-NEXT: std 26, -48(1) # 8-byte Folded Spill
1245 ; CHECK-NEXT: std 27, -40(1) # 8-byte Folded Spill
1246 ; CHECK-NEXT: std 28, -32(1) # 8-byte Folded Spill
1247 ; CHECK-NEXT: std 29, -24(1) # 8-byte Folded Spill
1248 ; CHECK-NEXT: std 30, -16(1) # 8-byte Folded Spill
1250 ; CHECK-NEXT: .LBB1_1: # %entry
1252 ; CHECK-NEXT: lbarx 5, 0, 6
1253 ; CHECK-NEXT: addi 7, 5, 11
1254 ; CHECK-NEXT: stbcx. 7, 0, 6
1255 ; CHECK-NEXT: bne 0, .LBB1_1
1256 ; CHECK-NEXT: # %bb.2: # %entry
1257 ; CHECK-NEXT: lwsync
1258 ; CHECK-NEXT: stb 5, sc@toc@l(4)
1259 ; CHECK-NEXT: addis 5, 2, uc@toc@ha
1261 ; CHECK-NEXT: addi 8, 5, uc@toc@l
1262 ; CHECK-NEXT: .LBB1_3: # %entry
1264 ; CHECK-NEXT: lbarx 7, 0, 8
1265 ; CHECK-NEXT: addi 9, 7, 11
1266 ; CHECK-NEXT: stbcx. 9, 0, 8
1267 ; CHECK-NEXT: bne 0, .LBB1_3
1268 ; CHECK-NEXT: # %bb.4: # %entry
1269 ; CHECK-NEXT: lwsync
1270 ; CHECK-NEXT: stb 7, uc@toc@l(5)
1271 ; CHECK-NEXT: addis 7, 2, ss@toc@ha
1273 ; CHECK-NEXT: addi 10, 7, ss@toc@l
1274 ; CHECK-NEXT: .LBB1_5: # %entry
1276 ; CHECK-NEXT: lharx 9, 0, 10
1277 ; CHECK-NEXT: addi 11, 9, 11
1278 ; CHECK-NEXT: sthcx. 11, 0, 10
1279 ; CHECK-NEXT: bne 0, .LBB1_5
1280 ; CHECK-NEXT: # %bb.6: # %entry
1281 ; CHECK-NEXT: lwsync
1282 ; CHECK-NEXT: sth 9, ss@toc@l(7)
1283 ; CHECK-NEXT: addis 9, 2, us@toc@ha
1285 ; CHECK-NEXT: addi 0, 9, us@toc@l
1286 ; CHECK-NEXT: .LBB1_7: # %entry
1288 ; CHECK-NEXT: lharx 11, 0, 0
1289 ; CHECK-NEXT: addi 12, 11, 11
1290 ; CHECK-NEXT: sthcx. 12, 0, 0
1291 ; CHECK-NEXT: bne 0, .LBB1_7
1292 ; CHECK-NEXT: # %bb.8: # %entry
1293 ; CHECK-NEXT: addis 12, 2, si@toc@ha
1294 ; CHECK-NEXT: lwsync
1295 ; CHECK-NEXT: sth 11, us@toc@l(9)
1297 ; CHECK-NEXT: addi 29, 12, si@toc@l
1298 ; CHECK-NEXT: .LBB1_9: # %entry
1300 ; CHECK-NEXT: lwarx 11, 0, 29
1301 ; CHECK-NEXT: addi 30, 11, 11
1302 ; CHECK-NEXT: stwcx. 30, 0, 29
1303 ; CHECK-NEXT: bne 0, .LBB1_9
1304 ; CHECK-NEXT: # %bb.10: # %entry
1305 ; CHECK-NEXT: addis 30, 2, ui@toc@ha
1306 ; CHECK-NEXT: lwsync
1307 ; CHECK-NEXT: stw 11, si@toc@l(12)
1309 ; CHECK-NEXT: addi 27, 30, ui@toc@l
1310 ; CHECK-NEXT: .LBB1_11: # %entry
1312 ; CHECK-NEXT: lwarx 11, 0, 27
1313 ; CHECK-NEXT: addi 28, 11, 11
1314 ; CHECK-NEXT: stwcx. 28, 0, 27
1315 ; CHECK-NEXT: bne 0, .LBB1_11
1316 ; CHECK-NEXT: # %bb.12: # %entry
1317 ; CHECK-NEXT: addis 28, 2, sll@toc@ha
1318 ; CHECK-NEXT: lwsync
1319 ; CHECK-NEXT: stw 11, ui@toc@l(30)
1320 ; CHECK-NEXT: li 11, 11
1322 ; CHECK-NEXT: addi 25, 28, sll@toc@l
1323 ; CHECK-NEXT: .LBB1_13: # %entry
1325 ; CHECK-NEXT: ldarx 26, 0, 25
1326 ; CHECK-NEXT: addi 24, 26, 11
1327 ; CHECK-NEXT: stdcx. 24, 0, 25
1328 ; CHECK-NEXT: bne 0, .LBB1_13
1329 ; CHECK-NEXT: # %bb.14: # %entry
1330 ; CHECK-NEXT: lwsync
1331 ; CHECK-NEXT: std 26, sll@toc@l(28)
1332 ; CHECK-NEXT: addis 26, 2, ull@toc@ha
1334 ; CHECK-NEXT: addi 24, 26, ull@toc@l
1335 ; CHECK-NEXT: .LBB1_15: # %entry
1337 ; CHECK-NEXT: ldarx 23, 0, 24
1338 ; CHECK-NEXT: addi 22, 23, 11
1339 ; CHECK-NEXT: stdcx. 22, 0, 24
1340 ; CHECK-NEXT: bne 0, .LBB1_15
1341 ; CHECK-NEXT: # %bb.16: # %entry
1342 ; CHECK-NEXT: lwsync
1343 ; CHECK-NEXT: std 23, ull@toc@l(26)
1345 ; CHECK-NEXT: .LBB1_17: # %entry
1347 ; CHECK-NEXT: lbarx 23, 0, 6
1348 ; CHECK-NEXT: sub 22, 23, 3
1349 ; CHECK-NEXT: stbcx. 22, 0, 6
1350 ; CHECK-NEXT: bne 0, .LBB1_17
1351 ; CHECK-NEXT: # %bb.18: # %entry
1352 ; CHECK-NEXT: lwsync
1353 ; CHECK-NEXT: stb 23, sc@toc@l(4)
1355 ; CHECK-NEXT: .LBB1_19: # %entry
1357 ; CHECK-NEXT: lbarx 23, 0, 8
1358 ; CHECK-NEXT: sub 22, 23, 3
1359 ; CHECK-NEXT: stbcx. 22, 0, 8
1360 ; CHECK-NEXT: bne 0, .LBB1_19
1361 ; CHECK-NEXT: # %bb.20: # %entry
1362 ; CHECK-NEXT: lwsync
1363 ; CHECK-NEXT: stb 23, uc@toc@l(5)
1365 ; CHECK-NEXT: .LBB1_21: # %entry
1367 ; CHECK-NEXT: lharx 23, 0, 10
1368 ; CHECK-NEXT: sub 22, 23, 3
1369 ; CHECK-NEXT: sthcx. 22, 0, 10
1370 ; CHECK-NEXT: bne 0, .LBB1_21
1371 ; CHECK-NEXT: # %bb.22: # %entry
1372 ; CHECK-NEXT: lwsync
1373 ; CHECK-NEXT: sth 23, ss@toc@l(7)
1375 ; CHECK-NEXT: .LBB1_23: # %entry
1377 ; CHECK-NEXT: lharx 23, 0, 0
1378 ; CHECK-NEXT: sub 22, 23, 3
1379 ; CHECK-NEXT: sthcx. 22, 0, 0
1380 ; CHECK-NEXT: bne 0, .LBB1_23
1381 ; CHECK-NEXT: # %bb.24: # %entry
1382 ; CHECK-NEXT: lwsync
1383 ; CHECK-NEXT: sth 23, us@toc@l(9)
1385 ; CHECK-NEXT: .LBB1_25: # %entry
1387 ; CHECK-NEXT: lwarx 23, 0, 29
1388 ; CHECK-NEXT: sub 22, 23, 3
1389 ; CHECK-NEXT: stwcx. 22, 0, 29
1390 ; CHECK-NEXT: bne 0, .LBB1_25
1391 ; CHECK-NEXT: # %bb.26: # %entry
1392 ; CHECK-NEXT: lwsync
1393 ; CHECK-NEXT: stw 23, si@toc@l(12)
1395 ; CHECK-NEXT: .LBB1_27: # %entry
1397 ; CHECK-NEXT: lwarx 23, 0, 27
1398 ; CHECK-NEXT: sub 22, 23, 3
1399 ; CHECK-NEXT: stwcx. 22, 0, 27
1400 ; CHECK-NEXT: bne 0, .LBB1_27
1401 ; CHECK-NEXT: # %bb.28: # %entry
1402 ; CHECK-NEXT: lwsync
1403 ; CHECK-NEXT: stw 23, ui@toc@l(30)
1405 ; CHECK-NEXT: .LBB1_29: # %entry
1407 ; CHECK-NEXT: ldarx 23, 0, 25
1408 ; CHECK-NEXT: sub 22, 23, 11
1409 ; CHECK-NEXT: stdcx. 22, 0, 25
1410 ; CHECK-NEXT: bne 0, .LBB1_29
1411 ; CHECK-NEXT: # %bb.30: # %entry
1412 ; CHECK-NEXT: lwsync
1413 ; CHECK-NEXT: std 23, sll@toc@l(28)
1415 ; CHECK-NEXT: .LBB1_31: # %entry
1417 ; CHECK-NEXT: ldarx 23, 0, 24
1418 ; CHECK-NEXT: sub 22, 23, 11
1419 ; CHECK-NEXT: stdcx. 22, 0, 24
1420 ; CHECK-NEXT: bne 0, .LBB1_31
1421 ; CHECK-NEXT: # %bb.32: # %entry
1422 ; CHECK-NEXT: lwsync
1423 ; CHECK-NEXT: std 23, ull@toc@l(26)
1425 ; CHECK-NEXT: .LBB1_33: # %entry
1427 ; CHECK-NEXT: lbarx 23, 0, 6
1428 ; CHECK-NEXT: ori 22, 23, 11
1429 ; CHECK-NEXT: stbcx. 22, 0, 6
1430 ; CHECK-NEXT: bne 0, .LBB1_33
1431 ; CHECK-NEXT: # %bb.34: # %entry
1432 ; CHECK-NEXT: lwsync
1433 ; CHECK-NEXT: stb 23, sc@toc@l(4)
1435 ; CHECK-NEXT: .LBB1_35: # %entry
1437 ; CHECK-NEXT: lbarx 23, 0, 8
1438 ; CHECK-NEXT: ori 22, 23, 11
1439 ; CHECK-NEXT: stbcx. 22, 0, 8
1440 ; CHECK-NEXT: bne 0, .LBB1_35
1441 ; CHECK-NEXT: # %bb.36: # %entry
1442 ; CHECK-NEXT: lwsync
1443 ; CHECK-NEXT: stb 23, uc@toc@l(5)
1445 ; CHECK-NEXT: .LBB1_37: # %entry
1447 ; CHECK-NEXT: lharx 23, 0, 10
1448 ; CHECK-NEXT: ori 22, 23, 11
1449 ; CHECK-NEXT: sthcx. 22, 0, 10
1450 ; CHECK-NEXT: bne 0, .LBB1_37
1451 ; CHECK-NEXT: # %bb.38: # %entry
1452 ; CHECK-NEXT: lwsync
1453 ; CHECK-NEXT: sth 23, ss@toc@l(7)
1455 ; CHECK-NEXT: .LBB1_39: # %entry
1457 ; CHECK-NEXT: lharx 23, 0, 0
1458 ; CHECK-NEXT: ori 22, 23, 11
1459 ; CHECK-NEXT: sthcx. 22, 0, 0
1460 ; CHECK-NEXT: bne 0, .LBB1_39
1461 ; CHECK-NEXT: # %bb.40: # %entry
1462 ; CHECK-NEXT: lwsync
1463 ; CHECK-NEXT: sth 23, us@toc@l(9)
1465 ; CHECK-NEXT: .LBB1_41: # %entry
1467 ; CHECK-NEXT: lwarx 23, 0, 29
1468 ; CHECK-NEXT: ori 22, 23, 11
1469 ; CHECK-NEXT: stwcx. 22, 0, 29
1470 ; CHECK-NEXT: bne 0, .LBB1_41
1471 ; CHECK-NEXT: # %bb.42: # %entry
1472 ; CHECK-NEXT: lwsync
1473 ; CHECK-NEXT: stw 23, si@toc@l(12)
1475 ; CHECK-NEXT: .LBB1_43: # %entry
1477 ; CHECK-NEXT: lwarx 23, 0, 27
1478 ; CHECK-NEXT: ori 22, 23, 11
1479 ; CHECK-NEXT: stwcx. 22, 0, 27
1480 ; CHECK-NEXT: bne 0, .LBB1_43
1481 ; CHECK-NEXT: # %bb.44: # %entry
1482 ; CHECK-NEXT: lwsync
1483 ; CHECK-NEXT: stw 23, ui@toc@l(30)
1485 ; CHECK-NEXT: .LBB1_45: # %entry
1487 ; CHECK-NEXT: ldarx 23, 0, 25
1488 ; CHECK-NEXT: ori 22, 23, 11
1489 ; CHECK-NEXT: stdcx. 22, 0, 25
1490 ; CHECK-NEXT: bne 0, .LBB1_45
1491 ; CHECK-NEXT: # %bb.46: # %entry
1492 ; CHECK-NEXT: lwsync
1493 ; CHECK-NEXT: std 23, sll@toc@l(28)
1495 ; CHECK-NEXT: .LBB1_47: # %entry
1497 ; CHECK-NEXT: ldarx 23, 0, 24
1498 ; CHECK-NEXT: ori 22, 23, 11
1499 ; CHECK-NEXT: stdcx. 22, 0, 24
1500 ; CHECK-NEXT: bne 0, .LBB1_47
1501 ; CHECK-NEXT: # %bb.48: # %entry
1502 ; CHECK-NEXT: lwsync
1503 ; CHECK-NEXT: std 23, ull@toc@l(26)
1505 ; CHECK-NEXT: .LBB1_49: # %entry
1507 ; CHECK-NEXT: lbarx 23, 0, 6
1508 ; CHECK-NEXT: xori 22, 23, 11
1509 ; CHECK-NEXT: stbcx. 22, 0, 6
1510 ; CHECK-NEXT: bne 0, .LBB1_49
1511 ; CHECK-NEXT: # %bb.50: # %entry
1512 ; CHECK-NEXT: lwsync
1513 ; CHECK-NEXT: stb 23, sc@toc@l(4)
1515 ; CHECK-NEXT: .LBB1_51: # %entry
1517 ; CHECK-NEXT: lbarx 23, 0, 8
1518 ; CHECK-NEXT: xori 22, 23, 11
1519 ; CHECK-NEXT: stbcx. 22, 0, 8
1520 ; CHECK-NEXT: bne 0, .LBB1_51
1521 ; CHECK-NEXT: # %bb.52: # %entry
1522 ; CHECK-NEXT: lwsync
1523 ; CHECK-NEXT: stb 23, uc@toc@l(5)
1525 ; CHECK-NEXT: .LBB1_53: # %entry
1527 ; CHECK-NEXT: lharx 23, 0, 10
1528 ; CHECK-NEXT: xori 22, 23, 11
1529 ; CHECK-NEXT: sthcx. 22, 0, 10
1530 ; CHECK-NEXT: bne 0, .LBB1_53
1531 ; CHECK-NEXT: # %bb.54: # %entry
1532 ; CHECK-NEXT: lwsync
1533 ; CHECK-NEXT: sth 23, ss@toc@l(7)
1535 ; CHECK-NEXT: .LBB1_55: # %entry
1537 ; CHECK-NEXT: lharx 23, 0, 0
1538 ; CHECK-NEXT: xori 22, 23, 11
1539 ; CHECK-NEXT: sthcx. 22, 0, 0
1540 ; CHECK-NEXT: bne 0, .LBB1_55
1541 ; CHECK-NEXT: # %bb.56: # %entry
1542 ; CHECK-NEXT: lwsync
1543 ; CHECK-NEXT: sth 23, us@toc@l(9)
1545 ; CHECK-NEXT: .LBB1_57: # %entry
1547 ; CHECK-NEXT: lwarx 23, 0, 29
1548 ; CHECK-NEXT: xori 22, 23, 11
1549 ; CHECK-NEXT: stwcx. 22, 0, 29
1550 ; CHECK-NEXT: bne 0, .LBB1_57
1551 ; CHECK-NEXT: # %bb.58: # %entry
1552 ; CHECK-NEXT: lwsync
1553 ; CHECK-NEXT: stw 23, si@toc@l(12)
1555 ; CHECK-NEXT: .LBB1_59: # %entry
1557 ; CHECK-NEXT: lwarx 23, 0, 27
1558 ; CHECK-NEXT: xori 22, 23, 11
1559 ; CHECK-NEXT: stwcx. 22, 0, 27
1560 ; CHECK-NEXT: bne 0, .LBB1_59
1561 ; CHECK-NEXT: # %bb.60: # %entry
1562 ; CHECK-NEXT: lwsync
1563 ; CHECK-NEXT: stw 23, ui@toc@l(30)
1565 ; CHECK-NEXT: .LBB1_61: # %entry
1567 ; CHECK-NEXT: ldarx 23, 0, 25
1568 ; CHECK-NEXT: xori 22, 23, 11
1569 ; CHECK-NEXT: stdcx. 22, 0, 25
1570 ; CHECK-NEXT: bne 0, .LBB1_61
1571 ; CHECK-NEXT: # %bb.62: # %entry
1572 ; CHECK-NEXT: lwsync
1573 ; CHECK-NEXT: std 23, sll@toc@l(28)
1575 ; CHECK-NEXT: .LBB1_63: # %entry
1577 ; CHECK-NEXT: ldarx 23, 0, 24
1578 ; CHECK-NEXT: xori 22, 23, 11
1579 ; CHECK-NEXT: stdcx. 22, 0, 24
1580 ; CHECK-NEXT: bne 0, .LBB1_63
1581 ; CHECK-NEXT: # %bb.64: # %entry
1582 ; CHECK-NEXT: lwsync
1583 ; CHECK-NEXT: std 23, ull@toc@l(26)
1585 ; CHECK-NEXT: .LBB1_65: # %entry
1587 ; CHECK-NEXT: lbarx 23, 0, 6
1588 ; CHECK-NEXT: nand 22, 3, 23
1589 ; CHECK-NEXT: stbcx. 22, 0, 6
1590 ; CHECK-NEXT: bne 0, .LBB1_65
1591 ; CHECK-NEXT: # %bb.66: # %entry
1592 ; CHECK-NEXT: lwsync
1593 ; CHECK-NEXT: stb 23, sc@toc@l(4)
1595 ; CHECK-NEXT: .LBB1_67: # %entry
1597 ; CHECK-NEXT: lbarx 23, 0, 8
1598 ; CHECK-NEXT: nand 22, 3, 23
1599 ; CHECK-NEXT: stbcx. 22, 0, 8
1600 ; CHECK-NEXT: bne 0, .LBB1_67
1601 ; CHECK-NEXT: # %bb.68: # %entry
1602 ; CHECK-NEXT: lwsync
1603 ; CHECK-NEXT: stb 23, uc@toc@l(5)
1605 ; CHECK-NEXT: .LBB1_69: # %entry
1607 ; CHECK-NEXT: lharx 23, 0, 10
1608 ; CHECK-NEXT: nand 22, 3, 23
1609 ; CHECK-NEXT: sthcx. 22, 0, 10
1610 ; CHECK-NEXT: bne 0, .LBB1_69
1611 ; CHECK-NEXT: # %bb.70: # %entry
1612 ; CHECK-NEXT: lwsync
1613 ; CHECK-NEXT: sth 23, ss@toc@l(7)
1615 ; CHECK-NEXT: .LBB1_71: # %entry
1617 ; CHECK-NEXT: lharx 23, 0, 0
1618 ; CHECK-NEXT: nand 22, 3, 23
1619 ; CHECK-NEXT: sthcx. 22, 0, 0
1620 ; CHECK-NEXT: bne 0, .LBB1_71
1621 ; CHECK-NEXT: # %bb.72: # %entry
1622 ; CHECK-NEXT: lwsync
1623 ; CHECK-NEXT: sth 23, us@toc@l(9)
1625 ; CHECK-NEXT: .LBB1_73: # %entry
1627 ; CHECK-NEXT: lwarx 23, 0, 29
1628 ; CHECK-NEXT: nand 22, 3, 23
1629 ; CHECK-NEXT: stwcx. 22, 0, 29
1630 ; CHECK-NEXT: bne 0, .LBB1_73
1631 ; CHECK-NEXT: # %bb.74: # %entry
1632 ; CHECK-NEXT: lwsync
1633 ; CHECK-NEXT: stw 23, si@toc@l(12)
1635 ; CHECK-NEXT: .LBB1_75: # %entry
1637 ; CHECK-NEXT: lwarx 23, 0, 27
1638 ; CHECK-NEXT: nand 22, 3, 23
1639 ; CHECK-NEXT: stwcx. 22, 0, 27
1640 ; CHECK-NEXT: bne 0, .LBB1_75
1641 ; CHECK-NEXT: # %bb.76: # %entry
1642 ; CHECK-NEXT: lwsync
1643 ; CHECK-NEXT: stw 23, ui@toc@l(30)
1645 ; CHECK-NEXT: .LBB1_77: # %entry
1647 ; CHECK-NEXT: ldarx 23, 0, 25
1648 ; CHECK-NEXT: nand 22, 11, 23
1649 ; CHECK-NEXT: stdcx. 22, 0, 25
1650 ; CHECK-NEXT: bne 0, .LBB1_77
1651 ; CHECK-NEXT: # %bb.78: # %entry
1652 ; CHECK-NEXT: lwsync
1653 ; CHECK-NEXT: std 23, sll@toc@l(28)
1655 ; CHECK-NEXT: .LBB1_79: # %entry
1657 ; CHECK-NEXT: ldarx 23, 0, 24
1658 ; CHECK-NEXT: nand 22, 11, 23
1659 ; CHECK-NEXT: stdcx. 22, 0, 24
1660 ; CHECK-NEXT: bne 0, .LBB1_79
1661 ; CHECK-NEXT: # %bb.80: # %entry
1662 ; CHECK-NEXT: lwsync
1663 ; CHECK-NEXT: std 23, ull@toc@l(26)
1665 ; CHECK-NEXT: .LBB1_81: # %entry
1667 ; CHECK-NEXT: lbarx 23, 0, 6
1668 ; CHECK-NEXT: and 22, 3, 23
1669 ; CHECK-NEXT: stbcx. 22, 0, 6
1670 ; CHECK-NEXT: bne 0, .LBB1_81
1671 ; CHECK-NEXT: # %bb.82: # %entry
1672 ; CHECK-NEXT: lwsync
1673 ; CHECK-NEXT: stb 23, sc@toc@l(4)
1675 ; CHECK-NEXT: .LBB1_83: # %entry
1677 ; CHECK-NEXT: lbarx 4, 0, 8
1678 ; CHECK-NEXT: and 6, 3, 4
1679 ; CHECK-NEXT: stbcx. 6, 0, 8
1680 ; CHECK-NEXT: bne 0, .LBB1_83
1681 ; CHECK-NEXT: # %bb.84: # %entry
1682 ; CHECK-NEXT: lwsync
1683 ; CHECK-NEXT: stb 4, uc@toc@l(5)
1685 ; CHECK-NEXT: .LBB1_85: # %entry
1687 ; CHECK-NEXT: lharx 4, 0, 10
1688 ; CHECK-NEXT: and 5, 3, 4
1689 ; CHECK-NEXT: sthcx. 5, 0, 10
1690 ; CHECK-NEXT: bne 0, .LBB1_85
1691 ; CHECK-NEXT: # %bb.86: # %entry
1692 ; CHECK-NEXT: lwsync
1693 ; CHECK-NEXT: sth 4, ss@toc@l(7)
1695 ; CHECK-NEXT: .LBB1_87: # %entry
1697 ; CHECK-NEXT: lharx 4, 0, 0
1698 ; CHECK-NEXT: and 5, 3, 4
1699 ; CHECK-NEXT: sthcx. 5, 0, 0
1700 ; CHECK-NEXT: bne 0, .LBB1_87
1701 ; CHECK-NEXT: # %bb.88: # %entry
1702 ; CHECK-NEXT: lwsync
1703 ; CHECK-NEXT: sth 4, us@toc@l(9)
1705 ; CHECK-NEXT: .LBB1_89: # %entry
1707 ; CHECK-NEXT: lwarx 4, 0, 29
1708 ; CHECK-NEXT: and 5, 3, 4
1709 ; CHECK-NEXT: stwcx. 5, 0, 29
1710 ; CHECK-NEXT: bne 0, .LBB1_89
1711 ; CHECK-NEXT: # %bb.90: # %entry
1712 ; CHECK-NEXT: lwsync
1713 ; CHECK-NEXT: stw 4, si@toc@l(12)
1715 ; CHECK-NEXT: .LBB1_91: # %entry
1717 ; CHECK-NEXT: lwarx 4, 0, 27
1718 ; CHECK-NEXT: and 5, 3, 4
1719 ; CHECK-NEXT: stwcx. 5, 0, 27
1720 ; CHECK-NEXT: bne 0, .LBB1_91
1721 ; CHECK-NEXT: # %bb.92: # %entry
1722 ; CHECK-NEXT: lwsync
1723 ; CHECK-NEXT: stw 4, ui@toc@l(30)
1725 ; CHECK-NEXT: .LBB1_93: # %entry
1727 ; CHECK-NEXT: ldarx 3, 0, 25
1728 ; CHECK-NEXT: and 4, 11, 3
1729 ; CHECK-NEXT: stdcx. 4, 0, 25
1730 ; CHECK-NEXT: bne 0, .LBB1_93
1731 ; CHECK-NEXT: # %bb.94: # %entry
1732 ; CHECK-NEXT: lwsync
1733 ; CHECK-NEXT: std 3, sll@toc@l(28)
1735 ; CHECK-NEXT: .LBB1_95: # %entry
1737 ; CHECK-NEXT: ldarx 3, 0, 24
1738 ; CHECK-NEXT: and 4, 11, 3
1739 ; CHECK-NEXT: stdcx. 4, 0, 24
1740 ; CHECK-NEXT: bne 0, .LBB1_95
1741 ; CHECK-NEXT: # %bb.96: # %entry
1742 ; CHECK-NEXT: lwsync
1743 ; CHECK-NEXT: std 3, ull@toc@l(26)
1744 ; CHECK-NEXT: ld 30, -16(1) # 8-byte Folded Reload
1745 ; CHECK-NEXT: ld 29, -24(1) # 8-byte Folded Reload
1746 ; CHECK-NEXT: ld 28, -32(1) # 8-byte Folded Reload
1747 ; CHECK-NEXT: ld 27, -40(1) # 8-byte Folded Reload
1748 ; CHECK-NEXT: ld 26, -48(1) # 8-byte Folded Reload
1749 ; CHECK-NEXT: ld 25, -56(1) # 8-byte Folded Reload
1750 ; CHECK-NEXT: ld 24, -64(1) # 8-byte Folded Reload
1751 ; CHECK-NEXT: ld 23, -72(1) # 8-byte Folded Reload
1752 ; CHECK-NEXT: ld 22, -80(1) # 8-byte Folded Reload
1755 ; AIX32-LABEL: test_fetch_and_op:
1756 ; AIX32: # %bb.0: # %entry
1757 ; AIX32-NEXT: mflr 0
1758 ; AIX32-NEXT: stwu 1, -144(1)
1759 ; AIX32-NEXT: lwz 4, L..C0(2) # @sc
1760 ; AIX32-NEXT: stw 0, 152(1)
1761 ; AIX32-NEXT: li 7, 11
1762 ; AIX32-NEXT: stw 26, 120(1) # 4-byte Folded Spill
1763 ; AIX32-NEXT: stw 13, 68(1) # 4-byte Folded Spill
1764 ; AIX32-NEXT: stw 14, 72(1) # 4-byte Folded Spill
1765 ; AIX32-NEXT: stw 15, 76(1) # 4-byte Folded Spill
1766 ; AIX32-NEXT: rlwinm 3, 4, 3, 27, 28
1767 ; AIX32-NEXT: stw 16, 80(1) # 4-byte Folded Spill
1768 ; AIX32-NEXT: stw 17, 84(1) # 4-byte Folded Spill
1769 ; AIX32-NEXT: stw 18, 88(1) # 4-byte Folded Spill
1770 ; AIX32-NEXT: xori 26, 3, 24
1771 ; AIX32-NEXT: li 3, 255
1772 ; AIX32-NEXT: slw 3, 3, 26
1773 ; AIX32-NEXT: stw 19, 92(1) # 4-byte Folded Spill
1774 ; AIX32-NEXT: stw 20, 96(1) # 4-byte Folded Spill
1775 ; AIX32-NEXT: stw 21, 100(1) # 4-byte Folded Spill
1776 ; AIX32-NEXT: stw 22, 104(1) # 4-byte Folded Spill
1777 ; AIX32-NEXT: stw 23, 108(1) # 4-byte Folded Spill
1778 ; AIX32-NEXT: stw 24, 112(1) # 4-byte Folded Spill
1779 ; AIX32-NEXT: stw 25, 116(1) # 4-byte Folded Spill
1780 ; AIX32-NEXT: stw 27, 124(1) # 4-byte Folded Spill
1781 ; AIX32-NEXT: stw 28, 128(1) # 4-byte Folded Spill
1782 ; AIX32-NEXT: stw 29, 132(1) # 4-byte Folded Spill
1783 ; AIX32-NEXT: stw 30, 136(1) # 4-byte Folded Spill
1784 ; AIX32-NEXT: stw 31, 140(1) # 4-byte Folded Spill
1786 ; AIX32-NEXT: rlwinm 25, 4, 0, 0, 29
1787 ; AIX32-NEXT: slw 24, 7, 26
1788 ; AIX32-NEXT: stw 4, 64(1) # 4-byte Folded Spill
1789 ; AIX32-NEXT: L..BB1_1: # %entry
1791 ; AIX32-NEXT: lwarx 4, 0, 25
1792 ; AIX32-NEXT: add 5, 24, 4
1793 ; AIX32-NEXT: andc 6, 4, 3
1794 ; AIX32-NEXT: and 5, 5, 3
1795 ; AIX32-NEXT: or 5, 5, 6
1796 ; AIX32-NEXT: stwcx. 5, 0, 25
1797 ; AIX32-NEXT: bne 0, L..BB1_1
1798 ; AIX32-NEXT: # %bb.2: # %entry
1799 ; AIX32-NEXT: srw 3, 4, 26
1800 ; AIX32-NEXT: lwsync
1801 ; AIX32-NEXT: lwz 27, L..C1(2) # @uc
1802 ; AIX32-NEXT: lwz 4, 64(1) # 4-byte Folded Reload
1803 ; AIX32-NEXT: clrlwi 3, 3, 24
1804 ; AIX32-NEXT: rlwinm 21, 27, 0, 0, 29
1805 ; AIX32-NEXT: stb 3, 0(4)
1806 ; AIX32-NEXT: rlwinm 3, 27, 3, 27, 28
1808 ; AIX32-NEXT: xori 22, 3, 24
1809 ; AIX32-NEXT: li 3, 255
1810 ; AIX32-NEXT: slw 20, 7, 22
1811 ; AIX32-NEXT: slw 3, 3, 22
1812 ; AIX32-NEXT: L..BB1_3: # %entry
1814 ; AIX32-NEXT: lwarx 4, 0, 21
1815 ; AIX32-NEXT: add 5, 20, 4
1816 ; AIX32-NEXT: andc 6, 4, 3
1817 ; AIX32-NEXT: and 5, 5, 3
1818 ; AIX32-NEXT: or 5, 5, 6
1819 ; AIX32-NEXT: stwcx. 5, 0, 21
1820 ; AIX32-NEXT: bne 0, L..BB1_3
1821 ; AIX32-NEXT: # %bb.4: # %entry
1822 ; AIX32-NEXT: srw 3, 4, 22
1823 ; AIX32-NEXT: lwz 23, L..C2(2) # @ss
1824 ; AIX32-NEXT: lwsync
1825 ; AIX32-NEXT: clrlwi 3, 3, 24
1826 ; AIX32-NEXT: rlwinm 17, 23, 0, 0, 29
1827 ; AIX32-NEXT: stb 3, 0(27)
1829 ; AIX32-NEXT: rlwinm 3, 23, 3, 27, 27
1830 ; AIX32-NEXT: xori 18, 3, 16
1831 ; AIX32-NEXT: li 3, 0
1832 ; AIX32-NEXT: ori 3, 3, 65535
1833 ; AIX32-NEXT: slw 16, 7, 18
1834 ; AIX32-NEXT: slw 3, 3, 18
1835 ; AIX32-NEXT: L..BB1_5: # %entry
1837 ; AIX32-NEXT: lwarx 4, 0, 17
1838 ; AIX32-NEXT: add 5, 16, 4
1839 ; AIX32-NEXT: andc 6, 4, 3
1840 ; AIX32-NEXT: and 5, 5, 3
1841 ; AIX32-NEXT: or 5, 5, 6
1842 ; AIX32-NEXT: stwcx. 5, 0, 17
1843 ; AIX32-NEXT: bne 0, L..BB1_5
1844 ; AIX32-NEXT: # %bb.6: # %entry
1845 ; AIX32-NEXT: srw 3, 4, 18
1846 ; AIX32-NEXT: lwz 19, L..C3(2) # @us
1847 ; AIX32-NEXT: lwsync
1848 ; AIX32-NEXT: clrlwi 3, 3, 16
1849 ; AIX32-NEXT: rlwinm 14, 19, 0, 0, 29
1850 ; AIX32-NEXT: sth 3, 0(23)
1852 ; AIX32-NEXT: rlwinm 3, 19, 3, 27, 27
1853 ; AIX32-NEXT: xori 15, 3, 16
1854 ; AIX32-NEXT: li 3, 0
1855 ; AIX32-NEXT: ori 3, 3, 65535
1856 ; AIX32-NEXT: slw 13, 7, 15
1857 ; AIX32-NEXT: slw 3, 3, 15
1858 ; AIX32-NEXT: L..BB1_7: # %entry
1860 ; AIX32-NEXT: lwarx 4, 0, 14
1861 ; AIX32-NEXT: add 5, 13, 4
1862 ; AIX32-NEXT: andc 6, 4, 3
1863 ; AIX32-NEXT: and 5, 5, 3
1864 ; AIX32-NEXT: or 5, 5, 6
1865 ; AIX32-NEXT: stwcx. 5, 0, 14
1866 ; AIX32-NEXT: bne 0, L..BB1_7
1867 ; AIX32-NEXT: # %bb.8: # %entry
1868 ; AIX32-NEXT: srw 3, 4, 15
1869 ; AIX32-NEXT: lwsync
1870 ; AIX32-NEXT: lwz 29, L..C4(2) # @si
1871 ; AIX32-NEXT: clrlwi 3, 3, 16
1872 ; AIX32-NEXT: sth 3, 0(19)
1874 ; AIX32-NEXT: L..BB1_9: # %entry
1876 ; AIX32-NEXT: lwarx 3, 0, 29
1877 ; AIX32-NEXT: addi 4, 3, 11
1878 ; AIX32-NEXT: stwcx. 4, 0, 29
1879 ; AIX32-NEXT: bne 0, L..BB1_9
1880 ; AIX32-NEXT: # %bb.10: # %entry
1881 ; AIX32-NEXT: lwsync
1882 ; AIX32-NEXT: stw 3, 0(29)
1883 ; AIX32-NEXT: lwz 28, L..C5(2) # @ui
1885 ; AIX32-NEXT: L..BB1_11: # %entry
1887 ; AIX32-NEXT: lwarx 3, 0, 28
1888 ; AIX32-NEXT: addi 4, 3, 11
1889 ; AIX32-NEXT: stwcx. 4, 0, 28
1890 ; AIX32-NEXT: bne 0, L..BB1_11
1891 ; AIX32-NEXT: # %bb.12: # %entry
1892 ; AIX32-NEXT: lwz 31, L..C6(2) # @sll
1893 ; AIX32-NEXT: lwsync
1894 ; AIX32-NEXT: li 4, 0
1895 ; AIX32-NEXT: li 5, 11
1896 ; AIX32-NEXT: li 6, 5
1897 ; AIX32-NEXT: stw 3, 0(28)
1898 ; AIX32-NEXT: mr 3, 31
1899 ; AIX32-NEXT: bl .__atomic_fetch_add_8[PR]
1901 ; AIX32-NEXT: lwz 30, L..C7(2) # @ull
1902 ; AIX32-NEXT: stw 4, 4(31)
1903 ; AIX32-NEXT: li 4, 0
1904 ; AIX32-NEXT: li 5, 11
1905 ; AIX32-NEXT: li 6, 5
1906 ; AIX32-NEXT: stw 3, 0(31)
1907 ; AIX32-NEXT: mr 3, 30
1908 ; AIX32-NEXT: bl .__atomic_fetch_add_8[PR]
1910 ; AIX32-NEXT: stw 3, 0(30)
1911 ; AIX32-NEXT: li 3, 255
1912 ; AIX32-NEXT: stw 4, 4(30)
1914 ; AIX32-NEXT: slw 3, 3, 26
1915 ; AIX32-NEXT: L..BB1_13: # %entry
1917 ; AIX32-NEXT: lwarx 4, 0, 25
1918 ; AIX32-NEXT: sub 5, 4, 24
1919 ; AIX32-NEXT: andc 6, 4, 3
1920 ; AIX32-NEXT: and 5, 5, 3
1921 ; AIX32-NEXT: or 5, 5, 6
1922 ; AIX32-NEXT: stwcx. 5, 0, 25
1923 ; AIX32-NEXT: bne 0, L..BB1_13
1924 ; AIX32-NEXT: # %bb.14: # %entry
1925 ; AIX32-NEXT: srw 3, 4, 26
1926 ; AIX32-NEXT: lwsync
1927 ; AIX32-NEXT: lwz 4, 64(1) # 4-byte Folded Reload
1928 ; AIX32-NEXT: clrlwi 3, 3, 24
1929 ; AIX32-NEXT: stb 3, 0(4)
1930 ; AIX32-NEXT: li 3, 255
1932 ; AIX32-NEXT: slw 3, 3, 22
1933 ; AIX32-NEXT: L..BB1_15: # %entry
1935 ; AIX32-NEXT: lwarx 4, 0, 21
1936 ; AIX32-NEXT: sub 5, 4, 20
1937 ; AIX32-NEXT: andc 6, 4, 3
1938 ; AIX32-NEXT: and 5, 5, 3
1939 ; AIX32-NEXT: or 5, 5, 6
1940 ; AIX32-NEXT: stwcx. 5, 0, 21
1941 ; AIX32-NEXT: bne 0, L..BB1_15
1942 ; AIX32-NEXT: # %bb.16: # %entry
1943 ; AIX32-NEXT: srw 3, 4, 22
1944 ; AIX32-NEXT: lwsync
1945 ; AIX32-NEXT: li 7, 11
1946 ; AIX32-NEXT: clrlwi 3, 3, 24
1947 ; AIX32-NEXT: stb 3, 0(27)
1949 ; AIX32-NEXT: li 3, 0
1950 ; AIX32-NEXT: ori 3, 3, 65535
1951 ; AIX32-NEXT: slw 3, 3, 18
1952 ; AIX32-NEXT: L..BB1_17: # %entry
1954 ; AIX32-NEXT: lwarx 4, 0, 17
1955 ; AIX32-NEXT: sub 5, 4, 16
1956 ; AIX32-NEXT: andc 6, 4, 3
1957 ; AIX32-NEXT: and 5, 5, 3
1958 ; AIX32-NEXT: or 5, 5, 6
1959 ; AIX32-NEXT: stwcx. 5, 0, 17
1960 ; AIX32-NEXT: bne 0, L..BB1_17
1961 ; AIX32-NEXT: # %bb.18: # %entry
1962 ; AIX32-NEXT: srw 3, 4, 18
1963 ; AIX32-NEXT: lwsync
1964 ; AIX32-NEXT: clrlwi 3, 3, 16
1965 ; AIX32-NEXT: sth 3, 0(23)
1966 ; AIX32-NEXT: li 3, 0
1968 ; AIX32-NEXT: ori 3, 3, 65535
1969 ; AIX32-NEXT: slw 3, 3, 15
1970 ; AIX32-NEXT: L..BB1_19: # %entry
1972 ; AIX32-NEXT: lwarx 4, 0, 14
1973 ; AIX32-NEXT: sub 5, 4, 13
1974 ; AIX32-NEXT: andc 6, 4, 3
1975 ; AIX32-NEXT: and 5, 5, 3
1976 ; AIX32-NEXT: or 5, 5, 6
1977 ; AIX32-NEXT: stwcx. 5, 0, 14
1978 ; AIX32-NEXT: bne 0, L..BB1_19
1979 ; AIX32-NEXT: # %bb.20: # %entry
1980 ; AIX32-NEXT: srw 3, 4, 15
1981 ; AIX32-NEXT: lwsync
1982 ; AIX32-NEXT: clrlwi 3, 3, 16
1983 ; AIX32-NEXT: sth 3, 0(19)
1985 ; AIX32-NEXT: L..BB1_21: # %entry
1987 ; AIX32-NEXT: lwarx 3, 0, 29
1988 ; AIX32-NEXT: sub 4, 3, 7
1989 ; AIX32-NEXT: stwcx. 4, 0, 29
1990 ; AIX32-NEXT: bne 0, L..BB1_21
1991 ; AIX32-NEXT: # %bb.22: # %entry
1992 ; AIX32-NEXT: lwsync
1993 ; AIX32-NEXT: stw 3, 0(29)
1995 ; AIX32-NEXT: L..BB1_23: # %entry
1997 ; AIX32-NEXT: lwarx 3, 0, 28
1998 ; AIX32-NEXT: sub 4, 3, 7
1999 ; AIX32-NEXT: stwcx. 4, 0, 28
2000 ; AIX32-NEXT: bne 0, L..BB1_23
2001 ; AIX32-NEXT: # %bb.24: # %entry
2002 ; AIX32-NEXT: lwsync
2003 ; AIX32-NEXT: li 4, 0
2004 ; AIX32-NEXT: li 5, 11
2005 ; AIX32-NEXT: li 6, 5
2006 ; AIX32-NEXT: stw 3, 0(28)
2007 ; AIX32-NEXT: mr 3, 31
2008 ; AIX32-NEXT: bl .__atomic_fetch_sub_8[PR]
2010 ; AIX32-NEXT: stw 4, 4(31)
2011 ; AIX32-NEXT: li 4, 0
2012 ; AIX32-NEXT: li 5, 11
2013 ; AIX32-NEXT: li 6, 5
2014 ; AIX32-NEXT: stw 3, 0(31)
2015 ; AIX32-NEXT: mr 3, 30
2016 ; AIX32-NEXT: bl .__atomic_fetch_sub_8[PR]
2018 ; AIX32-NEXT: stw 3, 0(30)
2019 ; AIX32-NEXT: li 3, 255
2020 ; AIX32-NEXT: stw 4, 4(30)
2022 ; AIX32-NEXT: slw 3, 3, 26
2023 ; AIX32-NEXT: L..BB1_25: # %entry
2025 ; AIX32-NEXT: lwarx 4, 0, 25
2026 ; AIX32-NEXT: or 5, 24, 4
2027 ; AIX32-NEXT: andc 6, 4, 3
2028 ; AIX32-NEXT: and 5, 5, 3
2029 ; AIX32-NEXT: or 5, 5, 6
2030 ; AIX32-NEXT: stwcx. 5, 0, 25
2031 ; AIX32-NEXT: bne 0, L..BB1_25
2032 ; AIX32-NEXT: # %bb.26: # %entry
2033 ; AIX32-NEXT: srw 3, 4, 26
2034 ; AIX32-NEXT: lwsync
2035 ; AIX32-NEXT: lwz 4, 64(1) # 4-byte Folded Reload
2036 ; AIX32-NEXT: clrlwi 3, 3, 24
2037 ; AIX32-NEXT: stb 3, 0(4)
2038 ; AIX32-NEXT: li 3, 255
2040 ; AIX32-NEXT: slw 3, 3, 22
2041 ; AIX32-NEXT: L..BB1_27: # %entry
2043 ; AIX32-NEXT: lwarx 4, 0, 21
2044 ; AIX32-NEXT: or 5, 20, 4
2045 ; AIX32-NEXT: andc 6, 4, 3
2046 ; AIX32-NEXT: and 5, 5, 3
2047 ; AIX32-NEXT: or 5, 5, 6
2048 ; AIX32-NEXT: stwcx. 5, 0, 21
2049 ; AIX32-NEXT: bne 0, L..BB1_27
2050 ; AIX32-NEXT: # %bb.28: # %entry
2051 ; AIX32-NEXT: srw 3, 4, 22
2052 ; AIX32-NEXT: lwsync
2053 ; AIX32-NEXT: clrlwi 3, 3, 24
2054 ; AIX32-NEXT: stb 3, 0(27)
2055 ; AIX32-NEXT: li 3, 0
2057 ; AIX32-NEXT: ori 3, 3, 65535
2058 ; AIX32-NEXT: slw 3, 3, 18
2059 ; AIX32-NEXT: L..BB1_29: # %entry
2061 ; AIX32-NEXT: lwarx 4, 0, 17
2062 ; AIX32-NEXT: or 5, 16, 4
2063 ; AIX32-NEXT: andc 6, 4, 3
2064 ; AIX32-NEXT: and 5, 5, 3
2065 ; AIX32-NEXT: or 5, 5, 6
2066 ; AIX32-NEXT: stwcx. 5, 0, 17
2067 ; AIX32-NEXT: bne 0, L..BB1_29
2068 ; AIX32-NEXT: # %bb.30: # %entry
2069 ; AIX32-NEXT: srw 3, 4, 18
2070 ; AIX32-NEXT: lwsync
2071 ; AIX32-NEXT: clrlwi 3, 3, 16
2072 ; AIX32-NEXT: sth 3, 0(23)
2073 ; AIX32-NEXT: li 3, 0
2075 ; AIX32-NEXT: ori 3, 3, 65535
2076 ; AIX32-NEXT: slw 3, 3, 15
2077 ; AIX32-NEXT: L..BB1_31: # %entry
2079 ; AIX32-NEXT: lwarx 4, 0, 14
2080 ; AIX32-NEXT: or 5, 13, 4
2081 ; AIX32-NEXT: andc 6, 4, 3
2082 ; AIX32-NEXT: and 5, 5, 3
2083 ; AIX32-NEXT: or 5, 5, 6
2084 ; AIX32-NEXT: stwcx. 5, 0, 14
2085 ; AIX32-NEXT: bne 0, L..BB1_31
2086 ; AIX32-NEXT: # %bb.32: # %entry
2087 ; AIX32-NEXT: srw 3, 4, 15
2088 ; AIX32-NEXT: lwsync
2089 ; AIX32-NEXT: clrlwi 3, 3, 16
2090 ; AIX32-NEXT: sth 3, 0(19)
2092 ; AIX32-NEXT: L..BB1_33: # %entry
2094 ; AIX32-NEXT: lwarx 3, 0, 29
2095 ; AIX32-NEXT: ori 4, 3, 11
2096 ; AIX32-NEXT: stwcx. 4, 0, 29
2097 ; AIX32-NEXT: bne 0, L..BB1_33
2098 ; AIX32-NEXT: # %bb.34: # %entry
2099 ; AIX32-NEXT: lwsync
2100 ; AIX32-NEXT: stw 3, 0(29)
2102 ; AIX32-NEXT: L..BB1_35: # %entry
2104 ; AIX32-NEXT: lwarx 3, 0, 28
2105 ; AIX32-NEXT: ori 4, 3, 11
2106 ; AIX32-NEXT: stwcx. 4, 0, 28
2107 ; AIX32-NEXT: bne 0, L..BB1_35
2108 ; AIX32-NEXT: # %bb.36: # %entry
2109 ; AIX32-NEXT: lwsync
2110 ; AIX32-NEXT: li 4, 0
2111 ; AIX32-NEXT: li 5, 11
2112 ; AIX32-NEXT: li 6, 5
2113 ; AIX32-NEXT: stw 3, 0(28)
2114 ; AIX32-NEXT: mr 3, 31
2115 ; AIX32-NEXT: bl .__atomic_fetch_or_8[PR]
2117 ; AIX32-NEXT: stw 4, 4(31)
2118 ; AIX32-NEXT: li 4, 0
2119 ; AIX32-NEXT: li 5, 11
2120 ; AIX32-NEXT: li 6, 5
2121 ; AIX32-NEXT: stw 3, 0(31)
2122 ; AIX32-NEXT: mr 3, 30
2123 ; AIX32-NEXT: bl .__atomic_fetch_or_8[PR]
2125 ; AIX32-NEXT: stw 3, 0(30)
2126 ; AIX32-NEXT: li 3, 255
2127 ; AIX32-NEXT: stw 4, 4(30)
2129 ; AIX32-NEXT: slw 3, 3, 26
2130 ; AIX32-NEXT: L..BB1_37: # %entry
2132 ; AIX32-NEXT: lwarx 4, 0, 25
2133 ; AIX32-NEXT: xor 5, 24, 4
2134 ; AIX32-NEXT: andc 6, 4, 3
2135 ; AIX32-NEXT: and 5, 5, 3
2136 ; AIX32-NEXT: or 5, 5, 6
2137 ; AIX32-NEXT: stwcx. 5, 0, 25
2138 ; AIX32-NEXT: bne 0, L..BB1_37
2139 ; AIX32-NEXT: # %bb.38: # %entry
2140 ; AIX32-NEXT: srw 3, 4, 26
2141 ; AIX32-NEXT: lwsync
2142 ; AIX32-NEXT: lwz 4, 64(1) # 4-byte Folded Reload
2143 ; AIX32-NEXT: clrlwi 3, 3, 24
2144 ; AIX32-NEXT: stb 3, 0(4)
2145 ; AIX32-NEXT: li 3, 255
2147 ; AIX32-NEXT: slw 3, 3, 22
2148 ; AIX32-NEXT: L..BB1_39: # %entry
2150 ; AIX32-NEXT: lwarx 4, 0, 21
2151 ; AIX32-NEXT: xor 5, 20, 4
2152 ; AIX32-NEXT: andc 6, 4, 3
2153 ; AIX32-NEXT: and 5, 5, 3
2154 ; AIX32-NEXT: or 5, 5, 6
2155 ; AIX32-NEXT: stwcx. 5, 0, 21
2156 ; AIX32-NEXT: bne 0, L..BB1_39
2157 ; AIX32-NEXT: # %bb.40: # %entry
2158 ; AIX32-NEXT: srw 3, 4, 22
2159 ; AIX32-NEXT: lwsync
2160 ; AIX32-NEXT: clrlwi 3, 3, 24
2161 ; AIX32-NEXT: stb 3, 0(27)
2162 ; AIX32-NEXT: li 3, 0
2164 ; AIX32-NEXT: ori 3, 3, 65535
2165 ; AIX32-NEXT: slw 3, 3, 18
2166 ; AIX32-NEXT: L..BB1_41: # %entry
2168 ; AIX32-NEXT: lwarx 4, 0, 17
2169 ; AIX32-NEXT: xor 5, 16, 4
2170 ; AIX32-NEXT: andc 6, 4, 3
2171 ; AIX32-NEXT: and 5, 5, 3
2172 ; AIX32-NEXT: or 5, 5, 6
2173 ; AIX32-NEXT: stwcx. 5, 0, 17
2174 ; AIX32-NEXT: bne 0, L..BB1_41
2175 ; AIX32-NEXT: # %bb.42: # %entry
2176 ; AIX32-NEXT: srw 3, 4, 18
2177 ; AIX32-NEXT: lwsync
2178 ; AIX32-NEXT: clrlwi 3, 3, 16
2179 ; AIX32-NEXT: sth 3, 0(23)
2180 ; AIX32-NEXT: li 3, 0
2182 ; AIX32-NEXT: ori 3, 3, 65535
2183 ; AIX32-NEXT: slw 3, 3, 15
2184 ; AIX32-NEXT: L..BB1_43: # %entry
2186 ; AIX32-NEXT: lwarx 4, 0, 14
2187 ; AIX32-NEXT: xor 5, 13, 4
2188 ; AIX32-NEXT: andc 6, 4, 3
2189 ; AIX32-NEXT: and 5, 5, 3
2190 ; AIX32-NEXT: or 5, 5, 6
2191 ; AIX32-NEXT: stwcx. 5, 0, 14
2192 ; AIX32-NEXT: bne 0, L..BB1_43
2193 ; AIX32-NEXT: # %bb.44: # %entry
2194 ; AIX32-NEXT: srw 3, 4, 15
2195 ; AIX32-NEXT: lwsync
2196 ; AIX32-NEXT: clrlwi 3, 3, 16
2197 ; AIX32-NEXT: sth 3, 0(19)
2199 ; AIX32-NEXT: L..BB1_45: # %entry
2201 ; AIX32-NEXT: lwarx 3, 0, 29
2202 ; AIX32-NEXT: xori 4, 3, 11
2203 ; AIX32-NEXT: stwcx. 4, 0, 29
2204 ; AIX32-NEXT: bne 0, L..BB1_45
2205 ; AIX32-NEXT: # %bb.46: # %entry
2206 ; AIX32-NEXT: lwsync
2207 ; AIX32-NEXT: stw 3, 0(29)
2209 ; AIX32-NEXT: L..BB1_47: # %entry
2211 ; AIX32-NEXT: lwarx 3, 0, 28
2212 ; AIX32-NEXT: xori 4, 3, 11
2213 ; AIX32-NEXT: stwcx. 4, 0, 28
2214 ; AIX32-NEXT: bne 0, L..BB1_47
2215 ; AIX32-NEXT: # %bb.48: # %entry
2216 ; AIX32-NEXT: lwsync
2217 ; AIX32-NEXT: li 4, 0
2218 ; AIX32-NEXT: li 5, 11
2219 ; AIX32-NEXT: li 6, 5
2220 ; AIX32-NEXT: stw 3, 0(28)
2221 ; AIX32-NEXT: mr 3, 31
2222 ; AIX32-NEXT: bl .__atomic_fetch_xor_8[PR]
2224 ; AIX32-NEXT: stw 4, 4(31)
2225 ; AIX32-NEXT: li 4, 0
2226 ; AIX32-NEXT: li 5, 11
2227 ; AIX32-NEXT: li 6, 5
2228 ; AIX32-NEXT: stw 3, 0(31)
2229 ; AIX32-NEXT: mr 3, 30
2230 ; AIX32-NEXT: bl .__atomic_fetch_xor_8[PR]
2232 ; AIX32-NEXT: stw 3, 0(30)
2233 ; AIX32-NEXT: li 3, 255
2234 ; AIX32-NEXT: stw 4, 4(30)
2236 ; AIX32-NEXT: slw 3, 3, 26
2237 ; AIX32-NEXT: L..BB1_49: # %entry
2239 ; AIX32-NEXT: lwarx 4, 0, 25
2240 ; AIX32-NEXT: nand 5, 24, 4
2241 ; AIX32-NEXT: andc 6, 4, 3
2242 ; AIX32-NEXT: and 5, 5, 3
2243 ; AIX32-NEXT: or 5, 5, 6
2244 ; AIX32-NEXT: stwcx. 5, 0, 25
2245 ; AIX32-NEXT: bne 0, L..BB1_49
2246 ; AIX32-NEXT: # %bb.50: # %entry
2247 ; AIX32-NEXT: srw 3, 4, 26
2248 ; AIX32-NEXT: lwsync
2249 ; AIX32-NEXT: li 7, 11
2250 ; AIX32-NEXT: lwz 4, 64(1) # 4-byte Folded Reload
2251 ; AIX32-NEXT: clrlwi 3, 3, 24
2252 ; AIX32-NEXT: stb 3, 0(4)
2254 ; AIX32-NEXT: li 3, 255
2255 ; AIX32-NEXT: slw 3, 3, 22
2256 ; AIX32-NEXT: L..BB1_51: # %entry
2258 ; AIX32-NEXT: lwarx 4, 0, 21
2259 ; AIX32-NEXT: nand 5, 20, 4
2260 ; AIX32-NEXT: andc 6, 4, 3
2261 ; AIX32-NEXT: and 5, 5, 3
2262 ; AIX32-NEXT: or 5, 5, 6
2263 ; AIX32-NEXT: stwcx. 5, 0, 21
2264 ; AIX32-NEXT: bne 0, L..BB1_51
2265 ; AIX32-NEXT: # %bb.52: # %entry
2266 ; AIX32-NEXT: srw 3, 4, 22
2267 ; AIX32-NEXT: lwsync
2268 ; AIX32-NEXT: clrlwi 3, 3, 24
2269 ; AIX32-NEXT: stb 3, 0(27)
2270 ; AIX32-NEXT: li 3, 0
2272 ; AIX32-NEXT: ori 3, 3, 65535
2273 ; AIX32-NEXT: slw 3, 3, 18
2274 ; AIX32-NEXT: L..BB1_53: # %entry
2276 ; AIX32-NEXT: lwarx 4, 0, 17
2277 ; AIX32-NEXT: nand 5, 16, 4
2278 ; AIX32-NEXT: andc 6, 4, 3
2279 ; AIX32-NEXT: and 5, 5, 3
2280 ; AIX32-NEXT: or 5, 5, 6
2281 ; AIX32-NEXT: stwcx. 5, 0, 17
2282 ; AIX32-NEXT: bne 0, L..BB1_53
2283 ; AIX32-NEXT: # %bb.54: # %entry
2284 ; AIX32-NEXT: srw 3, 4, 18
2285 ; AIX32-NEXT: lwsync
2286 ; AIX32-NEXT: clrlwi 3, 3, 16
2287 ; AIX32-NEXT: sth 3, 0(23)
2288 ; AIX32-NEXT: li 3, 0
2290 ; AIX32-NEXT: ori 3, 3, 65535
2291 ; AIX32-NEXT: slw 3, 3, 15
2292 ; AIX32-NEXT: L..BB1_55: # %entry
2294 ; AIX32-NEXT: lwarx 4, 0, 14
2295 ; AIX32-NEXT: nand 5, 13, 4
2296 ; AIX32-NEXT: andc 6, 4, 3
2297 ; AIX32-NEXT: and 5, 5, 3
2298 ; AIX32-NEXT: or 5, 5, 6
2299 ; AIX32-NEXT: stwcx. 5, 0, 14
2300 ; AIX32-NEXT: bne 0, L..BB1_55
2301 ; AIX32-NEXT: # %bb.56: # %entry
2302 ; AIX32-NEXT: srw 3, 4, 15
2303 ; AIX32-NEXT: lwsync
2304 ; AIX32-NEXT: clrlwi 3, 3, 16
2305 ; AIX32-NEXT: sth 3, 0(19)
2307 ; AIX32-NEXT: L..BB1_57: # %entry
2309 ; AIX32-NEXT: lwarx 3, 0, 29
2310 ; AIX32-NEXT: nand 4, 7, 3
2311 ; AIX32-NEXT: stwcx. 4, 0, 29
2312 ; AIX32-NEXT: bne 0, L..BB1_57
2313 ; AIX32-NEXT: # %bb.58: # %entry
2314 ; AIX32-NEXT: lwsync
2315 ; AIX32-NEXT: stw 3, 0(29)
2317 ; AIX32-NEXT: L..BB1_59: # %entry
2319 ; AIX32-NEXT: lwarx 3, 0, 28
2320 ; AIX32-NEXT: nand 4, 7, 3
2321 ; AIX32-NEXT: stwcx. 4, 0, 28
2322 ; AIX32-NEXT: bne 0, L..BB1_59
2323 ; AIX32-NEXT: # %bb.60: # %entry
2324 ; AIX32-NEXT: lwsync
2325 ; AIX32-NEXT: li 4, 0
2326 ; AIX32-NEXT: li 5, 11
2327 ; AIX32-NEXT: li 6, 5
2328 ; AIX32-NEXT: stw 3, 0(28)
2329 ; AIX32-NEXT: mr 3, 31
2330 ; AIX32-NEXT: bl .__atomic_fetch_nand_8[PR]
2332 ; AIX32-NEXT: stw 4, 4(31)
2333 ; AIX32-NEXT: li 4, 0
2334 ; AIX32-NEXT: li 5, 11
2335 ; AIX32-NEXT: li 6, 5
2336 ; AIX32-NEXT: stw 3, 0(31)
2337 ; AIX32-NEXT: mr 3, 30
2338 ; AIX32-NEXT: bl .__atomic_fetch_nand_8[PR]
2340 ; AIX32-NEXT: stw 3, 0(30)
2341 ; AIX32-NEXT: li 3, 255
2342 ; AIX32-NEXT: stw 4, 4(30)
2344 ; AIX32-NEXT: slw 3, 3, 26
2345 ; AIX32-NEXT: L..BB1_61: # %entry
2347 ; AIX32-NEXT: lwarx 4, 0, 25
2348 ; AIX32-NEXT: and 5, 24, 4
2349 ; AIX32-NEXT: andc 6, 4, 3
2350 ; AIX32-NEXT: and 5, 5, 3
2351 ; AIX32-NEXT: or 5, 5, 6
2352 ; AIX32-NEXT: stwcx. 5, 0, 25
2353 ; AIX32-NEXT: bne 0, L..BB1_61
2354 ; AIX32-NEXT: # %bb.62: # %entry
2355 ; AIX32-NEXT: srw 3, 4, 26
2356 ; AIX32-NEXT: lwsync
2357 ; AIX32-NEXT: lwz 4, 64(1) # 4-byte Folded Reload
2358 ; AIX32-NEXT: clrlwi 3, 3, 24
2359 ; AIX32-NEXT: stb 3, 0(4)
2360 ; AIX32-NEXT: li 3, 255
2362 ; AIX32-NEXT: slw 3, 3, 22
2363 ; AIX32-NEXT: L..BB1_63: # %entry
2365 ; AIX32-NEXT: lwarx 4, 0, 21
2366 ; AIX32-NEXT: and 5, 20, 4
2367 ; AIX32-NEXT: andc 6, 4, 3
2368 ; AIX32-NEXT: and 5, 5, 3
2369 ; AIX32-NEXT: or 5, 5, 6
2370 ; AIX32-NEXT: stwcx. 5, 0, 21
2371 ; AIX32-NEXT: bne 0, L..BB1_63
2372 ; AIX32-NEXT: # %bb.64: # %entry
2373 ; AIX32-NEXT: srw 3, 4, 22
2374 ; AIX32-NEXT: lwsync
2375 ; AIX32-NEXT: li 7, 11
2376 ; AIX32-NEXT: clrlwi 3, 3, 24
2377 ; AIX32-NEXT: stb 3, 0(27)
2379 ; AIX32-NEXT: li 3, 0
2380 ; AIX32-NEXT: ori 3, 3, 65535
2381 ; AIX32-NEXT: slw 3, 3, 18
2382 ; AIX32-NEXT: L..BB1_65: # %entry
2384 ; AIX32-NEXT: lwarx 4, 0, 17
2385 ; AIX32-NEXT: and 5, 16, 4
2386 ; AIX32-NEXT: andc 6, 4, 3
2387 ; AIX32-NEXT: and 5, 5, 3
2388 ; AIX32-NEXT: or 5, 5, 6
2389 ; AIX32-NEXT: stwcx. 5, 0, 17
2390 ; AIX32-NEXT: bne 0, L..BB1_65
2391 ; AIX32-NEXT: # %bb.66: # %entry
2392 ; AIX32-NEXT: srw 3, 4, 18
2393 ; AIX32-NEXT: lwsync
2394 ; AIX32-NEXT: clrlwi 3, 3, 16
2395 ; AIX32-NEXT: sth 3, 0(23)
2396 ; AIX32-NEXT: li 3, 0
2398 ; AIX32-NEXT: ori 3, 3, 65535
2399 ; AIX32-NEXT: slw 3, 3, 15
2400 ; AIX32-NEXT: L..BB1_67: # %entry
2402 ; AIX32-NEXT: lwarx 4, 0, 14
2403 ; AIX32-NEXT: and 5, 13, 4
2404 ; AIX32-NEXT: andc 6, 4, 3
2405 ; AIX32-NEXT: and 5, 5, 3
2406 ; AIX32-NEXT: or 5, 5, 6
2407 ; AIX32-NEXT: stwcx. 5, 0, 14
2408 ; AIX32-NEXT: bne 0, L..BB1_67
2409 ; AIX32-NEXT: # %bb.68: # %entry
2410 ; AIX32-NEXT: srw 3, 4, 15
2411 ; AIX32-NEXT: lwsync
2412 ; AIX32-NEXT: clrlwi 3, 3, 16
2413 ; AIX32-NEXT: sth 3, 0(19)
2415 ; AIX32-NEXT: L..BB1_69: # %entry
2417 ; AIX32-NEXT: lwarx 3, 0, 29
2418 ; AIX32-NEXT: and 4, 7, 3
2419 ; AIX32-NEXT: stwcx. 4, 0, 29
2420 ; AIX32-NEXT: bne 0, L..BB1_69
2421 ; AIX32-NEXT: # %bb.70: # %entry
2422 ; AIX32-NEXT: lwsync
2423 ; AIX32-NEXT: stw 3, 0(29)
2425 ; AIX32-NEXT: L..BB1_71: # %entry
2427 ; AIX32-NEXT: lwarx 3, 0, 28
2428 ; AIX32-NEXT: and 4, 7, 3
2429 ; AIX32-NEXT: stwcx. 4, 0, 28
2430 ; AIX32-NEXT: bne 0, L..BB1_71
2431 ; AIX32-NEXT: # %bb.72: # %entry
2432 ; AIX32-NEXT: lwsync
2433 ; AIX32-NEXT: li 4, 0
2434 ; AIX32-NEXT: li 5, 11
2435 ; AIX32-NEXT: li 6, 5
2436 ; AIX32-NEXT: stw 3, 0(28)
2437 ; AIX32-NEXT: mr 3, 31
2438 ; AIX32-NEXT: bl .__atomic_fetch_and_8[PR]
2440 ; AIX32-NEXT: stw 4, 4(31)
2441 ; AIX32-NEXT: li 4, 0
2442 ; AIX32-NEXT: li 5, 11
2443 ; AIX32-NEXT: li 6, 5
2444 ; AIX32-NEXT: stw 3, 0(31)
2445 ; AIX32-NEXT: mr 3, 30
2446 ; AIX32-NEXT: bl .__atomic_fetch_and_8[PR]
2448 ; AIX32-NEXT: stw 4, 4(30)
2449 ; AIX32-NEXT: stw 3, 0(30)
2450 ; AIX32-NEXT: lwz 31, 140(1) # 4-byte Folded Reload
2451 ; AIX32-NEXT: lwz 30, 136(1) # 4-byte Folded Reload
2452 ; AIX32-NEXT: lwz 29, 132(1) # 4-byte Folded Reload
2453 ; AIX32-NEXT: lwz 28, 128(1) # 4-byte Folded Reload
2454 ; AIX32-NEXT: lwz 27, 124(1) # 4-byte Folded Reload
2455 ; AIX32-NEXT: lwz 26, 120(1) # 4-byte Folded Reload
2456 ; AIX32-NEXT: lwz 25, 116(1) # 4-byte Folded Reload
2457 ; AIX32-NEXT: lwz 24, 112(1) # 4-byte Folded Reload
2458 ; AIX32-NEXT: lwz 23, 108(1) # 4-byte Folded Reload
2459 ; AIX32-NEXT: lwz 22, 104(1) # 4-byte Folded Reload
2460 ; AIX32-NEXT: lwz 21, 100(1) # 4-byte Folded Reload
2461 ; AIX32-NEXT: lwz 20, 96(1) # 4-byte Folded Reload
2462 ; AIX32-NEXT: lwz 19, 92(1) # 4-byte Folded Reload
2463 ; AIX32-NEXT: lwz 18, 88(1) # 4-byte Folded Reload
2464 ; AIX32-NEXT: lwz 17, 84(1) # 4-byte Folded Reload
2465 ; AIX32-NEXT: lwz 16, 80(1) # 4-byte Folded Reload
2466 ; AIX32-NEXT: lwz 15, 76(1) # 4-byte Folded Reload
2467 ; AIX32-NEXT: lwz 14, 72(1) # 4-byte Folded Reload
2468 ; AIX32-NEXT: lwz 13, 68(1) # 4-byte Folded Reload
2469 ; AIX32-NEXT: addi 1, 1, 144
2470 ; AIX32-NEXT: lwz 0, 8(1)
2471 ; AIX32-NEXT: mtlr 0
2474 %0 = atomicrmw add ptr @sc, i8 11 seq_cst, align 1
2475 store i8 %0, ptr @sc, align 1
2476 %1 = atomicrmw add ptr @uc, i8 11 seq_cst, align 1
2477 store i8 %1, ptr @uc, align 1
2478 %2 = atomicrmw add ptr @ss, i16 11 seq_cst, align 2
2479 store i16 %2, ptr @ss, align 2
2480 %3 = atomicrmw add ptr @us, i16 11 seq_cst, align 2
2481 store i16 %3, ptr @us, align 2
2482 %4 = atomicrmw add ptr @si, i32 11 seq_cst, align 4
2483 store i32 %4, ptr @si, align 4
2484 %5 = atomicrmw add ptr @ui, i32 11 seq_cst, align 4
2485 store i32 %5, ptr @ui, align 4
2486 %6 = atomicrmw add ptr @sll, i64 11 seq_cst, align 8
2487 store i64 %6, ptr @sll, align 8
2488 %7 = atomicrmw add ptr @ull, i64 11 seq_cst, align 8
2489 store i64 %7, ptr @ull, align 8
2490 %8 = atomicrmw sub ptr @sc, i8 11 seq_cst, align 1
2491 store i8 %8, ptr @sc, align 1
2492 %9 = atomicrmw sub ptr @uc, i8 11 seq_cst, align 1
2493 store i8 %9, ptr @uc, align 1
2494 %10 = atomicrmw sub ptr @ss, i16 11 seq_cst, align 2
2495 store i16 %10, ptr @ss, align 2
2496 %11 = atomicrmw sub ptr @us, i16 11 seq_cst, align 2
2497 store i16 %11, ptr @us, align 2
2498 %12 = atomicrmw sub ptr @si, i32 11 seq_cst, align 4
2499 store i32 %12, ptr @si, align 4
2500 %13 = atomicrmw sub ptr @ui, i32 11 seq_cst, align 4
2501 store i32 %13, ptr @ui, align 4
2502 %14 = atomicrmw sub ptr @sll, i64 11 seq_cst, align 8
2503 store i64 %14, ptr @sll, align 8
2504 %15 = atomicrmw sub ptr @ull, i64 11 seq_cst, align 8
2505 store i64 %15, ptr @ull, align 8
2506 %16 = atomicrmw or ptr @sc, i8 11 seq_cst, align 1
2507 store i8 %16, ptr @sc, align 1
2508 %17 = atomicrmw or ptr @uc, i8 11 seq_cst, align 1
2509 store i8 %17, ptr @uc, align 1
2510 %18 = atomicrmw or ptr @ss, i16 11 seq_cst, align 2
2511 store i16 %18, ptr @ss, align 2
2512 %19 = atomicrmw or ptr @us, i16 11 seq_cst, align 2
2513 store i16 %19, ptr @us, align 2
2514 %20 = atomicrmw or ptr @si, i32 11 seq_cst, align 4
2515 store i32 %20, ptr @si, align 4
2516 %21 = atomicrmw or ptr @ui, i32 11 seq_cst, align 4
2517 store i32 %21, ptr @ui, align 4
2518 %22 = atomicrmw or ptr @sll, i64 11 seq_cst, align 8
2519 store i64 %22, ptr @sll, align 8
2520 %23 = atomicrmw or ptr @ull, i64 11 seq_cst, align 8
2521 store i64 %23, ptr @ull, align 8
2522 %24 = atomicrmw xor ptr @sc, i8 11 seq_cst, align 1
2523 store i8 %24, ptr @sc, align 1
2524 %25 = atomicrmw xor ptr @uc, i8 11 seq_cst, align 1
2525 store i8 %25, ptr @uc, align 1
2526 %26 = atomicrmw xor ptr @ss, i16 11 seq_cst, align 2
2527 store i16 %26, ptr @ss, align 2
2528 %27 = atomicrmw xor ptr @us, i16 11 seq_cst, align 2
2529 store i16 %27, ptr @us, align 2
2530 %28 = atomicrmw xor ptr @si, i32 11 seq_cst, align 4
2531 store i32 %28, ptr @si, align 4
2532 %29 = atomicrmw xor ptr @ui, i32 11 seq_cst, align 4
2533 store i32 %29, ptr @ui, align 4
2534 %30 = atomicrmw xor ptr @sll, i64 11 seq_cst, align 8
2535 store i64 %30, ptr @sll, align 8
2536 %31 = atomicrmw xor ptr @ull, i64 11 seq_cst, align 8
2537 store i64 %31, ptr @ull, align 8
2538 %32 = atomicrmw nand ptr @sc, i8 11 seq_cst, align 1
2539 store i8 %32, ptr @sc, align 1
2540 %33 = atomicrmw nand ptr @uc, i8 11 seq_cst, align 1
2541 store i8 %33, ptr @uc, align 1
2542 %34 = atomicrmw nand ptr @ss, i16 11 seq_cst, align 2
2543 store i16 %34, ptr @ss, align 2
2544 %35 = atomicrmw nand ptr @us, i16 11 seq_cst, align 2
2545 store i16 %35, ptr @us, align 2
2546 %36 = atomicrmw nand ptr @si, i32 11 seq_cst, align 4
2547 store i32 %36, ptr @si, align 4
2548 %37 = atomicrmw nand ptr @ui, i32 11 seq_cst, align 4
2549 store i32 %37, ptr @ui, align 4
2550 %38 = atomicrmw nand ptr @sll, i64 11 seq_cst, align 8
2551 store i64 %38, ptr @sll, align 8
2552 %39 = atomicrmw nand ptr @ull, i64 11 seq_cst, align 8
2553 store i64 %39, ptr @ull, align 8
2554 %40 = atomicrmw and ptr @sc, i8 11 seq_cst, align 1
2555 store i8 %40, ptr @sc, align 1
2556 %41 = atomicrmw and ptr @uc, i8 11 seq_cst, align 1
2557 store i8 %41, ptr @uc, align 1
2558 %42 = atomicrmw and ptr @ss, i16 11 seq_cst, align 2
2559 store i16 %42, ptr @ss, align 2
2560 %43 = atomicrmw and ptr @us, i16 11 seq_cst, align 2
2561 store i16 %43, ptr @us, align 2
2562 %44 = atomicrmw and ptr @si, i32 11 seq_cst, align 4
2563 store i32 %44, ptr @si, align 4
2564 %45 = atomicrmw and ptr @ui, i32 11 seq_cst, align 4
2565 store i32 %45, ptr @ui, align 4
2566 %46 = atomicrmw and ptr @sll, i64 11 seq_cst, align 8
2567 store i64 %46, ptr @sll, align 8
2568 %47 = atomicrmw and ptr @ull, i64 11 seq_cst, align 8
2569 store i64 %47, ptr @ull, align 8
2573 define dso_local void @test_op_and_fetch() local_unnamed_addr #0 {
2574 ; CHECK-LABEL: test_op_and_fetch:
2575 ; CHECK: # %bb.0: # %entry
2576 ; CHECK-NEXT: addis 3, 2, uc@toc@ha
2577 ; CHECK-NEXT: addis 5, 2, sc@toc@ha
2578 ; CHECK-NEXT: std 16, -128(1) # 8-byte Folded Spill
2579 ; CHECK-NEXT: std 17, -120(1) # 8-byte Folded Spill
2580 ; CHECK-NEXT: std 18, -112(1) # 8-byte Folded Spill
2581 ; CHECK-NEXT: std 19, -104(1) # 8-byte Folded Spill
2582 ; CHECK-NEXT: lbz 6, uc@toc@l(3)
2583 ; CHECK-NEXT: std 20, -96(1) # 8-byte Folded Spill
2584 ; CHECK-NEXT: std 21, -88(1) # 8-byte Folded Spill
2585 ; CHECK-NEXT: addi 4, 3, uc@toc@l
2586 ; CHECK-NEXT: addi 7, 5, sc@toc@l
2587 ; CHECK-NEXT: std 22, -80(1) # 8-byte Folded Spill
2588 ; CHECK-NEXT: std 23, -72(1) # 8-byte Folded Spill
2589 ; CHECK-NEXT: std 24, -64(1) # 8-byte Folded Spill
2590 ; CHECK-NEXT: std 25, -56(1) # 8-byte Folded Spill
2591 ; CHECK-NEXT: std 26, -48(1) # 8-byte Folded Spill
2592 ; CHECK-NEXT: std 27, -40(1) # 8-byte Folded Spill
2593 ; CHECK-NEXT: std 28, -32(1) # 8-byte Folded Spill
2594 ; CHECK-NEXT: std 29, -24(1) # 8-byte Folded Spill
2595 ; CHECK-NEXT: std 30, -16(1) # 8-byte Folded Spill
2597 ; CHECK-NEXT: .LBB2_1: # %entry
2599 ; CHECK-NEXT: lbarx 8, 0, 7
2600 ; CHECK-NEXT: add 8, 6, 8
2601 ; CHECK-NEXT: stbcx. 8, 0, 7
2602 ; CHECK-NEXT: bne 0, .LBB2_1
2603 ; CHECK-NEXT: # %bb.2: # %entry
2604 ; CHECK-NEXT: lwsync
2605 ; CHECK-NEXT: stb 8, sc@toc@l(5)
2606 ; CHECK-NEXT: lbz 6, uc@toc@l(3)
2608 ; CHECK-NEXT: .LBB2_3: # %entry
2610 ; CHECK-NEXT: lbarx 8, 0, 4
2611 ; CHECK-NEXT: add 8, 6, 8
2612 ; CHECK-NEXT: stbcx. 8, 0, 4
2613 ; CHECK-NEXT: bne 0, .LBB2_3
2614 ; CHECK-NEXT: # %bb.4: # %entry
2615 ; CHECK-NEXT: addis 6, 2, ss@toc@ha
2616 ; CHECK-NEXT: lwsync
2617 ; CHECK-NEXT: stb 8, uc@toc@l(3)
2618 ; CHECK-NEXT: clrlwi 8, 8, 24
2620 ; CHECK-NEXT: addi 9, 6, ss@toc@l
2621 ; CHECK-NEXT: .LBB2_5: # %entry
2623 ; CHECK-NEXT: lharx 10, 0, 9
2624 ; CHECK-NEXT: add 10, 8, 10
2625 ; CHECK-NEXT: sthcx. 10, 0, 9
2626 ; CHECK-NEXT: bne 0, .LBB2_5
2627 ; CHECK-NEXT: # %bb.6: # %entry
2628 ; CHECK-NEXT: lwsync
2629 ; CHECK-NEXT: addis 8, 2, us@toc@ha
2630 ; CHECK-NEXT: sth 10, ss@toc@l(6)
2631 ; CHECK-NEXT: lbz 10, uc@toc@l(3)
2633 ; CHECK-NEXT: addi 11, 8, us@toc@l
2634 ; CHECK-NEXT: .LBB2_7: # %entry
2636 ; CHECK-NEXT: lharx 12, 0, 11
2637 ; CHECK-NEXT: add 12, 10, 12
2638 ; CHECK-NEXT: sthcx. 12, 0, 11
2639 ; CHECK-NEXT: bne 0, .LBB2_7
2640 ; CHECK-NEXT: # %bb.8: # %entry
2641 ; CHECK-NEXT: lwsync
2642 ; CHECK-NEXT: addis 10, 2, si@toc@ha
2643 ; CHECK-NEXT: sth 12, us@toc@l(8)
2644 ; CHECK-NEXT: lbz 12, uc@toc@l(3)
2646 ; CHECK-NEXT: addi 0, 10, si@toc@l
2647 ; CHECK-NEXT: .LBB2_9: # %entry
2649 ; CHECK-NEXT: lwarx 30, 0, 0
2650 ; CHECK-NEXT: add 30, 12, 30
2651 ; CHECK-NEXT: stwcx. 30, 0, 0
2652 ; CHECK-NEXT: bne 0, .LBB2_9
2653 ; CHECK-NEXT: # %bb.10: # %entry
2654 ; CHECK-NEXT: lwsync
2655 ; CHECK-NEXT: addis 12, 2, ui@toc@ha
2656 ; CHECK-NEXT: stw 30, si@toc@l(10)
2657 ; CHECK-NEXT: lbz 30, uc@toc@l(3)
2659 ; CHECK-NEXT: addi 29, 12, ui@toc@l
2660 ; CHECK-NEXT: .LBB2_11: # %entry
2662 ; CHECK-NEXT: lwarx 28, 0, 29
2663 ; CHECK-NEXT: add 28, 30, 28
2664 ; CHECK-NEXT: stwcx. 28, 0, 29
2665 ; CHECK-NEXT: bne 0, .LBB2_11
2666 ; CHECK-NEXT: # %bb.12: # %entry
2667 ; CHECK-NEXT: lwsync
2668 ; CHECK-NEXT: addis 30, 2, sll@toc@ha
2669 ; CHECK-NEXT: stw 28, ui@toc@l(12)
2670 ; CHECK-NEXT: lbz 28, uc@toc@l(3)
2672 ; CHECK-NEXT: addi 27, 30, sll@toc@l
2673 ; CHECK-NEXT: .LBB2_13: # %entry
2675 ; CHECK-NEXT: ldarx 26, 0, 27
2676 ; CHECK-NEXT: add 26, 28, 26
2677 ; CHECK-NEXT: stdcx. 26, 0, 27
2678 ; CHECK-NEXT: bne 0, .LBB2_13
2679 ; CHECK-NEXT: # %bb.14: # %entry
2680 ; CHECK-NEXT: lwsync
2681 ; CHECK-NEXT: addis 28, 2, ull@toc@ha
2682 ; CHECK-NEXT: std 26, sll@toc@l(30)
2683 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2685 ; CHECK-NEXT: addi 26, 28, ull@toc@l
2686 ; CHECK-NEXT: .LBB2_15: # %entry
2688 ; CHECK-NEXT: ldarx 24, 0, 26
2689 ; CHECK-NEXT: add 24, 25, 24
2690 ; CHECK-NEXT: stdcx. 24, 0, 26
2691 ; CHECK-NEXT: bne 0, .LBB2_15
2692 ; CHECK-NEXT: # %bb.16: # %entry
2693 ; CHECK-NEXT: lwsync
2694 ; CHECK-NEXT: std 24, ull@toc@l(28)
2695 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2697 ; CHECK-NEXT: .LBB2_17: # %entry
2699 ; CHECK-NEXT: lbarx 24, 0, 7
2700 ; CHECK-NEXT: sub 24, 24, 25
2701 ; CHECK-NEXT: stbcx. 24, 0, 7
2702 ; CHECK-NEXT: bne 0, .LBB2_17
2703 ; CHECK-NEXT: # %bb.18: # %entry
2704 ; CHECK-NEXT: lwsync
2705 ; CHECK-NEXT: stb 24, sc@toc@l(5)
2706 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2708 ; CHECK-NEXT: .LBB2_19: # %entry
2710 ; CHECK-NEXT: lbarx 24, 0, 4
2711 ; CHECK-NEXT: sub 24, 24, 25
2712 ; CHECK-NEXT: stbcx. 24, 0, 4
2713 ; CHECK-NEXT: bne 0, .LBB2_19
2714 ; CHECK-NEXT: # %bb.20: # %entry
2715 ; CHECK-NEXT: lwsync
2716 ; CHECK-NEXT: stb 24, uc@toc@l(3)
2717 ; CHECK-NEXT: clrlwi 25, 24, 24
2719 ; CHECK-NEXT: .LBB2_21: # %entry
2721 ; CHECK-NEXT: lharx 24, 0, 9
2722 ; CHECK-NEXT: sub 24, 24, 25
2723 ; CHECK-NEXT: sthcx. 24, 0, 9
2724 ; CHECK-NEXT: bne 0, .LBB2_21
2725 ; CHECK-NEXT: # %bb.22: # %entry
2726 ; CHECK-NEXT: lwsync
2727 ; CHECK-NEXT: sth 24, ss@toc@l(6)
2728 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2730 ; CHECK-NEXT: .LBB2_23: # %entry
2732 ; CHECK-NEXT: lharx 24, 0, 11
2733 ; CHECK-NEXT: sub 24, 24, 25
2734 ; CHECK-NEXT: sthcx. 24, 0, 11
2735 ; CHECK-NEXT: bne 0, .LBB2_23
2736 ; CHECK-NEXT: # %bb.24: # %entry
2737 ; CHECK-NEXT: lwsync
2738 ; CHECK-NEXT: sth 24, us@toc@l(8)
2739 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2741 ; CHECK-NEXT: .LBB2_25: # %entry
2743 ; CHECK-NEXT: lwarx 24, 0, 0
2744 ; CHECK-NEXT: sub 24, 24, 25
2745 ; CHECK-NEXT: stwcx. 24, 0, 0
2746 ; CHECK-NEXT: bne 0, .LBB2_25
2747 ; CHECK-NEXT: # %bb.26: # %entry
2748 ; CHECK-NEXT: lwsync
2749 ; CHECK-NEXT: stw 24, si@toc@l(10)
2750 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2752 ; CHECK-NEXT: .LBB2_27: # %entry
2754 ; CHECK-NEXT: lwarx 24, 0, 29
2755 ; CHECK-NEXT: sub 24, 24, 25
2756 ; CHECK-NEXT: stwcx. 24, 0, 29
2757 ; CHECK-NEXT: bne 0, .LBB2_27
2758 ; CHECK-NEXT: # %bb.28: # %entry
2759 ; CHECK-NEXT: lwsync
2760 ; CHECK-NEXT: stw 24, ui@toc@l(12)
2761 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2763 ; CHECK-NEXT: .LBB2_29: # %entry
2765 ; CHECK-NEXT: ldarx 24, 0, 27
2766 ; CHECK-NEXT: sub 24, 24, 25
2767 ; CHECK-NEXT: stdcx. 24, 0, 27
2768 ; CHECK-NEXT: bne 0, .LBB2_29
2769 ; CHECK-NEXT: # %bb.30: # %entry
2770 ; CHECK-NEXT: lwsync
2771 ; CHECK-NEXT: std 24, sll@toc@l(30)
2772 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2774 ; CHECK-NEXT: .LBB2_31: # %entry
2776 ; CHECK-NEXT: ldarx 24, 0, 26
2777 ; CHECK-NEXT: sub 24, 24, 25
2778 ; CHECK-NEXT: stdcx. 24, 0, 26
2779 ; CHECK-NEXT: bne 0, .LBB2_31
2780 ; CHECK-NEXT: # %bb.32: # %entry
2781 ; CHECK-NEXT: lwsync
2782 ; CHECK-NEXT: std 24, ull@toc@l(28)
2783 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2785 ; CHECK-NEXT: .LBB2_33: # %entry
2787 ; CHECK-NEXT: lbarx 24, 0, 7
2788 ; CHECK-NEXT: or 24, 25, 24
2789 ; CHECK-NEXT: stbcx. 24, 0, 7
2790 ; CHECK-NEXT: bne 0, .LBB2_33
2791 ; CHECK-NEXT: # %bb.34: # %entry
2792 ; CHECK-NEXT: lwsync
2793 ; CHECK-NEXT: stb 24, sc@toc@l(5)
2794 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2796 ; CHECK-NEXT: .LBB2_35: # %entry
2798 ; CHECK-NEXT: lbarx 24, 0, 4
2799 ; CHECK-NEXT: or 24, 25, 24
2800 ; CHECK-NEXT: stbcx. 24, 0, 4
2801 ; CHECK-NEXT: bne 0, .LBB2_35
2802 ; CHECK-NEXT: # %bb.36: # %entry
2803 ; CHECK-NEXT: lwsync
2804 ; CHECK-NEXT: stb 24, uc@toc@l(3)
2805 ; CHECK-NEXT: clrlwi 25, 24, 24
2807 ; CHECK-NEXT: .LBB2_37: # %entry
2809 ; CHECK-NEXT: lharx 24, 0, 9
2810 ; CHECK-NEXT: or 24, 25, 24
2811 ; CHECK-NEXT: sthcx. 24, 0, 9
2812 ; CHECK-NEXT: bne 0, .LBB2_37
2813 ; CHECK-NEXT: # %bb.38: # %entry
2814 ; CHECK-NEXT: lwsync
2815 ; CHECK-NEXT: sth 24, ss@toc@l(6)
2816 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2818 ; CHECK-NEXT: .LBB2_39: # %entry
2820 ; CHECK-NEXT: lharx 24, 0, 11
2821 ; CHECK-NEXT: or 24, 25, 24
2822 ; CHECK-NEXT: sthcx. 24, 0, 11
2823 ; CHECK-NEXT: bne 0, .LBB2_39
2824 ; CHECK-NEXT: # %bb.40: # %entry
2825 ; CHECK-NEXT: lwsync
2826 ; CHECK-NEXT: sth 24, us@toc@l(8)
2827 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2829 ; CHECK-NEXT: .LBB2_41: # %entry
2831 ; CHECK-NEXT: lwarx 24, 0, 0
2832 ; CHECK-NEXT: or 24, 25, 24
2833 ; CHECK-NEXT: stwcx. 24, 0, 0
2834 ; CHECK-NEXT: bne 0, .LBB2_41
2835 ; CHECK-NEXT: # %bb.42: # %entry
2836 ; CHECK-NEXT: lwsync
2837 ; CHECK-NEXT: stw 24, si@toc@l(10)
2838 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2840 ; CHECK-NEXT: .LBB2_43: # %entry
2842 ; CHECK-NEXT: lwarx 24, 0, 29
2843 ; CHECK-NEXT: or 24, 25, 24
2844 ; CHECK-NEXT: stwcx. 24, 0, 29
2845 ; CHECK-NEXT: bne 0, .LBB2_43
2846 ; CHECK-NEXT: # %bb.44: # %entry
2847 ; CHECK-NEXT: lwsync
2848 ; CHECK-NEXT: stw 24, ui@toc@l(12)
2849 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2851 ; CHECK-NEXT: .LBB2_45: # %entry
2853 ; CHECK-NEXT: ldarx 24, 0, 27
2854 ; CHECK-NEXT: or 24, 25, 24
2855 ; CHECK-NEXT: stdcx. 24, 0, 27
2856 ; CHECK-NEXT: bne 0, .LBB2_45
2857 ; CHECK-NEXT: # %bb.46: # %entry
2858 ; CHECK-NEXT: lwsync
2859 ; CHECK-NEXT: std 24, sll@toc@l(30)
2860 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2862 ; CHECK-NEXT: .LBB2_47: # %entry
2864 ; CHECK-NEXT: ldarx 24, 0, 26
2865 ; CHECK-NEXT: or 24, 25, 24
2866 ; CHECK-NEXT: stdcx. 24, 0, 26
2867 ; CHECK-NEXT: bne 0, .LBB2_47
2868 ; CHECK-NEXT: # %bb.48: # %entry
2869 ; CHECK-NEXT: lwsync
2870 ; CHECK-NEXT: std 24, ull@toc@l(28)
2871 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2873 ; CHECK-NEXT: .LBB2_49: # %entry
2875 ; CHECK-NEXT: lbarx 24, 0, 7
2876 ; CHECK-NEXT: xor 24, 25, 24
2877 ; CHECK-NEXT: stbcx. 24, 0, 7
2878 ; CHECK-NEXT: bne 0, .LBB2_49
2879 ; CHECK-NEXT: # %bb.50: # %entry
2880 ; CHECK-NEXT: lwsync
2881 ; CHECK-NEXT: stb 24, sc@toc@l(5)
2882 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2884 ; CHECK-NEXT: .LBB2_51: # %entry
2886 ; CHECK-NEXT: lbarx 24, 0, 4
2887 ; CHECK-NEXT: xor 24, 25, 24
2888 ; CHECK-NEXT: stbcx. 24, 0, 4
2889 ; CHECK-NEXT: bne 0, .LBB2_51
2890 ; CHECK-NEXT: # %bb.52: # %entry
2891 ; CHECK-NEXT: lwsync
2892 ; CHECK-NEXT: stb 24, uc@toc@l(3)
2893 ; CHECK-NEXT: clrlwi 25, 24, 24
2895 ; CHECK-NEXT: .LBB2_53: # %entry
2897 ; CHECK-NEXT: lharx 24, 0, 9
2898 ; CHECK-NEXT: xor 24, 25, 24
2899 ; CHECK-NEXT: sthcx. 24, 0, 9
2900 ; CHECK-NEXT: bne 0, .LBB2_53
2901 ; CHECK-NEXT: # %bb.54: # %entry
2902 ; CHECK-NEXT: lwsync
2903 ; CHECK-NEXT: sth 24, ss@toc@l(6)
2904 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2906 ; CHECK-NEXT: .LBB2_55: # %entry
2908 ; CHECK-NEXT: lharx 24, 0, 11
2909 ; CHECK-NEXT: xor 24, 25, 24
2910 ; CHECK-NEXT: sthcx. 24, 0, 11
2911 ; CHECK-NEXT: bne 0, .LBB2_55
2912 ; CHECK-NEXT: # %bb.56: # %entry
2913 ; CHECK-NEXT: lwsync
2914 ; CHECK-NEXT: sth 24, us@toc@l(8)
2915 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2917 ; CHECK-NEXT: .LBB2_57: # %entry
2919 ; CHECK-NEXT: lwarx 24, 0, 0
2920 ; CHECK-NEXT: xor 24, 25, 24
2921 ; CHECK-NEXT: stwcx. 24, 0, 0
2922 ; CHECK-NEXT: bne 0, .LBB2_57
2923 ; CHECK-NEXT: # %bb.58: # %entry
2924 ; CHECK-NEXT: lwsync
2925 ; CHECK-NEXT: stw 24, si@toc@l(10)
2926 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2928 ; CHECK-NEXT: .LBB2_59: # %entry
2930 ; CHECK-NEXT: lwarx 24, 0, 29
2931 ; CHECK-NEXT: xor 24, 25, 24
2932 ; CHECK-NEXT: stwcx. 24, 0, 29
2933 ; CHECK-NEXT: bne 0, .LBB2_59
2934 ; CHECK-NEXT: # %bb.60: # %entry
2935 ; CHECK-NEXT: lwsync
2936 ; CHECK-NEXT: stw 24, ui@toc@l(12)
2937 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2939 ; CHECK-NEXT: .LBB2_61: # %entry
2941 ; CHECK-NEXT: ldarx 24, 0, 27
2942 ; CHECK-NEXT: xor 24, 25, 24
2943 ; CHECK-NEXT: stdcx. 24, 0, 27
2944 ; CHECK-NEXT: bne 0, .LBB2_61
2945 ; CHECK-NEXT: # %bb.62: # %entry
2946 ; CHECK-NEXT: lwsync
2947 ; CHECK-NEXT: std 24, sll@toc@l(30)
2948 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2950 ; CHECK-NEXT: .LBB2_63: # %entry
2952 ; CHECK-NEXT: ldarx 24, 0, 26
2953 ; CHECK-NEXT: xor 24, 25, 24
2954 ; CHECK-NEXT: stdcx. 24, 0, 26
2955 ; CHECK-NEXT: bne 0, .LBB2_63
2956 ; CHECK-NEXT: # %bb.64: # %entry
2957 ; CHECK-NEXT: lwsync
2958 ; CHECK-NEXT: std 24, ull@toc@l(28)
2959 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2961 ; CHECK-NEXT: .LBB2_65: # %entry
2963 ; CHECK-NEXT: lbarx 24, 0, 7
2964 ; CHECK-NEXT: nand 24, 25, 24
2965 ; CHECK-NEXT: stbcx. 24, 0, 7
2966 ; CHECK-NEXT: bne 0, .LBB2_65
2967 ; CHECK-NEXT: # %bb.66: # %entry
2968 ; CHECK-NEXT: lwsync
2969 ; CHECK-NEXT: stb 24, sc@toc@l(5)
2970 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2972 ; CHECK-NEXT: .LBB2_67: # %entry
2974 ; CHECK-NEXT: lbarx 24, 0, 4
2975 ; CHECK-NEXT: nand 24, 25, 24
2976 ; CHECK-NEXT: stbcx. 24, 0, 4
2977 ; CHECK-NEXT: bne 0, .LBB2_67
2978 ; CHECK-NEXT: # %bb.68: # %entry
2979 ; CHECK-NEXT: lwsync
2980 ; CHECK-NEXT: stb 24, uc@toc@l(3)
2981 ; CHECK-NEXT: clrlwi 25, 24, 24
2983 ; CHECK-NEXT: .LBB2_69: # %entry
2985 ; CHECK-NEXT: lharx 24, 0, 9
2986 ; CHECK-NEXT: nand 24, 25, 24
2987 ; CHECK-NEXT: sthcx. 24, 0, 9
2988 ; CHECK-NEXT: bne 0, .LBB2_69
2989 ; CHECK-NEXT: # %bb.70: # %entry
2990 ; CHECK-NEXT: lwsync
2991 ; CHECK-NEXT: sth 24, ss@toc@l(6)
2992 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2994 ; CHECK-NEXT: .LBB2_71: # %entry
2996 ; CHECK-NEXT: lharx 24, 0, 11
2997 ; CHECK-NEXT: nand 24, 25, 24
2998 ; CHECK-NEXT: sthcx. 24, 0, 11
2999 ; CHECK-NEXT: bne 0, .LBB2_71
3000 ; CHECK-NEXT: # %bb.72: # %entry
3001 ; CHECK-NEXT: lwsync
3002 ; CHECK-NEXT: sth 24, us@toc@l(8)
3003 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
3005 ; CHECK-NEXT: .LBB2_73: # %entry
3007 ; CHECK-NEXT: lwarx 24, 0, 0
3008 ; CHECK-NEXT: nand 24, 25, 24
3009 ; CHECK-NEXT: stwcx. 24, 0, 0
3010 ; CHECK-NEXT: bne 0, .LBB2_73
3011 ; CHECK-NEXT: # %bb.74: # %entry
3012 ; CHECK-NEXT: lwsync
3013 ; CHECK-NEXT: stw 24, si@toc@l(10)
3014 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
3016 ; CHECK-NEXT: .LBB2_75: # %entry
3018 ; CHECK-NEXT: lwarx 24, 0, 29
3019 ; CHECK-NEXT: nand 24, 25, 24
3020 ; CHECK-NEXT: stwcx. 24, 0, 29
3021 ; CHECK-NEXT: bne 0, .LBB2_75
3022 ; CHECK-NEXT: # %bb.76: # %entry
3023 ; CHECK-NEXT: lwsync
3024 ; CHECK-NEXT: stw 24, ui@toc@l(12)
3025 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
3027 ; CHECK-NEXT: .LBB2_77: # %entry
3029 ; CHECK-NEXT: ldarx 24, 0, 27
3030 ; CHECK-NEXT: nand 24, 25, 24
3031 ; CHECK-NEXT: stdcx. 24, 0, 27
3032 ; CHECK-NEXT: bne 0, .LBB2_77
3033 ; CHECK-NEXT: # %bb.78: # %entry
3034 ; CHECK-NEXT: lwsync
3035 ; CHECK-NEXT: std 24, sll@toc@l(30)
3036 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
3038 ; CHECK-NEXT: .LBB2_79: # %entry
3040 ; CHECK-NEXT: ldarx 24, 0, 26
3041 ; CHECK-NEXT: nand 24, 25, 24
3042 ; CHECK-NEXT: stdcx. 24, 0, 26
3043 ; CHECK-NEXT: bne 0, .LBB2_79
3044 ; CHECK-NEXT: # %bb.80: # %entry
3045 ; CHECK-NEXT: lwsync
3046 ; CHECK-NEXT: std 24, ull@toc@l(28)
3047 ; CHECK-NEXT: addis 24, 2, u128@toc@ha
3048 ; CHECK-NEXT: li 22, 0
3049 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
3051 ; CHECK-NEXT: addi 23, 24, u128@toc@l
3052 ; CHECK-NEXT: .LBB2_81: # %entry
3054 ; CHECK-NEXT: lqarx 20, 0, 23
3055 ; CHECK-NEXT: nand 19, 25, 21
3056 ; CHECK-NEXT: nand 18, 22, 20
3057 ; CHECK-NEXT: stqcx. 18, 0, 23
3058 ; CHECK-NEXT: bne 0, .LBB2_81
3059 ; CHECK-NEXT: # %bb.82: # %entry
3060 ; CHECK-NEXT: lwsync
3061 ; CHECK-NEXT: nand 25, 21, 25
3062 ; CHECK-NEXT: li 21, -1
3063 ; CHECK-NEXT: std 25, u128@toc@l(24)
3064 ; CHECK-NEXT: addis 24, 2, s128@toc@ha
3065 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
3066 ; CHECK-NEXT: std 21, 8(23)
3068 ; CHECK-NEXT: addi 23, 24, s128@toc@l
3069 ; CHECK-NEXT: .LBB2_83: # %entry
3071 ; CHECK-NEXT: lqarx 18, 0, 23
3072 ; CHECK-NEXT: nand 17, 25, 19
3073 ; CHECK-NEXT: nand 16, 22, 18
3074 ; CHECK-NEXT: stqcx. 16, 0, 23
3075 ; CHECK-NEXT: bne 0, .LBB2_83
3076 ; CHECK-NEXT: # %bb.84: # %entry
3077 ; CHECK-NEXT: lwsync
3078 ; CHECK-NEXT: std 21, 8(23)
3079 ; CHECK-NEXT: nand 25, 19, 25
3080 ; CHECK-NEXT: std 25, s128@toc@l(24)
3081 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
3083 ; CHECK-NEXT: .LBB2_85: # %entry
3085 ; CHECK-NEXT: lbarx 24, 0, 7
3086 ; CHECK-NEXT: and 24, 25, 24
3087 ; CHECK-NEXT: stbcx. 24, 0, 7
3088 ; CHECK-NEXT: bne 0, .LBB2_85
3089 ; CHECK-NEXT: # %bb.86: # %entry
3090 ; CHECK-NEXT: lwsync
3091 ; CHECK-NEXT: stb 24, sc@toc@l(5)
3092 ; CHECK-NEXT: lbz 7, uc@toc@l(3)
3094 ; CHECK-NEXT: .LBB2_87: # %entry
3096 ; CHECK-NEXT: lbarx 5, 0, 4
3097 ; CHECK-NEXT: and 5, 7, 5
3098 ; CHECK-NEXT: stbcx. 5, 0, 4
3099 ; CHECK-NEXT: bne 0, .LBB2_87
3100 ; CHECK-NEXT: # %bb.88: # %entry
3101 ; CHECK-NEXT: lwsync
3102 ; CHECK-NEXT: stb 5, uc@toc@l(3)
3104 ; CHECK-NEXT: .LBB2_89: # %entry
3106 ; CHECK-NEXT: lharx 4, 0, 9
3107 ; CHECK-NEXT: and 4, 5, 4
3108 ; CHECK-NEXT: sthcx. 4, 0, 9
3109 ; CHECK-NEXT: bne 0, .LBB2_89
3110 ; CHECK-NEXT: # %bb.90: # %entry
3111 ; CHECK-NEXT: lwsync
3112 ; CHECK-NEXT: sth 4, ss@toc@l(6)
3113 ; CHECK-NEXT: lbz 4, uc@toc@l(3)
3115 ; CHECK-NEXT: .LBB2_91: # %entry
3117 ; CHECK-NEXT: lharx 5, 0, 11
3118 ; CHECK-NEXT: and 5, 4, 5
3119 ; CHECK-NEXT: sthcx. 5, 0, 11
3120 ; CHECK-NEXT: bne 0, .LBB2_91
3121 ; CHECK-NEXT: # %bb.92: # %entry
3122 ; CHECK-NEXT: lwsync
3123 ; CHECK-NEXT: sth 5, us@toc@l(8)
3124 ; CHECK-NEXT: lbz 4, uc@toc@l(3)
3126 ; CHECK-NEXT: .LBB2_93: # %entry
3128 ; CHECK-NEXT: lwarx 5, 0, 0
3129 ; CHECK-NEXT: and 5, 4, 5
3130 ; CHECK-NEXT: stwcx. 5, 0, 0
3131 ; CHECK-NEXT: bne 0, .LBB2_93
3132 ; CHECK-NEXT: # %bb.94: # %entry
3133 ; CHECK-NEXT: lwsync
3134 ; CHECK-NEXT: stw 5, si@toc@l(10)
3135 ; CHECK-NEXT: lbz 4, uc@toc@l(3)
3137 ; CHECK-NEXT: .LBB2_95: # %entry
3139 ; CHECK-NEXT: lwarx 5, 0, 29
3140 ; CHECK-NEXT: and 5, 4, 5
3141 ; CHECK-NEXT: stwcx. 5, 0, 29
3142 ; CHECK-NEXT: bne 0, .LBB2_95
3143 ; CHECK-NEXT: # %bb.96: # %entry
3144 ; CHECK-NEXT: lwsync
3145 ; CHECK-NEXT: stw 5, ui@toc@l(12)
3146 ; CHECK-NEXT: lbz 4, uc@toc@l(3)
3148 ; CHECK-NEXT: .LBB2_97: # %entry
3150 ; CHECK-NEXT: ldarx 5, 0, 27
3151 ; CHECK-NEXT: and 5, 4, 5
3152 ; CHECK-NEXT: stdcx. 5, 0, 27
3153 ; CHECK-NEXT: bne 0, .LBB2_97
3154 ; CHECK-NEXT: # %bb.98: # %entry
3155 ; CHECK-NEXT: lwsync
3156 ; CHECK-NEXT: std 5, sll@toc@l(30)
3157 ; CHECK-NEXT: lbz 3, uc@toc@l(3)
3159 ; CHECK-NEXT: .LBB2_99: # %entry
3161 ; CHECK-NEXT: ldarx 4, 0, 26
3162 ; CHECK-NEXT: and 4, 3, 4
3163 ; CHECK-NEXT: stdcx. 4, 0, 26
3164 ; CHECK-NEXT: bne 0, .LBB2_99
3165 ; CHECK-NEXT: # %bb.100: # %entry
3166 ; CHECK-NEXT: lwsync
3167 ; CHECK-NEXT: std 4, ull@toc@l(28)
3168 ; CHECK-NEXT: ld 30, -16(1) # 8-byte Folded Reload
3169 ; CHECK-NEXT: ld 29, -24(1) # 8-byte Folded Reload
3170 ; CHECK-NEXT: ld 28, -32(1) # 8-byte Folded Reload
3171 ; CHECK-NEXT: ld 27, -40(1) # 8-byte Folded Reload
3172 ; CHECK-NEXT: ld 26, -48(1) # 8-byte Folded Reload
3173 ; CHECK-NEXT: ld 25, -56(1) # 8-byte Folded Reload
3174 ; CHECK-NEXT: ld 24, -64(1) # 8-byte Folded Reload
3175 ; CHECK-NEXT: ld 23, -72(1) # 8-byte Folded Reload
3176 ; CHECK-NEXT: ld 22, -80(1) # 8-byte Folded Reload
3177 ; CHECK-NEXT: ld 21, -88(1) # 8-byte Folded Reload
3178 ; CHECK-NEXT: ld 20, -96(1) # 8-byte Folded Reload
3179 ; CHECK-NEXT: ld 19, -104(1) # 8-byte Folded Reload
3180 ; CHECK-NEXT: ld 18, -112(1) # 8-byte Folded Reload
3181 ; CHECK-NEXT: ld 17, -120(1) # 8-byte Folded Reload
3182 ; CHECK-NEXT: ld 16, -128(1) # 8-byte Folded Reload
3185 ; AIX32-LABEL: test_op_and_fetch:
3186 ; AIX32: # %bb.0: # %entry
3187 ; AIX32-NEXT: mflr 0
3188 ; AIX32-NEXT: stwu 1, -176(1)
3189 ; AIX32-NEXT: stw 0, 184(1)
3190 ; AIX32-NEXT: stw 27, 156(1) # 4-byte Folded Spill
3191 ; AIX32-NEXT: lwz 27, L..C0(2) # @sc
3192 ; AIX32-NEXT: stw 26, 152(1) # 4-byte Folded Spill
3193 ; AIX32-NEXT: lwz 26, L..C1(2) # @uc
3194 ; AIX32-NEXT: lbz 3, 0(26)
3195 ; AIX32-NEXT: rlwinm 4, 27, 3, 27, 28
3196 ; AIX32-NEXT: stw 24, 144(1) # 4-byte Folded Spill
3197 ; AIX32-NEXT: li 5, 255
3198 ; AIX32-NEXT: stw 13, 100(1) # 4-byte Folded Spill
3199 ; AIX32-NEXT: stw 14, 104(1) # 4-byte Folded Spill
3200 ; AIX32-NEXT: stw 15, 108(1) # 4-byte Folded Spill
3201 ; AIX32-NEXT: xori 24, 4, 24
3202 ; AIX32-NEXT: stw 16, 112(1) # 4-byte Folded Spill
3203 ; AIX32-NEXT: stw 17, 116(1) # 4-byte Folded Spill
3204 ; AIX32-NEXT: stw 18, 120(1) # 4-byte Folded Spill
3205 ; AIX32-NEXT: stw 19, 124(1) # 4-byte Folded Spill
3206 ; AIX32-NEXT: stw 20, 128(1) # 4-byte Folded Spill
3207 ; AIX32-NEXT: stw 21, 132(1) # 4-byte Folded Spill
3208 ; AIX32-NEXT: stw 22, 136(1) # 4-byte Folded Spill
3209 ; AIX32-NEXT: stw 23, 140(1) # 4-byte Folded Spill
3210 ; AIX32-NEXT: stw 25, 148(1) # 4-byte Folded Spill
3211 ; AIX32-NEXT: stw 28, 160(1) # 4-byte Folded Spill
3212 ; AIX32-NEXT: stw 29, 164(1) # 4-byte Folded Spill
3213 ; AIX32-NEXT: stw 30, 168(1) # 4-byte Folded Spill
3214 ; AIX32-NEXT: stw 31, 172(1) # 4-byte Folded Spill
3215 ; AIX32-NEXT: li 17, -1
3217 ; AIX32-NEXT: rlwinm 22, 27, 0, 0, 29
3218 ; AIX32-NEXT: slw 4, 3, 24
3219 ; AIX32-NEXT: slw 5, 5, 24
3220 ; AIX32-NEXT: L..BB2_1: # %entry
3222 ; AIX32-NEXT: lwarx 6, 0, 22
3223 ; AIX32-NEXT: add 7, 4, 6
3224 ; AIX32-NEXT: andc 8, 6, 5
3225 ; AIX32-NEXT: and 7, 7, 5
3226 ; AIX32-NEXT: or 7, 7, 8
3227 ; AIX32-NEXT: stwcx. 7, 0, 22
3228 ; AIX32-NEXT: bne 0, L..BB2_1
3229 ; AIX32-NEXT: # %bb.2: # %entry
3230 ; AIX32-NEXT: srw 4, 6, 24
3231 ; AIX32-NEXT: lwsync
3232 ; AIX32-NEXT: li 5, 255
3233 ; AIX32-NEXT: rlwinm 19, 26, 0, 0, 29
3234 ; AIX32-NEXT: clrlwi 4, 4, 24
3235 ; AIX32-NEXT: add 3, 4, 3
3236 ; AIX32-NEXT: rlwinm 4, 26, 3, 27, 28
3237 ; AIX32-NEXT: stb 3, 0(27)
3238 ; AIX32-NEXT: lbz 3, 0(26)
3239 ; AIX32-NEXT: xori 21, 4, 24
3241 ; AIX32-NEXT: slw 5, 5, 21
3242 ; AIX32-NEXT: slw 4, 3, 21
3243 ; AIX32-NEXT: L..BB2_3: # %entry
3245 ; AIX32-NEXT: lwarx 6, 0, 19
3246 ; AIX32-NEXT: add 7, 4, 6
3247 ; AIX32-NEXT: andc 8, 6, 5
3248 ; AIX32-NEXT: and 7, 7, 5
3249 ; AIX32-NEXT: or 7, 7, 8
3250 ; AIX32-NEXT: stwcx. 7, 0, 19
3251 ; AIX32-NEXT: bne 0, L..BB2_3
3252 ; AIX32-NEXT: # %bb.4: # %entry
3253 ; AIX32-NEXT: srw 4, 6, 21
3254 ; AIX32-NEXT: lwz 23, L..C2(2) # @ss
3255 ; AIX32-NEXT: li 5, 0
3256 ; AIX32-NEXT: lwsync
3257 ; AIX32-NEXT: clrlwi 4, 4, 24
3258 ; AIX32-NEXT: ori 5, 5, 65535
3259 ; AIX32-NEXT: rlwinm 16, 23, 0, 0, 29
3260 ; AIX32-NEXT: add 3, 4, 3
3261 ; AIX32-NEXT: rlwinm 4, 23, 3, 27, 27
3262 ; AIX32-NEXT: xori 18, 4, 16
3263 ; AIX32-NEXT: stb 3, 0(26)
3264 ; AIX32-NEXT: clrlwi 3, 3, 24
3266 ; AIX32-NEXT: slw 4, 3, 18
3267 ; AIX32-NEXT: slw 5, 5, 18
3268 ; AIX32-NEXT: L..BB2_5: # %entry
3270 ; AIX32-NEXT: lwarx 6, 0, 16
3271 ; AIX32-NEXT: add 7, 4, 6
3272 ; AIX32-NEXT: andc 8, 6, 5
3273 ; AIX32-NEXT: and 7, 7, 5
3274 ; AIX32-NEXT: or 7, 7, 8
3275 ; AIX32-NEXT: stwcx. 7, 0, 16
3276 ; AIX32-NEXT: bne 0, L..BB2_5
3277 ; AIX32-NEXT: # %bb.6: # %entry
3278 ; AIX32-NEXT: srw 4, 6, 18
3279 ; AIX32-NEXT: lwz 20, L..C3(2) # @us
3280 ; AIX32-NEXT: lwsync
3281 ; AIX32-NEXT: li 5, 0
3282 ; AIX32-NEXT: clrlwi 4, 4, 16
3283 ; AIX32-NEXT: ori 5, 5, 65535
3284 ; AIX32-NEXT: rlwinm 14, 20, 0, 0, 29
3285 ; AIX32-NEXT: add 3, 4, 3
3286 ; AIX32-NEXT: rlwinm 4, 20, 3, 27, 27
3287 ; AIX32-NEXT: xori 15, 4, 16
3288 ; AIX32-NEXT: sth 3, 0(23)
3289 ; AIX32-NEXT: lbz 3, 0(26)
3291 ; AIX32-NEXT: slw 5, 5, 15
3292 ; AIX32-NEXT: slw 4, 3, 15
3293 ; AIX32-NEXT: L..BB2_7: # %entry
3295 ; AIX32-NEXT: lwarx 6, 0, 14
3296 ; AIX32-NEXT: add 7, 4, 6
3297 ; AIX32-NEXT: andc 8, 6, 5
3298 ; AIX32-NEXT: and 7, 7, 5
3299 ; AIX32-NEXT: or 7, 7, 8
3300 ; AIX32-NEXT: stwcx. 7, 0, 14
3301 ; AIX32-NEXT: bne 0, L..BB2_7
3302 ; AIX32-NEXT: # %bb.8: # %entry
3303 ; AIX32-NEXT: srw 4, 6, 15
3304 ; AIX32-NEXT: lwsync
3305 ; AIX32-NEXT: lwz 13, L..C4(2) # @si
3306 ; AIX32-NEXT: clrlwi 4, 4, 16
3307 ; AIX32-NEXT: add 3, 4, 3
3308 ; AIX32-NEXT: sth 3, 0(20)
3309 ; AIX32-NEXT: lbz 3, 0(26)
3311 ; AIX32-NEXT: L..BB2_9: # %entry
3313 ; AIX32-NEXT: lwarx 4, 0, 13
3314 ; AIX32-NEXT: add 4, 3, 4
3315 ; AIX32-NEXT: stwcx. 4, 0, 13
3316 ; AIX32-NEXT: bne 0, L..BB2_9
3317 ; AIX32-NEXT: # %bb.10: # %entry
3318 ; AIX32-NEXT: lwsync
3319 ; AIX32-NEXT: stw 4, 0(13)
3320 ; AIX32-NEXT: lwz 25, L..C5(2) # @ui
3321 ; AIX32-NEXT: lbz 3, 0(26)
3323 ; AIX32-NEXT: L..BB2_11: # %entry
3325 ; AIX32-NEXT: lwarx 4, 0, 25
3326 ; AIX32-NEXT: add 4, 3, 4
3327 ; AIX32-NEXT: stwcx. 4, 0, 25
3328 ; AIX32-NEXT: bne 0, L..BB2_11
3329 ; AIX32-NEXT: # %bb.12: # %entry
3330 ; AIX32-NEXT: lwsync
3331 ; AIX32-NEXT: lwz 31, L..C6(2) # @sll
3332 ; AIX32-NEXT: stw 4, 0(25)
3333 ; AIX32-NEXT: lbz 30, 0(26)
3334 ; AIX32-NEXT: li 4, 0
3335 ; AIX32-NEXT: li 6, 5
3336 ; AIX32-NEXT: li 28, 0
3337 ; AIX32-NEXT: mr 3, 31
3338 ; AIX32-NEXT: mr 5, 30
3339 ; AIX32-NEXT: bl .__atomic_fetch_add_8[PR]
3341 ; AIX32-NEXT: addc 4, 4, 30
3342 ; AIX32-NEXT: lbz 29, 0(26)
3343 ; AIX32-NEXT: lwz 30, L..C7(2) # @ull
3344 ; AIX32-NEXT: li 6, 5
3345 ; AIX32-NEXT: addze 3, 3
3346 ; AIX32-NEXT: stw 4, 4(31)
3347 ; AIX32-NEXT: li 4, 0
3348 ; AIX32-NEXT: stw 3, 0(31)
3349 ; AIX32-NEXT: mr 3, 30
3350 ; AIX32-NEXT: mr 5, 29
3351 ; AIX32-NEXT: bl .__atomic_fetch_add_8[PR]
3353 ; AIX32-NEXT: addc 4, 4, 29
3354 ; AIX32-NEXT: li 5, 255
3355 ; AIX32-NEXT: addze 3, 3
3356 ; AIX32-NEXT: stw 3, 0(30)
3357 ; AIX32-NEXT: lbz 3, 0(26)
3358 ; AIX32-NEXT: slw 5, 5, 24
3359 ; AIX32-NEXT: stw 4, 4(30)
3361 ; AIX32-NEXT: slw 4, 3, 24
3362 ; AIX32-NEXT: L..BB2_13: # %entry
3364 ; AIX32-NEXT: lwarx 6, 0, 22
3365 ; AIX32-NEXT: sub 7, 6, 4
3366 ; AIX32-NEXT: andc 8, 6, 5
3367 ; AIX32-NEXT: and 7, 7, 5
3368 ; AIX32-NEXT: or 7, 7, 8
3369 ; AIX32-NEXT: stwcx. 7, 0, 22
3370 ; AIX32-NEXT: bne 0, L..BB2_13
3371 ; AIX32-NEXT: # %bb.14: # %entry
3372 ; AIX32-NEXT: srw 4, 6, 24
3373 ; AIX32-NEXT: lwsync
3374 ; AIX32-NEXT: li 5, 255
3375 ; AIX32-NEXT: clrlwi 4, 4, 24
3376 ; AIX32-NEXT: slw 5, 5, 21
3377 ; AIX32-NEXT: sub 3, 4, 3
3378 ; AIX32-NEXT: stb 3, 0(27)
3379 ; AIX32-NEXT: lbz 3, 0(26)
3381 ; AIX32-NEXT: slw 4, 3, 21
3382 ; AIX32-NEXT: L..BB2_15: # %entry
3384 ; AIX32-NEXT: lwarx 6, 0, 19
3385 ; AIX32-NEXT: sub 7, 6, 4
3386 ; AIX32-NEXT: andc 8, 6, 5
3387 ; AIX32-NEXT: and 7, 7, 5
3388 ; AIX32-NEXT: or 7, 7, 8
3389 ; AIX32-NEXT: stwcx. 7, 0, 19
3390 ; AIX32-NEXT: bne 0, L..BB2_15
3391 ; AIX32-NEXT: # %bb.16: # %entry
3392 ; AIX32-NEXT: srw 4, 6, 21
3393 ; AIX32-NEXT: li 5, 0
3394 ; AIX32-NEXT: lwsync
3395 ; AIX32-NEXT: clrlwi 4, 4, 24
3396 ; AIX32-NEXT: ori 5, 5, 65535
3397 ; AIX32-NEXT: sub 3, 4, 3
3398 ; AIX32-NEXT: slw 5, 5, 18
3399 ; AIX32-NEXT: stb 3, 0(26)
3401 ; AIX32-NEXT: clrlwi 3, 3, 24
3402 ; AIX32-NEXT: slw 4, 3, 18
3403 ; AIX32-NEXT: L..BB2_17: # %entry
3405 ; AIX32-NEXT: lwarx 6, 0, 16
3406 ; AIX32-NEXT: sub 7, 6, 4
3407 ; AIX32-NEXT: andc 8, 6, 5
3408 ; AIX32-NEXT: and 7, 7, 5
3409 ; AIX32-NEXT: or 7, 7, 8
3410 ; AIX32-NEXT: stwcx. 7, 0, 16
3411 ; AIX32-NEXT: bne 0, L..BB2_17
3412 ; AIX32-NEXT: # %bb.18: # %entry
3413 ; AIX32-NEXT: srw 4, 6, 18
3414 ; AIX32-NEXT: lwsync
3415 ; AIX32-NEXT: li 5, 0
3416 ; AIX32-NEXT: clrlwi 4, 4, 16
3417 ; AIX32-NEXT: ori 5, 5, 65535
3418 ; AIX32-NEXT: sub 3, 4, 3
3419 ; AIX32-NEXT: slw 5, 5, 15
3420 ; AIX32-NEXT: sth 3, 0(23)
3421 ; AIX32-NEXT: lbz 3, 0(26)
3423 ; AIX32-NEXT: slw 4, 3, 15
3424 ; AIX32-NEXT: L..BB2_19: # %entry
3426 ; AIX32-NEXT: lwarx 6, 0, 14
3427 ; AIX32-NEXT: sub 7, 6, 4
3428 ; AIX32-NEXT: andc 8, 6, 5
3429 ; AIX32-NEXT: and 7, 7, 5
3430 ; AIX32-NEXT: or 7, 7, 8
3431 ; AIX32-NEXT: stwcx. 7, 0, 14
3432 ; AIX32-NEXT: bne 0, L..BB2_19
3433 ; AIX32-NEXT: # %bb.20: # %entry
3434 ; AIX32-NEXT: srw 4, 6, 15
3435 ; AIX32-NEXT: lwsync
3436 ; AIX32-NEXT: clrlwi 4, 4, 16
3437 ; AIX32-NEXT: sub 3, 4, 3
3438 ; AIX32-NEXT: sth 3, 0(20)
3439 ; AIX32-NEXT: lbz 3, 0(26)
3441 ; AIX32-NEXT: L..BB2_21: # %entry
3443 ; AIX32-NEXT: lwarx 4, 0, 13
3444 ; AIX32-NEXT: sub 4, 4, 3
3445 ; AIX32-NEXT: stwcx. 4, 0, 13
3446 ; AIX32-NEXT: bne 0, L..BB2_21
3447 ; AIX32-NEXT: # %bb.22: # %entry
3448 ; AIX32-NEXT: lwsync
3449 ; AIX32-NEXT: stw 4, 0(13)
3450 ; AIX32-NEXT: lbz 3, 0(26)
3452 ; AIX32-NEXT: L..BB2_23: # %entry
3454 ; AIX32-NEXT: lwarx 4, 0, 25
3455 ; AIX32-NEXT: sub 4, 4, 3
3456 ; AIX32-NEXT: stwcx. 4, 0, 25
3457 ; AIX32-NEXT: bne 0, L..BB2_23
3458 ; AIX32-NEXT: # %bb.24: # %entry
3459 ; AIX32-NEXT: lwsync
3460 ; AIX32-NEXT: stw 4, 0(25)
3461 ; AIX32-NEXT: li 4, 0
3462 ; AIX32-NEXT: lbz 29, 0(26)
3463 ; AIX32-NEXT: li 6, 5
3464 ; AIX32-NEXT: mr 3, 31
3465 ; AIX32-NEXT: mr 5, 29
3466 ; AIX32-NEXT: bl .__atomic_fetch_sub_8[PR]
3468 ; AIX32-NEXT: subc 4, 4, 29
3469 ; AIX32-NEXT: lbz 29, 0(26)
3470 ; AIX32-NEXT: li 6, 5
3471 ; AIX32-NEXT: mr 5, 29
3472 ; AIX32-NEXT: subfe 3, 28, 3
3473 ; AIX32-NEXT: stw 4, 4(31)
3474 ; AIX32-NEXT: li 4, 0
3475 ; AIX32-NEXT: stw 3, 0(31)
3476 ; AIX32-NEXT: mr 3, 30
3477 ; AIX32-NEXT: bl .__atomic_fetch_sub_8[PR]
3479 ; AIX32-NEXT: subc 4, 4, 29
3480 ; AIX32-NEXT: li 5, 255
3481 ; AIX32-NEXT: subfe 3, 28, 3
3482 ; AIX32-NEXT: stw 4, 4(30)
3483 ; AIX32-NEXT: slw 5, 5, 24
3484 ; AIX32-NEXT: stw 3, 0(30)
3485 ; AIX32-NEXT: lbz 3, 0(26)
3487 ; AIX32-NEXT: slw 4, 3, 24
3488 ; AIX32-NEXT: L..BB2_25: # %entry
3490 ; AIX32-NEXT: lwarx 6, 0, 22
3491 ; AIX32-NEXT: or 7, 4, 6
3492 ; AIX32-NEXT: andc 8, 6, 5
3493 ; AIX32-NEXT: and 7, 7, 5
3494 ; AIX32-NEXT: or 7, 7, 8
3495 ; AIX32-NEXT: stwcx. 7, 0, 22
3496 ; AIX32-NEXT: bne 0, L..BB2_25
3497 ; AIX32-NEXT: # %bb.26: # %entry
3498 ; AIX32-NEXT: srw 4, 6, 24
3499 ; AIX32-NEXT: lwsync
3500 ; AIX32-NEXT: li 5, 255
3501 ; AIX32-NEXT: clrlwi 4, 4, 24
3502 ; AIX32-NEXT: slw 5, 5, 21
3503 ; AIX32-NEXT: or 3, 4, 3
3504 ; AIX32-NEXT: stb 3, 0(27)
3505 ; AIX32-NEXT: lbz 3, 0(26)
3507 ; AIX32-NEXT: slw 4, 3, 21
3508 ; AIX32-NEXT: L..BB2_27: # %entry
3510 ; AIX32-NEXT: lwarx 6, 0, 19
3511 ; AIX32-NEXT: or 7, 4, 6
3512 ; AIX32-NEXT: andc 8, 6, 5
3513 ; AIX32-NEXT: and 7, 7, 5
3514 ; AIX32-NEXT: or 7, 7, 8
3515 ; AIX32-NEXT: stwcx. 7, 0, 19
3516 ; AIX32-NEXT: bne 0, L..BB2_27
3517 ; AIX32-NEXT: # %bb.28: # %entry
3518 ; AIX32-NEXT: srw 4, 6, 21
3519 ; AIX32-NEXT: li 5, 0
3520 ; AIX32-NEXT: lwsync
3521 ; AIX32-NEXT: clrlwi 4, 4, 24
3522 ; AIX32-NEXT: ori 5, 5, 65535
3523 ; AIX32-NEXT: or 3, 4, 3
3524 ; AIX32-NEXT: slw 5, 5, 18
3525 ; AIX32-NEXT: stb 3, 0(26)
3527 ; AIX32-NEXT: clrlwi 3, 3, 24
3528 ; AIX32-NEXT: slw 4, 3, 18
3529 ; AIX32-NEXT: L..BB2_29: # %entry
3531 ; AIX32-NEXT: lwarx 6, 0, 16
3532 ; AIX32-NEXT: or 7, 4, 6
3533 ; AIX32-NEXT: andc 8, 6, 5
3534 ; AIX32-NEXT: and 7, 7, 5
3535 ; AIX32-NEXT: or 7, 7, 8
3536 ; AIX32-NEXT: stwcx. 7, 0, 16
3537 ; AIX32-NEXT: bne 0, L..BB2_29
3538 ; AIX32-NEXT: # %bb.30: # %entry
3539 ; AIX32-NEXT: srw 4, 6, 18
3540 ; AIX32-NEXT: lwsync
3541 ; AIX32-NEXT: li 5, 0
3542 ; AIX32-NEXT: clrlwi 4, 4, 16
3543 ; AIX32-NEXT: ori 5, 5, 65535
3544 ; AIX32-NEXT: or 3, 4, 3
3545 ; AIX32-NEXT: slw 5, 5, 15
3546 ; AIX32-NEXT: sth 3, 0(23)
3547 ; AIX32-NEXT: lbz 3, 0(26)
3549 ; AIX32-NEXT: slw 4, 3, 15
3550 ; AIX32-NEXT: L..BB2_31: # %entry
3552 ; AIX32-NEXT: lwarx 6, 0, 14
3553 ; AIX32-NEXT: or 7, 4, 6
3554 ; AIX32-NEXT: andc 8, 6, 5
3555 ; AIX32-NEXT: and 7, 7, 5
3556 ; AIX32-NEXT: or 7, 7, 8
3557 ; AIX32-NEXT: stwcx. 7, 0, 14
3558 ; AIX32-NEXT: bne 0, L..BB2_31
3559 ; AIX32-NEXT: # %bb.32: # %entry
3560 ; AIX32-NEXT: srw 4, 6, 15
3561 ; AIX32-NEXT: lwsync
3562 ; AIX32-NEXT: clrlwi 4, 4, 16
3563 ; AIX32-NEXT: or 3, 4, 3
3564 ; AIX32-NEXT: sth 3, 0(20)
3565 ; AIX32-NEXT: lbz 3, 0(26)
3567 ; AIX32-NEXT: L..BB2_33: # %entry
3569 ; AIX32-NEXT: lwarx 4, 0, 13
3570 ; AIX32-NEXT: or 4, 3, 4
3571 ; AIX32-NEXT: stwcx. 4, 0, 13
3572 ; AIX32-NEXT: bne 0, L..BB2_33
3573 ; AIX32-NEXT: # %bb.34: # %entry
3574 ; AIX32-NEXT: lwsync
3575 ; AIX32-NEXT: stw 4, 0(13)
3576 ; AIX32-NEXT: lbz 3, 0(26)
3578 ; AIX32-NEXT: L..BB2_35: # %entry
3580 ; AIX32-NEXT: lwarx 4, 0, 25
3581 ; AIX32-NEXT: or 4, 3, 4
3582 ; AIX32-NEXT: stwcx. 4, 0, 25
3583 ; AIX32-NEXT: bne 0, L..BB2_35
3584 ; AIX32-NEXT: # %bb.36: # %entry
3585 ; AIX32-NEXT: lwsync
3586 ; AIX32-NEXT: stw 4, 0(25)
3587 ; AIX32-NEXT: li 4, 0
3588 ; AIX32-NEXT: lbz 29, 0(26)
3589 ; AIX32-NEXT: li 6, 5
3590 ; AIX32-NEXT: mr 3, 31
3591 ; AIX32-NEXT: mr 5, 29
3592 ; AIX32-NEXT: bl .__atomic_fetch_or_8[PR]
3594 ; AIX32-NEXT: or 4, 4, 29
3595 ; AIX32-NEXT: lbz 29, 0(26)
3596 ; AIX32-NEXT: li 6, 5
3597 ; AIX32-NEXT: mr 5, 29
3598 ; AIX32-NEXT: stw 4, 4(31)
3599 ; AIX32-NEXT: li 4, 0
3600 ; AIX32-NEXT: stw 3, 0(31)
3601 ; AIX32-NEXT: mr 3, 30
3602 ; AIX32-NEXT: bl .__atomic_fetch_or_8[PR]
3604 ; AIX32-NEXT: stw 3, 0(30)
3605 ; AIX32-NEXT: or 3, 4, 29
3606 ; AIX32-NEXT: li 5, 255
3607 ; AIX32-NEXT: stw 3, 4(30)
3608 ; AIX32-NEXT: lbz 3, 0(26)
3610 ; AIX32-NEXT: slw 5, 5, 24
3611 ; AIX32-NEXT: slw 4, 3, 24
3612 ; AIX32-NEXT: L..BB2_37: # %entry
3614 ; AIX32-NEXT: lwarx 6, 0, 22
3615 ; AIX32-NEXT: xor 7, 4, 6
3616 ; AIX32-NEXT: andc 8, 6, 5
3617 ; AIX32-NEXT: and 7, 7, 5
3618 ; AIX32-NEXT: or 7, 7, 8
3619 ; AIX32-NEXT: stwcx. 7, 0, 22
3620 ; AIX32-NEXT: bne 0, L..BB2_37
3621 ; AIX32-NEXT: # %bb.38: # %entry
3622 ; AIX32-NEXT: srw 4, 6, 24
3623 ; AIX32-NEXT: lwsync
3624 ; AIX32-NEXT: li 5, 255
3625 ; AIX32-NEXT: clrlwi 4, 4, 24
3626 ; AIX32-NEXT: slw 5, 5, 21
3627 ; AIX32-NEXT: xor 3, 4, 3
3628 ; AIX32-NEXT: stb 3, 0(27)
3629 ; AIX32-NEXT: lbz 3, 0(26)
3631 ; AIX32-NEXT: slw 4, 3, 21
3632 ; AIX32-NEXT: L..BB2_39: # %entry
3634 ; AIX32-NEXT: lwarx 6, 0, 19
3635 ; AIX32-NEXT: xor 7, 4, 6
3636 ; AIX32-NEXT: andc 8, 6, 5
3637 ; AIX32-NEXT: and 7, 7, 5
3638 ; AIX32-NEXT: or 7, 7, 8
3639 ; AIX32-NEXT: stwcx. 7, 0, 19
3640 ; AIX32-NEXT: bne 0, L..BB2_39
3641 ; AIX32-NEXT: # %bb.40: # %entry
3642 ; AIX32-NEXT: srw 4, 6, 21
3643 ; AIX32-NEXT: li 5, 0
3644 ; AIX32-NEXT: lwsync
3645 ; AIX32-NEXT: clrlwi 4, 4, 24
3646 ; AIX32-NEXT: ori 5, 5, 65535
3647 ; AIX32-NEXT: xor 3, 4, 3
3648 ; AIX32-NEXT: slw 5, 5, 18
3649 ; AIX32-NEXT: stb 3, 0(26)
3651 ; AIX32-NEXT: clrlwi 3, 3, 24
3652 ; AIX32-NEXT: slw 4, 3, 18
3653 ; AIX32-NEXT: L..BB2_41: # %entry
3655 ; AIX32-NEXT: lwarx 6, 0, 16
3656 ; AIX32-NEXT: xor 7, 4, 6
3657 ; AIX32-NEXT: andc 8, 6, 5
3658 ; AIX32-NEXT: and 7, 7, 5
3659 ; AIX32-NEXT: or 7, 7, 8
3660 ; AIX32-NEXT: stwcx. 7, 0, 16
3661 ; AIX32-NEXT: bne 0, L..BB2_41
3662 ; AIX32-NEXT: # %bb.42: # %entry
3663 ; AIX32-NEXT: srw 4, 6, 18
3664 ; AIX32-NEXT: lwsync
3665 ; AIX32-NEXT: li 5, 0
3666 ; AIX32-NEXT: clrlwi 4, 4, 16
3667 ; AIX32-NEXT: ori 5, 5, 65535
3668 ; AIX32-NEXT: xor 3, 4, 3
3669 ; AIX32-NEXT: slw 5, 5, 15
3670 ; AIX32-NEXT: sth 3, 0(23)
3671 ; AIX32-NEXT: lbz 3, 0(26)
3673 ; AIX32-NEXT: slw 4, 3, 15
3674 ; AIX32-NEXT: L..BB2_43: # %entry
3676 ; AIX32-NEXT: lwarx 6, 0, 14
3677 ; AIX32-NEXT: xor 7, 4, 6
3678 ; AIX32-NEXT: andc 8, 6, 5
3679 ; AIX32-NEXT: and 7, 7, 5
3680 ; AIX32-NEXT: or 7, 7, 8
3681 ; AIX32-NEXT: stwcx. 7, 0, 14
3682 ; AIX32-NEXT: bne 0, L..BB2_43
3683 ; AIX32-NEXT: # %bb.44: # %entry
3684 ; AIX32-NEXT: srw 4, 6, 15
3685 ; AIX32-NEXT: lwsync
3686 ; AIX32-NEXT: clrlwi 4, 4, 16
3687 ; AIX32-NEXT: xor 3, 4, 3
3688 ; AIX32-NEXT: sth 3, 0(20)
3689 ; AIX32-NEXT: lbz 3, 0(26)
3691 ; AIX32-NEXT: L..BB2_45: # %entry
3693 ; AIX32-NEXT: lwarx 4, 0, 13
3694 ; AIX32-NEXT: xor 4, 3, 4
3695 ; AIX32-NEXT: stwcx. 4, 0, 13
3696 ; AIX32-NEXT: bne 0, L..BB2_45
3697 ; AIX32-NEXT: # %bb.46: # %entry
3698 ; AIX32-NEXT: lwsync
3699 ; AIX32-NEXT: stw 4, 0(13)
3700 ; AIX32-NEXT: lbz 3, 0(26)
3702 ; AIX32-NEXT: L..BB2_47: # %entry
3704 ; AIX32-NEXT: lwarx 4, 0, 25
3705 ; AIX32-NEXT: xor 4, 3, 4
3706 ; AIX32-NEXT: stwcx. 4, 0, 25
3707 ; AIX32-NEXT: bne 0, L..BB2_47
3708 ; AIX32-NEXT: # %bb.48: # %entry
3709 ; AIX32-NEXT: lwsync
3710 ; AIX32-NEXT: stw 4, 0(25)
3711 ; AIX32-NEXT: li 4, 0
3712 ; AIX32-NEXT: lbz 29, 0(26)
3713 ; AIX32-NEXT: li 6, 5
3714 ; AIX32-NEXT: mr 3, 31
3715 ; AIX32-NEXT: mr 5, 29
3716 ; AIX32-NEXT: bl .__atomic_fetch_xor_8[PR]
3718 ; AIX32-NEXT: xor 4, 4, 29
3719 ; AIX32-NEXT: lbz 29, 0(26)
3720 ; AIX32-NEXT: li 6, 5
3721 ; AIX32-NEXT: mr 5, 29
3722 ; AIX32-NEXT: stw 4, 4(31)
3723 ; AIX32-NEXT: li 4, 0
3724 ; AIX32-NEXT: stw 3, 0(31)
3725 ; AIX32-NEXT: mr 3, 30
3726 ; AIX32-NEXT: bl .__atomic_fetch_xor_8[PR]
3728 ; AIX32-NEXT: xor 4, 4, 29
3729 ; AIX32-NEXT: stw 3, 0(30)
3730 ; AIX32-NEXT: lbz 3, 0(26)
3731 ; AIX32-NEXT: li 5, 255
3732 ; AIX32-NEXT: stw 4, 4(30)
3734 ; AIX32-NEXT: slw 4, 3, 24
3735 ; AIX32-NEXT: slw 5, 5, 24
3736 ; AIX32-NEXT: L..BB2_49: # %entry
3738 ; AIX32-NEXT: lwarx 6, 0, 22
3739 ; AIX32-NEXT: nand 7, 4, 6
3740 ; AIX32-NEXT: andc 8, 6, 5
3741 ; AIX32-NEXT: and 7, 7, 5
3742 ; AIX32-NEXT: or 7, 7, 8
3743 ; AIX32-NEXT: stwcx. 7, 0, 22
3744 ; AIX32-NEXT: bne 0, L..BB2_49
3745 ; AIX32-NEXT: # %bb.50: # %entry
3746 ; AIX32-NEXT: srw 4, 6, 24
3747 ; AIX32-NEXT: lwsync
3748 ; AIX32-NEXT: li 5, 255
3749 ; AIX32-NEXT: clrlwi 4, 4, 24
3750 ; AIX32-NEXT: slw 5, 5, 21
3751 ; AIX32-NEXT: nand 3, 4, 3
3752 ; AIX32-NEXT: stb 3, 0(27)
3753 ; AIX32-NEXT: lbz 3, 0(26)
3755 ; AIX32-NEXT: slw 4, 3, 21
3756 ; AIX32-NEXT: L..BB2_51: # %entry
3758 ; AIX32-NEXT: lwarx 6, 0, 19
3759 ; AIX32-NEXT: nand 7, 4, 6
3760 ; AIX32-NEXT: andc 8, 6, 5
3761 ; AIX32-NEXT: and 7, 7, 5
3762 ; AIX32-NEXT: or 7, 7, 8
3763 ; AIX32-NEXT: stwcx. 7, 0, 19
3764 ; AIX32-NEXT: bne 0, L..BB2_51
3765 ; AIX32-NEXT: # %bb.52: # %entry
3766 ; AIX32-NEXT: srw 4, 6, 21
3767 ; AIX32-NEXT: li 5, 0
3768 ; AIX32-NEXT: lwsync
3769 ; AIX32-NEXT: clrlwi 4, 4, 24
3770 ; AIX32-NEXT: ori 5, 5, 65535
3771 ; AIX32-NEXT: nand 3, 4, 3
3772 ; AIX32-NEXT: slw 5, 5, 18
3773 ; AIX32-NEXT: stb 3, 0(26)
3775 ; AIX32-NEXT: clrlwi 3, 3, 24
3776 ; AIX32-NEXT: slw 4, 3, 18
3777 ; AIX32-NEXT: L..BB2_53: # %entry
3779 ; AIX32-NEXT: lwarx 6, 0, 16
3780 ; AIX32-NEXT: nand 7, 4, 6
3781 ; AIX32-NEXT: andc 8, 6, 5
3782 ; AIX32-NEXT: and 7, 7, 5
3783 ; AIX32-NEXT: or 7, 7, 8
3784 ; AIX32-NEXT: stwcx. 7, 0, 16
3785 ; AIX32-NEXT: bne 0, L..BB2_53
3786 ; AIX32-NEXT: # %bb.54: # %entry
3787 ; AIX32-NEXT: srw 4, 6, 18
3788 ; AIX32-NEXT: lwsync
3789 ; AIX32-NEXT: li 5, 0
3790 ; AIX32-NEXT: clrlwi 4, 4, 16
3791 ; AIX32-NEXT: ori 5, 5, 65535
3792 ; AIX32-NEXT: nand 3, 4, 3
3793 ; AIX32-NEXT: slw 5, 5, 15
3794 ; AIX32-NEXT: sth 3, 0(23)
3795 ; AIX32-NEXT: lbz 3, 0(26)
3797 ; AIX32-NEXT: slw 4, 3, 15
3798 ; AIX32-NEXT: L..BB2_55: # %entry
3800 ; AIX32-NEXT: lwarx 6, 0, 14
3801 ; AIX32-NEXT: nand 7, 4, 6
3802 ; AIX32-NEXT: andc 8, 6, 5
3803 ; AIX32-NEXT: and 7, 7, 5
3804 ; AIX32-NEXT: or 7, 7, 8
3805 ; AIX32-NEXT: stwcx. 7, 0, 14
3806 ; AIX32-NEXT: bne 0, L..BB2_55
3807 ; AIX32-NEXT: # %bb.56: # %entry
3808 ; AIX32-NEXT: srw 4, 6, 15
3809 ; AIX32-NEXT: lwsync
3810 ; AIX32-NEXT: clrlwi 4, 4, 16
3811 ; AIX32-NEXT: nand 3, 4, 3
3812 ; AIX32-NEXT: sth 3, 0(20)
3813 ; AIX32-NEXT: lbz 3, 0(26)
3815 ; AIX32-NEXT: L..BB2_57: # %entry
3817 ; AIX32-NEXT: lwarx 4, 0, 13
3818 ; AIX32-NEXT: nand 4, 3, 4
3819 ; AIX32-NEXT: stwcx. 4, 0, 13
3820 ; AIX32-NEXT: bne 0, L..BB2_57
3821 ; AIX32-NEXT: # %bb.58: # %entry
3822 ; AIX32-NEXT: stw 23, 56(1) # 4-byte Folded Spill
3823 ; AIX32-NEXT: stw 27, 60(1) # 4-byte Folded Spill
3824 ; AIX32-NEXT: lwsync
3825 ; AIX32-NEXT: stw 4, 0(13)
3826 ; AIX32-NEXT: lbz 3, 0(26)
3828 ; AIX32-NEXT: L..BB2_59: # %entry
3830 ; AIX32-NEXT: lwarx 4, 0, 25
3831 ; AIX32-NEXT: nand 4, 3, 4
3832 ; AIX32-NEXT: stwcx. 4, 0, 25
3833 ; AIX32-NEXT: bne 0, L..BB2_59
3834 ; AIX32-NEXT: # %bb.60: # %entry
3835 ; AIX32-NEXT: lwsync
3836 ; AIX32-NEXT: stw 4, 0(25)
3837 ; AIX32-NEXT: li 4, 0
3838 ; AIX32-NEXT: lbz 29, 0(26)
3839 ; AIX32-NEXT: li 6, 5
3840 ; AIX32-NEXT: mr 3, 31
3841 ; AIX32-NEXT: mr 5, 29
3842 ; AIX32-NEXT: bl .__atomic_fetch_nand_8[PR]
3844 ; AIX32-NEXT: nand 3, 4, 29
3845 ; AIX32-NEXT: lbz 29, 0(26)
3846 ; AIX32-NEXT: li 4, 0
3847 ; AIX32-NEXT: mr 5, 29
3848 ; AIX32-NEXT: li 6, 5
3849 ; AIX32-NEXT: stw 3, 4(31)
3850 ; AIX32-NEXT: mr 3, 30
3851 ; AIX32-NEXT: stw 17, 0(31)
3852 ; AIX32-NEXT: bl .__atomic_fetch_nand_8[PR]
3854 ; AIX32-NEXT: nand 3, 4, 29
3855 ; AIX32-NEXT: lwz 29, L..C8(2) # @u128
3856 ; AIX32-NEXT: lbz 23, 0(26)
3857 ; AIX32-NEXT: addi 28, 1, 80
3858 ; AIX32-NEXT: addi 27, 1, 64
3859 ; AIX32-NEXT: stw 17, 0(30)
3860 ; AIX32-NEXT: lwz 4, 12(29)
3861 ; AIX32-NEXT: lwz 5, 8(29)
3862 ; AIX32-NEXT: lwz 6, 4(29)
3863 ; AIX32-NEXT: lwz 7, 0(29)
3864 ; AIX32-NEXT: stw 3, 4(30)
3865 ; AIX32-NEXT: .align 4
3866 ; AIX32-NEXT: L..BB2_61: # %atomicrmw.start
3868 ; AIX32-NEXT: and 3, 4, 23
3869 ; AIX32-NEXT: stw 7, 80(1)
3870 ; AIX32-NEXT: li 7, 5
3871 ; AIX32-NEXT: li 8, 5
3872 ; AIX32-NEXT: xor 3, 3, 17
3873 ; AIX32-NEXT: stw 6, 84(1)
3874 ; AIX32-NEXT: stw 5, 88(1)
3875 ; AIX32-NEXT: stw 4, 92(1)
3876 ; AIX32-NEXT: mr 4, 29
3877 ; AIX32-NEXT: mr 5, 28
3878 ; AIX32-NEXT: mr 6, 27
3879 ; AIX32-NEXT: stw 3, 76(1)
3880 ; AIX32-NEXT: li 3, 16
3881 ; AIX32-NEXT: stw 17, 72(1)
3882 ; AIX32-NEXT: stw 17, 68(1)
3883 ; AIX32-NEXT: stw 17, 64(1)
3884 ; AIX32-NEXT: bl .__atomic_compare_exchange[PR]
3886 ; AIX32-NEXT: lwz 4, 92(1)
3887 ; AIX32-NEXT: lwz 5, 88(1)
3888 ; AIX32-NEXT: lwz 6, 84(1)
3889 ; AIX32-NEXT: lwz 7, 80(1)
3890 ; AIX32-NEXT: cmplwi 3, 0
3891 ; AIX32-NEXT: beq 0, L..BB2_61
3892 ; AIX32-NEXT: # %bb.62: # %atomicrmw.end
3893 ; AIX32-NEXT: and 3, 4, 23
3894 ; AIX32-NEXT: stw 17, 0(29)
3895 ; AIX32-NEXT: lbz 23, 0(26)
3896 ; AIX32-NEXT: stw 17, 4(29)
3897 ; AIX32-NEXT: stw 17, 8(29)
3898 ; AIX32-NEXT: xor 3, 3, 17
3899 ; AIX32-NEXT: addi 28, 1, 80
3900 ; AIX32-NEXT: addi 27, 1, 64
3901 ; AIX32-NEXT: stw 3, 12(29)
3902 ; AIX32-NEXT: lwz 29, L..C9(2) # @s128
3903 ; AIX32-NEXT: lwz 4, 12(29)
3904 ; AIX32-NEXT: lwz 5, 8(29)
3905 ; AIX32-NEXT: lwz 6, 4(29)
3906 ; AIX32-NEXT: lwz 7, 0(29)
3907 ; AIX32-NEXT: .align 4
3908 ; AIX32-NEXT: L..BB2_63: # %atomicrmw.start2
3910 ; AIX32-NEXT: and 3, 4, 23
3911 ; AIX32-NEXT: stw 7, 80(1)
3912 ; AIX32-NEXT: li 7, 5
3913 ; AIX32-NEXT: li 8, 5
3914 ; AIX32-NEXT: xor 3, 3, 17
3915 ; AIX32-NEXT: stw 6, 84(1)
3916 ; AIX32-NEXT: stw 5, 88(1)
3917 ; AIX32-NEXT: stw 4, 92(1)
3918 ; AIX32-NEXT: mr 4, 29
3919 ; AIX32-NEXT: mr 5, 28
3920 ; AIX32-NEXT: mr 6, 27
3921 ; AIX32-NEXT: stw 3, 76(1)
3922 ; AIX32-NEXT: li 3, 16
3923 ; AIX32-NEXT: stw 17, 72(1)
3924 ; AIX32-NEXT: stw 17, 68(1)
3925 ; AIX32-NEXT: stw 17, 64(1)
3926 ; AIX32-NEXT: bl .__atomic_compare_exchange[PR]
3928 ; AIX32-NEXT: lwz 4, 92(1)
3929 ; AIX32-NEXT: lwz 5, 88(1)
3930 ; AIX32-NEXT: lwz 6, 84(1)
3931 ; AIX32-NEXT: lwz 7, 80(1)
3932 ; AIX32-NEXT: cmplwi 3, 0
3933 ; AIX32-NEXT: beq 0, L..BB2_63
3934 ; AIX32-NEXT: # %bb.64: # %atomicrmw.end1
3935 ; AIX32-NEXT: and 3, 4, 23
3936 ; AIX32-NEXT: li 5, 255
3937 ; AIX32-NEXT: xor 3, 3, 17
3938 ; AIX32-NEXT: stw 17, 0(29)
3939 ; AIX32-NEXT: stw 17, 4(29)
3940 ; AIX32-NEXT: stw 17, 8(29)
3941 ; AIX32-NEXT: slw 5, 5, 24
3942 ; AIX32-NEXT: stw 3, 12(29)
3943 ; AIX32-NEXT: lbz 3, 0(26)
3945 ; AIX32-NEXT: slw 4, 3, 24
3946 ; AIX32-NEXT: L..BB2_65: # %atomicrmw.end1
3948 ; AIX32-NEXT: lwarx 6, 0, 22
3949 ; AIX32-NEXT: and 7, 4, 6
3950 ; AIX32-NEXT: andc 8, 6, 5
3951 ; AIX32-NEXT: and 7, 7, 5
3952 ; AIX32-NEXT: or 7, 7, 8
3953 ; AIX32-NEXT: stwcx. 7, 0, 22
3954 ; AIX32-NEXT: bne 0, L..BB2_65
3955 ; AIX32-NEXT: # %bb.66: # %atomicrmw.end1
3956 ; AIX32-NEXT: srw 4, 6, 24
3957 ; AIX32-NEXT: lwsync
3958 ; AIX32-NEXT: li 5, 255
3959 ; AIX32-NEXT: clrlwi 4, 4, 24
3960 ; AIX32-NEXT: slw 5, 5, 21
3961 ; AIX32-NEXT: and 3, 4, 3
3962 ; AIX32-NEXT: lwz 4, 60(1) # 4-byte Folded Reload
3963 ; AIX32-NEXT: stb 3, 0(4)
3964 ; AIX32-NEXT: lbz 3, 0(26)
3966 ; AIX32-NEXT: lwz 9, 56(1) # 4-byte Folded Reload
3967 ; AIX32-NEXT: slw 4, 3, 21
3968 ; AIX32-NEXT: L..BB2_67: # %atomicrmw.end1
3970 ; AIX32-NEXT: lwarx 6, 0, 19
3971 ; AIX32-NEXT: and 7, 4, 6
3972 ; AIX32-NEXT: andc 8, 6, 5
3973 ; AIX32-NEXT: and 7, 7, 5
3974 ; AIX32-NEXT: or 7, 7, 8
3975 ; AIX32-NEXT: stwcx. 7, 0, 19
3976 ; AIX32-NEXT: bne 0, L..BB2_67
3977 ; AIX32-NEXT: # %bb.68: # %atomicrmw.end1
3978 ; AIX32-NEXT: srw 4, 6, 21
3979 ; AIX32-NEXT: li 5, 0
3980 ; AIX32-NEXT: lwsync
3981 ; AIX32-NEXT: clrlwi 4, 4, 24
3982 ; AIX32-NEXT: ori 5, 5, 65535
3983 ; AIX32-NEXT: and 3, 4, 3
3984 ; AIX32-NEXT: slw 5, 5, 18
3985 ; AIX32-NEXT: stb 3, 0(26)
3987 ; AIX32-NEXT: slw 4, 3, 18
3988 ; AIX32-NEXT: L..BB2_69: # %atomicrmw.end1
3990 ; AIX32-NEXT: lwarx 6, 0, 16
3991 ; AIX32-NEXT: and 7, 4, 6
3992 ; AIX32-NEXT: andc 8, 6, 5
3993 ; AIX32-NEXT: and 7, 7, 5
3994 ; AIX32-NEXT: or 7, 7, 8
3995 ; AIX32-NEXT: stwcx. 7, 0, 16
3996 ; AIX32-NEXT: bne 0, L..BB2_69
3997 ; AIX32-NEXT: # %bb.70: # %atomicrmw.end1
3998 ; AIX32-NEXT: srw 4, 6, 18
3999 ; AIX32-NEXT: lwsync
4000 ; AIX32-NEXT: li 5, 0
4001 ; AIX32-NEXT: clrlwi 4, 4, 16
4002 ; AIX32-NEXT: ori 5, 5, 65535
4003 ; AIX32-NEXT: and 3, 4, 3
4004 ; AIX32-NEXT: slw 5, 5, 15
4005 ; AIX32-NEXT: sth 3, 0(9)
4006 ; AIX32-NEXT: lbz 3, 0(26)
4008 ; AIX32-NEXT: slw 4, 3, 15
4009 ; AIX32-NEXT: L..BB2_71: # %atomicrmw.end1
4011 ; AIX32-NEXT: lwarx 6, 0, 14
4012 ; AIX32-NEXT: and 7, 4, 6
4013 ; AIX32-NEXT: andc 8, 6, 5
4014 ; AIX32-NEXT: and 7, 7, 5
4015 ; AIX32-NEXT: or 7, 7, 8
4016 ; AIX32-NEXT: stwcx. 7, 0, 14
4017 ; AIX32-NEXT: bne 0, L..BB2_71
4018 ; AIX32-NEXT: # %bb.72: # %atomicrmw.end1
4019 ; AIX32-NEXT: srw 4, 6, 15
4020 ; AIX32-NEXT: lwsync
4021 ; AIX32-NEXT: clrlwi 4, 4, 16
4022 ; AIX32-NEXT: and 3, 4, 3
4023 ; AIX32-NEXT: sth 3, 0(20)
4024 ; AIX32-NEXT: lbz 3, 0(26)
4026 ; AIX32-NEXT: L..BB2_73: # %atomicrmw.end1
4028 ; AIX32-NEXT: lwarx 4, 0, 13
4029 ; AIX32-NEXT: and 4, 3, 4
4030 ; AIX32-NEXT: stwcx. 4, 0, 13
4031 ; AIX32-NEXT: bne 0, L..BB2_73
4032 ; AIX32-NEXT: # %bb.74: # %atomicrmw.end1
4033 ; AIX32-NEXT: lwsync
4034 ; AIX32-NEXT: stw 4, 0(13)
4035 ; AIX32-NEXT: lbz 3, 0(26)
4037 ; AIX32-NEXT: L..BB2_75: # %atomicrmw.end1
4039 ; AIX32-NEXT: lwarx 4, 0, 25
4040 ; AIX32-NEXT: and 4, 3, 4
4041 ; AIX32-NEXT: stwcx. 4, 0, 25
4042 ; AIX32-NEXT: bne 0, L..BB2_75
4043 ; AIX32-NEXT: # %bb.76: # %atomicrmw.end1
4044 ; AIX32-NEXT: lwsync
4045 ; AIX32-NEXT: stw 4, 0(25)
4046 ; AIX32-NEXT: li 4, 0
4047 ; AIX32-NEXT: lbz 29, 0(26)
4048 ; AIX32-NEXT: li 6, 5
4049 ; AIX32-NEXT: mr 3, 31
4050 ; AIX32-NEXT: li 28, 0
4051 ; AIX32-NEXT: mr 5, 29
4052 ; AIX32-NEXT: bl .__atomic_fetch_and_8[PR]
4054 ; AIX32-NEXT: and 3, 4, 29
4055 ; AIX32-NEXT: stw 28, 0(31)
4056 ; AIX32-NEXT: li 4, 0
4057 ; AIX32-NEXT: li 6, 5
4058 ; AIX32-NEXT: stw 3, 4(31)
4059 ; AIX32-NEXT: lbz 31, 0(26)
4060 ; AIX32-NEXT: mr 3, 30
4061 ; AIX32-NEXT: mr 5, 31
4062 ; AIX32-NEXT: bl .__atomic_fetch_and_8[PR]
4064 ; AIX32-NEXT: and 3, 4, 31
4065 ; AIX32-NEXT: stw 28, 0(30)
4066 ; AIX32-NEXT: lwz 31, 172(1) # 4-byte Folded Reload
4067 ; AIX32-NEXT: lwz 29, 164(1) # 4-byte Folded Reload
4068 ; AIX32-NEXT: lwz 28, 160(1) # 4-byte Folded Reload
4069 ; AIX32-NEXT: lwz 27, 156(1) # 4-byte Folded Reload
4070 ; AIX32-NEXT: lwz 26, 152(1) # 4-byte Folded Reload
4071 ; AIX32-NEXT: lwz 25, 148(1) # 4-byte Folded Reload
4072 ; AIX32-NEXT: lwz 24, 144(1) # 4-byte Folded Reload
4073 ; AIX32-NEXT: stw 3, 4(30)
4074 ; AIX32-NEXT: lwz 30, 168(1) # 4-byte Folded Reload
4075 ; AIX32-NEXT: lwz 23, 140(1) # 4-byte Folded Reload
4076 ; AIX32-NEXT: lwz 22, 136(1) # 4-byte Folded Reload
4077 ; AIX32-NEXT: lwz 21, 132(1) # 4-byte Folded Reload
4078 ; AIX32-NEXT: lwz 20, 128(1) # 4-byte Folded Reload
4079 ; AIX32-NEXT: lwz 19, 124(1) # 4-byte Folded Reload
4080 ; AIX32-NEXT: lwz 18, 120(1) # 4-byte Folded Reload
4081 ; AIX32-NEXT: lwz 17, 116(1) # 4-byte Folded Reload
4082 ; AIX32-NEXT: lwz 16, 112(1) # 4-byte Folded Reload
4083 ; AIX32-NEXT: lwz 15, 108(1) # 4-byte Folded Reload
4084 ; AIX32-NEXT: lwz 14, 104(1) # 4-byte Folded Reload
4085 ; AIX32-NEXT: lwz 13, 100(1) # 4-byte Folded Reload
4086 ; AIX32-NEXT: addi 1, 1, 176
4087 ; AIX32-NEXT: lwz 0, 8(1)
4088 ; AIX32-NEXT: mtlr 0
4091 %0 = load i8, ptr @uc, align 1
4092 %1 = atomicrmw add ptr @sc, i8 %0 seq_cst, align 1
4094 store i8 %2, ptr @sc, align 1
4095 %3 = load i8, ptr @uc, align 1
4096 %4 = atomicrmw add ptr @uc, i8 %3 seq_cst, align 1
4098 store i8 %5, ptr @uc, align 1
4099 %conv = zext i8 %5 to i16
4100 %6 = atomicrmw add ptr @ss, i16 %conv seq_cst, align 2
4101 %7 = add i16 %6, %conv
4102 store i16 %7, ptr @ss, align 2
4103 %8 = load i8, ptr @uc, align 1
4104 %conv1 = zext i8 %8 to i16
4105 %9 = atomicrmw add ptr @us, i16 %conv1 seq_cst, align 2
4106 %10 = add i16 %9, %conv1
4107 store i16 %10, ptr @us, align 2
4108 %11 = load i8, ptr @uc, align 1
4109 %conv2 = zext i8 %11 to i32
4110 %12 = atomicrmw add ptr @si, i32 %conv2 seq_cst, align 4
4111 %13 = add i32 %12, %conv2
4112 store i32 %13, ptr @si, align 4
4113 %14 = load i8, ptr @uc, align 1
4114 %conv3 = zext i8 %14 to i32
4115 %15 = atomicrmw add ptr @ui, i32 %conv3 seq_cst, align 4
4116 %16 = add i32 %15, %conv3
4117 store i32 %16, ptr @ui, align 4
4118 %17 = load i8, ptr @uc, align 1
4119 %conv4 = zext i8 %17 to i64
4120 %18 = atomicrmw add ptr @sll, i64 %conv4 seq_cst, align 8
4121 %19 = add i64 %18, %conv4
4122 store i64 %19, ptr @sll, align 8
4123 %20 = load i8, ptr @uc, align 1
4124 %conv5 = zext i8 %20 to i64
4125 %21 = atomicrmw add ptr @ull, i64 %conv5 seq_cst, align 8
4126 %22 = add i64 %21, %conv5
4127 store i64 %22, ptr @ull, align 8
4128 %23 = load i8, ptr @uc, align 1
4129 %24 = atomicrmw sub ptr @sc, i8 %23 seq_cst, align 1
4130 %25 = sub i8 %24, %23
4131 store i8 %25, ptr @sc, align 1
4132 %26 = load i8, ptr @uc, align 1
4133 %27 = atomicrmw sub ptr @uc, i8 %26 seq_cst, align 1
4134 %28 = sub i8 %27, %26
4135 store i8 %28, ptr @uc, align 1
4136 %conv6 = zext i8 %28 to i16
4137 %29 = atomicrmw sub ptr @ss, i16 %conv6 seq_cst, align 2
4138 %30 = sub i16 %29, %conv6
4139 store i16 %30, ptr @ss, align 2
4140 %31 = load i8, ptr @uc, align 1
4141 %conv7 = zext i8 %31 to i16
4142 %32 = atomicrmw sub ptr @us, i16 %conv7 seq_cst, align 2
4143 %33 = sub i16 %32, %conv7
4144 store i16 %33, ptr @us, align 2
4145 %34 = load i8, ptr @uc, align 1
4146 %conv8 = zext i8 %34 to i32
4147 %35 = atomicrmw sub ptr @si, i32 %conv8 seq_cst, align 4
4148 %36 = sub i32 %35, %conv8
4149 store i32 %36, ptr @si, align 4
4150 %37 = load i8, ptr @uc, align 1
4151 %conv9 = zext i8 %37 to i32
4152 %38 = atomicrmw sub ptr @ui, i32 %conv9 seq_cst, align 4
4153 %39 = sub i32 %38, %conv9
4154 store i32 %39, ptr @ui, align 4
4155 %40 = load i8, ptr @uc, align 1
4156 %conv10 = zext i8 %40 to i64
4157 %41 = atomicrmw sub ptr @sll, i64 %conv10 seq_cst, align 8
4158 %42 = sub i64 %41, %conv10
4159 store i64 %42, ptr @sll, align 8
4160 %43 = load i8, ptr @uc, align 1
4161 %conv11 = zext i8 %43 to i64
4162 %44 = atomicrmw sub ptr @ull, i64 %conv11 seq_cst, align 8
4163 %45 = sub i64 %44, %conv11
4164 store i64 %45, ptr @ull, align 8
4165 %46 = load i8, ptr @uc, align 1
4166 %47 = atomicrmw or ptr @sc, i8 %46 seq_cst, align 1
4167 %48 = or i8 %47, %46
4168 store i8 %48, ptr @sc, align 1
4169 %49 = load i8, ptr @uc, align 1
4170 %50 = atomicrmw or ptr @uc, i8 %49 seq_cst, align 1
4171 %51 = or i8 %50, %49
4172 store i8 %51, ptr @uc, align 1
4173 %conv12 = zext i8 %51 to i16
4174 %52 = atomicrmw or ptr @ss, i16 %conv12 seq_cst, align 2
4175 %53 = or i16 %52, %conv12
4176 store i16 %53, ptr @ss, align 2
4177 %54 = load i8, ptr @uc, align 1
4178 %conv13 = zext i8 %54 to i16
4179 %55 = atomicrmw or ptr @us, i16 %conv13 seq_cst, align 2
4180 %56 = or i16 %55, %conv13
4181 store i16 %56, ptr @us, align 2
4182 %57 = load i8, ptr @uc, align 1
4183 %conv14 = zext i8 %57 to i32
4184 %58 = atomicrmw or ptr @si, i32 %conv14 seq_cst, align 4
4185 %59 = or i32 %58, %conv14
4186 store i32 %59, ptr @si, align 4
4187 %60 = load i8, ptr @uc, align 1
4188 %conv15 = zext i8 %60 to i32
4189 %61 = atomicrmw or ptr @ui, i32 %conv15 seq_cst, align 4
4190 %62 = or i32 %61, %conv15
4191 store i32 %62, ptr @ui, align 4
4192 %63 = load i8, ptr @uc, align 1
4193 %conv16 = zext i8 %63 to i64
4194 %64 = atomicrmw or ptr @sll, i64 %conv16 seq_cst, align 8
4195 %65 = or i64 %64, %conv16
4196 store i64 %65, ptr @sll, align 8
4197 %66 = load i8, ptr @uc, align 1
4198 %conv17 = zext i8 %66 to i64
4199 %67 = atomicrmw or ptr @ull, i64 %conv17 seq_cst, align 8
4200 %68 = or i64 %67, %conv17
4201 store i64 %68, ptr @ull, align 8
4202 %69 = load i8, ptr @uc, align 1
4203 %70 = atomicrmw xor ptr @sc, i8 %69 seq_cst, align 1
4204 %71 = xor i8 %70, %69
4205 store i8 %71, ptr @sc, align 1
4206 %72 = load i8, ptr @uc, align 1
4207 %73 = atomicrmw xor ptr @uc, i8 %72 seq_cst, align 1
4208 %74 = xor i8 %73, %72
4209 store i8 %74, ptr @uc, align 1
4210 %conv18 = zext i8 %74 to i16
4211 %75 = atomicrmw xor ptr @ss, i16 %conv18 seq_cst, align 2
4212 %76 = xor i16 %75, %conv18
4213 store i16 %76, ptr @ss, align 2
4214 %77 = load i8, ptr @uc, align 1
4215 %conv19 = zext i8 %77 to i16
4216 %78 = atomicrmw xor ptr @us, i16 %conv19 seq_cst, align 2
4217 %79 = xor i16 %78, %conv19
4218 store i16 %79, ptr @us, align 2
4219 %80 = load i8, ptr @uc, align 1
4220 %conv20 = zext i8 %80 to i32
4221 %81 = atomicrmw xor ptr @si, i32 %conv20 seq_cst, align 4
4222 %82 = xor i32 %81, %conv20
4223 store i32 %82, ptr @si, align 4
4224 %83 = load i8, ptr @uc, align 1
4225 %conv21 = zext i8 %83 to i32
4226 %84 = atomicrmw xor ptr @ui, i32 %conv21 seq_cst, align 4
4227 %85 = xor i32 %84, %conv21
4228 store i32 %85, ptr @ui, align 4
4229 %86 = load i8, ptr @uc, align 1
4230 %conv22 = zext i8 %86 to i64
4231 %87 = atomicrmw xor ptr @sll, i64 %conv22 seq_cst, align 8
4232 %88 = xor i64 %87, %conv22
4233 store i64 %88, ptr @sll, align 8
4234 %89 = load i8, ptr @uc, align 1
4235 %conv23 = zext i8 %89 to i64
4236 %90 = atomicrmw xor ptr @ull, i64 %conv23 seq_cst, align 8
4237 %91 = xor i64 %90, %conv23
4238 store i64 %91, ptr @ull, align 8
4239 %92 = load i8, ptr @uc, align 1
4240 %93 = atomicrmw nand ptr @sc, i8 %92 seq_cst, align 1
4241 %94 = and i8 %93, %92
4242 %95 = xor i8 %94, -1
4243 store i8 %95, ptr @sc, align 1
4244 %96 = load i8, ptr @uc, align 1
4245 %97 = atomicrmw nand ptr @uc, i8 %96 seq_cst, align 1
4246 %98 = and i8 %97, %96
4247 %99 = xor i8 %98, -1
4248 store i8 %99, ptr @uc, align 1
4249 %conv24 = zext i8 %99 to i16
4250 %100 = atomicrmw nand ptr @ss, i16 %conv24 seq_cst, align 2
4251 %101 = and i16 %100, %conv24
4252 %102 = xor i16 %101, -1
4253 store i16 %102, ptr @ss, align 2
4254 %103 = load i8, ptr @uc, align 1
4255 %conv25 = zext i8 %103 to i16
4256 %104 = atomicrmw nand ptr @us, i16 %conv25 seq_cst, align 2
4257 %105 = and i16 %104, %conv25
4258 %106 = xor i16 %105, -1
4259 store i16 %106, ptr @us, align 2
4260 %107 = load i8, ptr @uc, align 1
4261 %conv26 = zext i8 %107 to i32
4262 %108 = atomicrmw nand ptr @si, i32 %conv26 seq_cst, align 4
4263 %109 = and i32 %108, %conv26
4264 %110 = xor i32 %109, -1
4265 store i32 %110, ptr @si, align 4
4266 %111 = load i8, ptr @uc, align 1
4267 %conv27 = zext i8 %111 to i32
4268 %112 = atomicrmw nand ptr @ui, i32 %conv27 seq_cst, align 4
4269 %113 = and i32 %112, %conv27
4270 %114 = xor i32 %113, -1
4271 store i32 %114, ptr @ui, align 4
4272 %115 = load i8, ptr @uc, align 1
4273 %conv28 = zext i8 %115 to i64
4274 %116 = atomicrmw nand ptr @sll, i64 %conv28 seq_cst, align 8
4275 %117 = and i64 %116, %conv28
4276 %118 = xor i64 %117, -1
4277 store i64 %118, ptr @sll, align 8
4278 %119 = load i8, ptr @uc, align 1
4279 %conv29 = zext i8 %119 to i64
4280 %120 = atomicrmw nand ptr @ull, i64 %conv29 seq_cst, align 8
4281 %121 = and i64 %120, %conv29
4282 %122 = xor i64 %121, -1
4283 store i64 %122, ptr @ull, align 8
4284 %123 = load i8, ptr @uc, align 1
4285 %conv30 = zext i8 %123 to i128
4286 %124 = atomicrmw nand ptr @u128, i128 %conv30 seq_cst, align 16
4287 %125 = and i128 %124, %conv30
4288 %126 = xor i128 %125, -1
4289 store i128 %126, ptr @u128, align 16
4290 %127 = load i8, ptr @uc, align 1
4291 %conv31 = zext i8 %127 to i128
4292 %128 = atomicrmw nand ptr @s128, i128 %conv31 seq_cst, align 16
4293 %129 = and i128 %128, %conv31
4294 %130 = xor i128 %129, -1
4295 store i128 %130, ptr @s128, align 16
4296 %131 = load i8, ptr @uc, align 1
4297 %132 = atomicrmw and ptr @sc, i8 %131 seq_cst, align 1
4298 %133 = and i8 %132, %131
4299 store i8 %133, ptr @sc, align 1
4300 %134 = load i8, ptr @uc, align 1
4301 %135 = atomicrmw and ptr @uc, i8 %134 seq_cst, align 1
4302 %136 = and i8 %135, %134
4303 store i8 %136, ptr @uc, align 1
4304 %conv32 = zext i8 %136 to i16
4305 %137 = atomicrmw and ptr @ss, i16 %conv32 seq_cst, align 2
4306 %138 = and i16 %137, %conv32
4307 store i16 %138, ptr @ss, align 2
4308 %139 = load i8, ptr @uc, align 1
4309 %conv33 = zext i8 %139 to i16
4310 %140 = atomicrmw and ptr @us, i16 %conv33 seq_cst, align 2
4311 %141 = and i16 %140, %conv33
4312 store i16 %141, ptr @us, align 2
4313 %142 = load i8, ptr @uc, align 1
4314 %conv34 = zext i8 %142 to i32
4315 %143 = atomicrmw and ptr @si, i32 %conv34 seq_cst, align 4
4316 %144 = and i32 %143, %conv34
4317 store i32 %144, ptr @si, align 4
4318 %145 = load i8, ptr @uc, align 1
4319 %conv35 = zext i8 %145 to i32
4320 %146 = atomicrmw and ptr @ui, i32 %conv35 seq_cst, align 4
4321 %147 = and i32 %146, %conv35
4322 store i32 %147, ptr @ui, align 4
4323 %148 = load i8, ptr @uc, align 1
4324 %conv36 = zext i8 %148 to i64
4325 %149 = atomicrmw and ptr @sll, i64 %conv36 seq_cst, align 8
4326 %150 = and i64 %149, %conv36
4327 store i64 %150, ptr @sll, align 8
4328 %151 = load i8, ptr @uc, align 1
4329 %conv37 = zext i8 %151 to i64
4330 %152 = atomicrmw and ptr @ull, i64 %conv37 seq_cst, align 8
4331 %153 = and i64 %152, %conv37
4332 store i64 %153, ptr @ull, align 8
4336 define dso_local void @test_compare_and_swap() local_unnamed_addr #0 {
4337 ; CHECK-LABEL: test_compare_and_swap:
4338 ; CHECK: # %bb.0: # %entry
4339 ; CHECK-NEXT: addis 3, 2, uc@toc@ha
4340 ; CHECK-NEXT: addis 4, 2, sc@toc@ha
4341 ; CHECK-NEXT: std 27, -40(1) # 8-byte Folded Spill
4342 ; CHECK-NEXT: std 28, -32(1) # 8-byte Folded Spill
4343 ; CHECK-NEXT: std 29, -24(1) # 8-byte Folded Spill
4344 ; CHECK-NEXT: std 30, -16(1) # 8-byte Folded Spill
4345 ; CHECK-NEXT: lbz 5, uc@toc@l(3)
4346 ; CHECK-NEXT: lbz 8, sc@toc@l(4)
4347 ; CHECK-NEXT: addi 6, 3, uc@toc@l
4348 ; CHECK-NEXT: addi 0, 4, sc@toc@l
4350 ; CHECK-NEXT: .LBB3_1: # %entry
4352 ; CHECK-NEXT: lbarx 7, 0, 0
4353 ; CHECK-NEXT: cmpw 7, 5
4354 ; CHECK-NEXT: bne 0, .LBB3_3
4355 ; CHECK-NEXT: # %bb.2: # %entry
4357 ; CHECK-NEXT: stbcx. 8, 0, 0
4358 ; CHECK-NEXT: bne 0, .LBB3_1
4359 ; CHECK-NEXT: .LBB3_3: # %entry
4360 ; CHECK-NEXT: lwsync
4361 ; CHECK-NEXT: stb 7, sc@toc@l(4)
4362 ; CHECK-NEXT: lbz 8, uc@toc@l(3)
4364 ; CHECK-NEXT: .LBB3_4: # %entry
4366 ; CHECK-NEXT: lbarx 5, 0, 6
4367 ; CHECK-NEXT: cmpw 5, 8
4368 ; CHECK-NEXT: bne 0, .LBB3_6
4369 ; CHECK-NEXT: # %bb.5: # %entry
4371 ; CHECK-NEXT: stbcx. 7, 0, 6
4372 ; CHECK-NEXT: bne 0, .LBB3_4
4373 ; CHECK-NEXT: .LBB3_6: # %entry
4374 ; CHECK-NEXT: lwsync
4375 ; CHECK-NEXT: stb 5, uc@toc@l(3)
4376 ; CHECK-NEXT: lbz 7, sc@toc@l(4)
4378 ; CHECK-NEXT: extsb 8, 7
4379 ; CHECK-NEXT: addis 7, 2, ss@toc@ha
4380 ; CHECK-NEXT: addi 12, 7, ss@toc@l
4381 ; CHECK-NEXT: .LBB3_7: # %entry
4383 ; CHECK-NEXT: lharx 9, 0, 12
4384 ; CHECK-NEXT: cmpw 9, 5
4385 ; CHECK-NEXT: bne 0, .LBB3_9
4386 ; CHECK-NEXT: # %bb.8: # %entry
4388 ; CHECK-NEXT: sthcx. 8, 0, 12
4389 ; CHECK-NEXT: bne 0, .LBB3_7
4390 ; CHECK-NEXT: .LBB3_9: # %entry
4391 ; CHECK-NEXT: lwsync
4392 ; CHECK-NEXT: sth 9, ss@toc@l(7)
4393 ; CHECK-NEXT: lbz 7, sc@toc@l(4)
4394 ; CHECK-NEXT: lbz 5, uc@toc@l(3)
4396 ; CHECK-NEXT: extsb 8, 7
4397 ; CHECK-NEXT: addis 7, 2, us@toc@ha
4398 ; CHECK-NEXT: addi 11, 7, us@toc@l
4399 ; CHECK-NEXT: .LBB3_10: # %entry
4401 ; CHECK-NEXT: lharx 9, 0, 11
4402 ; CHECK-NEXT: cmpw 9, 5
4403 ; CHECK-NEXT: bne 0, .LBB3_12
4404 ; CHECK-NEXT: # %bb.11: # %entry
4406 ; CHECK-NEXT: sthcx. 8, 0, 11
4407 ; CHECK-NEXT: bne 0, .LBB3_10
4408 ; CHECK-NEXT: .LBB3_12: # %entry
4409 ; CHECK-NEXT: lwsync
4410 ; CHECK-NEXT: sth 9, us@toc@l(7)
4411 ; CHECK-NEXT: lbz 7, sc@toc@l(4)
4412 ; CHECK-NEXT: lbz 5, uc@toc@l(3)
4414 ; CHECK-NEXT: extsb 8, 7
4415 ; CHECK-NEXT: addis 7, 2, si@toc@ha
4416 ; CHECK-NEXT: addi 10, 7, si@toc@l
4417 ; CHECK-NEXT: .LBB3_13: # %entry
4419 ; CHECK-NEXT: lwarx 9, 0, 10
4420 ; CHECK-NEXT: cmpw 9, 5
4421 ; CHECK-NEXT: bne 0, .LBB3_15
4422 ; CHECK-NEXT: # %bb.14: # %entry
4424 ; CHECK-NEXT: stwcx. 8, 0, 10
4425 ; CHECK-NEXT: bne 0, .LBB3_13
4426 ; CHECK-NEXT: .LBB3_15: # %entry
4427 ; CHECK-NEXT: lwsync
4428 ; CHECK-NEXT: stw 9, si@toc@l(7)
4429 ; CHECK-NEXT: lbz 5, sc@toc@l(4)
4430 ; CHECK-NEXT: lbz 7, uc@toc@l(3)
4432 ; CHECK-NEXT: extsb 8, 5
4433 ; CHECK-NEXT: addis 5, 2, ui@toc@ha
4434 ; CHECK-NEXT: addi 9, 5, ui@toc@l
4435 ; CHECK-NEXT: .LBB3_16: # %entry
4437 ; CHECK-NEXT: lwarx 30, 0, 9
4438 ; CHECK-NEXT: cmpw 30, 7
4439 ; CHECK-NEXT: bne 0, .LBB3_18
4440 ; CHECK-NEXT: # %bb.17: # %entry
4442 ; CHECK-NEXT: stwcx. 8, 0, 9
4443 ; CHECK-NEXT: bne 0, .LBB3_16
4444 ; CHECK-NEXT: .LBB3_18: # %entry
4445 ; CHECK-NEXT: lwsync
4446 ; CHECK-NEXT: stw 30, ui@toc@l(5)
4447 ; CHECK-NEXT: addis 30, 2, sll@toc@ha
4448 ; CHECK-NEXT: lbz 8, sc@toc@l(4)
4449 ; CHECK-NEXT: lbz 7, uc@toc@l(3)
4451 ; CHECK-NEXT: extsb 29, 8
4452 ; CHECK-NEXT: addi 8, 30, sll@toc@l
4453 ; CHECK-NEXT: .LBB3_19: # %entry
4455 ; CHECK-NEXT: ldarx 28, 0, 8
4456 ; CHECK-NEXT: cmpd 28, 7
4457 ; CHECK-NEXT: bne 0, .LBB3_21
4458 ; CHECK-NEXT: # %bb.20: # %entry
4460 ; CHECK-NEXT: stdcx. 29, 0, 8
4461 ; CHECK-NEXT: bne 0, .LBB3_19
4462 ; CHECK-NEXT: .LBB3_21: # %entry
4463 ; CHECK-NEXT: lwsync
4464 ; CHECK-NEXT: addis 29, 2, ull@toc@ha
4465 ; CHECK-NEXT: std 28, sll@toc@l(30)
4466 ; CHECK-NEXT: lbz 7, sc@toc@l(4)
4467 ; CHECK-NEXT: lbz 30, uc@toc@l(3)
4469 ; CHECK-NEXT: extsb 28, 7
4470 ; CHECK-NEXT: addi 7, 29, ull@toc@l
4471 ; CHECK-NEXT: .LBB3_22: # %entry
4473 ; CHECK-NEXT: ldarx 27, 0, 7
4474 ; CHECK-NEXT: cmpd 27, 30
4475 ; CHECK-NEXT: bne 0, .LBB3_24
4476 ; CHECK-NEXT: # %bb.23: # %entry
4478 ; CHECK-NEXT: stdcx. 28, 0, 7
4479 ; CHECK-NEXT: bne 0, .LBB3_22
4480 ; CHECK-NEXT: .LBB3_24: # %entry
4481 ; CHECK-NEXT: lwsync
4482 ; CHECK-NEXT: std 27, ull@toc@l(29)
4483 ; CHECK-NEXT: lbz 30, uc@toc@l(3)
4484 ; CHECK-NEXT: lbz 29, sc@toc@l(4)
4486 ; CHECK-NEXT: .LBB3_25: # %entry
4488 ; CHECK-NEXT: lbarx 28, 0, 0
4489 ; CHECK-NEXT: cmpw 28, 30
4490 ; CHECK-NEXT: bne 0, .LBB3_27
4491 ; CHECK-NEXT: # %bb.26: # %entry
4493 ; CHECK-NEXT: stbcx. 29, 0, 0
4494 ; CHECK-NEXT: bne 0, .LBB3_25
4495 ; CHECK-NEXT: .LBB3_27: # %entry
4496 ; CHECK-NEXT: xor 0, 28, 30
4497 ; CHECK-NEXT: lwsync
4498 ; CHECK-NEXT: lbz 30, sc@toc@l(4)
4499 ; CHECK-NEXT: cntlzw 0, 0
4500 ; CHECK-NEXT: srwi 0, 0, 5
4501 ; CHECK-NEXT: stw 0, ui@toc@l(5)
4502 ; CHECK-NEXT: lbz 0, uc@toc@l(3)
4504 ; CHECK-NEXT: .LBB3_28: # %entry
4506 ; CHECK-NEXT: lbarx 29, 0, 6
4507 ; CHECK-NEXT: cmpw 29, 0
4508 ; CHECK-NEXT: bne 0, .LBB3_30
4509 ; CHECK-NEXT: # %bb.29: # %entry
4511 ; CHECK-NEXT: stbcx. 30, 0, 6
4512 ; CHECK-NEXT: bne 0, .LBB3_28
4513 ; CHECK-NEXT: .LBB3_30: # %entry
4514 ; CHECK-NEXT: xor 6, 29, 0
4515 ; CHECK-NEXT: lwsync
4516 ; CHECK-NEXT: lbz 0, sc@toc@l(4)
4517 ; CHECK-NEXT: cntlzw 6, 6
4518 ; CHECK-NEXT: extsb 0, 0
4519 ; CHECK-NEXT: srwi 6, 6, 5
4520 ; CHECK-NEXT: stw 6, ui@toc@l(5)
4521 ; CHECK-NEXT: lbz 6, uc@toc@l(3)
4523 ; CHECK-NEXT: .LBB3_31: # %entry
4525 ; CHECK-NEXT: lharx 30, 0, 12
4526 ; CHECK-NEXT: cmpw 30, 6
4527 ; CHECK-NEXT: bne 0, .LBB3_33
4528 ; CHECK-NEXT: # %bb.32: # %entry
4530 ; CHECK-NEXT: sthcx. 0, 0, 12
4531 ; CHECK-NEXT: bne 0, .LBB3_31
4532 ; CHECK-NEXT: .LBB3_33: # %entry
4533 ; CHECK-NEXT: xor 6, 30, 6
4534 ; CHECK-NEXT: lwsync
4535 ; CHECK-NEXT: lbz 12, sc@toc@l(4)
4536 ; CHECK-NEXT: cntlzw 6, 6
4537 ; CHECK-NEXT: extsb 12, 12
4538 ; CHECK-NEXT: srwi 6, 6, 5
4539 ; CHECK-NEXT: stw 6, ui@toc@l(5)
4540 ; CHECK-NEXT: lbz 6, uc@toc@l(3)
4542 ; CHECK-NEXT: .LBB3_34: # %entry
4544 ; CHECK-NEXT: lharx 0, 0, 11
4545 ; CHECK-NEXT: cmpw 0, 6
4546 ; CHECK-NEXT: bne 0, .LBB3_36
4547 ; CHECK-NEXT: # %bb.35: # %entry
4549 ; CHECK-NEXT: sthcx. 12, 0, 11
4550 ; CHECK-NEXT: bne 0, .LBB3_34
4551 ; CHECK-NEXT: .LBB3_36: # %entry
4552 ; CHECK-NEXT: xor 6, 0, 6
4553 ; CHECK-NEXT: lwsync
4554 ; CHECK-NEXT: lbz 11, sc@toc@l(4)
4555 ; CHECK-NEXT: cntlzw 6, 6
4556 ; CHECK-NEXT: extsb 11, 11
4557 ; CHECK-NEXT: srwi 6, 6, 5
4558 ; CHECK-NEXT: stw 6, ui@toc@l(5)
4559 ; CHECK-NEXT: lbz 6, uc@toc@l(3)
4561 ; CHECK-NEXT: .LBB3_37: # %entry
4563 ; CHECK-NEXT: lwarx 12, 0, 10
4564 ; CHECK-NEXT: cmpw 12, 6
4565 ; CHECK-NEXT: bne 0, .LBB3_39
4566 ; CHECK-NEXT: # %bb.38: # %entry
4568 ; CHECK-NEXT: stwcx. 11, 0, 10
4569 ; CHECK-NEXT: bne 0, .LBB3_37
4570 ; CHECK-NEXT: .LBB3_39: # %entry
4571 ; CHECK-NEXT: xor 6, 12, 6
4572 ; CHECK-NEXT: lwsync
4573 ; CHECK-NEXT: lbz 10, sc@toc@l(4)
4574 ; CHECK-NEXT: cntlzw 6, 6
4575 ; CHECK-NEXT: extsb 10, 10
4576 ; CHECK-NEXT: srwi 6, 6, 5
4577 ; CHECK-NEXT: stw 6, ui@toc@l(5)
4578 ; CHECK-NEXT: lbz 6, uc@toc@l(3)
4580 ; CHECK-NEXT: .LBB3_40: # %entry
4582 ; CHECK-NEXT: lwarx 11, 0, 9
4583 ; CHECK-NEXT: cmpw 11, 6
4584 ; CHECK-NEXT: bne 0, .LBB3_42
4585 ; CHECK-NEXT: # %bb.41: # %entry
4587 ; CHECK-NEXT: stwcx. 10, 0, 9
4588 ; CHECK-NEXT: bne 0, .LBB3_40
4589 ; CHECK-NEXT: .LBB3_42: # %entry
4590 ; CHECK-NEXT: xor 6, 11, 6
4591 ; CHECK-NEXT: lwsync
4592 ; CHECK-NEXT: lbz 9, sc@toc@l(4)
4593 ; CHECK-NEXT: cntlzw 6, 6
4594 ; CHECK-NEXT: extsb 9, 9
4595 ; CHECK-NEXT: srwi 6, 6, 5
4596 ; CHECK-NEXT: stw 6, ui@toc@l(5)
4597 ; CHECK-NEXT: lbz 6, uc@toc@l(3)
4599 ; CHECK-NEXT: .LBB3_43: # %entry
4601 ; CHECK-NEXT: ldarx 10, 0, 8
4602 ; CHECK-NEXT: cmpd 10, 6
4603 ; CHECK-NEXT: bne 0, .LBB3_45
4604 ; CHECK-NEXT: # %bb.44: # %entry
4606 ; CHECK-NEXT: stdcx. 9, 0, 8
4607 ; CHECK-NEXT: bne 0, .LBB3_43
4608 ; CHECK-NEXT: .LBB3_45: # %entry
4609 ; CHECK-NEXT: xor 6, 10, 6
4610 ; CHECK-NEXT: lwsync
4611 ; CHECK-NEXT: lbz 4, sc@toc@l(4)
4612 ; CHECK-NEXT: lbz 3, uc@toc@l(3)
4613 ; CHECK-NEXT: cntlzd 6, 6
4614 ; CHECK-NEXT: extsb 4, 4
4615 ; CHECK-NEXT: rldicl 6, 6, 58, 63
4616 ; CHECK-NEXT: stw 6, ui@toc@l(5)
4618 ; CHECK-NEXT: .LBB3_46: # %entry
4620 ; CHECK-NEXT: ldarx 6, 0, 7
4621 ; CHECK-NEXT: cmpd 6, 3
4622 ; CHECK-NEXT: bne 0, .LBB3_48
4623 ; CHECK-NEXT: # %bb.47: # %entry
4625 ; CHECK-NEXT: stdcx. 4, 0, 7
4626 ; CHECK-NEXT: bne 0, .LBB3_46
4627 ; CHECK-NEXT: .LBB3_48: # %entry
4628 ; CHECK-NEXT: xor 3, 6, 3
4629 ; CHECK-NEXT: lwsync
4630 ; CHECK-NEXT: ld 30, -16(1) # 8-byte Folded Reload
4631 ; CHECK-NEXT: ld 29, -24(1) # 8-byte Folded Reload
4632 ; CHECK-NEXT: cntlzd 3, 3
4633 ; CHECK-NEXT: ld 28, -32(1) # 8-byte Folded Reload
4634 ; CHECK-NEXT: ld 27, -40(1) # 8-byte Folded Reload
4635 ; CHECK-NEXT: rldicl 3, 3, 58, 63
4636 ; CHECK-NEXT: stw 3, ui@toc@l(5)
4639 ; AIX32-LABEL: test_compare_and_swap:
4640 ; AIX32: # %bb.0: # %entry
4641 ; AIX32-NEXT: mflr 0
4642 ; AIX32-NEXT: stwu 1, -128(1)
4643 ; AIX32-NEXT: stw 0, 136(1)
4644 ; AIX32-NEXT: stw 28, 112(1) # 4-byte Folded Spill
4645 ; AIX32-NEXT: lwz 28, L..C0(2) # @sc
4646 ; AIX32-NEXT: stw 29, 116(1) # 4-byte Folded Spill
4647 ; AIX32-NEXT: lwz 29, L..C1(2) # @uc
4648 ; AIX32-NEXT: lbz 3, 0(29)
4649 ; AIX32-NEXT: rlwinm 5, 28, 3, 27, 28
4650 ; AIX32-NEXT: stw 21, 84(1) # 4-byte Folded Spill
4651 ; AIX32-NEXT: lbz 4, 0(28)
4652 ; AIX32-NEXT: stw 17, 68(1) # 4-byte Folded Spill
4653 ; AIX32-NEXT: stw 18, 72(1) # 4-byte Folded Spill
4654 ; AIX32-NEXT: stw 19, 76(1) # 4-byte Folded Spill
4655 ; AIX32-NEXT: stw 20, 80(1) # 4-byte Folded Spill
4656 ; AIX32-NEXT: xori 21, 5, 24
4657 ; AIX32-NEXT: stw 22, 88(1) # 4-byte Folded Spill
4658 ; AIX32-NEXT: stw 23, 92(1) # 4-byte Folded Spill
4659 ; AIX32-NEXT: stw 24, 96(1) # 4-byte Folded Spill
4660 ; AIX32-NEXT: slw 5, 3, 21
4661 ; AIX32-NEXT: li 3, 255
4662 ; AIX32-NEXT: slw 4, 4, 21
4663 ; AIX32-NEXT: stw 25, 100(1) # 4-byte Folded Spill
4664 ; AIX32-NEXT: stw 26, 104(1) # 4-byte Folded Spill
4665 ; AIX32-NEXT: slw 3, 3, 21
4666 ; AIX32-NEXT: stw 27, 108(1) # 4-byte Folded Spill
4667 ; AIX32-NEXT: stw 30, 120(1) # 4-byte Folded Spill
4668 ; AIX32-NEXT: stw 31, 124(1) # 4-byte Folded Spill
4670 ; AIX32-NEXT: rlwinm 18, 28, 0, 0, 29
4671 ; AIX32-NEXT: and 4, 4, 3
4672 ; AIX32-NEXT: and 5, 5, 3
4673 ; AIX32-NEXT: L..BB3_1: # %entry
4675 ; AIX32-NEXT: lwarx 7, 0, 18
4676 ; AIX32-NEXT: and 6, 7, 3
4677 ; AIX32-NEXT: cmpw 6, 5
4678 ; AIX32-NEXT: bne 0, L..BB3_3
4679 ; AIX32-NEXT: # %bb.2: # %entry
4681 ; AIX32-NEXT: andc 7, 7, 3
4682 ; AIX32-NEXT: or 7, 7, 4
4683 ; AIX32-NEXT: stwcx. 7, 0, 18
4684 ; AIX32-NEXT: bne 0, L..BB3_1
4685 ; AIX32-NEXT: L..BB3_3: # %entry
4686 ; AIX32-NEXT: rlwinm 5, 29, 3, 27, 28
4687 ; AIX32-NEXT: srw 3, 6, 21
4688 ; AIX32-NEXT: lwsync
4689 ; AIX32-NEXT: lbz 4, 0(29)
4690 ; AIX32-NEXT: rlwinm 20, 29, 0, 0, 29
4691 ; AIX32-NEXT: xori 25, 5, 24
4692 ; AIX32-NEXT: slw 5, 3, 25
4693 ; AIX32-NEXT: stb 3, 0(28)
4694 ; AIX32-NEXT: li 3, 255
4696 ; AIX32-NEXT: slw 6, 4, 25
4697 ; AIX32-NEXT: slw 3, 3, 25
4698 ; AIX32-NEXT: and 4, 5, 3
4699 ; AIX32-NEXT: and 5, 6, 3
4700 ; AIX32-NEXT: L..BB3_4: # %entry
4702 ; AIX32-NEXT: lwarx 7, 0, 20
4703 ; AIX32-NEXT: and 6, 7, 3
4704 ; AIX32-NEXT: cmpw 6, 5
4705 ; AIX32-NEXT: bne 0, L..BB3_6
4706 ; AIX32-NEXT: # %bb.5: # %entry
4708 ; AIX32-NEXT: andc 7, 7, 3
4709 ; AIX32-NEXT: or 7, 7, 4
4710 ; AIX32-NEXT: stwcx. 7, 0, 20
4711 ; AIX32-NEXT: bne 0, L..BB3_4
4712 ; AIX32-NEXT: L..BB3_6: # %entry
4713 ; AIX32-NEXT: lwsync
4714 ; AIX32-NEXT: srw 4, 6, 25
4715 ; AIX32-NEXT: lbz 3, 0(28)
4716 ; AIX32-NEXT: extsb 5, 3
4717 ; AIX32-NEXT: lwz 3, L..C2(2) # @ss
4718 ; AIX32-NEXT: stb 4, 0(29)
4720 ; AIX32-NEXT: rlwinm 6, 3, 3, 27, 27
4721 ; AIX32-NEXT: rlwinm 22, 3, 0, 0, 29
4722 ; AIX32-NEXT: xori 26, 6, 16
4723 ; AIX32-NEXT: slw 6, 4, 26
4724 ; AIX32-NEXT: li 4, 0
4725 ; AIX32-NEXT: slw 5, 5, 26
4726 ; AIX32-NEXT: ori 4, 4, 65535
4727 ; AIX32-NEXT: slw 4, 4, 26
4728 ; AIX32-NEXT: and 5, 5, 4
4729 ; AIX32-NEXT: and 6, 6, 4
4730 ; AIX32-NEXT: L..BB3_7: # %entry
4732 ; AIX32-NEXT: lwarx 8, 0, 22
4733 ; AIX32-NEXT: and 7, 8, 4
4734 ; AIX32-NEXT: cmpw 7, 6
4735 ; AIX32-NEXT: bne 0, L..BB3_9
4736 ; AIX32-NEXT: # %bb.8: # %entry
4738 ; AIX32-NEXT: andc 8, 8, 4
4739 ; AIX32-NEXT: or 8, 8, 5
4740 ; AIX32-NEXT: stwcx. 8, 0, 22
4741 ; AIX32-NEXT: bne 0, L..BB3_7
4742 ; AIX32-NEXT: L..BB3_9: # %entry
4743 ; AIX32-NEXT: srw 4, 7, 26
4744 ; AIX32-NEXT: lwsync
4745 ; AIX32-NEXT: sth 4, 0(3)
4746 ; AIX32-NEXT: lbz 3, 0(28)
4747 ; AIX32-NEXT: lbz 4, 0(29)
4749 ; AIX32-NEXT: extsb 5, 3
4750 ; AIX32-NEXT: lwz 3, L..C3(2) # @us
4751 ; AIX32-NEXT: rlwinm 6, 3, 3, 27, 27
4752 ; AIX32-NEXT: rlwinm 19, 3, 0, 0, 29
4753 ; AIX32-NEXT: xori 24, 6, 16
4754 ; AIX32-NEXT: slw 6, 4, 24
4755 ; AIX32-NEXT: li 4, 0
4756 ; AIX32-NEXT: slw 5, 5, 24
4757 ; AIX32-NEXT: ori 4, 4, 65535
4758 ; AIX32-NEXT: slw 4, 4, 24
4759 ; AIX32-NEXT: and 5, 5, 4
4760 ; AIX32-NEXT: and 6, 6, 4
4761 ; AIX32-NEXT: L..BB3_10: # %entry
4763 ; AIX32-NEXT: lwarx 8, 0, 19
4764 ; AIX32-NEXT: and 7, 8, 4
4765 ; AIX32-NEXT: cmpw 7, 6
4766 ; AIX32-NEXT: bne 0, L..BB3_12
4767 ; AIX32-NEXT: # %bb.11: # %entry
4769 ; AIX32-NEXT: andc 8, 8, 4
4770 ; AIX32-NEXT: or 8, 8, 5
4771 ; AIX32-NEXT: stwcx. 8, 0, 19
4772 ; AIX32-NEXT: bne 0, L..BB3_10
4773 ; AIX32-NEXT: L..BB3_12: # %entry
4774 ; AIX32-NEXT: srw 4, 7, 24
4775 ; AIX32-NEXT: lwsync
4776 ; AIX32-NEXT: lwz 17, L..C4(2) # @si
4777 ; AIX32-NEXT: sth 4, 0(3)
4778 ; AIX32-NEXT: lbz 4, 0(28)
4779 ; AIX32-NEXT: lbz 3, 0(29)
4781 ; AIX32-NEXT: extsb 4, 4
4782 ; AIX32-NEXT: L..BB3_13: # %entry
4784 ; AIX32-NEXT: lwarx 5, 0, 17
4785 ; AIX32-NEXT: cmpw 5, 3
4786 ; AIX32-NEXT: bne 0, L..BB3_15
4787 ; AIX32-NEXT: # %bb.14: # %entry
4789 ; AIX32-NEXT: stwcx. 4, 0, 17
4790 ; AIX32-NEXT: bne 0, L..BB3_13
4791 ; AIX32-NEXT: L..BB3_15: # %entry
4792 ; AIX32-NEXT: lwsync
4793 ; AIX32-NEXT: stw 5, 0(17)
4794 ; AIX32-NEXT: lwz 27, L..C5(2) # @ui
4795 ; AIX32-NEXT: lbz 4, 0(28)
4796 ; AIX32-NEXT: lbz 3, 0(29)
4798 ; AIX32-NEXT: extsb 4, 4
4799 ; AIX32-NEXT: L..BB3_16: # %entry
4801 ; AIX32-NEXT: lwarx 5, 0, 27
4802 ; AIX32-NEXT: cmpw 5, 3
4803 ; AIX32-NEXT: bne 0, L..BB3_18
4804 ; AIX32-NEXT: # %bb.17: # %entry
4806 ; AIX32-NEXT: stwcx. 4, 0, 27
4807 ; AIX32-NEXT: bne 0, L..BB3_16
4808 ; AIX32-NEXT: L..BB3_18: # %entry
4809 ; AIX32-NEXT: lwsync
4810 ; AIX32-NEXT: lwz 31, L..C6(2) # @sll
4811 ; AIX32-NEXT: stw 5, 0(27)
4812 ; AIX32-NEXT: lbz 3, 0(28)
4813 ; AIX32-NEXT: li 23, 0
4814 ; AIX32-NEXT: addi 4, 1, 56
4815 ; AIX32-NEXT: li 7, 5
4816 ; AIX32-NEXT: li 8, 5
4817 ; AIX32-NEXT: stw 23, 56(1)
4818 ; AIX32-NEXT: extsb 6, 3
4819 ; AIX32-NEXT: lbz 3, 0(29)
4820 ; AIX32-NEXT: srawi 5, 6, 31
4821 ; AIX32-NEXT: stw 3, 60(1)
4822 ; AIX32-NEXT: mr 3, 31
4823 ; AIX32-NEXT: bl .__atomic_compare_exchange_8[PR]
4825 ; AIX32-NEXT: lwz 3, 60(1)
4826 ; AIX32-NEXT: lbz 4, 0(28)
4827 ; AIX32-NEXT: lwz 30, L..C7(2) # @ull
4828 ; AIX32-NEXT: li 7, 5
4829 ; AIX32-NEXT: li 8, 5
4830 ; AIX32-NEXT: stw 3, 4(31)
4831 ; AIX32-NEXT: lwz 3, 56(1)
4832 ; AIX32-NEXT: extsb 6, 4
4833 ; AIX32-NEXT: addi 4, 1, 56
4834 ; AIX32-NEXT: srawi 5, 6, 31
4835 ; AIX32-NEXT: stw 23, 56(1)
4836 ; AIX32-NEXT: stw 3, 0(31)
4837 ; AIX32-NEXT: lbz 3, 0(29)
4838 ; AIX32-NEXT: stw 3, 60(1)
4839 ; AIX32-NEXT: mr 3, 30
4840 ; AIX32-NEXT: bl .__atomic_compare_exchange_8[PR]
4842 ; AIX32-NEXT: lwz 4, 60(1)
4843 ; AIX32-NEXT: lwz 3, 56(1)
4844 ; AIX32-NEXT: stw 4, 4(30)
4845 ; AIX32-NEXT: lbz 4, 0(28)
4846 ; AIX32-NEXT: stw 3, 0(30)
4847 ; AIX32-NEXT: lbz 3, 0(29)
4849 ; AIX32-NEXT: slw 5, 4, 21
4850 ; AIX32-NEXT: li 4, 255
4851 ; AIX32-NEXT: slw 6, 3, 21
4852 ; AIX32-NEXT: slw 4, 4, 21
4853 ; AIX32-NEXT: and 5, 5, 4
4854 ; AIX32-NEXT: and 6, 6, 4
4855 ; AIX32-NEXT: L..BB3_19: # %entry
4857 ; AIX32-NEXT: lwarx 8, 0, 18
4858 ; AIX32-NEXT: and 7, 8, 4
4859 ; AIX32-NEXT: cmpw 7, 6
4860 ; AIX32-NEXT: bne 0, L..BB3_21
4861 ; AIX32-NEXT: # %bb.20: # %entry
4863 ; AIX32-NEXT: andc 8, 8, 4
4864 ; AIX32-NEXT: or 8, 8, 5
4865 ; AIX32-NEXT: stwcx. 8, 0, 18
4866 ; AIX32-NEXT: bne 0, L..BB3_19
4867 ; AIX32-NEXT: L..BB3_21: # %entry
4868 ; AIX32-NEXT: srw 4, 7, 21
4869 ; AIX32-NEXT: lwsync
4870 ; AIX32-NEXT: lbz 5, 0(28)
4871 ; AIX32-NEXT: cmpw 4, 3
4872 ; AIX32-NEXT: li 3, 1
4873 ; AIX32-NEXT: iseleq 4, 3, 23
4874 ; AIX32-NEXT: slw 6, 5, 25
4875 ; AIX32-NEXT: li 5, 255
4876 ; AIX32-NEXT: stw 4, 0(27)
4877 ; AIX32-NEXT: lbz 4, 0(29)
4878 ; AIX32-NEXT: slw 5, 5, 25
4880 ; AIX32-NEXT: slw 7, 4, 25
4881 ; AIX32-NEXT: and 6, 6, 5
4882 ; AIX32-NEXT: and 7, 7, 5
4883 ; AIX32-NEXT: L..BB3_22: # %entry
4885 ; AIX32-NEXT: lwarx 9, 0, 20
4886 ; AIX32-NEXT: and 8, 9, 5
4887 ; AIX32-NEXT: cmpw 8, 7
4888 ; AIX32-NEXT: bne 0, L..BB3_24
4889 ; AIX32-NEXT: # %bb.23: # %entry
4891 ; AIX32-NEXT: andc 9, 9, 5
4892 ; AIX32-NEXT: or 9, 9, 6
4893 ; AIX32-NEXT: stwcx. 9, 0, 20
4894 ; AIX32-NEXT: bne 0, L..BB3_22
4895 ; AIX32-NEXT: L..BB3_24: # %entry
4896 ; AIX32-NEXT: srw 5, 8, 25
4897 ; AIX32-NEXT: lwsync
4898 ; AIX32-NEXT: cmpw 5, 4
4899 ; AIX32-NEXT: lbz 5, 0(28)
4900 ; AIX32-NEXT: iseleq 4, 3, 23
4901 ; AIX32-NEXT: extsb 5, 5
4902 ; AIX32-NEXT: stw 4, 0(27)
4903 ; AIX32-NEXT: lbz 4, 0(29)
4905 ; AIX32-NEXT: slw 6, 5, 26
4906 ; AIX32-NEXT: li 5, 0
4907 ; AIX32-NEXT: slw 7, 4, 26
4908 ; AIX32-NEXT: ori 5, 5, 65535
4909 ; AIX32-NEXT: slw 5, 5, 26
4910 ; AIX32-NEXT: and 6, 6, 5
4911 ; AIX32-NEXT: and 7, 7, 5
4912 ; AIX32-NEXT: L..BB3_25: # %entry
4914 ; AIX32-NEXT: lwarx 9, 0, 22
4915 ; AIX32-NEXT: and 8, 9, 5
4916 ; AIX32-NEXT: cmpw 8, 7
4917 ; AIX32-NEXT: bne 0, L..BB3_27
4918 ; AIX32-NEXT: # %bb.26: # %entry
4920 ; AIX32-NEXT: andc 9, 9, 5
4921 ; AIX32-NEXT: or 9, 9, 6
4922 ; AIX32-NEXT: stwcx. 9, 0, 22
4923 ; AIX32-NEXT: bne 0, L..BB3_25
4924 ; AIX32-NEXT: L..BB3_27: # %entry
4925 ; AIX32-NEXT: srw 5, 8, 26
4926 ; AIX32-NEXT: lwsync
4927 ; AIX32-NEXT: cmpw 5, 4
4928 ; AIX32-NEXT: lbz 5, 0(28)
4929 ; AIX32-NEXT: iseleq 4, 3, 23
4930 ; AIX32-NEXT: extsb 5, 5
4931 ; AIX32-NEXT: stw 4, 0(27)
4932 ; AIX32-NEXT: lbz 4, 0(29)
4934 ; AIX32-NEXT: slw 6, 5, 24
4935 ; AIX32-NEXT: li 5, 0
4936 ; AIX32-NEXT: slw 7, 4, 24
4937 ; AIX32-NEXT: ori 5, 5, 65535
4938 ; AIX32-NEXT: slw 5, 5, 24
4939 ; AIX32-NEXT: and 6, 6, 5
4940 ; AIX32-NEXT: and 7, 7, 5
4941 ; AIX32-NEXT: L..BB3_28: # %entry
4943 ; AIX32-NEXT: lwarx 9, 0, 19
4944 ; AIX32-NEXT: and 8, 9, 5
4945 ; AIX32-NEXT: cmpw 8, 7
4946 ; AIX32-NEXT: bne 0, L..BB3_30
4947 ; AIX32-NEXT: # %bb.29: # %entry
4949 ; AIX32-NEXT: andc 9, 9, 5
4950 ; AIX32-NEXT: or 9, 9, 6
4951 ; AIX32-NEXT: stwcx. 9, 0, 19
4952 ; AIX32-NEXT: bne 0, L..BB3_28
4953 ; AIX32-NEXT: L..BB3_30: # %entry
4954 ; AIX32-NEXT: srw 5, 8, 24
4955 ; AIX32-NEXT: lwsync
4956 ; AIX32-NEXT: cmpw 5, 4
4957 ; AIX32-NEXT: lbz 5, 0(28)
4958 ; AIX32-NEXT: iseleq 4, 3, 23
4959 ; AIX32-NEXT: stw 4, 0(27)
4960 ; AIX32-NEXT: lbz 4, 0(29)
4962 ; AIX32-NEXT: extsb 5, 5
4963 ; AIX32-NEXT: L..BB3_31: # %entry
4965 ; AIX32-NEXT: lwarx 6, 0, 17
4966 ; AIX32-NEXT: cmpw 1, 6, 4
4967 ; AIX32-NEXT: bne 1, L..BB3_33
4968 ; AIX32-NEXT: # %bb.32: # %entry
4970 ; AIX32-NEXT: stwcx. 5, 0, 17
4971 ; AIX32-NEXT: bne 0, L..BB3_31
4972 ; AIX32-NEXT: L..BB3_33: # %entry
4973 ; AIX32-NEXT: lwsync
4974 ; AIX32-NEXT: isel 4, 3, 23, 6
4975 ; AIX32-NEXT: lbz 5, 0(28)
4976 ; AIX32-NEXT: stw 4, 0(27)
4977 ; AIX32-NEXT: lbz 4, 0(29)
4979 ; AIX32-NEXT: extsb 5, 5
4980 ; AIX32-NEXT: L..BB3_34: # %entry
4982 ; AIX32-NEXT: lwarx 6, 0, 27
4983 ; AIX32-NEXT: cmpw 1, 6, 4
4984 ; AIX32-NEXT: bne 1, L..BB3_36
4985 ; AIX32-NEXT: # %bb.35: # %entry
4987 ; AIX32-NEXT: stwcx. 5, 0, 27
4988 ; AIX32-NEXT: bne 0, L..BB3_34
4989 ; AIX32-NEXT: L..BB3_36: # %entry
4990 ; AIX32-NEXT: lwsync
4991 ; AIX32-NEXT: isel 3, 3, 23, 6
4992 ; AIX32-NEXT: li 7, 5
4993 ; AIX32-NEXT: li 8, 5
4994 ; AIX32-NEXT: lbz 4, 0(28)
4995 ; AIX32-NEXT: stw 3, 0(27)
4996 ; AIX32-NEXT: lbz 3, 0(29)
4997 ; AIX32-NEXT: stw 23, 56(1)
4998 ; AIX32-NEXT: extsb 6, 4
4999 ; AIX32-NEXT: addi 4, 1, 56
5000 ; AIX32-NEXT: stw 3, 60(1)
5001 ; AIX32-NEXT: mr 3, 31
5002 ; AIX32-NEXT: srawi 5, 6, 31
5003 ; AIX32-NEXT: bl .__atomic_compare_exchange_8[PR]
5005 ; AIX32-NEXT: lbz 4, 0(28)
5006 ; AIX32-NEXT: stw 3, 0(27)
5007 ; AIX32-NEXT: lbz 3, 0(29)
5008 ; AIX32-NEXT: li 7, 5
5009 ; AIX32-NEXT: li 8, 5
5010 ; AIX32-NEXT: extsb 6, 4
5011 ; AIX32-NEXT: addi 4, 1, 56
5012 ; AIX32-NEXT: stw 3, 60(1)
5013 ; AIX32-NEXT: mr 3, 30
5014 ; AIX32-NEXT: stw 23, 56(1)
5015 ; AIX32-NEXT: srawi 5, 6, 31
5016 ; AIX32-NEXT: bl .__atomic_compare_exchange_8[PR]
5018 ; AIX32-NEXT: stw 3, 0(27)
5019 ; AIX32-NEXT: lwz 31, 124(1) # 4-byte Folded Reload
5020 ; AIX32-NEXT: lwz 30, 120(1) # 4-byte Folded Reload
5021 ; AIX32-NEXT: lwz 29, 116(1) # 4-byte Folded Reload
5022 ; AIX32-NEXT: lwz 28, 112(1) # 4-byte Folded Reload
5023 ; AIX32-NEXT: lwz 27, 108(1) # 4-byte Folded Reload
5024 ; AIX32-NEXT: lwz 26, 104(1) # 4-byte Folded Reload
5025 ; AIX32-NEXT: lwz 25, 100(1) # 4-byte Folded Reload
5026 ; AIX32-NEXT: lwz 24, 96(1) # 4-byte Folded Reload
5027 ; AIX32-NEXT: lwz 23, 92(1) # 4-byte Folded Reload
5028 ; AIX32-NEXT: lwz 22, 88(1) # 4-byte Folded Reload
5029 ; AIX32-NEXT: lwz 21, 84(1) # 4-byte Folded Reload
5030 ; AIX32-NEXT: lwz 20, 80(1) # 4-byte Folded Reload
5031 ; AIX32-NEXT: lwz 19, 76(1) # 4-byte Folded Reload
5032 ; AIX32-NEXT: lwz 18, 72(1) # 4-byte Folded Reload
5033 ; AIX32-NEXT: lwz 17, 68(1) # 4-byte Folded Reload
5034 ; AIX32-NEXT: addi 1, 1, 128
5035 ; AIX32-NEXT: lwz 0, 8(1)
5036 ; AIX32-NEXT: mtlr 0
5039 %0 = load i8, ptr @uc, align 1
5040 %1 = load i8, ptr @sc, align 1
5041 %2 = cmpxchg ptr @sc, i8 %0, i8 %1 seq_cst seq_cst, align 1
5042 %3 = extractvalue { i8, i1 } %2, 0
5043 store i8 %3, ptr @sc, align 1
5044 %4 = load i8, ptr @uc, align 1
5045 %5 = cmpxchg ptr @uc, i8 %4, i8 %3 seq_cst seq_cst, align 1
5046 %6 = extractvalue { i8, i1 } %5, 0
5047 store i8 %6, ptr @uc, align 1
5048 %conv = zext i8 %6 to i16
5049 %7 = load i8, ptr @sc, align 1
5050 %conv1 = sext i8 %7 to i16
5051 %8 = cmpxchg ptr @ss, i16 %conv, i16 %conv1 seq_cst seq_cst, align 2
5052 %9 = extractvalue { i16, i1 } %8, 0
5053 store i16 %9, ptr @ss, align 2
5054 %10 = load i8, ptr @uc, align 1
5055 %conv2 = zext i8 %10 to i16
5056 %11 = load i8, ptr @sc, align 1
5057 %conv3 = sext i8 %11 to i16
5058 %12 = cmpxchg ptr @us, i16 %conv2, i16 %conv3 seq_cst seq_cst, align 2
5059 %13 = extractvalue { i16, i1 } %12, 0
5060 store i16 %13, ptr @us, align 2
5061 %14 = load i8, ptr @uc, align 1
5062 %conv4 = zext i8 %14 to i32
5063 %15 = load i8, ptr @sc, align 1
5064 %conv5 = sext i8 %15 to i32
5065 %16 = cmpxchg ptr @si, i32 %conv4, i32 %conv5 seq_cst seq_cst, align 4
5066 %17 = extractvalue { i32, i1 } %16, 0
5067 store i32 %17, ptr @si, align 4
5068 %18 = load i8, ptr @uc, align 1
5069 %conv6 = zext i8 %18 to i32
5070 %19 = load i8, ptr @sc, align 1
5071 %conv7 = sext i8 %19 to i32
5072 %20 = cmpxchg ptr @ui, i32 %conv6, i32 %conv7 seq_cst seq_cst, align 4
5073 %21 = extractvalue { i32, i1 } %20, 0
5074 store i32 %21, ptr @ui, align 4
5075 %22 = load i8, ptr @uc, align 1
5076 %conv8 = zext i8 %22 to i64
5077 %23 = load i8, ptr @sc, align 1
5078 %conv9 = sext i8 %23 to i64
5079 %24 = cmpxchg ptr @sll, i64 %conv8, i64 %conv9 seq_cst seq_cst, align 8
5080 %25 = extractvalue { i64, i1 } %24, 0
5081 store i64 %25, ptr @sll, align 8
5082 %26 = load i8, ptr @uc, align 1
5083 %conv10 = zext i8 %26 to i64
5084 %27 = load i8, ptr @sc, align 1
5085 %conv11 = sext i8 %27 to i64
5086 %28 = cmpxchg ptr @ull, i64 %conv10, i64 %conv11 seq_cst seq_cst, align 8
5087 %29 = extractvalue { i64, i1 } %28, 0
5088 store i64 %29, ptr @ull, align 8
5089 %30 = load i8, ptr @uc, align 1
5090 %31 = load i8, ptr @sc, align 1
5091 %32 = cmpxchg ptr @sc, i8 %30, i8 %31 seq_cst seq_cst, align 1
5092 %33 = extractvalue { i8, i1 } %32, 1
5093 %conv12 = zext i1 %33 to i32
5094 store i32 %conv12, ptr @ui, align 4
5095 %34 = load i8, ptr @uc, align 1
5096 %35 = load i8, ptr @sc, align 1
5097 %36 = cmpxchg ptr @uc, i8 %34, i8 %35 seq_cst seq_cst, align 1
5098 %37 = extractvalue { i8, i1 } %36, 1
5099 %conv13 = zext i1 %37 to i32
5100 store i32 %conv13, ptr @ui, align 4
5101 %38 = load i8, ptr @uc, align 1
5102 %conv14 = zext i8 %38 to i16
5103 %39 = load i8, ptr @sc, align 1
5104 %conv15 = sext i8 %39 to i16
5105 %40 = cmpxchg ptr @ss, i16 %conv14, i16 %conv15 seq_cst seq_cst, align 2
5106 %41 = extractvalue { i16, i1 } %40, 1
5107 %conv16 = zext i1 %41 to i32
5108 store i32 %conv16, ptr @ui, align 4
5109 %42 = load i8, ptr @uc, align 1
5110 %conv17 = zext i8 %42 to i16
5111 %43 = load i8, ptr @sc, align 1
5112 %conv18 = sext i8 %43 to i16
5113 %44 = cmpxchg ptr @us, i16 %conv17, i16 %conv18 seq_cst seq_cst, align 2
5114 %45 = extractvalue { i16, i1 } %44, 1
5115 %conv19 = zext i1 %45 to i32
5116 store i32 %conv19, ptr @ui, align 4
5117 %46 = load i8, ptr @uc, align 1
5118 %conv20 = zext i8 %46 to i32
5119 %47 = load i8, ptr @sc, align 1
5120 %conv21 = sext i8 %47 to i32
5121 %48 = cmpxchg ptr @si, i32 %conv20, i32 %conv21 seq_cst seq_cst, align 4
5122 %49 = extractvalue { i32, i1 } %48, 1
5123 %conv22 = zext i1 %49 to i32
5124 store i32 %conv22, ptr @ui, align 4
5125 %50 = load i8, ptr @uc, align 1
5126 %conv23 = zext i8 %50 to i32
5127 %51 = load i8, ptr @sc, align 1
5128 %conv24 = sext i8 %51 to i32
5129 %52 = cmpxchg ptr @ui, i32 %conv23, i32 %conv24 seq_cst seq_cst, align 4
5130 %53 = extractvalue { i32, i1 } %52, 1
5131 %conv25 = zext i1 %53 to i32
5132 store i32 %conv25, ptr @ui, align 4
5133 %54 = load i8, ptr @uc, align 1
5134 %conv26 = zext i8 %54 to i64
5135 %55 = load i8, ptr @sc, align 1
5136 %conv27 = sext i8 %55 to i64
5137 %56 = cmpxchg ptr @sll, i64 %conv26, i64 %conv27 seq_cst seq_cst, align 8
5138 %57 = extractvalue { i64, i1 } %56, 1
5139 %conv28 = zext i1 %57 to i32
5140 store i32 %conv28, ptr @ui, align 4
5141 %58 = load i8, ptr @uc, align 1
5142 %conv29 = zext i8 %58 to i64
5143 %59 = load i8, ptr @sc, align 1
5144 %conv30 = sext i8 %59 to i64
5145 %60 = cmpxchg ptr @ull, i64 %conv29, i64 %conv30 seq_cst seq_cst, align 8
5146 %61 = extractvalue { i64, i1 } %60, 1
5147 %conv31 = zext i1 %61 to i32
5148 store i32 %conv31, ptr @ui, align 4
5152 define dso_local void @test_lock() local_unnamed_addr #0 {
5153 ; CHECK-LABEL: test_lock:
5154 ; CHECK: # %bb.0: # %entry
5155 ; CHECK-NEXT: addis 3, 2, sc@toc@ha
5157 ; CHECK-NEXT: li 7, 1
5158 ; CHECK-NEXT: addi 4, 3, sc@toc@l
5159 ; CHECK-NEXT: .LBB4_1: # %entry
5161 ; CHECK-NEXT: lbarx 5, 0, 4
5162 ; CHECK-NEXT: stbcx. 7, 0, 4
5163 ; CHECK-NEXT: bne 0, .LBB4_1
5164 ; CHECK-NEXT: # %bb.2: # %entry
5165 ; CHECK-NEXT: addis 4, 2, uc@toc@ha
5166 ; CHECK-NEXT: lwsync
5167 ; CHECK-NEXT: stb 5, sc@toc@l(3)
5169 ; CHECK-NEXT: addi 6, 4, uc@toc@l
5170 ; CHECK-NEXT: .LBB4_3: # %entry
5172 ; CHECK-NEXT: lbarx 5, 0, 6
5173 ; CHECK-NEXT: stbcx. 7, 0, 6
5174 ; CHECK-NEXT: bne 0, .LBB4_3
5175 ; CHECK-NEXT: # %bb.4: # %entry
5176 ; CHECK-NEXT: lwsync
5177 ; CHECK-NEXT: stb 5, uc@toc@l(4)
5178 ; CHECK-NEXT: addis 5, 2, ss@toc@ha
5180 ; CHECK-NEXT: addi 8, 5, ss@toc@l
5181 ; CHECK-NEXT: .LBB4_5: # %entry
5183 ; CHECK-NEXT: lharx 6, 0, 8
5184 ; CHECK-NEXT: sthcx. 7, 0, 8
5185 ; CHECK-NEXT: bne 0, .LBB4_5
5186 ; CHECK-NEXT: # %bb.6: # %entry
5187 ; CHECK-NEXT: lwsync
5188 ; CHECK-NEXT: sth 6, ss@toc@l(5)
5189 ; CHECK-NEXT: addis 6, 2, us@toc@ha
5191 ; CHECK-NEXT: addi 9, 6, us@toc@l
5192 ; CHECK-NEXT: .LBB4_7: # %entry
5194 ; CHECK-NEXT: lharx 8, 0, 9
5195 ; CHECK-NEXT: sthcx. 7, 0, 9
5196 ; CHECK-NEXT: bne 0, .LBB4_7
5197 ; CHECK-NEXT: # %bb.8: # %entry
5198 ; CHECK-NEXT: lwsync
5199 ; CHECK-NEXT: sth 8, us@toc@l(6)
5200 ; CHECK-NEXT: addis 8, 2, si@toc@ha
5202 ; CHECK-NEXT: addi 10, 8, si@toc@l
5203 ; CHECK-NEXT: .LBB4_9: # %entry
5205 ; CHECK-NEXT: lwarx 9, 0, 10
5206 ; CHECK-NEXT: stwcx. 7, 0, 10
5207 ; CHECK-NEXT: bne 0, .LBB4_9
5208 ; CHECK-NEXT: # %bb.10: # %entry
5209 ; CHECK-NEXT: lwsync
5210 ; CHECK-NEXT: stw 9, si@toc@l(8)
5211 ; CHECK-NEXT: addis 9, 2, ui@toc@ha
5213 ; CHECK-NEXT: addi 11, 9, ui@toc@l
5214 ; CHECK-NEXT: .LBB4_11: # %entry
5216 ; CHECK-NEXT: lwarx 10, 0, 11
5217 ; CHECK-NEXT: stwcx. 7, 0, 11
5218 ; CHECK-NEXT: bne 0, .LBB4_11
5219 ; CHECK-NEXT: # %bb.12: # %entry
5220 ; CHECK-NEXT: addis 7, 2, sll@toc@ha
5221 ; CHECK-NEXT: lwsync
5222 ; CHECK-NEXT: stw 10, ui@toc@l(9)
5223 ; CHECK-NEXT: li 11, 1
5225 ; CHECK-NEXT: addi 10, 7, sll@toc@l
5226 ; CHECK-NEXT: .LBB4_13: # %entry
5228 ; CHECK-NEXT: ldarx 12, 0, 10
5229 ; CHECK-NEXT: stdcx. 11, 0, 10
5230 ; CHECK-NEXT: bne 0, .LBB4_13
5231 ; CHECK-NEXT: # %bb.14: # %entry
5232 ; CHECK-NEXT: addis 10, 2, ull@toc@ha
5233 ; CHECK-NEXT: lwsync
5234 ; CHECK-NEXT: std 12, sll@toc@l(7)
5236 ; CHECK-NEXT: addi 0, 10, ull@toc@l
5237 ; CHECK-NEXT: .LBB4_15: # %entry
5239 ; CHECK-NEXT: ldarx 12, 0, 0
5240 ; CHECK-NEXT: stdcx. 11, 0, 0
5241 ; CHECK-NEXT: bne 0, .LBB4_15
5242 ; CHECK-NEXT: # %bb.16: # %entry
5243 ; CHECK-NEXT: lwsync
5244 ; CHECK-NEXT: std 12, ull@toc@l(10)
5245 ; CHECK-NEXT: li 11, 0
5247 ; CHECK-NEXT: lwsync
5248 ; CHECK-NEXT: stb 11, sc@toc@l(3)
5249 ; CHECK-NEXT: li 3, 0
5250 ; CHECK-NEXT: lwsync
5251 ; CHECK-NEXT: stb 11, uc@toc@l(4)
5252 ; CHECK-NEXT: lwsync
5253 ; CHECK-NEXT: sth 11, ss@toc@l(5)
5254 ; CHECK-NEXT: lwsync
5255 ; CHECK-NEXT: sth 11, us@toc@l(6)
5256 ; CHECK-NEXT: lwsync
5257 ; CHECK-NEXT: stw 11, si@toc@l(8)
5258 ; CHECK-NEXT: lwsync
5259 ; CHECK-NEXT: stw 11, ui@toc@l(9)
5260 ; CHECK-NEXT: lwsync
5261 ; CHECK-NEXT: std 3, sll@toc@l(7)
5262 ; CHECK-NEXT: lwsync
5263 ; CHECK-NEXT: std 3, ull@toc@l(10)
5266 ; AIX32-LABEL: test_lock:
5267 ; AIX32: # %bb.0: # %entry
5268 ; AIX32-NEXT: mflr 0
5269 ; AIX32-NEXT: stwu 1, -96(1)
5270 ; AIX32-NEXT: stw 0, 104(1)
5271 ; AIX32-NEXT: stw 29, 84(1) # 4-byte Folded Spill
5272 ; AIX32-NEXT: lwz 29, L..C0(2) # @sc
5273 ; AIX32-NEXT: li 3, 1
5274 ; AIX32-NEXT: li 6, 255
5275 ; AIX32-NEXT: stw 23, 60(1) # 4-byte Folded Spill
5276 ; AIX32-NEXT: stw 24, 64(1) # 4-byte Folded Spill
5277 ; AIX32-NEXT: rlwinm 4, 29, 3, 27, 28
5278 ; AIX32-NEXT: stw 25, 68(1) # 4-byte Folded Spill
5279 ; AIX32-NEXT: stw 26, 72(1) # 4-byte Folded Spill
5280 ; AIX32-NEXT: stw 27, 76(1) # 4-byte Folded Spill
5281 ; AIX32-NEXT: xori 4, 4, 24
5282 ; AIX32-NEXT: stw 28, 80(1) # 4-byte Folded Spill
5283 ; AIX32-NEXT: stw 30, 88(1) # 4-byte Folded Spill
5284 ; AIX32-NEXT: stw 31, 92(1) # 4-byte Folded Spill
5285 ; AIX32-NEXT: slw 7, 3, 4
5286 ; AIX32-NEXT: slw 6, 6, 4
5288 ; AIX32-NEXT: rlwinm 5, 29, 0, 0, 29
5289 ; AIX32-NEXT: and 7, 7, 6
5290 ; AIX32-NEXT: L..BB4_1: # %entry
5292 ; AIX32-NEXT: lwarx 8, 0, 5
5293 ; AIX32-NEXT: andc 9, 8, 6
5294 ; AIX32-NEXT: or 9, 7, 9
5295 ; AIX32-NEXT: stwcx. 9, 0, 5
5296 ; AIX32-NEXT: bne 0, L..BB4_1
5297 ; AIX32-NEXT: # %bb.2: # %entry
5298 ; AIX32-NEXT: srw 4, 8, 4
5299 ; AIX32-NEXT: lwz 28, L..C1(2) # @uc
5300 ; AIX32-NEXT: lwsync
5301 ; AIX32-NEXT: li 6, 255
5302 ; AIX32-NEXT: clrlwi 4, 4, 24
5303 ; AIX32-NEXT: rlwinm 5, 28, 0, 0, 29
5304 ; AIX32-NEXT: stb 4, 0(29)
5305 ; AIX32-NEXT: rlwinm 4, 28, 3, 27, 28
5307 ; AIX32-NEXT: xori 4, 4, 24
5308 ; AIX32-NEXT: slw 7, 3, 4
5309 ; AIX32-NEXT: slw 6, 6, 4
5310 ; AIX32-NEXT: and 7, 7, 6
5311 ; AIX32-NEXT: L..BB4_3: # %entry
5313 ; AIX32-NEXT: lwarx 8, 0, 5
5314 ; AIX32-NEXT: andc 9, 8, 6
5315 ; AIX32-NEXT: or 9, 7, 9
5316 ; AIX32-NEXT: stwcx. 9, 0, 5
5317 ; AIX32-NEXT: bne 0, L..BB4_3
5318 ; AIX32-NEXT: # %bb.4: # %entry
5319 ; AIX32-NEXT: srw 4, 8, 4
5320 ; AIX32-NEXT: lwz 27, L..C2(2) # @ss
5321 ; AIX32-NEXT: lwsync
5322 ; AIX32-NEXT: li 6, 0
5323 ; AIX32-NEXT: clrlwi 4, 4, 24
5324 ; AIX32-NEXT: ori 6, 6, 65535
5325 ; AIX32-NEXT: rlwinm 5, 27, 0, 0, 29
5326 ; AIX32-NEXT: stb 4, 0(28)
5327 ; AIX32-NEXT: rlwinm 4, 27, 3, 27, 27
5329 ; AIX32-NEXT: xori 4, 4, 16
5330 ; AIX32-NEXT: slw 7, 3, 4
5331 ; AIX32-NEXT: slw 6, 6, 4
5332 ; AIX32-NEXT: and 7, 7, 6
5333 ; AIX32-NEXT: L..BB4_5: # %entry
5335 ; AIX32-NEXT: lwarx 8, 0, 5
5336 ; AIX32-NEXT: andc 9, 8, 6
5337 ; AIX32-NEXT: or 9, 7, 9
5338 ; AIX32-NEXT: stwcx. 9, 0, 5
5339 ; AIX32-NEXT: bne 0, L..BB4_5
5340 ; AIX32-NEXT: # %bb.6: # %entry
5341 ; AIX32-NEXT: srw 4, 8, 4
5342 ; AIX32-NEXT: lwz 26, L..C3(2) # @us
5343 ; AIX32-NEXT: lwsync
5344 ; AIX32-NEXT: li 6, 0
5345 ; AIX32-NEXT: clrlwi 4, 4, 16
5346 ; AIX32-NEXT: ori 6, 6, 65535
5347 ; AIX32-NEXT: rlwinm 5, 26, 0, 0, 29
5348 ; AIX32-NEXT: sth 4, 0(27)
5349 ; AIX32-NEXT: rlwinm 4, 26, 3, 27, 27
5351 ; AIX32-NEXT: xori 4, 4, 16
5352 ; AIX32-NEXT: slw 7, 3, 4
5353 ; AIX32-NEXT: slw 6, 6, 4
5354 ; AIX32-NEXT: and 7, 7, 6
5355 ; AIX32-NEXT: L..BB4_7: # %entry
5357 ; AIX32-NEXT: lwarx 8, 0, 5
5358 ; AIX32-NEXT: andc 9, 8, 6
5359 ; AIX32-NEXT: or 9, 7, 9
5360 ; AIX32-NEXT: stwcx. 9, 0, 5
5361 ; AIX32-NEXT: bne 0, L..BB4_7
5362 ; AIX32-NEXT: # %bb.8: # %entry
5363 ; AIX32-NEXT: srw 4, 8, 4
5364 ; AIX32-NEXT: lwsync
5365 ; AIX32-NEXT: lwz 25, L..C4(2) # @si
5366 ; AIX32-NEXT: clrlwi 4, 4, 16
5367 ; AIX32-NEXT: sth 4, 0(26)
5369 ; AIX32-NEXT: L..BB4_9: # %entry
5371 ; AIX32-NEXT: lwarx 4, 0, 25
5372 ; AIX32-NEXT: stwcx. 3, 0, 25
5373 ; AIX32-NEXT: bne 0, L..BB4_9
5374 ; AIX32-NEXT: # %bb.10: # %entry
5375 ; AIX32-NEXT: lwsync
5376 ; AIX32-NEXT: stw 4, 0(25)
5377 ; AIX32-NEXT: lwz 24, L..C5(2) # @ui
5379 ; AIX32-NEXT: L..BB4_11: # %entry
5381 ; AIX32-NEXT: lwarx 4, 0, 24
5382 ; AIX32-NEXT: stwcx. 3, 0, 24
5383 ; AIX32-NEXT: bne 0, L..BB4_11
5384 ; AIX32-NEXT: # %bb.12: # %entry
5385 ; AIX32-NEXT: lwz 31, L..C6(2) # @sll
5386 ; AIX32-NEXT: lwsync
5387 ; AIX32-NEXT: stw 4, 0(24)
5388 ; AIX32-NEXT: mr 3, 31
5389 ; AIX32-NEXT: li 4, 0
5390 ; AIX32-NEXT: li 5, 1
5391 ; AIX32-NEXT: li 6, 5
5392 ; AIX32-NEXT: li 23, 0
5393 ; AIX32-NEXT: bl .__atomic_exchange_8[PR]
5395 ; AIX32-NEXT: lwz 30, L..C7(2) # @ull
5396 ; AIX32-NEXT: stw 4, 4(31)
5397 ; AIX32-NEXT: li 4, 0
5398 ; AIX32-NEXT: li 5, 1
5399 ; AIX32-NEXT: li 6, 5
5400 ; AIX32-NEXT: stw 3, 0(31)
5401 ; AIX32-NEXT: mr 3, 30
5402 ; AIX32-NEXT: bl .__atomic_exchange_8[PR]
5404 ; AIX32-NEXT: stw 4, 4(30)
5405 ; AIX32-NEXT: stw 3, 0(30)
5407 ; AIX32-NEXT: li 4, 0
5408 ; AIX32-NEXT: li 5, 0
5409 ; AIX32-NEXT: mr 3, 31
5410 ; AIX32-NEXT: lwsync
5411 ; AIX32-NEXT: stb 23, 0(29)
5412 ; AIX32-NEXT: li 6, 3
5413 ; AIX32-NEXT: lwsync
5414 ; AIX32-NEXT: stb 23, 0(28)
5415 ; AIX32-NEXT: lwsync
5416 ; AIX32-NEXT: sth 23, 0(27)
5417 ; AIX32-NEXT: lwsync
5418 ; AIX32-NEXT: sth 23, 0(26)
5419 ; AIX32-NEXT: lwsync
5420 ; AIX32-NEXT: stw 23, 0(25)
5421 ; AIX32-NEXT: lwsync
5422 ; AIX32-NEXT: stw 23, 0(24)
5423 ; AIX32-NEXT: bl .__atomic_store_8[PR]
5425 ; AIX32-NEXT: li 4, 0
5426 ; AIX32-NEXT: li 5, 0
5427 ; AIX32-NEXT: mr 3, 30
5428 ; AIX32-NEXT: li 6, 3
5429 ; AIX32-NEXT: bl .__atomic_store_8[PR]
5431 ; AIX32-NEXT: lwz 31, 92(1) # 4-byte Folded Reload
5432 ; AIX32-NEXT: lwz 30, 88(1) # 4-byte Folded Reload
5433 ; AIX32-NEXT: lwz 29, 84(1) # 4-byte Folded Reload
5434 ; AIX32-NEXT: lwz 28, 80(1) # 4-byte Folded Reload
5435 ; AIX32-NEXT: lwz 27, 76(1) # 4-byte Folded Reload
5436 ; AIX32-NEXT: lwz 26, 72(1) # 4-byte Folded Reload
5437 ; AIX32-NEXT: lwz 25, 68(1) # 4-byte Folded Reload
5438 ; AIX32-NEXT: lwz 24, 64(1) # 4-byte Folded Reload
5439 ; AIX32-NEXT: lwz 23, 60(1) # 4-byte Folded Reload
5440 ; AIX32-NEXT: addi 1, 1, 96
5441 ; AIX32-NEXT: lwz 0, 8(1)
5442 ; AIX32-NEXT: mtlr 0
5445 %0 = atomicrmw xchg ptr @sc, i8 1 seq_cst, align 1
5446 store i8 %0, ptr @sc, align 1
5447 %1 = atomicrmw xchg ptr @uc, i8 1 seq_cst, align 1
5448 store i8 %1, ptr @uc, align 1
5449 %2 = atomicrmw xchg ptr @ss, i16 1 seq_cst, align 2
5450 store i16 %2, ptr @ss, align 2
5451 %3 = atomicrmw xchg ptr @us, i16 1 seq_cst, align 2
5452 store i16 %3, ptr @us, align 2
5453 %4 = atomicrmw xchg ptr @si, i32 1 seq_cst, align 4
5454 store i32 %4, ptr @si, align 4
5455 %5 = atomicrmw xchg ptr @ui, i32 1 seq_cst, align 4
5456 store i32 %5, ptr @ui, align 4
5457 %6 = atomicrmw xchg ptr @sll, i64 1 seq_cst, align 8
5458 store i64 %6, ptr @sll, align 8
5459 %7 = atomicrmw xchg ptr @ull, i64 1 seq_cst, align 8
5460 store i64 %7, ptr @ull, align 8
5462 store atomic i8 0, ptr @sc release, align 1
5463 store atomic i8 0, ptr @uc release, align 1
5464 store atomic i16 0, ptr @ss release, align 2
5465 store atomic i16 0, ptr @us release, align 2
5466 store atomic i32 0, ptr @si release, align 4
5467 store atomic i32 0, ptr @ui release, align 4
5468 store atomic i64 0, ptr @sll release, align 8
5469 store atomic i64 0, ptr @ull release, align 8
5473 define dso_local void @test_atomic() local_unnamed_addr #0 {
5474 ; CHECK-LABEL: test_atomic:
5475 ; CHECK: # %bb.0: # %entry
5476 ; CHECK-NEXT: addis 4, 2, ui@toc@ha
5477 ; CHECK-NEXT: li 3, 5
5478 ; CHECK-NEXT: addi 6, 4, ui@toc@l
5479 ; CHECK-NEXT: .LBB5_1: # %entry
5481 ; CHECK-NEXT: lwarx 5, 0, 6
5482 ; CHECK-NEXT: cmplwi 5, 5
5483 ; CHECK-NEXT: blt 0, .LBB5_3
5484 ; CHECK-NEXT: # %bb.2: # %entry
5486 ; CHECK-NEXT: stwcx. 3, 0, 6
5487 ; CHECK-NEXT: bne 0, .LBB5_1
5488 ; CHECK-NEXT: .LBB5_3: # %entry
5489 ; CHECK-NEXT: stw 5, ui@toc@l(4)
5490 ; CHECK-NEXT: addis 5, 2, si@toc@ha
5492 ; CHECK-NEXT: addi 7, 5, si@toc@l
5493 ; CHECK-NEXT: .LBB5_4: # %entry
5495 ; CHECK-NEXT: lwarx 8, 0, 7
5496 ; CHECK-NEXT: cmpwi 8, 5
5497 ; CHECK-NEXT: blt 0, .LBB5_6
5498 ; CHECK-NEXT: # %bb.5: # %entry
5500 ; CHECK-NEXT: stwcx. 3, 0, 7
5501 ; CHECK-NEXT: bne 0, .LBB5_4
5502 ; CHECK-NEXT: .LBB5_6: # %entry
5503 ; CHECK-NEXT: lwsync
5504 ; CHECK-NEXT: stw 8, si@toc@l(5)
5505 ; CHECK-NEXT: .LBB5_7: # %entry
5507 ; CHECK-NEXT: lwarx 8, 0, 6
5508 ; CHECK-NEXT: cmplwi 8, 5
5509 ; CHECK-NEXT: bgt 0, .LBB5_9
5510 ; CHECK-NEXT: # %bb.8: # %entry
5512 ; CHECK-NEXT: stwcx. 3, 0, 6
5513 ; CHECK-NEXT: bne 0, .LBB5_7
5514 ; CHECK-NEXT: .LBB5_9: # %entry
5515 ; CHECK-NEXT: lwsync
5516 ; CHECK-NEXT: stw 8, ui@toc@l(4)
5517 ; CHECK-NEXT: lwsync
5518 ; CHECK-NEXT: .LBB5_10: # %entry
5520 ; CHECK-NEXT: lwarx 4, 0, 7
5521 ; CHECK-NEXT: cmpwi 4, 5
5522 ; CHECK-NEXT: bgt 0, .LBB5_12
5523 ; CHECK-NEXT: # %bb.11: # %entry
5525 ; CHECK-NEXT: stwcx. 3, 0, 7
5526 ; CHECK-NEXT: bne 0, .LBB5_10
5527 ; CHECK-NEXT: .LBB5_12: # %entry
5528 ; CHECK-NEXT: stw 4, si@toc@l(5)
5531 ; AIX32-LABEL: test_atomic:
5532 ; AIX32: # %bb.0: # %entry
5533 ; AIX32-NEXT: lwz 4, L..C5(2) # @ui
5534 ; AIX32-NEXT: li 3, 5
5535 ; AIX32-NEXT: L..BB5_1: # %entry
5537 ; AIX32-NEXT: lwarx 5, 0, 4
5538 ; AIX32-NEXT: cmplwi 5, 5
5539 ; AIX32-NEXT: blt 0, L..BB5_3
5540 ; AIX32-NEXT: # %bb.2: # %entry
5542 ; AIX32-NEXT: stwcx. 3, 0, 4
5543 ; AIX32-NEXT: bne 0, L..BB5_1
5544 ; AIX32-NEXT: L..BB5_3: # %entry
5545 ; AIX32-NEXT: stw 5, 0(4)
5546 ; AIX32-NEXT: lwz 5, L..C4(2) # @si
5548 ; AIX32-NEXT: L..BB5_4: # %entry
5550 ; AIX32-NEXT: lwarx 6, 0, 5
5551 ; AIX32-NEXT: cmpwi 6, 5
5552 ; AIX32-NEXT: blt 0, L..BB5_6
5553 ; AIX32-NEXT: # %bb.5: # %entry
5555 ; AIX32-NEXT: stwcx. 3, 0, 5
5556 ; AIX32-NEXT: bne 0, L..BB5_4
5557 ; AIX32-NEXT: L..BB5_6: # %entry
5558 ; AIX32-NEXT: lwsync
5559 ; AIX32-NEXT: stw 6, 0(5)
5560 ; AIX32-NEXT: L..BB5_7: # %entry
5562 ; AIX32-NEXT: lwarx 6, 0, 4
5563 ; AIX32-NEXT: cmplwi 6, 5
5564 ; AIX32-NEXT: bgt 0, L..BB5_9
5565 ; AIX32-NEXT: # %bb.8: # %entry
5567 ; AIX32-NEXT: stwcx. 3, 0, 4
5568 ; AIX32-NEXT: bne 0, L..BB5_7
5569 ; AIX32-NEXT: L..BB5_9: # %entry
5570 ; AIX32-NEXT: lwsync
5571 ; AIX32-NEXT: stw 6, 0(4)
5572 ; AIX32-NEXT: lwsync
5573 ; AIX32-NEXT: L..BB5_10: # %entry
5575 ; AIX32-NEXT: lwarx 4, 0, 5
5576 ; AIX32-NEXT: cmpwi 4, 5
5577 ; AIX32-NEXT: bgt 0, L..BB5_12
5578 ; AIX32-NEXT: # %bb.11: # %entry
5580 ; AIX32-NEXT: stwcx. 3, 0, 5
5581 ; AIX32-NEXT: bne 0, L..BB5_10
5582 ; AIX32-NEXT: L..BB5_12: # %entry
5583 ; AIX32-NEXT: stw 4, 0(5)
5586 %0 = atomicrmw umin ptr @ui, i32 5 monotonic, align 4
5587 store i32 %0, ptr @ui, align 4
5588 %1 = atomicrmw min ptr @si, i32 5 seq_cst, align 4
5589 store i32 %1, ptr @si, align 4
5590 %2 = atomicrmw umax ptr @ui, i32 5 acquire, align 4
5591 store i32 %2, ptr @ui, align 4
5592 %3 = atomicrmw max ptr @si, i32 5 release, align 4
5593 store i32 %3, ptr @si, align 4
5597 define dso_local i64 @cmpswplp(ptr noundef %ptr, ptr nocapture noundef readnone %oldval, i64 noundef %newval) local_unnamed_addr #0 {
5598 ; CHECK-LABEL: cmpswplp:
5599 ; CHECK: # %bb.0: # %entry
5600 ; CHECK-NEXT: addi 4, 5, 1
5601 ; CHECK-NEXT: .LBB6_1: # %entry
5603 ; CHECK-NEXT: ldarx 6, 0, 3
5604 ; CHECK-NEXT: cmpd 1, 6, 5
5605 ; CHECK-NEXT: bne 1, .LBB6_3
5606 ; CHECK-NEXT: # %bb.2: # %entry
5608 ; CHECK-NEXT: stdcx. 4, 0, 3
5609 ; CHECK-NEXT: bne 0, .LBB6_1
5610 ; CHECK-NEXT: .LBB6_3: # %entry
5611 ; CHECK-NEXT: li 3, 66
5612 ; CHECK-NEXT: li 4, 55
5613 ; CHECK-NEXT: isel 3, 4, 3, 6
5616 ; AIX32-LABEL: cmpswplp:
5617 ; AIX32: # %bb.0: # %entry
5618 ; AIX32-NEXT: mflr 0
5619 ; AIX32-NEXT: stwu 1, -64(1)
5620 ; AIX32-NEXT: addic 7, 6, 1
5621 ; AIX32-NEXT: stw 0, 72(1)
5622 ; AIX32-NEXT: addze 8, 5
5623 ; AIX32-NEXT: stw 6, 60(1)
5624 ; AIX32-NEXT: stw 5, 56(1)
5625 ; AIX32-NEXT: addi 4, 1, 56
5626 ; AIX32-NEXT: mr 5, 8
5627 ; AIX32-NEXT: mr 6, 7
5628 ; AIX32-NEXT: li 7, 0
5629 ; AIX32-NEXT: li 8, 0
5630 ; AIX32-NEXT: bl .__atomic_compare_exchange_8[PR]
5632 ; AIX32-NEXT: andi. 3, 3, 1
5633 ; AIX32-NEXT: li 3, 66
5634 ; AIX32-NEXT: li 4, 55
5635 ; AIX32-NEXT: iselgt 4, 4, 3
5636 ; AIX32-NEXT: li 3, 0
5637 ; AIX32-NEXT: addi 1, 1, 64
5638 ; AIX32-NEXT: lwz 0, 8(1)
5639 ; AIX32-NEXT: mtlr 0
5642 %add = add nsw i64 %newval, 1
5643 %0 = cmpxchg weak volatile ptr %ptr, i64 %newval, i64 %add monotonic monotonic, align 8
5644 %1 = extractvalue { i64, i1 } %0, 1
5645 %conv = select i1 %1, i64 55, i64 66
5649 define dso_local i64 @atommax8(ptr nocapture noundef %ptr, i64 noundef %val) local_unnamed_addr #0 {
5650 ; CHECK-LABEL: atommax8:
5651 ; CHECK: # %bb.0: # %entry
5653 ; CHECK-NEXT: .LBB7_1: # %entry
5655 ; CHECK-NEXT: ldarx 5, 0, 3
5656 ; CHECK-NEXT: cmpd 1, 5, 4
5657 ; CHECK-NEXT: bgt 1, .LBB7_3
5658 ; CHECK-NEXT: # %bb.2: # %entry
5660 ; CHECK-NEXT: stdcx. 4, 0, 3
5661 ; CHECK-NEXT: bne 0, .LBB7_1
5662 ; CHECK-NEXT: .LBB7_3: # %entry
5663 ; CHECK-NEXT: li 3, 55
5664 ; CHECK-NEXT: li 4, 66
5665 ; CHECK-NEXT: lwsync
5666 ; CHECK-NEXT: isel 3, 4, 3, 5
5669 ; AIX32-LABEL: atommax8:
5670 ; AIX32: # %bb.0: # %entry
5671 ; AIX32-NEXT: mflr 0
5672 ; AIX32-NEXT: stwu 1, -80(1)
5673 ; AIX32-NEXT: stw 0, 88(1)
5674 ; AIX32-NEXT: stw 30, 72(1) # 4-byte Folded Spill
5675 ; AIX32-NEXT: stw 31, 76(1) # 4-byte Folded Spill
5676 ; AIX32-NEXT: mr 31, 5
5677 ; AIX32-NEXT: mr 30, 4
5678 ; AIX32-NEXT: lwz 4, 4(3)
5679 ; AIX32-NEXT: lwz 5, 0(3)
5680 ; AIX32-NEXT: stw 28, 64(1) # 4-byte Folded Spill
5681 ; AIX32-NEXT: addi 28, 1, 56
5682 ; AIX32-NEXT: stw 29, 68(1) # 4-byte Folded Spill
5683 ; AIX32-NEXT: mr 29, 3
5684 ; AIX32-NEXT: .align 4
5685 ; AIX32-NEXT: L..BB7_1: # %atomicrmw.start
5687 ; AIX32-NEXT: cmplw 5, 30
5688 ; AIX32-NEXT: cmpw 1, 5, 30
5689 ; AIX32-NEXT: li 7, 5
5690 ; AIX32-NEXT: li 8, 5
5691 ; AIX32-NEXT: stw 5, 56(1)
5692 ; AIX32-NEXT: mr 3, 29
5693 ; AIX32-NEXT: crandc 20, 5, 2
5694 ; AIX32-NEXT: cmplw 1, 4, 31
5695 ; AIX32-NEXT: crand 21, 2, 5
5696 ; AIX32-NEXT: stw 4, 60(1)
5697 ; AIX32-NEXT: cror 20, 21, 20
5698 ; AIX32-NEXT: isel 5, 5, 30, 20
5699 ; AIX32-NEXT: isel 6, 4, 31, 20
5700 ; AIX32-NEXT: mr 4, 28
5701 ; AIX32-NEXT: bl .__atomic_compare_exchange_8[PR]
5703 ; AIX32-NEXT: lwz 4, 60(1)
5704 ; AIX32-NEXT: lwz 5, 56(1)
5705 ; AIX32-NEXT: cmplwi 3, 0
5706 ; AIX32-NEXT: beq 0, L..BB7_1
5707 ; AIX32-NEXT: # %bb.2: # %atomicrmw.end
5708 ; AIX32-NEXT: cmplw 5, 30
5709 ; AIX32-NEXT: cmpw 1, 5, 30
5710 ; AIX32-NEXT: li 3, 55
5711 ; AIX32-NEXT: lwz 30, 72(1) # 4-byte Folded Reload
5712 ; AIX32-NEXT: lwz 29, 68(1) # 4-byte Folded Reload
5713 ; AIX32-NEXT: lwz 28, 64(1) # 4-byte Folded Reload
5714 ; AIX32-NEXT: crandc 20, 5, 2
5715 ; AIX32-NEXT: cmplw 1, 4, 31
5716 ; AIX32-NEXT: li 4, 66
5717 ; AIX32-NEXT: lwz 31, 76(1) # 4-byte Folded Reload
5718 ; AIX32-NEXT: crand 21, 2, 5
5719 ; AIX32-NEXT: cror 20, 21, 20
5720 ; AIX32-NEXT: isel 4, 4, 3, 20
5721 ; AIX32-NEXT: li 3, 0
5722 ; AIX32-NEXT: addi 1, 1, 80
5723 ; AIX32-NEXT: lwz 0, 8(1)
5724 ; AIX32-NEXT: mtlr 0
5727 %0 = atomicrmw max ptr %ptr, i64 %val seq_cst, align 8
5728 %cmp.not = icmp sgt i64 %0, %val
5729 %conv = select i1 %cmp.not, i64 66, i64 55
5733 define dso_local signext i32 @atommax4(ptr nocapture noundef %ptr, i32 noundef signext %val) local_unnamed_addr #0 {
5734 ; CHECK-LABEL: atommax4:
5735 ; CHECK: # %bb.0: # %entry
5737 ; CHECK-NEXT: .LBB8_1: # %entry
5739 ; CHECK-NEXT: lwarx 5, 0, 3
5740 ; CHECK-NEXT: cmpw 1, 5, 4
5741 ; CHECK-NEXT: bgt 1, .LBB8_3
5742 ; CHECK-NEXT: # %bb.2: # %entry
5744 ; CHECK-NEXT: stwcx. 4, 0, 3
5745 ; CHECK-NEXT: bne 0, .LBB8_1
5746 ; CHECK-NEXT: .LBB8_3: # %entry
5747 ; CHECK-NEXT: li 3, 55
5748 ; CHECK-NEXT: li 4, 66
5749 ; CHECK-NEXT: lwsync
5750 ; CHECK-NEXT: isel 3, 4, 3, 5
5753 ; AIX32-LABEL: atommax4:
5754 ; AIX32: # %bb.0: # %entry
5756 ; AIX32-NEXT: L..BB8_1: # %entry
5758 ; AIX32-NEXT: lwarx 5, 0, 3
5759 ; AIX32-NEXT: cmpw 1, 5, 4
5760 ; AIX32-NEXT: bgt 1, L..BB8_3
5761 ; AIX32-NEXT: # %bb.2: # %entry
5763 ; AIX32-NEXT: stwcx. 4, 0, 3
5764 ; AIX32-NEXT: bne 0, L..BB8_1
5765 ; AIX32-NEXT: L..BB8_3: # %entry
5766 ; AIX32-NEXT: li 3, 55
5767 ; AIX32-NEXT: li 4, 66
5768 ; AIX32-NEXT: lwsync
5769 ; AIX32-NEXT: isel 3, 4, 3, 5
5772 %0 = atomicrmw max ptr %ptr, i32 %val seq_cst, align 4
5773 %cmp.not = icmp sgt i32 %0, %val
5774 %cond = select i1 %cmp.not, i32 66, i32 55
5778 define dso_local signext i16 @atommax2(ptr nocapture noundef %ptr, i16 noundef signext %val) local_unnamed_addr #0 {
5779 ; CHECK-LABEL: atommax2:
5780 ; CHECK: # %bb.0: # %entry
5782 ; CHECK-NEXT: .LBB9_1: # %entry
5784 ; CHECK-NEXT: lharx 5, 0, 3
5785 ; CHECK-NEXT: extsh 5, 5
5786 ; CHECK-NEXT: cmpw 1, 5, 4
5787 ; CHECK-NEXT: bgt 1, .LBB9_3
5788 ; CHECK-NEXT: # %bb.2: # %entry
5790 ; CHECK-NEXT: sthcx. 4, 0, 3
5791 ; CHECK-NEXT: bne 0, .LBB9_1
5792 ; CHECK-NEXT: .LBB9_3: # %entry
5793 ; CHECK-NEXT: li 3, 55
5794 ; CHECK-NEXT: li 4, 66
5795 ; CHECK-NEXT: lwsync
5796 ; CHECK-NEXT: isel 3, 4, 3, 5
5799 ; AIX32-LABEL: atommax2:
5800 ; AIX32: # %bb.0: # %entry
5801 ; AIX32-NEXT: rlwinm 6, 3, 3, 27, 27
5802 ; AIX32-NEXT: li 7, 0
5804 ; AIX32-NEXT: extsh 5, 4
5805 ; AIX32-NEXT: rlwinm 3, 3, 0, 0, 29
5806 ; AIX32-NEXT: xori 6, 6, 16
5807 ; AIX32-NEXT: ori 7, 7, 65535
5808 ; AIX32-NEXT: slw 8, 5, 6
5809 ; AIX32-NEXT: slw 7, 7, 6
5810 ; AIX32-NEXT: and 8, 8, 7
5811 ; AIX32-NEXT: L..BB9_1: # %entry
5813 ; AIX32-NEXT: lwarx 9, 0, 3
5814 ; AIX32-NEXT: and 10, 9, 7
5815 ; AIX32-NEXT: srw 10, 10, 6
5816 ; AIX32-NEXT: extsh 10, 10
5817 ; AIX32-NEXT: cmpw 10, 5
5818 ; AIX32-NEXT: bgt 0, L..BB9_3
5819 ; AIX32-NEXT: # %bb.2: # %entry
5821 ; AIX32-NEXT: andc 10, 9, 7
5822 ; AIX32-NEXT: or 10, 8, 10
5823 ; AIX32-NEXT: stwcx. 10, 0, 3
5824 ; AIX32-NEXT: bne 0, L..BB9_1
5825 ; AIX32-NEXT: L..BB9_3: # %entry
5826 ; AIX32-NEXT: srw 3, 9, 6
5827 ; AIX32-NEXT: lwsync
5828 ; AIX32-NEXT: clrlwi 3, 3, 16
5829 ; AIX32-NEXT: extsh 3, 3
5830 ; AIX32-NEXT: cmpw 3, 4
5831 ; AIX32-NEXT: li 3, 55
5832 ; AIX32-NEXT: li 4, 66
5833 ; AIX32-NEXT: iselgt 3, 4, 3
5836 %0 = atomicrmw max ptr %ptr, i16 %val seq_cst, align 2
5837 %cmp.not = icmp sgt i16 %0, %val
5838 %conv3 = select i1 %cmp.not, i16 66, i16 55
5842 define dso_local zeroext i8 @atommax1(ptr nocapture noundef %ptr, i8 noundef zeroext %val) local_unnamed_addr #0 {
5843 ; CHECK-LABEL: atommax1:
5844 ; CHECK: # %bb.0: # %entry
5846 ; CHECK-NEXT: .LBB10_1: # %entry
5848 ; CHECK-NEXT: lbarx 5, 0, 3
5849 ; CHECK-NEXT: cmplw 1, 5, 4
5850 ; CHECK-NEXT: bgt 1, .LBB10_3
5851 ; CHECK-NEXT: # %bb.2: # %entry
5853 ; CHECK-NEXT: stbcx. 4, 0, 3
5854 ; CHECK-NEXT: bne 0, .LBB10_1
5855 ; CHECK-NEXT: .LBB10_3: # %entry
5856 ; CHECK-NEXT: li 3, 55
5857 ; CHECK-NEXT: li 4, 66
5858 ; CHECK-NEXT: lwsync
5859 ; CHECK-NEXT: isel 3, 4, 3, 5
5862 ; AIX32-LABEL: atommax1:
5863 ; AIX32: # %bb.0: # %entry
5864 ; AIX32-NEXT: rlwinm 5, 3, 3, 27, 28
5865 ; AIX32-NEXT: li 7, 255
5867 ; AIX32-NEXT: rlwinm 3, 3, 0, 0, 29
5868 ; AIX32-NEXT: xori 5, 5, 24
5869 ; AIX32-NEXT: slw 6, 4, 5
5870 ; AIX32-NEXT: slw 7, 7, 5
5871 ; AIX32-NEXT: and 8, 6, 7
5872 ; AIX32-NEXT: L..BB10_1: # %entry
5874 ; AIX32-NEXT: lwarx 9, 0, 3
5875 ; AIX32-NEXT: and 10, 9, 7
5876 ; AIX32-NEXT: cmplw 10, 6
5877 ; AIX32-NEXT: bgt 0, L..BB10_3
5878 ; AIX32-NEXT: # %bb.2: # %entry
5880 ; AIX32-NEXT: andc 10, 9, 7
5881 ; AIX32-NEXT: or 10, 8, 10
5882 ; AIX32-NEXT: stwcx. 10, 0, 3
5883 ; AIX32-NEXT: bne 0, L..BB10_1
5884 ; AIX32-NEXT: L..BB10_3: # %entry
5885 ; AIX32-NEXT: srw 3, 9, 5
5886 ; AIX32-NEXT: lwsync
5887 ; AIX32-NEXT: clrlwi 3, 3, 24
5888 ; AIX32-NEXT: cmplw 3, 4
5889 ; AIX32-NEXT: li 3, 55
5890 ; AIX32-NEXT: li 4, 66
5891 ; AIX32-NEXT: iselgt 3, 4, 3
5894 %0 = atomicrmw umax ptr %ptr, i8 %val seq_cst, align 1
5895 %cmp.not = icmp ugt i8 %0, %val
5896 %conv3 = select i1 %cmp.not, i8 66, i8 55