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: std 28, -32(1) # 8-byte Folded Spill
26 ; CHECK-NEXT: std 29, -24(1) # 8-byte Folded Spill
27 ; CHECK-NEXT: addi 4, 3, sc@toc@l
29 ; 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
40 ; 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
51 ; 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
62 ; 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
73 ; 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
84 ; 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
95 ; 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
107 ; 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
333 ; 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
346 ; CHECK-NEXT: addis 29, 2, s128@toc@ha
348 ; 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: stw 15, 92(1) # 4-byte Folded Spill
516 ; AIX32-NEXT: stw 26, 136(1) # 4-byte Folded Spill
517 ; AIX32-NEXT: stw 28, 144(1) # 4-byte Folded Spill
518 ; AIX32-NEXT: li 15, 1
519 ; AIX32-NEXT: stw 16, 96(1) # 4-byte Folded Spill
520 ; AIX32-NEXT: rlwinm 4, 3, 3, 27, 28
521 ; AIX32-NEXT: rlwinm 28, 3, 0, 0, 29
522 ; AIX32-NEXT: li 3, 255
523 ; AIX32-NEXT: xori 26, 4, 24
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
537 ; AIX32-NEXT: slw 29, 15, 26
538 ; 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
570 ; AIX32-NEXT: li 5, 0
573 ; AIX32-NEXT: rlwinm 4, 3, 3, 27, 27
574 ; AIX32-NEXT: rlwinm 25, 3, 0, 0, 29
575 ; AIX32-NEXT: ori 3, 5, 65535
576 ; AIX32-NEXT: xori 22, 4, 16
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
590 ; AIX32-NEXT: li 5, 0
593 ; AIX32-NEXT: rlwinm 4, 3, 3, 27, 27
594 ; AIX32-NEXT: rlwinm 23, 3, 0, 0, 29
595 ; AIX32-NEXT: ori 3, 5, 65535
596 ; AIX32-NEXT: xori 19, 4, 16
597 ; AIX32-NEXT: slw 16, 15, 19
598 ; AIX32-NEXT: slw 3, 3, 19
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
609 ; AIX32-NEXT: lwz 21, L..C4(2) # @si
612 ; AIX32-NEXT: L..BB0_9: # %entry
614 ; AIX32-NEXT: lwarx 3, 0, 21
615 ; AIX32-NEXT: addi 3, 3, 1
616 ; AIX32-NEXT: stwcx. 3, 0, 21
617 ; AIX32-NEXT: bne 0, L..BB0_9
618 ; AIX32-NEXT: # %bb.10: # %entry
619 ; AIX32-NEXT: lwz 20, L..C5(2) # @ui
622 ; AIX32-NEXT: L..BB0_11: # %entry
624 ; AIX32-NEXT: lwarx 3, 0, 20
625 ; AIX32-NEXT: addi 3, 3, 1
626 ; AIX32-NEXT: stwcx. 3, 0, 20
627 ; AIX32-NEXT: bne 0, L..BB0_11
628 ; AIX32-NEXT: # %bb.12: # %entry
629 ; AIX32-NEXT: lwz 31, L..C6(2) # @sll
630 ; AIX32-NEXT: li 4, 0
631 ; AIX32-NEXT: li 5, 1
632 ; 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: li 6, 5
641 ; AIX32-NEXT: mr 3, 30
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
659 ; 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
673 ; 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
688 ; AIX32-NEXT: ori 3, 3, 65535
690 ; AIX32-NEXT: slw 3, 3, 19
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, 21
706 ; AIX32-NEXT: sub 3, 3, 15
707 ; AIX32-NEXT: stwcx. 3, 0, 21
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, 20
715 ; AIX32-NEXT: sub 3, 3, 15
716 ; AIX32-NEXT: stwcx. 3, 0, 20
717 ; AIX32-NEXT: bne 0, L..BB0_23
718 ; AIX32-NEXT: # %bb.24: # %entry
719 ; AIX32-NEXT: mr 3, 31
720 ; AIX32-NEXT: li 4, 0
721 ; AIX32-NEXT: li 5, 1
722 ; AIX32-NEXT: li 6, 5
724 ; AIX32-NEXT: bl .__atomic_fetch_sub_8[PR]
726 ; AIX32-NEXT: mr 3, 30
727 ; AIX32-NEXT: li 4, 0
728 ; AIX32-NEXT: li 5, 1
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
747 ; 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
761 ; 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
776 ; AIX32-NEXT: ori 3, 3, 65535
778 ; AIX32-NEXT: slw 3, 3, 19
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, 21
794 ; AIX32-NEXT: ori 3, 3, 1
795 ; AIX32-NEXT: stwcx. 3, 0, 21
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, 20
803 ; AIX32-NEXT: ori 3, 3, 1
804 ; AIX32-NEXT: stwcx. 3, 0, 20
805 ; AIX32-NEXT: bne 0, L..BB0_35
806 ; AIX32-NEXT: # %bb.36: # %entry
807 ; AIX32-NEXT: mr 3, 31
808 ; AIX32-NEXT: li 4, 0
809 ; AIX32-NEXT: li 5, 1
810 ; AIX32-NEXT: li 6, 5
812 ; AIX32-NEXT: bl .__atomic_fetch_or_8[PR]
814 ; AIX32-NEXT: mr 3, 30
815 ; AIX32-NEXT: li 4, 0
816 ; AIX32-NEXT: li 5, 1
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
835 ; 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
849 ; 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
864 ; AIX32-NEXT: ori 3, 3, 65535
866 ; AIX32-NEXT: slw 3, 3, 19
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, 21
882 ; AIX32-NEXT: xori 3, 3, 1
883 ; AIX32-NEXT: stwcx. 3, 0, 21
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, 20
891 ; AIX32-NEXT: xori 3, 3, 1
892 ; AIX32-NEXT: stwcx. 3, 0, 20
893 ; AIX32-NEXT: bne 0, L..BB0_47
894 ; AIX32-NEXT: # %bb.48: # %entry
895 ; AIX32-NEXT: mr 3, 31
896 ; AIX32-NEXT: li 4, 0
897 ; AIX32-NEXT: li 5, 1
898 ; AIX32-NEXT: li 6, 5
900 ; AIX32-NEXT: bl .__atomic_fetch_xor_8[PR]
902 ; AIX32-NEXT: mr 3, 30
903 ; AIX32-NEXT: li 4, 0
904 ; AIX32-NEXT: li 5, 1
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 3, 8(31)
913 ; AIX32-NEXT: lwz 4, 4(31)
914 ; AIX32-NEXT: lwz 9, 0(31)
915 ; AIX32-NEXT: .align 4
916 ; AIX32-NEXT: L..BB0_49: # %atomicrmw.start
918 ; AIX32-NEXT: xori 6, 5, 1
919 ; AIX32-NEXT: stw 4, 76(1)
920 ; AIX32-NEXT: li 7, 5
921 ; AIX32-NEXT: stw 3, 80(1)
922 ; AIX32-NEXT: stw 5, 84(1)
923 ; AIX32-NEXT: stw 3, 64(1)
924 ; AIX32-NEXT: stw 4, 60(1)
925 ; AIX32-NEXT: stw 6, 68(1)
926 ; AIX32-NEXT: li 3, 16
927 ; AIX32-NEXT: mr 4, 31
928 ; AIX32-NEXT: mr 5, 30
929 ; AIX32-NEXT: mr 6, 29
930 ; AIX32-NEXT: li 8, 5
931 ; AIX32-NEXT: stw 9, 72(1)
932 ; AIX32-NEXT: stw 9, 56(1)
933 ; AIX32-NEXT: bl .__atomic_compare_exchange[PR]
935 ; AIX32-NEXT: cmplwi 3, 0
936 ; AIX32-NEXT: lwz 5, 84(1)
937 ; AIX32-NEXT: lwz 3, 80(1)
938 ; AIX32-NEXT: lwz 4, 76(1)
939 ; AIX32-NEXT: lwz 9, 72(1)
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 3, 8(31)
947 ; AIX32-NEXT: lwz 4, 4(31)
948 ; AIX32-NEXT: lwz 9, 0(31)
949 ; AIX32-NEXT: .align 4
950 ; AIX32-NEXT: L..BB0_51: # %atomicrmw.start2
952 ; AIX32-NEXT: xori 6, 5, 1
953 ; AIX32-NEXT: stw 4, 76(1)
954 ; AIX32-NEXT: li 7, 5
955 ; AIX32-NEXT: stw 3, 80(1)
956 ; AIX32-NEXT: stw 5, 84(1)
957 ; AIX32-NEXT: stw 3, 64(1)
958 ; AIX32-NEXT: stw 4, 60(1)
959 ; AIX32-NEXT: stw 6, 68(1)
960 ; AIX32-NEXT: li 3, 16
961 ; AIX32-NEXT: mr 4, 31
962 ; AIX32-NEXT: mr 5, 30
963 ; AIX32-NEXT: mr 6, 29
964 ; AIX32-NEXT: li 8, 5
965 ; AIX32-NEXT: stw 9, 72(1)
966 ; AIX32-NEXT: stw 9, 56(1)
967 ; AIX32-NEXT: bl .__atomic_compare_exchange[PR]
969 ; AIX32-NEXT: cmplwi 3, 0
970 ; AIX32-NEXT: lwz 5, 84(1)
971 ; AIX32-NEXT: lwz 3, 80(1)
972 ; AIX32-NEXT: lwz 4, 76(1)
973 ; AIX32-NEXT: lwz 9, 72(1)
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
994 ; 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
1009 ; 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, 19
1025 ; AIX32-NEXT: ori 3, 3, 65535
1027 ; AIX32-NEXT: slw 3, 3, 19
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, 21
1043 ; AIX32-NEXT: nand 3, 29, 3
1044 ; AIX32-NEXT: stwcx. 3, 0, 21
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, 20
1052 ; AIX32-NEXT: nand 3, 29, 3
1053 ; AIX32-NEXT: stwcx. 3, 0, 20
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: li 4, 0
1058 ; AIX32-NEXT: li 5, 1
1059 ; AIX32-NEXT: li 6, 5
1060 ; AIX32-NEXT: lwsync
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: li 6, 5
1068 ; AIX32-NEXT: mr 3, 30
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
1086 ; 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
1100 ; 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
1115 ; AIX32-NEXT: ori 3, 3, 65535
1117 ; AIX32-NEXT: slw 3, 3, 19
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, 21
1133 ; AIX32-NEXT: and 3, 29, 3
1134 ; AIX32-NEXT: stwcx. 3, 0, 21
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, 20
1142 ; AIX32-NEXT: and 3, 29, 3
1143 ; AIX32-NEXT: stwcx. 3, 0, 20
1144 ; AIX32-NEXT: bne 0, L..BB0_75
1145 ; AIX32-NEXT: # %bb.76: # %atomicrmw.end1
1146 ; AIX32-NEXT: mr 3, 31
1147 ; AIX32-NEXT: li 4, 0
1148 ; AIX32-NEXT: li 5, 1
1149 ; AIX32-NEXT: li 6, 5
1150 ; AIX32-NEXT: lwsync
1151 ; AIX32-NEXT: bl .__atomic_fetch_and_8[PR]
1153 ; AIX32-NEXT: mr 3, 30
1154 ; AIX32-NEXT: li 4, 0
1155 ; AIX32-NEXT: li 5, 1
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: std 24, -64(1) # 8-byte Folded Spill
1241 ; CHECK-NEXT: std 25, -56(1) # 8-byte Folded Spill
1242 ; CHECK-NEXT: li 3, 11
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
1260 ; 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
1272 ; 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
1284 ; 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)
1296 ; 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)
1308 ; 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
1321 ; 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
1333 ; 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: stw 26, 120(1) # 4-byte Folded Spill
1762 ; AIX32-NEXT: li 7, 11
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: xori 26, 3, 24
1769 ; AIX32-NEXT: li 3, 255
1770 ; AIX32-NEXT: stw 17, 84(1) # 4-byte Folded Spill
1771 ; AIX32-NEXT: stw 18, 88(1) # 4-byte Folded Spill
1772 ; AIX32-NEXT: stw 19, 92(1) # 4-byte Folded Spill
1773 ; AIX32-NEXT: stw 20, 96(1) # 4-byte Folded Spill
1774 ; AIX32-NEXT: stw 21, 100(1) # 4-byte Folded Spill
1775 ; AIX32-NEXT: stw 22, 104(1) # 4-byte Folded Spill
1776 ; AIX32-NEXT: stw 23, 108(1) # 4-byte Folded Spill
1777 ; AIX32-NEXT: stw 24, 112(1) # 4-byte Folded Spill
1778 ; AIX32-NEXT: stw 25, 116(1) # 4-byte Folded Spill
1779 ; AIX32-NEXT: stw 27, 124(1) # 4-byte Folded Spill
1780 ; AIX32-NEXT: stw 28, 128(1) # 4-byte Folded Spill
1781 ; AIX32-NEXT: stw 29, 132(1) # 4-byte Folded Spill
1782 ; AIX32-NEXT: stw 30, 136(1) # 4-byte Folded Spill
1783 ; AIX32-NEXT: stw 31, 140(1) # 4-byte Folded Spill
1784 ; AIX32-NEXT: stw 4, 64(1) # 4-byte Folded Spill
1785 ; AIX32-NEXT: rlwinm 24, 4, 0, 0, 29
1786 ; AIX32-NEXT: slw 23, 7, 26
1787 ; AIX32-NEXT: slw 4, 3, 26
1789 ; AIX32-NEXT: L..BB1_1: # %entry
1791 ; AIX32-NEXT: lwarx 3, 0, 24
1792 ; AIX32-NEXT: add 5, 23, 3
1793 ; AIX32-NEXT: andc 6, 3, 4
1794 ; AIX32-NEXT: and 5, 5, 4
1795 ; AIX32-NEXT: or 5, 5, 6
1796 ; AIX32-NEXT: stwcx. 5, 0, 24
1797 ; AIX32-NEXT: bne 0, L..BB1_1
1798 ; AIX32-NEXT: # %bb.2: # %entry
1799 ; AIX32-NEXT: lwz 27, L..C1(2) # @uc
1800 ; AIX32-NEXT: lwsync
1801 ; AIX32-NEXT: srw 3, 3, 26
1802 ; AIX32-NEXT: lwz 4, 64(1) # 4-byte Folded Reload
1803 ; AIX32-NEXT: clrlwi 3, 3, 24
1804 ; AIX32-NEXT: stb 3, 0(4)
1805 ; AIX32-NEXT: rlwinm 3, 27, 3, 27, 28
1806 ; AIX32-NEXT: xori 22, 3, 24
1807 ; AIX32-NEXT: li 3, 255
1809 ; AIX32-NEXT: rlwinm 21, 27, 0, 0, 29
1810 ; AIX32-NEXT: slw 19, 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, 19, 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: lwz 25, L..C2(2) # @ss
1823 ; AIX32-NEXT: srw 3, 4, 22
1824 ; AIX32-NEXT: lwsync
1825 ; AIX32-NEXT: li 4, 0
1826 ; AIX32-NEXT: clrlwi 3, 3, 24
1827 ; AIX32-NEXT: stb 3, 0(27)
1828 ; AIX32-NEXT: rlwinm 3, 25, 3, 27, 27
1829 ; AIX32-NEXT: rlwinm 17, 25, 0, 0, 29
1831 ; AIX32-NEXT: xori 18, 3, 16
1832 ; AIX32-NEXT: ori 3, 4, 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: lwz 20, L..C3(2) # @us
1846 ; AIX32-NEXT: srw 3, 4, 18
1847 ; AIX32-NEXT: lwsync
1848 ; AIX32-NEXT: li 4, 0
1849 ; AIX32-NEXT: clrlwi 3, 3, 16
1850 ; AIX32-NEXT: sth 3, 0(25)
1851 ; AIX32-NEXT: rlwinm 3, 20, 3, 27, 27
1852 ; AIX32-NEXT: rlwinm 13, 20, 0, 0, 29
1854 ; AIX32-NEXT: xori 15, 3, 16
1855 ; AIX32-NEXT: ori 3, 4, 65535
1856 ; AIX32-NEXT: slw 29, 7, 15
1857 ; AIX32-NEXT: slw 3, 3, 15
1858 ; AIX32-NEXT: L..BB1_7: # %entry
1860 ; AIX32-NEXT: lwarx 4, 0, 13
1861 ; AIX32-NEXT: add 5, 29, 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, 13
1866 ; AIX32-NEXT: bne 0, L..BB1_7
1867 ; AIX32-NEXT: # %bb.8: # %entry
1868 ; AIX32-NEXT: srw 3, 4, 15
1869 ; AIX32-NEXT: lwz 28, L..C4(2) # @si
1870 ; AIX32-NEXT: lwsync
1871 ; AIX32-NEXT: clrlwi 3, 3, 16
1872 ; AIX32-NEXT: sth 3, 0(20)
1874 ; AIX32-NEXT: L..BB1_9: # %entry
1876 ; AIX32-NEXT: lwarx 3, 0, 28
1877 ; AIX32-NEXT: addi 4, 3, 11
1878 ; AIX32-NEXT: stwcx. 4, 0, 28
1879 ; AIX32-NEXT: bne 0, L..BB1_9
1880 ; AIX32-NEXT: # %bb.10: # %entry
1881 ; AIX32-NEXT: lwz 14, L..C5(2) # @ui
1882 ; AIX32-NEXT: lwsync
1883 ; AIX32-NEXT: stw 3, 0(28)
1885 ; AIX32-NEXT: L..BB1_11: # %entry
1887 ; AIX32-NEXT: lwarx 3, 0, 14
1888 ; AIX32-NEXT: addi 4, 3, 11
1889 ; AIX32-NEXT: stwcx. 4, 0, 14
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: stw 3, 0(14)
1895 ; AIX32-NEXT: li 4, 0
1896 ; AIX32-NEXT: li 5, 11
1897 ; AIX32-NEXT: li 6, 5
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: mr 7, 3
1903 ; AIX32-NEXT: mr 8, 4
1904 ; AIX32-NEXT: li 4, 0
1905 ; AIX32-NEXT: li 5, 11
1906 ; AIX32-NEXT: li 6, 5
1907 ; AIX32-NEXT: stw 8, 4(31)
1908 ; AIX32-NEXT: stw 7, 0(31)
1909 ; AIX32-NEXT: mr 3, 30
1910 ; AIX32-NEXT: bl .__atomic_fetch_add_8[PR]
1912 ; AIX32-NEXT: li 5, 255
1913 ; AIX32-NEXT: stw 4, 4(30)
1914 ; AIX32-NEXT: stw 3, 0(30)
1915 ; AIX32-NEXT: slw 3, 5, 26
1917 ; AIX32-NEXT: L..BB1_13: # %entry
1919 ; AIX32-NEXT: lwarx 4, 0, 24
1920 ; AIX32-NEXT: sub 5, 4, 23
1921 ; AIX32-NEXT: andc 6, 4, 3
1922 ; AIX32-NEXT: and 5, 5, 3
1923 ; AIX32-NEXT: or 5, 5, 6
1924 ; AIX32-NEXT: stwcx. 5, 0, 24
1925 ; AIX32-NEXT: bne 0, L..BB1_13
1926 ; AIX32-NEXT: # %bb.14: # %entry
1927 ; AIX32-NEXT: lwsync
1928 ; AIX32-NEXT: srw 3, 4, 26
1929 ; AIX32-NEXT: lwz 4, 64(1) # 4-byte Folded Reload
1930 ; AIX32-NEXT: clrlwi 3, 3, 24
1931 ; AIX32-NEXT: stb 3, 0(4)
1932 ; AIX32-NEXT: li 3, 255
1933 ; AIX32-NEXT: slw 3, 3, 22
1935 ; AIX32-NEXT: L..BB1_15: # %entry
1937 ; AIX32-NEXT: lwarx 4, 0, 21
1938 ; AIX32-NEXT: sub 5, 4, 19
1939 ; AIX32-NEXT: andc 6, 4, 3
1940 ; AIX32-NEXT: and 5, 5, 3
1941 ; AIX32-NEXT: or 5, 5, 6
1942 ; AIX32-NEXT: stwcx. 5, 0, 21
1943 ; AIX32-NEXT: bne 0, L..BB1_15
1944 ; AIX32-NEXT: # %bb.16: # %entry
1945 ; AIX32-NEXT: srw 3, 4, 22
1946 ; AIX32-NEXT: li 4, 0
1947 ; AIX32-NEXT: lwsync
1948 ; AIX32-NEXT: li 8, 11
1949 ; AIX32-NEXT: clrlwi 3, 3, 24
1950 ; AIX32-NEXT: stb 3, 0(27)
1951 ; AIX32-NEXT: ori 3, 4, 65535
1952 ; AIX32-NEXT: slw 3, 3, 18
1954 ; AIX32-NEXT: L..BB1_17: # %entry
1956 ; AIX32-NEXT: lwarx 4, 0, 17
1957 ; AIX32-NEXT: sub 5, 4, 16
1958 ; AIX32-NEXT: andc 6, 4, 3
1959 ; AIX32-NEXT: and 5, 5, 3
1960 ; AIX32-NEXT: or 5, 5, 6
1961 ; AIX32-NEXT: stwcx. 5, 0, 17
1962 ; AIX32-NEXT: bne 0, L..BB1_17
1963 ; AIX32-NEXT: # %bb.18: # %entry
1964 ; AIX32-NEXT: srw 3, 4, 18
1965 ; AIX32-NEXT: li 4, 0
1966 ; AIX32-NEXT: lwsync
1967 ; AIX32-NEXT: clrlwi 3, 3, 16
1968 ; AIX32-NEXT: sth 3, 0(25)
1969 ; AIX32-NEXT: ori 3, 4, 65535
1970 ; AIX32-NEXT: slw 3, 3, 15
1972 ; AIX32-NEXT: L..BB1_19: # %entry
1974 ; AIX32-NEXT: lwarx 4, 0, 13
1975 ; AIX32-NEXT: sub 5, 4, 29
1976 ; AIX32-NEXT: andc 6, 4, 3
1977 ; AIX32-NEXT: and 5, 5, 3
1978 ; AIX32-NEXT: or 5, 5, 6
1979 ; AIX32-NEXT: stwcx. 5, 0, 13
1980 ; AIX32-NEXT: bne 0, L..BB1_19
1981 ; AIX32-NEXT: # %bb.20: # %entry
1982 ; AIX32-NEXT: srw 3, 4, 15
1983 ; AIX32-NEXT: lwsync
1984 ; AIX32-NEXT: clrlwi 3, 3, 16
1985 ; AIX32-NEXT: sth 3, 0(20)
1987 ; AIX32-NEXT: L..BB1_21: # %entry
1989 ; AIX32-NEXT: lwarx 3, 0, 28
1990 ; AIX32-NEXT: sub 4, 3, 8
1991 ; AIX32-NEXT: stwcx. 4, 0, 28
1992 ; AIX32-NEXT: bne 0, L..BB1_21
1993 ; AIX32-NEXT: # %bb.22: # %entry
1994 ; AIX32-NEXT: lwsync
1995 ; AIX32-NEXT: stw 3, 0(28)
1997 ; AIX32-NEXT: L..BB1_23: # %entry
1999 ; AIX32-NEXT: lwarx 7, 0, 14
2000 ; AIX32-NEXT: sub 3, 7, 8
2001 ; AIX32-NEXT: stwcx. 3, 0, 14
2002 ; AIX32-NEXT: bne 0, L..BB1_23
2003 ; AIX32-NEXT: # %bb.24: # %entry
2004 ; AIX32-NEXT: mr 3, 31
2005 ; AIX32-NEXT: li 4, 0
2006 ; AIX32-NEXT: li 5, 11
2007 ; AIX32-NEXT: li 6, 5
2008 ; AIX32-NEXT: lwsync
2009 ; AIX32-NEXT: stw 7, 0(14)
2010 ; AIX32-NEXT: bl .__atomic_fetch_sub_8[PR]
2012 ; AIX32-NEXT: mr 7, 3
2013 ; AIX32-NEXT: mr 8, 4
2014 ; AIX32-NEXT: mr 3, 30
2015 ; AIX32-NEXT: li 4, 0
2016 ; AIX32-NEXT: li 5, 11
2017 ; AIX32-NEXT: li 6, 5
2018 ; AIX32-NEXT: stw 8, 4(31)
2019 ; AIX32-NEXT: stw 7, 0(31)
2020 ; AIX32-NEXT: bl .__atomic_fetch_sub_8[PR]
2022 ; AIX32-NEXT: li 5, 255
2023 ; AIX32-NEXT: stw 4, 4(30)
2024 ; AIX32-NEXT: stw 3, 0(30)
2025 ; AIX32-NEXT: slw 3, 5, 26
2027 ; AIX32-NEXT: L..BB1_25: # %entry
2029 ; AIX32-NEXT: lwarx 4, 0, 24
2030 ; AIX32-NEXT: or 5, 23, 4
2031 ; AIX32-NEXT: andc 6, 4, 3
2032 ; AIX32-NEXT: and 5, 5, 3
2033 ; AIX32-NEXT: or 5, 5, 6
2034 ; AIX32-NEXT: stwcx. 5, 0, 24
2035 ; AIX32-NEXT: bne 0, L..BB1_25
2036 ; AIX32-NEXT: # %bb.26: # %entry
2037 ; AIX32-NEXT: lwsync
2038 ; AIX32-NEXT: srw 3, 4, 26
2039 ; AIX32-NEXT: lwz 4, 64(1) # 4-byte Folded Reload
2040 ; AIX32-NEXT: clrlwi 3, 3, 24
2041 ; AIX32-NEXT: stb 3, 0(4)
2042 ; AIX32-NEXT: li 3, 255
2043 ; AIX32-NEXT: slw 3, 3, 22
2045 ; AIX32-NEXT: L..BB1_27: # %entry
2047 ; AIX32-NEXT: lwarx 4, 0, 21
2048 ; AIX32-NEXT: or 5, 19, 4
2049 ; AIX32-NEXT: andc 6, 4, 3
2050 ; AIX32-NEXT: and 5, 5, 3
2051 ; AIX32-NEXT: or 5, 5, 6
2052 ; AIX32-NEXT: stwcx. 5, 0, 21
2053 ; AIX32-NEXT: bne 0, L..BB1_27
2054 ; AIX32-NEXT: # %bb.28: # %entry
2055 ; AIX32-NEXT: srw 3, 4, 22
2056 ; AIX32-NEXT: li 4, 0
2057 ; AIX32-NEXT: lwsync
2058 ; AIX32-NEXT: clrlwi 3, 3, 24
2059 ; AIX32-NEXT: stb 3, 0(27)
2060 ; AIX32-NEXT: ori 3, 4, 65535
2061 ; AIX32-NEXT: slw 3, 3, 18
2063 ; AIX32-NEXT: L..BB1_29: # %entry
2065 ; AIX32-NEXT: lwarx 4, 0, 17
2066 ; AIX32-NEXT: or 5, 16, 4
2067 ; AIX32-NEXT: andc 6, 4, 3
2068 ; AIX32-NEXT: and 5, 5, 3
2069 ; AIX32-NEXT: or 5, 5, 6
2070 ; AIX32-NEXT: stwcx. 5, 0, 17
2071 ; AIX32-NEXT: bne 0, L..BB1_29
2072 ; AIX32-NEXT: # %bb.30: # %entry
2073 ; AIX32-NEXT: srw 3, 4, 18
2074 ; AIX32-NEXT: li 4, 0
2075 ; AIX32-NEXT: lwsync
2076 ; AIX32-NEXT: clrlwi 3, 3, 16
2077 ; AIX32-NEXT: sth 3, 0(25)
2078 ; AIX32-NEXT: ori 3, 4, 65535
2079 ; AIX32-NEXT: slw 3, 3, 15
2081 ; AIX32-NEXT: L..BB1_31: # %entry
2083 ; AIX32-NEXT: lwarx 4, 0, 13
2084 ; AIX32-NEXT: or 5, 29, 4
2085 ; AIX32-NEXT: andc 6, 4, 3
2086 ; AIX32-NEXT: and 5, 5, 3
2087 ; AIX32-NEXT: or 5, 5, 6
2088 ; AIX32-NEXT: stwcx. 5, 0, 13
2089 ; AIX32-NEXT: bne 0, L..BB1_31
2090 ; AIX32-NEXT: # %bb.32: # %entry
2091 ; AIX32-NEXT: srw 3, 4, 15
2092 ; AIX32-NEXT: lwsync
2093 ; AIX32-NEXT: clrlwi 3, 3, 16
2094 ; AIX32-NEXT: sth 3, 0(20)
2096 ; AIX32-NEXT: L..BB1_33: # %entry
2098 ; AIX32-NEXT: lwarx 3, 0, 28
2099 ; AIX32-NEXT: ori 4, 3, 11
2100 ; AIX32-NEXT: stwcx. 4, 0, 28
2101 ; AIX32-NEXT: bne 0, L..BB1_33
2102 ; AIX32-NEXT: # %bb.34: # %entry
2103 ; AIX32-NEXT: lwsync
2104 ; AIX32-NEXT: stw 3, 0(28)
2106 ; AIX32-NEXT: L..BB1_35: # %entry
2108 ; AIX32-NEXT: lwarx 7, 0, 14
2109 ; AIX32-NEXT: ori 3, 7, 11
2110 ; AIX32-NEXT: stwcx. 3, 0, 14
2111 ; AIX32-NEXT: bne 0, L..BB1_35
2112 ; AIX32-NEXT: # %bb.36: # %entry
2113 ; AIX32-NEXT: mr 3, 31
2114 ; AIX32-NEXT: li 4, 0
2115 ; AIX32-NEXT: li 5, 11
2116 ; AIX32-NEXT: li 6, 5
2117 ; AIX32-NEXT: lwsync
2118 ; AIX32-NEXT: stw 7, 0(14)
2119 ; AIX32-NEXT: bl .__atomic_fetch_or_8[PR]
2121 ; AIX32-NEXT: mr 7, 3
2122 ; AIX32-NEXT: mr 8, 4
2123 ; AIX32-NEXT: mr 3, 30
2124 ; AIX32-NEXT: li 4, 0
2125 ; AIX32-NEXT: li 5, 11
2126 ; AIX32-NEXT: li 6, 5
2127 ; AIX32-NEXT: stw 8, 4(31)
2128 ; AIX32-NEXT: stw 7, 0(31)
2129 ; AIX32-NEXT: bl .__atomic_fetch_or_8[PR]
2131 ; AIX32-NEXT: li 5, 255
2132 ; AIX32-NEXT: stw 4, 4(30)
2133 ; AIX32-NEXT: stw 3, 0(30)
2134 ; AIX32-NEXT: slw 3, 5, 26
2136 ; AIX32-NEXT: L..BB1_37: # %entry
2138 ; AIX32-NEXT: lwarx 4, 0, 24
2139 ; AIX32-NEXT: xor 5, 23, 4
2140 ; AIX32-NEXT: andc 6, 4, 3
2141 ; AIX32-NEXT: and 5, 5, 3
2142 ; AIX32-NEXT: or 5, 5, 6
2143 ; AIX32-NEXT: stwcx. 5, 0, 24
2144 ; AIX32-NEXT: bne 0, L..BB1_37
2145 ; AIX32-NEXT: # %bb.38: # %entry
2146 ; AIX32-NEXT: lwsync
2147 ; AIX32-NEXT: srw 3, 4, 26
2148 ; AIX32-NEXT: lwz 4, 64(1) # 4-byte Folded Reload
2149 ; AIX32-NEXT: clrlwi 3, 3, 24
2150 ; AIX32-NEXT: stb 3, 0(4)
2151 ; AIX32-NEXT: li 3, 255
2152 ; AIX32-NEXT: slw 3, 3, 22
2154 ; AIX32-NEXT: L..BB1_39: # %entry
2156 ; AIX32-NEXT: lwarx 4, 0, 21
2157 ; AIX32-NEXT: xor 5, 19, 4
2158 ; AIX32-NEXT: andc 6, 4, 3
2159 ; AIX32-NEXT: and 5, 5, 3
2160 ; AIX32-NEXT: or 5, 5, 6
2161 ; AIX32-NEXT: stwcx. 5, 0, 21
2162 ; AIX32-NEXT: bne 0, L..BB1_39
2163 ; AIX32-NEXT: # %bb.40: # %entry
2164 ; AIX32-NEXT: srw 3, 4, 22
2165 ; AIX32-NEXT: li 4, 0
2166 ; AIX32-NEXT: lwsync
2167 ; AIX32-NEXT: clrlwi 3, 3, 24
2168 ; AIX32-NEXT: stb 3, 0(27)
2169 ; AIX32-NEXT: ori 3, 4, 65535
2170 ; AIX32-NEXT: slw 3, 3, 18
2172 ; AIX32-NEXT: L..BB1_41: # %entry
2174 ; AIX32-NEXT: lwarx 4, 0, 17
2175 ; AIX32-NEXT: xor 5, 16, 4
2176 ; AIX32-NEXT: andc 6, 4, 3
2177 ; AIX32-NEXT: and 5, 5, 3
2178 ; AIX32-NEXT: or 5, 5, 6
2179 ; AIX32-NEXT: stwcx. 5, 0, 17
2180 ; AIX32-NEXT: bne 0, L..BB1_41
2181 ; AIX32-NEXT: # %bb.42: # %entry
2182 ; AIX32-NEXT: srw 3, 4, 18
2183 ; AIX32-NEXT: li 4, 0
2184 ; AIX32-NEXT: lwsync
2185 ; AIX32-NEXT: clrlwi 3, 3, 16
2186 ; AIX32-NEXT: sth 3, 0(25)
2187 ; AIX32-NEXT: ori 3, 4, 65535
2188 ; AIX32-NEXT: slw 3, 3, 15
2190 ; AIX32-NEXT: L..BB1_43: # %entry
2192 ; AIX32-NEXT: lwarx 4, 0, 13
2193 ; AIX32-NEXT: xor 5, 29, 4
2194 ; AIX32-NEXT: andc 6, 4, 3
2195 ; AIX32-NEXT: and 5, 5, 3
2196 ; AIX32-NEXT: or 5, 5, 6
2197 ; AIX32-NEXT: stwcx. 5, 0, 13
2198 ; AIX32-NEXT: bne 0, L..BB1_43
2199 ; AIX32-NEXT: # %bb.44: # %entry
2200 ; AIX32-NEXT: srw 3, 4, 15
2201 ; AIX32-NEXT: lwsync
2202 ; AIX32-NEXT: clrlwi 3, 3, 16
2203 ; AIX32-NEXT: sth 3, 0(20)
2205 ; AIX32-NEXT: L..BB1_45: # %entry
2207 ; AIX32-NEXT: lwarx 3, 0, 28
2208 ; AIX32-NEXT: xori 4, 3, 11
2209 ; AIX32-NEXT: stwcx. 4, 0, 28
2210 ; AIX32-NEXT: bne 0, L..BB1_45
2211 ; AIX32-NEXT: # %bb.46: # %entry
2212 ; AIX32-NEXT: lwsync
2213 ; AIX32-NEXT: stw 3, 0(28)
2215 ; AIX32-NEXT: L..BB1_47: # %entry
2217 ; AIX32-NEXT: lwarx 7, 0, 14
2218 ; AIX32-NEXT: xori 3, 7, 11
2219 ; AIX32-NEXT: stwcx. 3, 0, 14
2220 ; AIX32-NEXT: bne 0, L..BB1_47
2221 ; AIX32-NEXT: # %bb.48: # %entry
2222 ; AIX32-NEXT: mr 3, 31
2223 ; AIX32-NEXT: li 4, 0
2224 ; AIX32-NEXT: li 5, 11
2225 ; AIX32-NEXT: li 6, 5
2226 ; AIX32-NEXT: lwsync
2227 ; AIX32-NEXT: stw 7, 0(14)
2228 ; AIX32-NEXT: bl .__atomic_fetch_xor_8[PR]
2230 ; AIX32-NEXT: mr 7, 3
2231 ; AIX32-NEXT: mr 8, 4
2232 ; AIX32-NEXT: mr 3, 30
2233 ; AIX32-NEXT: li 4, 0
2234 ; AIX32-NEXT: li 5, 11
2235 ; AIX32-NEXT: li 6, 5
2236 ; AIX32-NEXT: stw 8, 4(31)
2237 ; AIX32-NEXT: stw 7, 0(31)
2238 ; AIX32-NEXT: bl .__atomic_fetch_xor_8[PR]
2240 ; AIX32-NEXT: li 5, 255
2241 ; AIX32-NEXT: stw 4, 4(30)
2242 ; AIX32-NEXT: stw 3, 0(30)
2243 ; AIX32-NEXT: slw 3, 5, 26
2245 ; AIX32-NEXT: L..BB1_49: # %entry
2247 ; AIX32-NEXT: lwarx 4, 0, 24
2248 ; AIX32-NEXT: nand 5, 23, 4
2249 ; AIX32-NEXT: andc 6, 4, 3
2250 ; AIX32-NEXT: and 5, 5, 3
2251 ; AIX32-NEXT: or 5, 5, 6
2252 ; AIX32-NEXT: stwcx. 5, 0, 24
2253 ; AIX32-NEXT: bne 0, L..BB1_49
2254 ; AIX32-NEXT: # %bb.50: # %entry
2255 ; AIX32-NEXT: lwsync
2256 ; AIX32-NEXT: srw 3, 4, 26
2257 ; AIX32-NEXT: li 8, 11
2258 ; AIX32-NEXT: lwz 4, 64(1) # 4-byte Folded Reload
2259 ; AIX32-NEXT: clrlwi 3, 3, 24
2260 ; AIX32-NEXT: stb 3, 0(4)
2261 ; AIX32-NEXT: li 3, 255
2262 ; AIX32-NEXT: slw 3, 3, 22
2264 ; AIX32-NEXT: L..BB1_51: # %entry
2266 ; AIX32-NEXT: lwarx 4, 0, 21
2267 ; AIX32-NEXT: nand 5, 19, 4
2268 ; AIX32-NEXT: andc 6, 4, 3
2269 ; AIX32-NEXT: and 5, 5, 3
2270 ; AIX32-NEXT: or 5, 5, 6
2271 ; AIX32-NEXT: stwcx. 5, 0, 21
2272 ; AIX32-NEXT: bne 0, L..BB1_51
2273 ; AIX32-NEXT: # %bb.52: # %entry
2274 ; AIX32-NEXT: srw 3, 4, 22
2275 ; AIX32-NEXT: li 4, 0
2276 ; AIX32-NEXT: lwsync
2277 ; AIX32-NEXT: clrlwi 3, 3, 24
2278 ; AIX32-NEXT: stb 3, 0(27)
2279 ; AIX32-NEXT: ori 3, 4, 65535
2280 ; AIX32-NEXT: slw 3, 3, 18
2282 ; AIX32-NEXT: L..BB1_53: # %entry
2284 ; AIX32-NEXT: lwarx 4, 0, 17
2285 ; AIX32-NEXT: nand 5, 16, 4
2286 ; AIX32-NEXT: andc 6, 4, 3
2287 ; AIX32-NEXT: and 5, 5, 3
2288 ; AIX32-NEXT: or 5, 5, 6
2289 ; AIX32-NEXT: stwcx. 5, 0, 17
2290 ; AIX32-NEXT: bne 0, L..BB1_53
2291 ; AIX32-NEXT: # %bb.54: # %entry
2292 ; AIX32-NEXT: srw 3, 4, 18
2293 ; AIX32-NEXT: li 4, 0
2294 ; AIX32-NEXT: lwsync
2295 ; AIX32-NEXT: clrlwi 3, 3, 16
2296 ; AIX32-NEXT: sth 3, 0(25)
2297 ; AIX32-NEXT: ori 3, 4, 65535
2298 ; AIX32-NEXT: slw 3, 3, 15
2300 ; AIX32-NEXT: L..BB1_55: # %entry
2302 ; AIX32-NEXT: lwarx 4, 0, 13
2303 ; AIX32-NEXT: nand 5, 29, 4
2304 ; AIX32-NEXT: andc 6, 4, 3
2305 ; AIX32-NEXT: and 5, 5, 3
2306 ; AIX32-NEXT: or 5, 5, 6
2307 ; AIX32-NEXT: stwcx. 5, 0, 13
2308 ; AIX32-NEXT: bne 0, L..BB1_55
2309 ; AIX32-NEXT: # %bb.56: # %entry
2310 ; AIX32-NEXT: srw 3, 4, 15
2311 ; AIX32-NEXT: lwsync
2312 ; AIX32-NEXT: clrlwi 3, 3, 16
2313 ; AIX32-NEXT: sth 3, 0(20)
2315 ; AIX32-NEXT: L..BB1_57: # %entry
2317 ; AIX32-NEXT: lwarx 3, 0, 28
2318 ; AIX32-NEXT: nand 4, 8, 3
2319 ; AIX32-NEXT: stwcx. 4, 0, 28
2320 ; AIX32-NEXT: bne 0, L..BB1_57
2321 ; AIX32-NEXT: # %bb.58: # %entry
2322 ; AIX32-NEXT: lwsync
2323 ; AIX32-NEXT: stw 3, 0(28)
2325 ; AIX32-NEXT: L..BB1_59: # %entry
2327 ; AIX32-NEXT: lwarx 7, 0, 14
2328 ; AIX32-NEXT: nand 3, 8, 7
2329 ; AIX32-NEXT: stwcx. 3, 0, 14
2330 ; AIX32-NEXT: bne 0, L..BB1_59
2331 ; AIX32-NEXT: # %bb.60: # %entry
2332 ; AIX32-NEXT: mr 3, 31
2333 ; AIX32-NEXT: li 4, 0
2334 ; AIX32-NEXT: li 5, 11
2335 ; AIX32-NEXT: li 6, 5
2336 ; AIX32-NEXT: lwsync
2337 ; AIX32-NEXT: stw 7, 0(14)
2338 ; AIX32-NEXT: bl .__atomic_fetch_nand_8[PR]
2340 ; AIX32-NEXT: mr 7, 3
2341 ; AIX32-NEXT: mr 8, 4
2342 ; AIX32-NEXT: mr 3, 30
2343 ; AIX32-NEXT: li 4, 0
2344 ; AIX32-NEXT: li 5, 11
2345 ; AIX32-NEXT: li 6, 5
2346 ; AIX32-NEXT: stw 8, 4(31)
2347 ; AIX32-NEXT: stw 7, 0(31)
2348 ; AIX32-NEXT: bl .__atomic_fetch_nand_8[PR]
2350 ; AIX32-NEXT: li 5, 255
2351 ; AIX32-NEXT: stw 4, 4(30)
2352 ; AIX32-NEXT: stw 3, 0(30)
2353 ; AIX32-NEXT: slw 3, 5, 26
2355 ; AIX32-NEXT: L..BB1_61: # %entry
2357 ; AIX32-NEXT: lwarx 4, 0, 24
2358 ; AIX32-NEXT: and 5, 23, 4
2359 ; AIX32-NEXT: andc 6, 4, 3
2360 ; AIX32-NEXT: and 5, 5, 3
2361 ; AIX32-NEXT: or 5, 5, 6
2362 ; AIX32-NEXT: stwcx. 5, 0, 24
2363 ; AIX32-NEXT: bne 0, L..BB1_61
2364 ; AIX32-NEXT: # %bb.62: # %entry
2365 ; AIX32-NEXT: lwsync
2366 ; AIX32-NEXT: srw 3, 4, 26
2367 ; AIX32-NEXT: lwz 4, 64(1) # 4-byte Folded Reload
2368 ; AIX32-NEXT: clrlwi 3, 3, 24
2369 ; AIX32-NEXT: stb 3, 0(4)
2370 ; AIX32-NEXT: li 3, 255
2371 ; AIX32-NEXT: slw 3, 3, 22
2373 ; AIX32-NEXT: L..BB1_63: # %entry
2375 ; AIX32-NEXT: lwarx 4, 0, 21
2376 ; AIX32-NEXT: and 5, 19, 4
2377 ; AIX32-NEXT: andc 6, 4, 3
2378 ; AIX32-NEXT: and 5, 5, 3
2379 ; AIX32-NEXT: or 5, 5, 6
2380 ; AIX32-NEXT: stwcx. 5, 0, 21
2381 ; AIX32-NEXT: bne 0, L..BB1_63
2382 ; AIX32-NEXT: # %bb.64: # %entry
2383 ; AIX32-NEXT: srw 3, 4, 22
2384 ; AIX32-NEXT: li 4, 0
2385 ; AIX32-NEXT: lwsync
2386 ; AIX32-NEXT: li 8, 11
2387 ; AIX32-NEXT: clrlwi 3, 3, 24
2388 ; AIX32-NEXT: stb 3, 0(27)
2389 ; AIX32-NEXT: ori 3, 4, 65535
2390 ; AIX32-NEXT: slw 3, 3, 18
2392 ; AIX32-NEXT: L..BB1_65: # %entry
2394 ; AIX32-NEXT: lwarx 4, 0, 17
2395 ; AIX32-NEXT: and 5, 16, 4
2396 ; AIX32-NEXT: andc 6, 4, 3
2397 ; AIX32-NEXT: and 5, 5, 3
2398 ; AIX32-NEXT: or 5, 5, 6
2399 ; AIX32-NEXT: stwcx. 5, 0, 17
2400 ; AIX32-NEXT: bne 0, L..BB1_65
2401 ; AIX32-NEXT: # %bb.66: # %entry
2402 ; AIX32-NEXT: srw 3, 4, 18
2403 ; AIX32-NEXT: li 4, 0
2404 ; AIX32-NEXT: lwsync
2405 ; AIX32-NEXT: clrlwi 3, 3, 16
2406 ; AIX32-NEXT: sth 3, 0(25)
2407 ; AIX32-NEXT: ori 3, 4, 65535
2408 ; AIX32-NEXT: slw 3, 3, 15
2410 ; AIX32-NEXT: L..BB1_67: # %entry
2412 ; AIX32-NEXT: lwarx 4, 0, 13
2413 ; AIX32-NEXT: and 5, 29, 4
2414 ; AIX32-NEXT: andc 6, 4, 3
2415 ; AIX32-NEXT: and 5, 5, 3
2416 ; AIX32-NEXT: or 5, 5, 6
2417 ; AIX32-NEXT: stwcx. 5, 0, 13
2418 ; AIX32-NEXT: bne 0, L..BB1_67
2419 ; AIX32-NEXT: # %bb.68: # %entry
2420 ; AIX32-NEXT: srw 3, 4, 15
2421 ; AIX32-NEXT: lwsync
2422 ; AIX32-NEXT: clrlwi 3, 3, 16
2423 ; AIX32-NEXT: sth 3, 0(20)
2425 ; AIX32-NEXT: L..BB1_69: # %entry
2427 ; AIX32-NEXT: lwarx 3, 0, 28
2428 ; AIX32-NEXT: and 4, 8, 3
2429 ; AIX32-NEXT: stwcx. 4, 0, 28
2430 ; AIX32-NEXT: bne 0, L..BB1_69
2431 ; AIX32-NEXT: # %bb.70: # %entry
2432 ; AIX32-NEXT: lwsync
2433 ; AIX32-NEXT: stw 3, 0(28)
2435 ; AIX32-NEXT: L..BB1_71: # %entry
2437 ; AIX32-NEXT: lwarx 7, 0, 14
2438 ; AIX32-NEXT: and 3, 8, 7
2439 ; AIX32-NEXT: stwcx. 3, 0, 14
2440 ; AIX32-NEXT: bne 0, L..BB1_71
2441 ; AIX32-NEXT: # %bb.72: # %entry
2442 ; AIX32-NEXT: mr 3, 31
2443 ; AIX32-NEXT: li 4, 0
2444 ; AIX32-NEXT: li 5, 11
2445 ; AIX32-NEXT: li 6, 5
2446 ; AIX32-NEXT: lwsync
2447 ; AIX32-NEXT: stw 7, 0(14)
2448 ; AIX32-NEXT: bl .__atomic_fetch_and_8[PR]
2450 ; AIX32-NEXT: mr 7, 3
2451 ; AIX32-NEXT: mr 8, 4
2452 ; AIX32-NEXT: mr 3, 30
2453 ; AIX32-NEXT: li 4, 0
2454 ; AIX32-NEXT: li 5, 11
2455 ; AIX32-NEXT: li 6, 5
2456 ; AIX32-NEXT: stw 8, 4(31)
2457 ; AIX32-NEXT: stw 7, 0(31)
2458 ; AIX32-NEXT: bl .__atomic_fetch_and_8[PR]
2460 ; AIX32-NEXT: stw 4, 4(30)
2461 ; AIX32-NEXT: stw 3, 0(30)
2462 ; AIX32-NEXT: lwz 31, 140(1) # 4-byte Folded Reload
2463 ; AIX32-NEXT: lwz 30, 136(1) # 4-byte Folded Reload
2464 ; AIX32-NEXT: lwz 29, 132(1) # 4-byte Folded Reload
2465 ; AIX32-NEXT: lwz 28, 128(1) # 4-byte Folded Reload
2466 ; AIX32-NEXT: lwz 27, 124(1) # 4-byte Folded Reload
2467 ; AIX32-NEXT: lwz 26, 120(1) # 4-byte Folded Reload
2468 ; AIX32-NEXT: lwz 25, 116(1) # 4-byte Folded Reload
2469 ; AIX32-NEXT: lwz 24, 112(1) # 4-byte Folded Reload
2470 ; AIX32-NEXT: lwz 23, 108(1) # 4-byte Folded Reload
2471 ; AIX32-NEXT: lwz 22, 104(1) # 4-byte Folded Reload
2472 ; AIX32-NEXT: lwz 21, 100(1) # 4-byte Folded Reload
2473 ; AIX32-NEXT: lwz 20, 96(1) # 4-byte Folded Reload
2474 ; AIX32-NEXT: lwz 19, 92(1) # 4-byte Folded Reload
2475 ; AIX32-NEXT: lwz 18, 88(1) # 4-byte Folded Reload
2476 ; AIX32-NEXT: lwz 17, 84(1) # 4-byte Folded Reload
2477 ; AIX32-NEXT: lwz 16, 80(1) # 4-byte Folded Reload
2478 ; AIX32-NEXT: lwz 15, 76(1) # 4-byte Folded Reload
2479 ; AIX32-NEXT: lwz 14, 72(1) # 4-byte Folded Reload
2480 ; AIX32-NEXT: lwz 13, 68(1) # 4-byte Folded Reload
2481 ; AIX32-NEXT: addi 1, 1, 144
2482 ; AIX32-NEXT: lwz 0, 8(1)
2483 ; AIX32-NEXT: mtlr 0
2486 %0 = atomicrmw add ptr @sc, i8 11 seq_cst, align 1
2487 store i8 %0, ptr @sc, align 1
2488 %1 = atomicrmw add ptr @uc, i8 11 seq_cst, align 1
2489 store i8 %1, ptr @uc, align 1
2490 %2 = atomicrmw add ptr @ss, i16 11 seq_cst, align 2
2491 store i16 %2, ptr @ss, align 2
2492 %3 = atomicrmw add ptr @us, i16 11 seq_cst, align 2
2493 store i16 %3, ptr @us, align 2
2494 %4 = atomicrmw add ptr @si, i32 11 seq_cst, align 4
2495 store i32 %4, ptr @si, align 4
2496 %5 = atomicrmw add ptr @ui, i32 11 seq_cst, align 4
2497 store i32 %5, ptr @ui, align 4
2498 %6 = atomicrmw add ptr @sll, i64 11 seq_cst, align 8
2499 store i64 %6, ptr @sll, align 8
2500 %7 = atomicrmw add ptr @ull, i64 11 seq_cst, align 8
2501 store i64 %7, ptr @ull, align 8
2502 %8 = atomicrmw sub ptr @sc, i8 11 seq_cst, align 1
2503 store i8 %8, ptr @sc, align 1
2504 %9 = atomicrmw sub ptr @uc, i8 11 seq_cst, align 1
2505 store i8 %9, ptr @uc, align 1
2506 %10 = atomicrmw sub ptr @ss, i16 11 seq_cst, align 2
2507 store i16 %10, ptr @ss, align 2
2508 %11 = atomicrmw sub ptr @us, i16 11 seq_cst, align 2
2509 store i16 %11, ptr @us, align 2
2510 %12 = atomicrmw sub ptr @si, i32 11 seq_cst, align 4
2511 store i32 %12, ptr @si, align 4
2512 %13 = atomicrmw sub ptr @ui, i32 11 seq_cst, align 4
2513 store i32 %13, ptr @ui, align 4
2514 %14 = atomicrmw sub ptr @sll, i64 11 seq_cst, align 8
2515 store i64 %14, ptr @sll, align 8
2516 %15 = atomicrmw sub ptr @ull, i64 11 seq_cst, align 8
2517 store i64 %15, ptr @ull, align 8
2518 %16 = atomicrmw or ptr @sc, i8 11 seq_cst, align 1
2519 store i8 %16, ptr @sc, align 1
2520 %17 = atomicrmw or ptr @uc, i8 11 seq_cst, align 1
2521 store i8 %17, ptr @uc, align 1
2522 %18 = atomicrmw or ptr @ss, i16 11 seq_cst, align 2
2523 store i16 %18, ptr @ss, align 2
2524 %19 = atomicrmw or ptr @us, i16 11 seq_cst, align 2
2525 store i16 %19, ptr @us, align 2
2526 %20 = atomicrmw or ptr @si, i32 11 seq_cst, align 4
2527 store i32 %20, ptr @si, align 4
2528 %21 = atomicrmw or ptr @ui, i32 11 seq_cst, align 4
2529 store i32 %21, ptr @ui, align 4
2530 %22 = atomicrmw or ptr @sll, i64 11 seq_cst, align 8
2531 store i64 %22, ptr @sll, align 8
2532 %23 = atomicrmw or ptr @ull, i64 11 seq_cst, align 8
2533 store i64 %23, ptr @ull, align 8
2534 %24 = atomicrmw xor ptr @sc, i8 11 seq_cst, align 1
2535 store i8 %24, ptr @sc, align 1
2536 %25 = atomicrmw xor ptr @uc, i8 11 seq_cst, align 1
2537 store i8 %25, ptr @uc, align 1
2538 %26 = atomicrmw xor ptr @ss, i16 11 seq_cst, align 2
2539 store i16 %26, ptr @ss, align 2
2540 %27 = atomicrmw xor ptr @us, i16 11 seq_cst, align 2
2541 store i16 %27, ptr @us, align 2
2542 %28 = atomicrmw xor ptr @si, i32 11 seq_cst, align 4
2543 store i32 %28, ptr @si, align 4
2544 %29 = atomicrmw xor ptr @ui, i32 11 seq_cst, align 4
2545 store i32 %29, ptr @ui, align 4
2546 %30 = atomicrmw xor ptr @sll, i64 11 seq_cst, align 8
2547 store i64 %30, ptr @sll, align 8
2548 %31 = atomicrmw xor ptr @ull, i64 11 seq_cst, align 8
2549 store i64 %31, ptr @ull, align 8
2550 %32 = atomicrmw nand ptr @sc, i8 11 seq_cst, align 1
2551 store i8 %32, ptr @sc, align 1
2552 %33 = atomicrmw nand ptr @uc, i8 11 seq_cst, align 1
2553 store i8 %33, ptr @uc, align 1
2554 %34 = atomicrmw nand ptr @ss, i16 11 seq_cst, align 2
2555 store i16 %34, ptr @ss, align 2
2556 %35 = atomicrmw nand ptr @us, i16 11 seq_cst, align 2
2557 store i16 %35, ptr @us, align 2
2558 %36 = atomicrmw nand ptr @si, i32 11 seq_cst, align 4
2559 store i32 %36, ptr @si, align 4
2560 %37 = atomicrmw nand ptr @ui, i32 11 seq_cst, align 4
2561 store i32 %37, ptr @ui, align 4
2562 %38 = atomicrmw nand ptr @sll, i64 11 seq_cst, align 8
2563 store i64 %38, ptr @sll, align 8
2564 %39 = atomicrmw nand ptr @ull, i64 11 seq_cst, align 8
2565 store i64 %39, ptr @ull, align 8
2566 %40 = atomicrmw and ptr @sc, i8 11 seq_cst, align 1
2567 store i8 %40, ptr @sc, align 1
2568 %41 = atomicrmw and ptr @uc, i8 11 seq_cst, align 1
2569 store i8 %41, ptr @uc, align 1
2570 %42 = atomicrmw and ptr @ss, i16 11 seq_cst, align 2
2571 store i16 %42, ptr @ss, align 2
2572 %43 = atomicrmw and ptr @us, i16 11 seq_cst, align 2
2573 store i16 %43, ptr @us, align 2
2574 %44 = atomicrmw and ptr @si, i32 11 seq_cst, align 4
2575 store i32 %44, ptr @si, align 4
2576 %45 = atomicrmw and ptr @ui, i32 11 seq_cst, align 4
2577 store i32 %45, ptr @ui, align 4
2578 %46 = atomicrmw and ptr @sll, i64 11 seq_cst, align 8
2579 store i64 %46, ptr @sll, align 8
2580 %47 = atomicrmw and ptr @ull, i64 11 seq_cst, align 8
2581 store i64 %47, ptr @ull, align 8
2585 define dso_local void @test_op_and_fetch() local_unnamed_addr #0 {
2586 ; CHECK-LABEL: test_op_and_fetch:
2587 ; CHECK: # %bb.0: # %entry
2588 ; CHECK-NEXT: addis 3, 2, uc@toc@ha
2589 ; CHECK-NEXT: addis 5, 2, sc@toc@ha
2590 ; CHECK-NEXT: std 16, -128(1) # 8-byte Folded Spill
2591 ; CHECK-NEXT: std 17, -120(1) # 8-byte Folded Spill
2592 ; CHECK-NEXT: std 18, -112(1) # 8-byte Folded Spill
2593 ; CHECK-NEXT: std 19, -104(1) # 8-byte Folded Spill
2594 ; CHECK-NEXT: addi 4, 3, uc@toc@l
2595 ; CHECK-NEXT: addi 7, 5, sc@toc@l
2596 ; CHECK-NEXT: lbz 6, uc@toc@l(3)
2597 ; CHECK-NEXT: std 20, -96(1) # 8-byte Folded Spill
2598 ; CHECK-NEXT: std 21, -88(1) # 8-byte Folded Spill
2599 ; CHECK-NEXT: std 22, -80(1) # 8-byte Folded Spill
2600 ; CHECK-NEXT: std 23, -72(1) # 8-byte Folded Spill
2601 ; CHECK-NEXT: std 24, -64(1) # 8-byte Folded Spill
2602 ; CHECK-NEXT: std 25, -56(1) # 8-byte Folded Spill
2603 ; CHECK-NEXT: std 26, -48(1) # 8-byte Folded Spill
2604 ; CHECK-NEXT: std 27, -40(1) # 8-byte Folded Spill
2605 ; CHECK-NEXT: std 28, -32(1) # 8-byte Folded Spill
2606 ; CHECK-NEXT: std 29, -24(1) # 8-byte Folded Spill
2607 ; CHECK-NEXT: std 30, -16(1) # 8-byte Folded Spill
2609 ; CHECK-NEXT: .LBB2_1: # %entry
2611 ; CHECK-NEXT: lbarx 8, 0, 7
2612 ; CHECK-NEXT: add 8, 6, 8
2613 ; CHECK-NEXT: stbcx. 8, 0, 7
2614 ; CHECK-NEXT: bne 0, .LBB2_1
2615 ; CHECK-NEXT: # %bb.2: # %entry
2616 ; CHECK-NEXT: lwsync
2617 ; CHECK-NEXT: stb 8, sc@toc@l(5)
2618 ; CHECK-NEXT: lbz 6, uc@toc@l(3)
2620 ; CHECK-NEXT: .LBB2_3: # %entry
2622 ; CHECK-NEXT: lbarx 8, 0, 4
2623 ; CHECK-NEXT: add 8, 6, 8
2624 ; CHECK-NEXT: stbcx. 8, 0, 4
2625 ; CHECK-NEXT: bne 0, .LBB2_3
2626 ; CHECK-NEXT: # %bb.4: # %entry
2627 ; CHECK-NEXT: addis 6, 2, ss@toc@ha
2628 ; CHECK-NEXT: lwsync
2629 ; CHECK-NEXT: stb 8, uc@toc@l(3)
2630 ; CHECK-NEXT: clrlwi 8, 8, 24
2631 ; CHECK-NEXT: addi 9, 6, ss@toc@l
2633 ; CHECK-NEXT: .LBB2_5: # %entry
2635 ; CHECK-NEXT: lharx 10, 0, 9
2636 ; CHECK-NEXT: add 10, 8, 10
2637 ; CHECK-NEXT: sthcx. 10, 0, 9
2638 ; CHECK-NEXT: bne 0, .LBB2_5
2639 ; CHECK-NEXT: # %bb.6: # %entry
2640 ; CHECK-NEXT: lwsync
2641 ; CHECK-NEXT: sth 10, ss@toc@l(6)
2642 ; CHECK-NEXT: addis 8, 2, us@toc@ha
2643 ; CHECK-NEXT: lbz 10, uc@toc@l(3)
2644 ; CHECK-NEXT: addi 11, 8, us@toc@l
2646 ; CHECK-NEXT: .LBB2_7: # %entry
2648 ; CHECK-NEXT: lharx 12, 0, 11
2649 ; CHECK-NEXT: add 12, 10, 12
2650 ; CHECK-NEXT: sthcx. 12, 0, 11
2651 ; CHECK-NEXT: bne 0, .LBB2_7
2652 ; CHECK-NEXT: # %bb.8: # %entry
2653 ; CHECK-NEXT: lwsync
2654 ; CHECK-NEXT: sth 12, us@toc@l(8)
2655 ; CHECK-NEXT: addis 10, 2, si@toc@ha
2656 ; CHECK-NEXT: lbz 12, uc@toc@l(3)
2657 ; CHECK-NEXT: addi 0, 10, si@toc@l
2659 ; CHECK-NEXT: .LBB2_9: # %entry
2661 ; CHECK-NEXT: lwarx 30, 0, 0
2662 ; CHECK-NEXT: add 30, 12, 30
2663 ; CHECK-NEXT: stwcx. 30, 0, 0
2664 ; CHECK-NEXT: bne 0, .LBB2_9
2665 ; CHECK-NEXT: # %bb.10: # %entry
2666 ; CHECK-NEXT: lwsync
2667 ; CHECK-NEXT: stw 30, si@toc@l(10)
2668 ; CHECK-NEXT: addis 12, 2, ui@toc@ha
2669 ; CHECK-NEXT: lbz 30, uc@toc@l(3)
2670 ; CHECK-NEXT: addi 29, 12, ui@toc@l
2672 ; CHECK-NEXT: .LBB2_11: # %entry
2674 ; CHECK-NEXT: lwarx 28, 0, 29
2675 ; CHECK-NEXT: add 28, 30, 28
2676 ; CHECK-NEXT: stwcx. 28, 0, 29
2677 ; CHECK-NEXT: bne 0, .LBB2_11
2678 ; CHECK-NEXT: # %bb.12: # %entry
2679 ; CHECK-NEXT: lwsync
2680 ; CHECK-NEXT: stw 28, ui@toc@l(12)
2681 ; CHECK-NEXT: addis 30, 2, sll@toc@ha
2682 ; CHECK-NEXT: lbz 28, uc@toc@l(3)
2683 ; CHECK-NEXT: addi 27, 30, sll@toc@l
2685 ; CHECK-NEXT: .LBB2_13: # %entry
2687 ; CHECK-NEXT: ldarx 26, 0, 27
2688 ; CHECK-NEXT: add 26, 28, 26
2689 ; CHECK-NEXT: stdcx. 26, 0, 27
2690 ; CHECK-NEXT: bne 0, .LBB2_13
2691 ; CHECK-NEXT: # %bb.14: # %entry
2692 ; CHECK-NEXT: lwsync
2693 ; CHECK-NEXT: addis 28, 2, ull@toc@ha
2694 ; CHECK-NEXT: std 26, sll@toc@l(30)
2695 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2696 ; CHECK-NEXT: addi 26, 28, ull@toc@l
2698 ; CHECK-NEXT: .LBB2_15: # %entry
2700 ; CHECK-NEXT: ldarx 24, 0, 26
2701 ; CHECK-NEXT: add 24, 25, 24
2702 ; CHECK-NEXT: stdcx. 24, 0, 26
2703 ; CHECK-NEXT: bne 0, .LBB2_15
2704 ; CHECK-NEXT: # %bb.16: # %entry
2705 ; CHECK-NEXT: lwsync
2706 ; CHECK-NEXT: std 24, ull@toc@l(28)
2707 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2709 ; CHECK-NEXT: .LBB2_17: # %entry
2711 ; CHECK-NEXT: lbarx 24, 0, 7
2712 ; CHECK-NEXT: sub 24, 24, 25
2713 ; CHECK-NEXT: stbcx. 24, 0, 7
2714 ; CHECK-NEXT: bne 0, .LBB2_17
2715 ; CHECK-NEXT: # %bb.18: # %entry
2716 ; CHECK-NEXT: lwsync
2717 ; CHECK-NEXT: stb 24, sc@toc@l(5)
2718 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2720 ; CHECK-NEXT: .LBB2_19: # %entry
2722 ; CHECK-NEXT: lbarx 24, 0, 4
2723 ; CHECK-NEXT: sub 24, 24, 25
2724 ; CHECK-NEXT: stbcx. 24, 0, 4
2725 ; CHECK-NEXT: bne 0, .LBB2_19
2726 ; CHECK-NEXT: # %bb.20: # %entry
2727 ; CHECK-NEXT: lwsync
2728 ; CHECK-NEXT: stb 24, uc@toc@l(3)
2729 ; CHECK-NEXT: clrlwi 25, 24, 24
2731 ; CHECK-NEXT: .LBB2_21: # %entry
2733 ; CHECK-NEXT: lharx 24, 0, 9
2734 ; CHECK-NEXT: sub 24, 24, 25
2735 ; CHECK-NEXT: sthcx. 24, 0, 9
2736 ; CHECK-NEXT: bne 0, .LBB2_21
2737 ; CHECK-NEXT: # %bb.22: # %entry
2738 ; CHECK-NEXT: lwsync
2739 ; CHECK-NEXT: sth 24, ss@toc@l(6)
2740 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2742 ; CHECK-NEXT: .LBB2_23: # %entry
2744 ; CHECK-NEXT: lharx 24, 0, 11
2745 ; CHECK-NEXT: sub 24, 24, 25
2746 ; CHECK-NEXT: sthcx. 24, 0, 11
2747 ; CHECK-NEXT: bne 0, .LBB2_23
2748 ; CHECK-NEXT: # %bb.24: # %entry
2749 ; CHECK-NEXT: lwsync
2750 ; CHECK-NEXT: sth 24, us@toc@l(8)
2751 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2753 ; CHECK-NEXT: .LBB2_25: # %entry
2755 ; CHECK-NEXT: lwarx 24, 0, 0
2756 ; CHECK-NEXT: sub 24, 24, 25
2757 ; CHECK-NEXT: stwcx. 24, 0, 0
2758 ; CHECK-NEXT: bne 0, .LBB2_25
2759 ; CHECK-NEXT: # %bb.26: # %entry
2760 ; CHECK-NEXT: lwsync
2761 ; CHECK-NEXT: stw 24, si@toc@l(10)
2762 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2764 ; CHECK-NEXT: .LBB2_27: # %entry
2766 ; CHECK-NEXT: lwarx 24, 0, 29
2767 ; CHECK-NEXT: sub 24, 24, 25
2768 ; CHECK-NEXT: stwcx. 24, 0, 29
2769 ; CHECK-NEXT: bne 0, .LBB2_27
2770 ; CHECK-NEXT: # %bb.28: # %entry
2771 ; CHECK-NEXT: lwsync
2772 ; CHECK-NEXT: stw 24, ui@toc@l(12)
2773 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2775 ; CHECK-NEXT: .LBB2_29: # %entry
2777 ; CHECK-NEXT: ldarx 24, 0, 27
2778 ; CHECK-NEXT: sub 24, 24, 25
2779 ; CHECK-NEXT: stdcx. 24, 0, 27
2780 ; CHECK-NEXT: bne 0, .LBB2_29
2781 ; CHECK-NEXT: # %bb.30: # %entry
2782 ; CHECK-NEXT: lwsync
2783 ; CHECK-NEXT: std 24, sll@toc@l(30)
2784 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2786 ; CHECK-NEXT: .LBB2_31: # %entry
2788 ; CHECK-NEXT: ldarx 24, 0, 26
2789 ; CHECK-NEXT: sub 24, 24, 25
2790 ; CHECK-NEXT: stdcx. 24, 0, 26
2791 ; CHECK-NEXT: bne 0, .LBB2_31
2792 ; CHECK-NEXT: # %bb.32: # %entry
2793 ; CHECK-NEXT: lwsync
2794 ; CHECK-NEXT: std 24, ull@toc@l(28)
2795 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2797 ; CHECK-NEXT: .LBB2_33: # %entry
2799 ; CHECK-NEXT: lbarx 24, 0, 7
2800 ; CHECK-NEXT: or 24, 25, 24
2801 ; CHECK-NEXT: stbcx. 24, 0, 7
2802 ; CHECK-NEXT: bne 0, .LBB2_33
2803 ; CHECK-NEXT: # %bb.34: # %entry
2804 ; CHECK-NEXT: lwsync
2805 ; CHECK-NEXT: stb 24, sc@toc@l(5)
2806 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2808 ; CHECK-NEXT: .LBB2_35: # %entry
2810 ; CHECK-NEXT: lbarx 24, 0, 4
2811 ; CHECK-NEXT: or 24, 25, 24
2812 ; CHECK-NEXT: stbcx. 24, 0, 4
2813 ; CHECK-NEXT: bne 0, .LBB2_35
2814 ; CHECK-NEXT: # %bb.36: # %entry
2815 ; CHECK-NEXT: lwsync
2816 ; CHECK-NEXT: stb 24, uc@toc@l(3)
2817 ; CHECK-NEXT: clrlwi 25, 24, 24
2819 ; CHECK-NEXT: .LBB2_37: # %entry
2821 ; CHECK-NEXT: lharx 24, 0, 9
2822 ; CHECK-NEXT: or 24, 25, 24
2823 ; CHECK-NEXT: sthcx. 24, 0, 9
2824 ; CHECK-NEXT: bne 0, .LBB2_37
2825 ; CHECK-NEXT: # %bb.38: # %entry
2826 ; CHECK-NEXT: lwsync
2827 ; CHECK-NEXT: sth 24, ss@toc@l(6)
2828 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2830 ; CHECK-NEXT: .LBB2_39: # %entry
2832 ; CHECK-NEXT: lharx 24, 0, 11
2833 ; CHECK-NEXT: or 24, 25, 24
2834 ; CHECK-NEXT: sthcx. 24, 0, 11
2835 ; CHECK-NEXT: bne 0, .LBB2_39
2836 ; CHECK-NEXT: # %bb.40: # %entry
2837 ; CHECK-NEXT: lwsync
2838 ; CHECK-NEXT: sth 24, us@toc@l(8)
2839 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2841 ; CHECK-NEXT: .LBB2_41: # %entry
2843 ; CHECK-NEXT: lwarx 24, 0, 0
2844 ; CHECK-NEXT: or 24, 25, 24
2845 ; CHECK-NEXT: stwcx. 24, 0, 0
2846 ; CHECK-NEXT: bne 0, .LBB2_41
2847 ; CHECK-NEXT: # %bb.42: # %entry
2848 ; CHECK-NEXT: lwsync
2849 ; CHECK-NEXT: stw 24, si@toc@l(10)
2850 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2852 ; CHECK-NEXT: .LBB2_43: # %entry
2854 ; CHECK-NEXT: lwarx 24, 0, 29
2855 ; CHECK-NEXT: or 24, 25, 24
2856 ; CHECK-NEXT: stwcx. 24, 0, 29
2857 ; CHECK-NEXT: bne 0, .LBB2_43
2858 ; CHECK-NEXT: # %bb.44: # %entry
2859 ; CHECK-NEXT: lwsync
2860 ; CHECK-NEXT: stw 24, ui@toc@l(12)
2861 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2863 ; CHECK-NEXT: .LBB2_45: # %entry
2865 ; CHECK-NEXT: ldarx 24, 0, 27
2866 ; CHECK-NEXT: or 24, 25, 24
2867 ; CHECK-NEXT: stdcx. 24, 0, 27
2868 ; CHECK-NEXT: bne 0, .LBB2_45
2869 ; CHECK-NEXT: # %bb.46: # %entry
2870 ; CHECK-NEXT: lwsync
2871 ; CHECK-NEXT: std 24, sll@toc@l(30)
2872 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2874 ; CHECK-NEXT: .LBB2_47: # %entry
2876 ; CHECK-NEXT: ldarx 24, 0, 26
2877 ; CHECK-NEXT: or 24, 25, 24
2878 ; CHECK-NEXT: stdcx. 24, 0, 26
2879 ; CHECK-NEXT: bne 0, .LBB2_47
2880 ; CHECK-NEXT: # %bb.48: # %entry
2881 ; CHECK-NEXT: lwsync
2882 ; CHECK-NEXT: std 24, ull@toc@l(28)
2883 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2885 ; CHECK-NEXT: .LBB2_49: # %entry
2887 ; CHECK-NEXT: lbarx 24, 0, 7
2888 ; CHECK-NEXT: xor 24, 25, 24
2889 ; CHECK-NEXT: stbcx. 24, 0, 7
2890 ; CHECK-NEXT: bne 0, .LBB2_49
2891 ; CHECK-NEXT: # %bb.50: # %entry
2892 ; CHECK-NEXT: lwsync
2893 ; CHECK-NEXT: stb 24, sc@toc@l(5)
2894 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2896 ; CHECK-NEXT: .LBB2_51: # %entry
2898 ; CHECK-NEXT: lbarx 24, 0, 4
2899 ; CHECK-NEXT: xor 24, 25, 24
2900 ; CHECK-NEXT: stbcx. 24, 0, 4
2901 ; CHECK-NEXT: bne 0, .LBB2_51
2902 ; CHECK-NEXT: # %bb.52: # %entry
2903 ; CHECK-NEXT: lwsync
2904 ; CHECK-NEXT: stb 24, uc@toc@l(3)
2905 ; CHECK-NEXT: clrlwi 25, 24, 24
2907 ; CHECK-NEXT: .LBB2_53: # %entry
2909 ; CHECK-NEXT: lharx 24, 0, 9
2910 ; CHECK-NEXT: xor 24, 25, 24
2911 ; CHECK-NEXT: sthcx. 24, 0, 9
2912 ; CHECK-NEXT: bne 0, .LBB2_53
2913 ; CHECK-NEXT: # %bb.54: # %entry
2914 ; CHECK-NEXT: lwsync
2915 ; CHECK-NEXT: sth 24, ss@toc@l(6)
2916 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2918 ; CHECK-NEXT: .LBB2_55: # %entry
2920 ; CHECK-NEXT: lharx 24, 0, 11
2921 ; CHECK-NEXT: xor 24, 25, 24
2922 ; CHECK-NEXT: sthcx. 24, 0, 11
2923 ; CHECK-NEXT: bne 0, .LBB2_55
2924 ; CHECK-NEXT: # %bb.56: # %entry
2925 ; CHECK-NEXT: lwsync
2926 ; CHECK-NEXT: sth 24, us@toc@l(8)
2927 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2929 ; CHECK-NEXT: .LBB2_57: # %entry
2931 ; CHECK-NEXT: lwarx 24, 0, 0
2932 ; CHECK-NEXT: xor 24, 25, 24
2933 ; CHECK-NEXT: stwcx. 24, 0, 0
2934 ; CHECK-NEXT: bne 0, .LBB2_57
2935 ; CHECK-NEXT: # %bb.58: # %entry
2936 ; CHECK-NEXT: lwsync
2937 ; CHECK-NEXT: stw 24, si@toc@l(10)
2938 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2940 ; CHECK-NEXT: .LBB2_59: # %entry
2942 ; CHECK-NEXT: lwarx 24, 0, 29
2943 ; CHECK-NEXT: xor 24, 25, 24
2944 ; CHECK-NEXT: stwcx. 24, 0, 29
2945 ; CHECK-NEXT: bne 0, .LBB2_59
2946 ; CHECK-NEXT: # %bb.60: # %entry
2947 ; CHECK-NEXT: lwsync
2948 ; CHECK-NEXT: stw 24, ui@toc@l(12)
2949 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2951 ; CHECK-NEXT: .LBB2_61: # %entry
2953 ; CHECK-NEXT: ldarx 24, 0, 27
2954 ; CHECK-NEXT: xor 24, 25, 24
2955 ; CHECK-NEXT: stdcx. 24, 0, 27
2956 ; CHECK-NEXT: bne 0, .LBB2_61
2957 ; CHECK-NEXT: # %bb.62: # %entry
2958 ; CHECK-NEXT: lwsync
2959 ; CHECK-NEXT: std 24, sll@toc@l(30)
2960 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2962 ; CHECK-NEXT: .LBB2_63: # %entry
2964 ; CHECK-NEXT: ldarx 24, 0, 26
2965 ; CHECK-NEXT: xor 24, 25, 24
2966 ; CHECK-NEXT: stdcx. 24, 0, 26
2967 ; CHECK-NEXT: bne 0, .LBB2_63
2968 ; CHECK-NEXT: # %bb.64: # %entry
2969 ; CHECK-NEXT: lwsync
2970 ; CHECK-NEXT: std 24, ull@toc@l(28)
2971 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2973 ; CHECK-NEXT: .LBB2_65: # %entry
2975 ; CHECK-NEXT: lbarx 24, 0, 7
2976 ; CHECK-NEXT: nand 24, 25, 24
2977 ; CHECK-NEXT: stbcx. 24, 0, 7
2978 ; CHECK-NEXT: bne 0, .LBB2_65
2979 ; CHECK-NEXT: # %bb.66: # %entry
2980 ; CHECK-NEXT: lwsync
2981 ; CHECK-NEXT: stb 24, sc@toc@l(5)
2982 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
2984 ; CHECK-NEXT: .LBB2_67: # %entry
2986 ; CHECK-NEXT: lbarx 24, 0, 4
2987 ; CHECK-NEXT: nand 24, 25, 24
2988 ; CHECK-NEXT: stbcx. 24, 0, 4
2989 ; CHECK-NEXT: bne 0, .LBB2_67
2990 ; CHECK-NEXT: # %bb.68: # %entry
2991 ; CHECK-NEXT: lwsync
2992 ; CHECK-NEXT: stb 24, uc@toc@l(3)
2993 ; CHECK-NEXT: clrlwi 25, 24, 24
2995 ; CHECK-NEXT: .LBB2_69: # %entry
2997 ; CHECK-NEXT: lharx 24, 0, 9
2998 ; CHECK-NEXT: nand 24, 25, 24
2999 ; CHECK-NEXT: sthcx. 24, 0, 9
3000 ; CHECK-NEXT: bne 0, .LBB2_69
3001 ; CHECK-NEXT: # %bb.70: # %entry
3002 ; CHECK-NEXT: lwsync
3003 ; CHECK-NEXT: sth 24, ss@toc@l(6)
3004 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
3006 ; CHECK-NEXT: .LBB2_71: # %entry
3008 ; CHECK-NEXT: lharx 24, 0, 11
3009 ; CHECK-NEXT: nand 24, 25, 24
3010 ; CHECK-NEXT: sthcx. 24, 0, 11
3011 ; CHECK-NEXT: bne 0, .LBB2_71
3012 ; CHECK-NEXT: # %bb.72: # %entry
3013 ; CHECK-NEXT: lwsync
3014 ; CHECK-NEXT: sth 24, us@toc@l(8)
3015 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
3017 ; CHECK-NEXT: .LBB2_73: # %entry
3019 ; CHECK-NEXT: lwarx 24, 0, 0
3020 ; CHECK-NEXT: nand 24, 25, 24
3021 ; CHECK-NEXT: stwcx. 24, 0, 0
3022 ; CHECK-NEXT: bne 0, .LBB2_73
3023 ; CHECK-NEXT: # %bb.74: # %entry
3024 ; CHECK-NEXT: lwsync
3025 ; CHECK-NEXT: stw 24, si@toc@l(10)
3026 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
3028 ; CHECK-NEXT: .LBB2_75: # %entry
3030 ; CHECK-NEXT: lwarx 24, 0, 29
3031 ; CHECK-NEXT: nand 24, 25, 24
3032 ; CHECK-NEXT: stwcx. 24, 0, 29
3033 ; CHECK-NEXT: bne 0, .LBB2_75
3034 ; CHECK-NEXT: # %bb.76: # %entry
3035 ; CHECK-NEXT: lwsync
3036 ; CHECK-NEXT: stw 24, ui@toc@l(12)
3037 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
3039 ; CHECK-NEXT: .LBB2_77: # %entry
3041 ; CHECK-NEXT: ldarx 24, 0, 27
3042 ; CHECK-NEXT: nand 24, 25, 24
3043 ; CHECK-NEXT: stdcx. 24, 0, 27
3044 ; CHECK-NEXT: bne 0, .LBB2_77
3045 ; CHECK-NEXT: # %bb.78: # %entry
3046 ; CHECK-NEXT: lwsync
3047 ; CHECK-NEXT: std 24, sll@toc@l(30)
3048 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
3050 ; CHECK-NEXT: .LBB2_79: # %entry
3052 ; CHECK-NEXT: ldarx 24, 0, 26
3053 ; CHECK-NEXT: nand 24, 25, 24
3054 ; CHECK-NEXT: stdcx. 24, 0, 26
3055 ; CHECK-NEXT: bne 0, .LBB2_79
3056 ; CHECK-NEXT: # %bb.80: # %entry
3057 ; CHECK-NEXT: lwsync
3058 ; CHECK-NEXT: std 24, ull@toc@l(28)
3059 ; CHECK-NEXT: addis 24, 2, u128@toc@ha
3060 ; CHECK-NEXT: li 22, 0
3061 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
3063 ; CHECK-NEXT: addi 23, 24, u128@toc@l
3064 ; CHECK-NEXT: .LBB2_81: # %entry
3066 ; CHECK-NEXT: lqarx 20, 0, 23
3067 ; CHECK-NEXT: nand 19, 25, 21
3068 ; CHECK-NEXT: nand 18, 22, 20
3069 ; CHECK-NEXT: stqcx. 18, 0, 23
3070 ; CHECK-NEXT: bne 0, .LBB2_81
3071 ; CHECK-NEXT: # %bb.82: # %entry
3072 ; CHECK-NEXT: lwsync
3073 ; CHECK-NEXT: lbz 20, uc@toc@l(3)
3074 ; CHECK-NEXT: nand 25, 21, 25
3075 ; CHECK-NEXT: li 21, -1
3076 ; CHECK-NEXT: std 21, 8(23)
3077 ; CHECK-NEXT: std 25, u128@toc@l(24)
3078 ; CHECK-NEXT: addis 25, 2, s128@toc@ha
3080 ; CHECK-NEXT: addi 24, 25, s128@toc@l
3081 ; CHECK-NEXT: .LBB2_83: # %entry
3083 ; CHECK-NEXT: lqarx 18, 0, 24
3084 ; CHECK-NEXT: nand 17, 20, 19
3085 ; CHECK-NEXT: nand 16, 22, 18
3086 ; CHECK-NEXT: stqcx. 16, 0, 24
3087 ; CHECK-NEXT: bne 0, .LBB2_83
3088 ; CHECK-NEXT: # %bb.84: # %entry
3089 ; CHECK-NEXT: lwsync
3090 ; CHECK-NEXT: std 21, 8(24)
3091 ; CHECK-NEXT: nand 23, 19, 20
3092 ; CHECK-NEXT: std 23, s128@toc@l(25)
3093 ; CHECK-NEXT: lbz 25, uc@toc@l(3)
3095 ; CHECK-NEXT: .LBB2_85: # %entry
3097 ; CHECK-NEXT: lbarx 24, 0, 7
3098 ; CHECK-NEXT: and 24, 25, 24
3099 ; CHECK-NEXT: stbcx. 24, 0, 7
3100 ; CHECK-NEXT: bne 0, .LBB2_85
3101 ; CHECK-NEXT: # %bb.86: # %entry
3102 ; CHECK-NEXT: lwsync
3103 ; CHECK-NEXT: stb 24, sc@toc@l(5)
3104 ; CHECK-NEXT: lbz 7, uc@toc@l(3)
3106 ; CHECK-NEXT: .LBB2_87: # %entry
3108 ; CHECK-NEXT: lbarx 5, 0, 4
3109 ; CHECK-NEXT: and 5, 7, 5
3110 ; CHECK-NEXT: stbcx. 5, 0, 4
3111 ; CHECK-NEXT: bne 0, .LBB2_87
3112 ; CHECK-NEXT: # %bb.88: # %entry
3113 ; CHECK-NEXT: lwsync
3114 ; CHECK-NEXT: stb 5, uc@toc@l(3)
3116 ; CHECK-NEXT: .LBB2_89: # %entry
3118 ; CHECK-NEXT: lharx 4, 0, 9
3119 ; CHECK-NEXT: and 4, 5, 4
3120 ; CHECK-NEXT: sthcx. 4, 0, 9
3121 ; CHECK-NEXT: bne 0, .LBB2_89
3122 ; CHECK-NEXT: # %bb.90: # %entry
3123 ; CHECK-NEXT: lwsync
3124 ; CHECK-NEXT: sth 4, ss@toc@l(6)
3125 ; CHECK-NEXT: lbz 4, uc@toc@l(3)
3127 ; CHECK-NEXT: .LBB2_91: # %entry
3129 ; CHECK-NEXT: lharx 5, 0, 11
3130 ; CHECK-NEXT: and 5, 4, 5
3131 ; CHECK-NEXT: sthcx. 5, 0, 11
3132 ; CHECK-NEXT: bne 0, .LBB2_91
3133 ; CHECK-NEXT: # %bb.92: # %entry
3134 ; CHECK-NEXT: lwsync
3135 ; CHECK-NEXT: sth 5, us@toc@l(8)
3136 ; CHECK-NEXT: lbz 4, uc@toc@l(3)
3138 ; CHECK-NEXT: .LBB2_93: # %entry
3140 ; CHECK-NEXT: lwarx 5, 0, 0
3141 ; CHECK-NEXT: and 5, 4, 5
3142 ; CHECK-NEXT: stwcx. 5, 0, 0
3143 ; CHECK-NEXT: bne 0, .LBB2_93
3144 ; CHECK-NEXT: # %bb.94: # %entry
3145 ; CHECK-NEXT: lwsync
3146 ; CHECK-NEXT: stw 5, si@toc@l(10)
3147 ; CHECK-NEXT: lbz 4, uc@toc@l(3)
3149 ; CHECK-NEXT: .LBB2_95: # %entry
3151 ; CHECK-NEXT: lwarx 5, 0, 29
3152 ; CHECK-NEXT: and 5, 4, 5
3153 ; CHECK-NEXT: stwcx. 5, 0, 29
3154 ; CHECK-NEXT: bne 0, .LBB2_95
3155 ; CHECK-NEXT: # %bb.96: # %entry
3156 ; CHECK-NEXT: lwsync
3157 ; CHECK-NEXT: stw 5, ui@toc@l(12)
3158 ; CHECK-NEXT: lbz 4, uc@toc@l(3)
3160 ; CHECK-NEXT: .LBB2_97: # %entry
3162 ; CHECK-NEXT: ldarx 5, 0, 27
3163 ; CHECK-NEXT: and 5, 4, 5
3164 ; CHECK-NEXT: stdcx. 5, 0, 27
3165 ; CHECK-NEXT: bne 0, .LBB2_97
3166 ; CHECK-NEXT: # %bb.98: # %entry
3167 ; CHECK-NEXT: lwsync
3168 ; CHECK-NEXT: std 5, sll@toc@l(30)
3169 ; CHECK-NEXT: lbz 3, uc@toc@l(3)
3171 ; CHECK-NEXT: .LBB2_99: # %entry
3173 ; CHECK-NEXT: ldarx 4, 0, 26
3174 ; CHECK-NEXT: and 4, 3, 4
3175 ; CHECK-NEXT: stdcx. 4, 0, 26
3176 ; CHECK-NEXT: bne 0, .LBB2_99
3177 ; CHECK-NEXT: # %bb.100: # %entry
3178 ; CHECK-NEXT: lwsync
3179 ; CHECK-NEXT: std 4, ull@toc@l(28)
3180 ; CHECK-NEXT: ld 30, -16(1) # 8-byte Folded Reload
3181 ; CHECK-NEXT: ld 29, -24(1) # 8-byte Folded Reload
3182 ; CHECK-NEXT: ld 28, -32(1) # 8-byte Folded Reload
3183 ; CHECK-NEXT: ld 27, -40(1) # 8-byte Folded Reload
3184 ; CHECK-NEXT: ld 26, -48(1) # 8-byte Folded Reload
3185 ; CHECK-NEXT: ld 25, -56(1) # 8-byte Folded Reload
3186 ; CHECK-NEXT: ld 24, -64(1) # 8-byte Folded Reload
3187 ; CHECK-NEXT: ld 23, -72(1) # 8-byte Folded Reload
3188 ; CHECK-NEXT: ld 22, -80(1) # 8-byte Folded Reload
3189 ; CHECK-NEXT: ld 21, -88(1) # 8-byte Folded Reload
3190 ; CHECK-NEXT: ld 20, -96(1) # 8-byte Folded Reload
3191 ; CHECK-NEXT: ld 19, -104(1) # 8-byte Folded Reload
3192 ; CHECK-NEXT: ld 18, -112(1) # 8-byte Folded Reload
3193 ; CHECK-NEXT: ld 17, -120(1) # 8-byte Folded Reload
3194 ; CHECK-NEXT: ld 16, -128(1) # 8-byte Folded Reload
3197 ; AIX32-LABEL: test_op_and_fetch:
3198 ; AIX32: # %bb.0: # %entry
3199 ; AIX32-NEXT: mflr 0
3200 ; AIX32-NEXT: stwu 1, -176(1)
3201 ; AIX32-NEXT: stw 0, 184(1)
3202 ; AIX32-NEXT: stw 24, 144(1) # 4-byte Folded Spill
3203 ; AIX32-NEXT: lwz 24, L..C0(2) # @sc
3204 ; AIX32-NEXT: stw 26, 152(1) # 4-byte Folded Spill
3205 ; AIX32-NEXT: lwz 26, L..C1(2) # @uc
3206 ; AIX32-NEXT: stw 23, 140(1) # 4-byte Folded Spill
3207 ; AIX32-NEXT: li 5, 255
3208 ; AIX32-NEXT: stw 13, 100(1) # 4-byte Folded Spill
3209 ; AIX32-NEXT: rlwinm 4, 24, 3, 27, 28
3210 ; AIX32-NEXT: stw 14, 104(1) # 4-byte Folded Spill
3211 ; AIX32-NEXT: lbz 3, 0(26)
3212 ; AIX32-NEXT: xori 23, 4, 24
3213 ; AIX32-NEXT: stw 15, 108(1) # 4-byte Folded Spill
3214 ; AIX32-NEXT: stw 16, 112(1) # 4-byte Folded Spill
3215 ; AIX32-NEXT: stw 17, 116(1) # 4-byte Folded Spill
3216 ; AIX32-NEXT: stw 18, 120(1) # 4-byte Folded Spill
3217 ; AIX32-NEXT: stw 19, 124(1) # 4-byte Folded Spill
3218 ; AIX32-NEXT: stw 20, 128(1) # 4-byte Folded Spill
3219 ; AIX32-NEXT: stw 21, 132(1) # 4-byte Folded Spill
3220 ; AIX32-NEXT: stw 22, 136(1) # 4-byte Folded Spill
3221 ; AIX32-NEXT: stw 25, 148(1) # 4-byte Folded Spill
3222 ; AIX32-NEXT: stw 27, 156(1) # 4-byte Folded Spill
3223 ; AIX32-NEXT: stw 28, 160(1) # 4-byte Folded Spill
3224 ; AIX32-NEXT: stw 29, 164(1) # 4-byte Folded Spill
3225 ; AIX32-NEXT: stw 30, 168(1) # 4-byte Folded Spill
3226 ; AIX32-NEXT: stw 31, 172(1) # 4-byte Folded Spill
3227 ; AIX32-NEXT: rlwinm 22, 24, 0, 0, 29
3228 ; AIX32-NEXT: li 25, -1
3229 ; AIX32-NEXT: slw 4, 3, 23
3230 ; AIX32-NEXT: slw 6, 5, 23
3232 ; AIX32-NEXT: L..BB2_1: # %entry
3234 ; AIX32-NEXT: lwarx 5, 0, 22
3235 ; AIX32-NEXT: add 7, 4, 5
3236 ; AIX32-NEXT: andc 8, 5, 6
3237 ; AIX32-NEXT: and 7, 7, 6
3238 ; AIX32-NEXT: or 7, 7, 8
3239 ; AIX32-NEXT: stwcx. 7, 0, 22
3240 ; AIX32-NEXT: bne 0, L..BB2_1
3241 ; AIX32-NEXT: # %bb.2: # %entry
3242 ; AIX32-NEXT: srw 4, 5, 23
3243 ; AIX32-NEXT: lwsync
3244 ; AIX32-NEXT: rlwinm 5, 26, 3, 27, 28
3245 ; AIX32-NEXT: clrlwi 4, 4, 24
3246 ; AIX32-NEXT: xori 21, 5, 24
3247 ; AIX32-NEXT: li 5, 255
3248 ; AIX32-NEXT: add 4, 4, 3
3249 ; AIX32-NEXT: lbz 3, 0(26)
3250 ; AIX32-NEXT: rlwinm 19, 26, 0, 0, 29
3251 ; AIX32-NEXT: stb 4, 0(24)
3252 ; AIX32-NEXT: slw 5, 5, 21
3253 ; AIX32-NEXT: slw 4, 3, 21
3255 ; AIX32-NEXT: L..BB2_3: # %entry
3257 ; AIX32-NEXT: lwarx 6, 0, 19
3258 ; AIX32-NEXT: add 7, 4, 6
3259 ; AIX32-NEXT: andc 8, 6, 5
3260 ; AIX32-NEXT: and 7, 7, 5
3261 ; AIX32-NEXT: or 7, 7, 8
3262 ; AIX32-NEXT: stwcx. 7, 0, 19
3263 ; AIX32-NEXT: bne 0, L..BB2_3
3264 ; AIX32-NEXT: # %bb.4: # %entry
3265 ; AIX32-NEXT: lwz 9, L..C2(2) # @ss
3266 ; AIX32-NEXT: srw 4, 6, 21
3267 ; AIX32-NEXT: li 5, 0
3268 ; AIX32-NEXT: lwsync
3269 ; AIX32-NEXT: clrlwi 4, 4, 24
3270 ; AIX32-NEXT: ori 5, 5, 65535
3271 ; AIX32-NEXT: add 3, 4, 3
3272 ; AIX32-NEXT: rlwinm 4, 9, 3, 27, 27
3273 ; AIX32-NEXT: stb 3, 0(26)
3274 ; AIX32-NEXT: clrlwi 3, 3, 24
3275 ; AIX32-NEXT: xori 18, 4, 16
3277 ; AIX32-NEXT: rlwinm 17, 9, 0, 0, 29
3278 ; AIX32-NEXT: slw 4, 3, 18
3279 ; AIX32-NEXT: slw 5, 5, 18
3280 ; AIX32-NEXT: L..BB2_5: # %entry
3282 ; AIX32-NEXT: lwarx 6, 0, 17
3283 ; AIX32-NEXT: add 7, 4, 6
3284 ; AIX32-NEXT: andc 8, 6, 5
3285 ; AIX32-NEXT: and 7, 7, 5
3286 ; AIX32-NEXT: or 7, 7, 8
3287 ; AIX32-NEXT: stwcx. 7, 0, 17
3288 ; AIX32-NEXT: bne 0, L..BB2_5
3289 ; AIX32-NEXT: # %bb.6: # %entry
3290 ; AIX32-NEXT: srw 4, 6, 18
3291 ; AIX32-NEXT: lwz 20, L..C3(2) # @us
3292 ; AIX32-NEXT: lwsync
3293 ; AIX32-NEXT: li 5, 0
3294 ; AIX32-NEXT: clrlwi 4, 4, 16
3295 ; AIX32-NEXT: ori 5, 5, 65535
3296 ; AIX32-NEXT: add 3, 4, 3
3297 ; AIX32-NEXT: sth 3, 0(9)
3298 ; AIX32-NEXT: lbz 3, 0(26)
3299 ; AIX32-NEXT: rlwinm 4, 20, 3, 27, 27
3300 ; AIX32-NEXT: xori 15, 4, 16
3301 ; AIX32-NEXT: rlwinm 14, 20, 0, 0, 29
3303 ; AIX32-NEXT: slw 4, 3, 15
3304 ; AIX32-NEXT: slw 5, 5, 15
3305 ; AIX32-NEXT: L..BB2_7: # %entry
3307 ; AIX32-NEXT: lwarx 6, 0, 14
3308 ; AIX32-NEXT: add 7, 4, 6
3309 ; AIX32-NEXT: andc 8, 6, 5
3310 ; AIX32-NEXT: and 7, 7, 5
3311 ; AIX32-NEXT: or 7, 7, 8
3312 ; AIX32-NEXT: stwcx. 7, 0, 14
3313 ; AIX32-NEXT: bne 0, L..BB2_7
3314 ; AIX32-NEXT: # %bb.8: # %entry
3315 ; AIX32-NEXT: srw 4, 6, 15
3316 ; AIX32-NEXT: lwsync
3317 ; AIX32-NEXT: lwz 13, L..C4(2) # @si
3318 ; AIX32-NEXT: clrlwi 4, 4, 16
3319 ; AIX32-NEXT: add 3, 4, 3
3320 ; AIX32-NEXT: sth 3, 0(20)
3321 ; AIX32-NEXT: lbz 3, 0(26)
3323 ; AIX32-NEXT: L..BB2_9: # %entry
3325 ; AIX32-NEXT: lwarx 4, 0, 13
3326 ; AIX32-NEXT: add 4, 3, 4
3327 ; AIX32-NEXT: stwcx. 4, 0, 13
3328 ; AIX32-NEXT: bne 0, L..BB2_9
3329 ; AIX32-NEXT: # %bb.10: # %entry
3330 ; AIX32-NEXT: stw 9, 60(1) # 4-byte Folded Spill
3331 ; AIX32-NEXT: lwz 16, L..C5(2) # @ui
3332 ; AIX32-NEXT: lwsync
3333 ; AIX32-NEXT: stw 4, 0(13)
3334 ; AIX32-NEXT: lbz 3, 0(26)
3336 ; AIX32-NEXT: L..BB2_11: # %entry
3338 ; AIX32-NEXT: lwarx 4, 0, 16
3339 ; AIX32-NEXT: add 4, 3, 4
3340 ; AIX32-NEXT: stwcx. 4, 0, 16
3341 ; AIX32-NEXT: bne 0, L..BB2_11
3342 ; AIX32-NEXT: # %bb.12: # %entry
3343 ; AIX32-NEXT: lwsync
3344 ; AIX32-NEXT: lwz 31, L..C6(2) # @sll
3345 ; AIX32-NEXT: stw 4, 0(16)
3346 ; AIX32-NEXT: li 4, 0
3347 ; AIX32-NEXT: li 6, 5
3348 ; AIX32-NEXT: lbz 29, 0(26)
3349 ; AIX32-NEXT: li 27, 0
3350 ; AIX32-NEXT: mr 3, 31
3351 ; AIX32-NEXT: mr 5, 29
3352 ; AIX32-NEXT: bl .__atomic_fetch_add_8[PR]
3354 ; AIX32-NEXT: lwz 30, L..C7(2) # @ull
3355 ; AIX32-NEXT: lbz 28, 0(26)
3356 ; AIX32-NEXT: addc 7, 4, 29
3357 ; AIX32-NEXT: li 4, 0
3358 ; AIX32-NEXT: li 6, 5
3359 ; AIX32-NEXT: addze 8, 3
3360 ; AIX32-NEXT: stw 7, 4(31)
3361 ; AIX32-NEXT: mr 5, 28
3362 ; AIX32-NEXT: stw 8, 0(31)
3363 ; AIX32-NEXT: mr 3, 30
3364 ; AIX32-NEXT: bl .__atomic_fetch_add_8[PR]
3366 ; AIX32-NEXT: lbz 5, 0(26)
3367 ; AIX32-NEXT: addc 4, 4, 28
3368 ; AIX32-NEXT: addze 3, 3
3369 ; AIX32-NEXT: stw 4, 4(30)
3370 ; AIX32-NEXT: li 4, 255
3371 ; AIX32-NEXT: stw 3, 0(30)
3372 ; AIX32-NEXT: slw 3, 5, 23
3373 ; AIX32-NEXT: slw 4, 4, 23
3375 ; AIX32-NEXT: L..BB2_13: # %entry
3377 ; AIX32-NEXT: lwarx 6, 0, 22
3378 ; AIX32-NEXT: sub 7, 6, 3
3379 ; AIX32-NEXT: andc 8, 6, 4
3380 ; AIX32-NEXT: and 7, 7, 4
3381 ; AIX32-NEXT: or 7, 7, 8
3382 ; AIX32-NEXT: stwcx. 7, 0, 22
3383 ; AIX32-NEXT: bne 0, L..BB2_13
3384 ; AIX32-NEXT: # %bb.14: # %entry
3385 ; AIX32-NEXT: srw 3, 6, 23
3386 ; AIX32-NEXT: lwsync
3387 ; AIX32-NEXT: clrlwi 3, 3, 24
3388 ; AIX32-NEXT: sub 4, 3, 5
3389 ; AIX32-NEXT: lbz 3, 0(26)
3390 ; AIX32-NEXT: li 5, 255
3391 ; AIX32-NEXT: stb 4, 0(24)
3392 ; AIX32-NEXT: slw 5, 5, 21
3393 ; AIX32-NEXT: slw 4, 3, 21
3395 ; AIX32-NEXT: L..BB2_15: # %entry
3397 ; AIX32-NEXT: lwarx 6, 0, 19
3398 ; AIX32-NEXT: sub 7, 6, 4
3399 ; AIX32-NEXT: andc 8, 6, 5
3400 ; AIX32-NEXT: and 7, 7, 5
3401 ; AIX32-NEXT: or 7, 7, 8
3402 ; AIX32-NEXT: stwcx. 7, 0, 19
3403 ; AIX32-NEXT: bne 0, L..BB2_15
3404 ; AIX32-NEXT: # %bb.16: # %entry
3405 ; AIX32-NEXT: srw 4, 6, 21
3406 ; AIX32-NEXT: lwsync
3407 ; AIX32-NEXT: clrlwi 4, 4, 24
3408 ; AIX32-NEXT: sub 3, 4, 3
3409 ; AIX32-NEXT: li 4, 0
3410 ; AIX32-NEXT: stb 3, 0(26)
3411 ; AIX32-NEXT: clrlwi 3, 3, 24
3412 ; AIX32-NEXT: ori 5, 4, 65535
3413 ; AIX32-NEXT: slw 4, 3, 18
3414 ; AIX32-NEXT: slw 5, 5, 18
3416 ; AIX32-NEXT: L..BB2_17: # %entry
3418 ; AIX32-NEXT: lwarx 6, 0, 17
3419 ; AIX32-NEXT: sub 7, 6, 4
3420 ; AIX32-NEXT: andc 8, 6, 5
3421 ; AIX32-NEXT: and 7, 7, 5
3422 ; AIX32-NEXT: or 7, 7, 8
3423 ; AIX32-NEXT: stwcx. 7, 0, 17
3424 ; AIX32-NEXT: bne 0, L..BB2_17
3425 ; AIX32-NEXT: # %bb.18: # %entry
3426 ; AIX32-NEXT: srw 4, 6, 18
3427 ; AIX32-NEXT: lwsync
3428 ; AIX32-NEXT: li 5, 0
3429 ; AIX32-NEXT: clrlwi 4, 4, 16
3430 ; AIX32-NEXT: lwz 6, 60(1) # 4-byte Folded Reload
3431 ; AIX32-NEXT: ori 5, 5, 65535
3432 ; AIX32-NEXT: sub 4, 4, 3
3433 ; AIX32-NEXT: lbz 3, 0(26)
3434 ; AIX32-NEXT: slw 5, 5, 15
3435 ; AIX32-NEXT: sth 4, 0(6)
3436 ; AIX32-NEXT: slw 4, 3, 15
3438 ; AIX32-NEXT: L..BB2_19: # %entry
3440 ; AIX32-NEXT: lwarx 6, 0, 14
3441 ; AIX32-NEXT: sub 7, 6, 4
3442 ; AIX32-NEXT: andc 8, 6, 5
3443 ; AIX32-NEXT: and 7, 7, 5
3444 ; AIX32-NEXT: or 7, 7, 8
3445 ; AIX32-NEXT: stwcx. 7, 0, 14
3446 ; AIX32-NEXT: bne 0, L..BB2_19
3447 ; AIX32-NEXT: # %bb.20: # %entry
3448 ; AIX32-NEXT: srw 4, 6, 15
3449 ; AIX32-NEXT: lwsync
3450 ; AIX32-NEXT: clrlwi 4, 4, 16
3451 ; AIX32-NEXT: sub 3, 4, 3
3452 ; AIX32-NEXT: sth 3, 0(20)
3453 ; AIX32-NEXT: lbz 3, 0(26)
3455 ; AIX32-NEXT: L..BB2_21: # %entry
3457 ; AIX32-NEXT: lwarx 4, 0, 13
3458 ; AIX32-NEXT: sub 4, 4, 3
3459 ; AIX32-NEXT: stwcx. 4, 0, 13
3460 ; AIX32-NEXT: bne 0, L..BB2_21
3461 ; AIX32-NEXT: # %bb.22: # %entry
3462 ; AIX32-NEXT: lwsync
3463 ; AIX32-NEXT: stw 4, 0(13)
3464 ; AIX32-NEXT: lbz 3, 0(26)
3466 ; AIX32-NEXT: L..BB2_23: # %entry
3468 ; AIX32-NEXT: lwarx 4, 0, 16
3469 ; AIX32-NEXT: sub 7, 4, 3
3470 ; AIX32-NEXT: stwcx. 7, 0, 16
3471 ; AIX32-NEXT: bne 0, L..BB2_23
3472 ; AIX32-NEXT: # %bb.24: # %entry
3473 ; AIX32-NEXT: lwsync
3474 ; AIX32-NEXT: mr 3, 31
3475 ; AIX32-NEXT: li 4, 0
3476 ; AIX32-NEXT: li 6, 5
3477 ; AIX32-NEXT: lbz 29, 0(26)
3478 ; AIX32-NEXT: stw 7, 0(16)
3479 ; AIX32-NEXT: mr 5, 29
3480 ; AIX32-NEXT: bl .__atomic_fetch_sub_8[PR]
3482 ; AIX32-NEXT: lbz 28, 0(26)
3483 ; AIX32-NEXT: subc 7, 4, 29
3484 ; AIX32-NEXT: li 4, 0
3485 ; AIX32-NEXT: li 6, 5
3486 ; AIX32-NEXT: subfe 8, 27, 3
3487 ; AIX32-NEXT: mr 3, 30
3488 ; AIX32-NEXT: mr 5, 28
3489 ; AIX32-NEXT: stw 7, 4(31)
3490 ; AIX32-NEXT: stw 8, 0(31)
3491 ; AIX32-NEXT: bl .__atomic_fetch_sub_8[PR]
3493 ; AIX32-NEXT: lbz 5, 0(26)
3494 ; AIX32-NEXT: subc 4, 4, 28
3495 ; AIX32-NEXT: subfe 3, 27, 3
3496 ; AIX32-NEXT: stw 4, 4(30)
3497 ; AIX32-NEXT: li 4, 255
3498 ; AIX32-NEXT: stw 3, 0(30)
3499 ; AIX32-NEXT: slw 3, 5, 23
3500 ; AIX32-NEXT: slw 4, 4, 23
3502 ; AIX32-NEXT: L..BB2_25: # %entry
3504 ; AIX32-NEXT: lwarx 6, 0, 22
3505 ; AIX32-NEXT: or 7, 3, 6
3506 ; AIX32-NEXT: andc 8, 6, 4
3507 ; AIX32-NEXT: and 7, 7, 4
3508 ; AIX32-NEXT: or 7, 7, 8
3509 ; AIX32-NEXT: stwcx. 7, 0, 22
3510 ; AIX32-NEXT: bne 0, L..BB2_25
3511 ; AIX32-NEXT: # %bb.26: # %entry
3512 ; AIX32-NEXT: srw 3, 6, 23
3513 ; AIX32-NEXT: lwsync
3514 ; AIX32-NEXT: clrlwi 3, 3, 24
3515 ; AIX32-NEXT: or 4, 3, 5
3516 ; AIX32-NEXT: lbz 3, 0(26)
3517 ; AIX32-NEXT: li 5, 255
3518 ; AIX32-NEXT: stb 4, 0(24)
3519 ; AIX32-NEXT: slw 5, 5, 21
3521 ; AIX32-NEXT: slw 4, 3, 21
3522 ; AIX32-NEXT: lwz 27, 60(1) # 4-byte Folded Reload
3523 ; AIX32-NEXT: L..BB2_27: # %entry
3525 ; AIX32-NEXT: lwarx 6, 0, 19
3526 ; AIX32-NEXT: or 7, 4, 6
3527 ; AIX32-NEXT: andc 8, 6, 5
3528 ; AIX32-NEXT: and 7, 7, 5
3529 ; AIX32-NEXT: or 7, 7, 8
3530 ; AIX32-NEXT: stwcx. 7, 0, 19
3531 ; AIX32-NEXT: bne 0, L..BB2_27
3532 ; AIX32-NEXT: # %bb.28: # %entry
3533 ; AIX32-NEXT: srw 4, 6, 21
3534 ; AIX32-NEXT: lwsync
3535 ; AIX32-NEXT: clrlwi 4, 4, 24
3536 ; AIX32-NEXT: or 3, 4, 3
3537 ; AIX32-NEXT: li 4, 0
3538 ; AIX32-NEXT: stb 3, 0(26)
3539 ; AIX32-NEXT: clrlwi 3, 3, 24
3540 ; AIX32-NEXT: ori 5, 4, 65535
3541 ; AIX32-NEXT: slw 4, 3, 18
3542 ; AIX32-NEXT: slw 5, 5, 18
3544 ; AIX32-NEXT: L..BB2_29: # %entry
3546 ; AIX32-NEXT: lwarx 6, 0, 17
3547 ; AIX32-NEXT: or 7, 4, 6
3548 ; AIX32-NEXT: andc 8, 6, 5
3549 ; AIX32-NEXT: and 7, 7, 5
3550 ; AIX32-NEXT: or 7, 7, 8
3551 ; AIX32-NEXT: stwcx. 7, 0, 17
3552 ; AIX32-NEXT: bne 0, L..BB2_29
3553 ; AIX32-NEXT: # %bb.30: # %entry
3554 ; AIX32-NEXT: srw 4, 6, 18
3555 ; AIX32-NEXT: lwsync
3556 ; AIX32-NEXT: li 5, 0
3557 ; AIX32-NEXT: clrlwi 4, 4, 16
3558 ; AIX32-NEXT: ori 5, 5, 65535
3559 ; AIX32-NEXT: or 4, 4, 3
3560 ; AIX32-NEXT: lbz 3, 0(26)
3561 ; AIX32-NEXT: slw 5, 5, 15
3562 ; AIX32-NEXT: sth 4, 0(27)
3563 ; AIX32-NEXT: slw 4, 3, 15
3565 ; AIX32-NEXT: L..BB2_31: # %entry
3567 ; AIX32-NEXT: lwarx 6, 0, 14
3568 ; AIX32-NEXT: or 7, 4, 6
3569 ; AIX32-NEXT: andc 8, 6, 5
3570 ; AIX32-NEXT: and 7, 7, 5
3571 ; AIX32-NEXT: or 7, 7, 8
3572 ; AIX32-NEXT: stwcx. 7, 0, 14
3573 ; AIX32-NEXT: bne 0, L..BB2_31
3574 ; AIX32-NEXT: # %bb.32: # %entry
3575 ; AIX32-NEXT: srw 4, 6, 15
3576 ; AIX32-NEXT: lwsync
3577 ; AIX32-NEXT: clrlwi 4, 4, 16
3578 ; AIX32-NEXT: or 3, 4, 3
3579 ; AIX32-NEXT: sth 3, 0(20)
3580 ; AIX32-NEXT: lbz 3, 0(26)
3582 ; AIX32-NEXT: L..BB2_33: # %entry
3584 ; AIX32-NEXT: lwarx 4, 0, 13
3585 ; AIX32-NEXT: or 4, 3, 4
3586 ; AIX32-NEXT: stwcx. 4, 0, 13
3587 ; AIX32-NEXT: bne 0, L..BB2_33
3588 ; AIX32-NEXT: # %bb.34: # %entry
3589 ; AIX32-NEXT: lwsync
3590 ; AIX32-NEXT: stw 4, 0(13)
3591 ; AIX32-NEXT: lbz 3, 0(26)
3593 ; AIX32-NEXT: L..BB2_35: # %entry
3595 ; AIX32-NEXT: lwarx 4, 0, 16
3596 ; AIX32-NEXT: or 7, 3, 4
3597 ; AIX32-NEXT: stwcx. 7, 0, 16
3598 ; AIX32-NEXT: bne 0, L..BB2_35
3599 ; AIX32-NEXT: # %bb.36: # %entry
3600 ; AIX32-NEXT: lwsync
3601 ; AIX32-NEXT: mr 3, 31
3602 ; AIX32-NEXT: li 4, 0
3603 ; AIX32-NEXT: li 6, 5
3604 ; AIX32-NEXT: lbz 29, 0(26)
3605 ; AIX32-NEXT: stw 7, 0(16)
3606 ; AIX32-NEXT: mr 5, 29
3607 ; AIX32-NEXT: bl .__atomic_fetch_or_8[PR]
3609 ; AIX32-NEXT: lbz 28, 0(26)
3610 ; AIX32-NEXT: mr 7, 3
3611 ; AIX32-NEXT: or 8, 4, 29
3612 ; AIX32-NEXT: mr 3, 30
3613 ; AIX32-NEXT: li 4, 0
3614 ; AIX32-NEXT: li 6, 5
3615 ; AIX32-NEXT: mr 5, 28
3616 ; AIX32-NEXT: stw 7, 0(31)
3617 ; AIX32-NEXT: stw 8, 4(31)
3618 ; AIX32-NEXT: bl .__atomic_fetch_or_8[PR]
3620 ; AIX32-NEXT: lbz 5, 0(26)
3621 ; AIX32-NEXT: or 4, 4, 28
3622 ; AIX32-NEXT: stw 3, 0(30)
3623 ; AIX32-NEXT: stw 4, 4(30)
3624 ; AIX32-NEXT: li 4, 255
3625 ; AIX32-NEXT: slw 3, 5, 23
3626 ; AIX32-NEXT: slw 4, 4, 23
3628 ; AIX32-NEXT: L..BB2_37: # %entry
3630 ; AIX32-NEXT: lwarx 6, 0, 22
3631 ; AIX32-NEXT: xor 7, 3, 6
3632 ; AIX32-NEXT: andc 8, 6, 4
3633 ; AIX32-NEXT: and 7, 7, 4
3634 ; AIX32-NEXT: or 7, 7, 8
3635 ; AIX32-NEXT: stwcx. 7, 0, 22
3636 ; AIX32-NEXT: bne 0, L..BB2_37
3637 ; AIX32-NEXT: # %bb.38: # %entry
3638 ; AIX32-NEXT: srw 3, 6, 23
3639 ; AIX32-NEXT: lwsync
3640 ; AIX32-NEXT: clrlwi 3, 3, 24
3641 ; AIX32-NEXT: xor 4, 3, 5
3642 ; AIX32-NEXT: lbz 3, 0(26)
3643 ; AIX32-NEXT: li 5, 255
3644 ; AIX32-NEXT: stb 4, 0(24)
3645 ; AIX32-NEXT: slw 5, 5, 21
3646 ; AIX32-NEXT: slw 4, 3, 21
3648 ; AIX32-NEXT: L..BB2_39: # %entry
3650 ; AIX32-NEXT: lwarx 6, 0, 19
3651 ; AIX32-NEXT: xor 7, 4, 6
3652 ; AIX32-NEXT: andc 8, 6, 5
3653 ; AIX32-NEXT: and 7, 7, 5
3654 ; AIX32-NEXT: or 7, 7, 8
3655 ; AIX32-NEXT: stwcx. 7, 0, 19
3656 ; AIX32-NEXT: bne 0, L..BB2_39
3657 ; AIX32-NEXT: # %bb.40: # %entry
3658 ; AIX32-NEXT: srw 4, 6, 21
3659 ; AIX32-NEXT: lwsync
3660 ; AIX32-NEXT: clrlwi 4, 4, 24
3661 ; AIX32-NEXT: xor 3, 4, 3
3662 ; AIX32-NEXT: li 4, 0
3663 ; AIX32-NEXT: stb 3, 0(26)
3664 ; AIX32-NEXT: clrlwi 3, 3, 24
3665 ; AIX32-NEXT: ori 5, 4, 65535
3666 ; AIX32-NEXT: slw 4, 3, 18
3667 ; AIX32-NEXT: slw 5, 5, 18
3669 ; AIX32-NEXT: L..BB2_41: # %entry
3671 ; AIX32-NEXT: lwarx 6, 0, 17
3672 ; AIX32-NEXT: xor 7, 4, 6
3673 ; AIX32-NEXT: andc 8, 6, 5
3674 ; AIX32-NEXT: and 7, 7, 5
3675 ; AIX32-NEXT: or 7, 7, 8
3676 ; AIX32-NEXT: stwcx. 7, 0, 17
3677 ; AIX32-NEXT: bne 0, L..BB2_41
3678 ; AIX32-NEXT: # %bb.42: # %entry
3679 ; AIX32-NEXT: srw 4, 6, 18
3680 ; AIX32-NEXT: lwsync
3681 ; AIX32-NEXT: li 5, 0
3682 ; AIX32-NEXT: clrlwi 4, 4, 16
3683 ; AIX32-NEXT: ori 5, 5, 65535
3684 ; AIX32-NEXT: xor 4, 4, 3
3685 ; AIX32-NEXT: lbz 3, 0(26)
3686 ; AIX32-NEXT: slw 5, 5, 15
3687 ; AIX32-NEXT: sth 4, 0(27)
3688 ; AIX32-NEXT: slw 4, 3, 15
3690 ; AIX32-NEXT: L..BB2_43: # %entry
3692 ; AIX32-NEXT: lwarx 6, 0, 14
3693 ; AIX32-NEXT: xor 7, 4, 6
3694 ; AIX32-NEXT: andc 8, 6, 5
3695 ; AIX32-NEXT: and 7, 7, 5
3696 ; AIX32-NEXT: or 7, 7, 8
3697 ; AIX32-NEXT: stwcx. 7, 0, 14
3698 ; AIX32-NEXT: bne 0, L..BB2_43
3699 ; AIX32-NEXT: # %bb.44: # %entry
3700 ; AIX32-NEXT: srw 4, 6, 15
3701 ; AIX32-NEXT: lwsync
3702 ; AIX32-NEXT: clrlwi 4, 4, 16
3703 ; AIX32-NEXT: xor 3, 4, 3
3704 ; AIX32-NEXT: sth 3, 0(20)
3705 ; AIX32-NEXT: lbz 3, 0(26)
3707 ; AIX32-NEXT: L..BB2_45: # %entry
3709 ; AIX32-NEXT: lwarx 4, 0, 13
3710 ; AIX32-NEXT: xor 4, 3, 4
3711 ; AIX32-NEXT: stwcx. 4, 0, 13
3712 ; AIX32-NEXT: bne 0, L..BB2_45
3713 ; AIX32-NEXT: # %bb.46: # %entry
3714 ; AIX32-NEXT: lwsync
3715 ; AIX32-NEXT: stw 4, 0(13)
3716 ; AIX32-NEXT: lbz 3, 0(26)
3718 ; AIX32-NEXT: L..BB2_47: # %entry
3720 ; AIX32-NEXT: lwarx 4, 0, 16
3721 ; AIX32-NEXT: xor 7, 3, 4
3722 ; AIX32-NEXT: stwcx. 7, 0, 16
3723 ; AIX32-NEXT: bne 0, L..BB2_47
3724 ; AIX32-NEXT: # %bb.48: # %entry
3725 ; AIX32-NEXT: lwsync
3726 ; AIX32-NEXT: mr 3, 31
3727 ; AIX32-NEXT: li 4, 0
3728 ; AIX32-NEXT: li 6, 5
3729 ; AIX32-NEXT: lbz 29, 0(26)
3730 ; AIX32-NEXT: stw 7, 0(16)
3731 ; AIX32-NEXT: mr 5, 29
3732 ; AIX32-NEXT: bl .__atomic_fetch_xor_8[PR]
3734 ; AIX32-NEXT: lbz 28, 0(26)
3735 ; AIX32-NEXT: mr 7, 3
3736 ; AIX32-NEXT: xor 8, 4, 29
3737 ; AIX32-NEXT: mr 3, 30
3738 ; AIX32-NEXT: li 4, 0
3739 ; AIX32-NEXT: li 6, 5
3740 ; AIX32-NEXT: mr 5, 28
3741 ; AIX32-NEXT: stw 7, 0(31)
3742 ; AIX32-NEXT: stw 8, 4(31)
3743 ; AIX32-NEXT: bl .__atomic_fetch_xor_8[PR]
3745 ; AIX32-NEXT: lbz 5, 0(26)
3746 ; AIX32-NEXT: xor 4, 4, 28
3747 ; AIX32-NEXT: stw 3, 0(30)
3748 ; AIX32-NEXT: stw 4, 4(30)
3749 ; AIX32-NEXT: li 4, 255
3750 ; AIX32-NEXT: slw 3, 5, 23
3751 ; AIX32-NEXT: slw 4, 4, 23
3753 ; AIX32-NEXT: L..BB2_49: # %entry
3755 ; AIX32-NEXT: lwarx 6, 0, 22
3756 ; AIX32-NEXT: nand 7, 3, 6
3757 ; AIX32-NEXT: andc 8, 6, 4
3758 ; AIX32-NEXT: and 7, 7, 4
3759 ; AIX32-NEXT: or 7, 7, 8
3760 ; AIX32-NEXT: stwcx. 7, 0, 22
3761 ; AIX32-NEXT: bne 0, L..BB2_49
3762 ; AIX32-NEXT: # %bb.50: # %entry
3763 ; AIX32-NEXT: srw 3, 6, 23
3764 ; AIX32-NEXT: lwsync
3765 ; AIX32-NEXT: clrlwi 3, 3, 24
3766 ; AIX32-NEXT: nand 4, 3, 5
3767 ; AIX32-NEXT: lbz 3, 0(26)
3768 ; AIX32-NEXT: li 5, 255
3769 ; AIX32-NEXT: stb 4, 0(24)
3770 ; AIX32-NEXT: slw 5, 5, 21
3771 ; AIX32-NEXT: slw 4, 3, 21
3773 ; AIX32-NEXT: L..BB2_51: # %entry
3775 ; AIX32-NEXT: lwarx 6, 0, 19
3776 ; AIX32-NEXT: nand 7, 4, 6
3777 ; AIX32-NEXT: andc 8, 6, 5
3778 ; AIX32-NEXT: and 7, 7, 5
3779 ; AIX32-NEXT: or 7, 7, 8
3780 ; AIX32-NEXT: stwcx. 7, 0, 19
3781 ; AIX32-NEXT: bne 0, L..BB2_51
3782 ; AIX32-NEXT: # %bb.52: # %entry
3783 ; AIX32-NEXT: srw 4, 6, 21
3784 ; AIX32-NEXT: lwsync
3785 ; AIX32-NEXT: clrlwi 4, 4, 24
3786 ; AIX32-NEXT: nand 3, 4, 3
3787 ; AIX32-NEXT: li 4, 0
3788 ; AIX32-NEXT: stb 3, 0(26)
3789 ; AIX32-NEXT: clrlwi 3, 3, 24
3790 ; AIX32-NEXT: ori 5, 4, 65535
3791 ; AIX32-NEXT: slw 4, 3, 18
3792 ; AIX32-NEXT: slw 5, 5, 18
3794 ; AIX32-NEXT: L..BB2_53: # %entry
3796 ; AIX32-NEXT: lwarx 6, 0, 17
3797 ; AIX32-NEXT: nand 7, 4, 6
3798 ; AIX32-NEXT: andc 8, 6, 5
3799 ; AIX32-NEXT: and 7, 7, 5
3800 ; AIX32-NEXT: or 7, 7, 8
3801 ; AIX32-NEXT: stwcx. 7, 0, 17
3802 ; AIX32-NEXT: bne 0, L..BB2_53
3803 ; AIX32-NEXT: # %bb.54: # %entry
3804 ; AIX32-NEXT: srw 4, 6, 18
3805 ; AIX32-NEXT: lwsync
3806 ; AIX32-NEXT: li 5, 0
3807 ; AIX32-NEXT: clrlwi 4, 4, 16
3808 ; AIX32-NEXT: ori 5, 5, 65535
3809 ; AIX32-NEXT: nand 4, 4, 3
3810 ; AIX32-NEXT: lbz 3, 0(26)
3811 ; AIX32-NEXT: slw 5, 5, 15
3812 ; AIX32-NEXT: sth 4, 0(27)
3813 ; AIX32-NEXT: slw 4, 3, 15
3815 ; AIX32-NEXT: L..BB2_55: # %entry
3817 ; AIX32-NEXT: lwarx 6, 0, 14
3818 ; AIX32-NEXT: nand 7, 4, 6
3819 ; AIX32-NEXT: andc 8, 6, 5
3820 ; AIX32-NEXT: and 7, 7, 5
3821 ; AIX32-NEXT: or 7, 7, 8
3822 ; AIX32-NEXT: stwcx. 7, 0, 14
3823 ; AIX32-NEXT: bne 0, L..BB2_55
3824 ; AIX32-NEXT: # %bb.56: # %entry
3825 ; AIX32-NEXT: srw 4, 6, 15
3826 ; AIX32-NEXT: lwsync
3827 ; AIX32-NEXT: clrlwi 4, 4, 16
3828 ; AIX32-NEXT: nand 3, 4, 3
3829 ; AIX32-NEXT: sth 3, 0(20)
3830 ; AIX32-NEXT: lbz 3, 0(26)
3832 ; AIX32-NEXT: L..BB2_57: # %entry
3834 ; AIX32-NEXT: lwarx 4, 0, 13
3835 ; AIX32-NEXT: nand 4, 3, 4
3836 ; AIX32-NEXT: stwcx. 4, 0, 13
3837 ; AIX32-NEXT: bne 0, L..BB2_57
3838 ; AIX32-NEXT: # %bb.58: # %entry
3839 ; AIX32-NEXT: stw 24, 56(1) # 4-byte Folded Spill
3840 ; AIX32-NEXT: lwsync
3841 ; AIX32-NEXT: stw 4, 0(13)
3842 ; AIX32-NEXT: lbz 3, 0(26)
3844 ; AIX32-NEXT: L..BB2_59: # %entry
3846 ; AIX32-NEXT: lwarx 4, 0, 16
3847 ; AIX32-NEXT: nand 7, 3, 4
3848 ; AIX32-NEXT: stwcx. 7, 0, 16
3849 ; AIX32-NEXT: bne 0, L..BB2_59
3850 ; AIX32-NEXT: # %bb.60: # %entry
3851 ; AIX32-NEXT: lwsync
3852 ; AIX32-NEXT: mr 3, 31
3853 ; AIX32-NEXT: li 4, 0
3854 ; AIX32-NEXT: li 6, 5
3855 ; AIX32-NEXT: lbz 29, 0(26)
3856 ; AIX32-NEXT: stw 7, 0(16)
3857 ; AIX32-NEXT: mr 5, 29
3858 ; AIX32-NEXT: bl .__atomic_fetch_nand_8[PR]
3860 ; AIX32-NEXT: lbz 28, 0(26)
3861 ; AIX32-NEXT: nand 7, 4, 29
3862 ; AIX32-NEXT: mr 3, 30
3863 ; AIX32-NEXT: li 4, 0
3864 ; AIX32-NEXT: li 6, 5
3865 ; AIX32-NEXT: stw 7, 4(31)
3866 ; AIX32-NEXT: mr 5, 28
3867 ; AIX32-NEXT: stw 25, 0(31)
3868 ; AIX32-NEXT: bl .__atomic_fetch_nand_8[PR]
3870 ; AIX32-NEXT: lwz 29, L..C8(2) # @u128
3871 ; AIX32-NEXT: nand 3, 4, 28
3872 ; AIX32-NEXT: lbz 24, 0(26)
3873 ; AIX32-NEXT: addi 28, 1, 80
3874 ; AIX32-NEXT: addi 27, 1, 64
3875 ; AIX32-NEXT: stw 3, 4(30)
3876 ; AIX32-NEXT: stw 25, 0(30)
3877 ; AIX32-NEXT: lwz 3, 12(29)
3878 ; AIX32-NEXT: lwz 4, 8(29)
3879 ; AIX32-NEXT: lwz 5, 4(29)
3880 ; AIX32-NEXT: lwz 6, 0(29)
3881 ; AIX32-NEXT: .align 4
3882 ; AIX32-NEXT: L..BB2_61: # %atomicrmw.start
3884 ; AIX32-NEXT: and 7, 3, 24
3885 ; AIX32-NEXT: stw 3, 92(1)
3886 ; AIX32-NEXT: li 8, 5
3887 ; AIX32-NEXT: xor 3, 7, 25
3888 ; AIX32-NEXT: stw 6, 80(1)
3889 ; AIX32-NEXT: mr 6, 27
3890 ; AIX32-NEXT: stw 5, 84(1)
3891 ; AIX32-NEXT: stw 4, 88(1)
3892 ; AIX32-NEXT: stw 3, 76(1)
3893 ; AIX32-NEXT: li 3, 16
3894 ; AIX32-NEXT: mr 4, 29
3895 ; AIX32-NEXT: mr 5, 28
3896 ; AIX32-NEXT: li 7, 5
3897 ; AIX32-NEXT: stw 25, 72(1)
3898 ; AIX32-NEXT: stw 25, 68(1)
3899 ; AIX32-NEXT: stw 25, 64(1)
3900 ; AIX32-NEXT: bl .__atomic_compare_exchange[PR]
3902 ; AIX32-NEXT: cmplwi 3, 0
3903 ; AIX32-NEXT: lwz 3, 92(1)
3904 ; AIX32-NEXT: lwz 4, 88(1)
3905 ; AIX32-NEXT: lwz 5, 84(1)
3906 ; AIX32-NEXT: lwz 6, 80(1)
3907 ; AIX32-NEXT: beq 0, L..BB2_61
3908 ; AIX32-NEXT: # %bb.62: # %atomicrmw.end
3909 ; AIX32-NEXT: lwz 28, L..C9(2) # @s128
3910 ; AIX32-NEXT: and 3, 3, 24
3911 ; AIX32-NEXT: lbz 24, 0(26)
3912 ; AIX32-NEXT: stw 25, 0(29)
3913 ; AIX32-NEXT: xor 3, 3, 25
3914 ; AIX32-NEXT: stw 25, 4(29)
3915 ; AIX32-NEXT: addi 27, 1, 64
3916 ; AIX32-NEXT: stw 3, 12(29)
3917 ; AIX32-NEXT: stw 25, 8(29)
3918 ; AIX32-NEXT: lwz 3, 12(28)
3919 ; AIX32-NEXT: lwz 4, 8(28)
3920 ; AIX32-NEXT: addi 29, 1, 80
3921 ; AIX32-NEXT: lwz 5, 4(28)
3922 ; AIX32-NEXT: lwz 6, 0(28)
3923 ; AIX32-NEXT: .align 4
3924 ; AIX32-NEXT: L..BB2_63: # %atomicrmw.start2
3926 ; AIX32-NEXT: and 7, 3, 24
3927 ; AIX32-NEXT: stw 3, 92(1)
3928 ; AIX32-NEXT: li 8, 5
3929 ; AIX32-NEXT: xor 3, 7, 25
3930 ; AIX32-NEXT: stw 6, 80(1)
3931 ; AIX32-NEXT: mr 6, 27
3932 ; AIX32-NEXT: stw 5, 84(1)
3933 ; AIX32-NEXT: stw 4, 88(1)
3934 ; AIX32-NEXT: stw 3, 76(1)
3935 ; AIX32-NEXT: li 3, 16
3936 ; AIX32-NEXT: mr 4, 28
3937 ; AIX32-NEXT: mr 5, 29
3938 ; AIX32-NEXT: li 7, 5
3939 ; AIX32-NEXT: stw 25, 72(1)
3940 ; AIX32-NEXT: stw 25, 68(1)
3941 ; AIX32-NEXT: stw 25, 64(1)
3942 ; AIX32-NEXT: bl .__atomic_compare_exchange[PR]
3944 ; AIX32-NEXT: cmplwi 3, 0
3945 ; AIX32-NEXT: lwz 3, 92(1)
3946 ; AIX32-NEXT: lwz 4, 88(1)
3947 ; AIX32-NEXT: lwz 5, 84(1)
3948 ; AIX32-NEXT: lwz 6, 80(1)
3949 ; AIX32-NEXT: beq 0, L..BB2_63
3950 ; AIX32-NEXT: # %bb.64: # %atomicrmw.end1
3951 ; AIX32-NEXT: and 3, 3, 24
3952 ; AIX32-NEXT: li 5, 255
3953 ; AIX32-NEXT: xor 4, 3, 25
3954 ; AIX32-NEXT: lbz 3, 0(26)
3955 ; AIX32-NEXT: stw 25, 0(28)
3956 ; AIX32-NEXT: stw 25, 4(28)
3957 ; AIX32-NEXT: stw 25, 8(28)
3958 ; AIX32-NEXT: stw 4, 12(28)
3959 ; AIX32-NEXT: slw 4, 3, 23
3960 ; AIX32-NEXT: slw 5, 5, 23
3962 ; AIX32-NEXT: L..BB2_65: # %atomicrmw.end1
3964 ; AIX32-NEXT: lwarx 6, 0, 22
3965 ; AIX32-NEXT: and 7, 4, 6
3966 ; AIX32-NEXT: andc 8, 6, 5
3967 ; AIX32-NEXT: and 7, 7, 5
3968 ; AIX32-NEXT: or 7, 7, 8
3969 ; AIX32-NEXT: stwcx. 7, 0, 22
3970 ; AIX32-NEXT: bne 0, L..BB2_65
3971 ; AIX32-NEXT: # %bb.66: # %atomicrmw.end1
3972 ; AIX32-NEXT: srw 4, 6, 23
3973 ; AIX32-NEXT: lwsync
3974 ; AIX32-NEXT: clrlwi 4, 4, 24
3975 ; AIX32-NEXT: lwz 5, 56(1) # 4-byte Folded Reload
3976 ; AIX32-NEXT: and 4, 4, 3
3977 ; AIX32-NEXT: lbz 3, 0(26)
3978 ; AIX32-NEXT: stb 4, 0(5)
3979 ; AIX32-NEXT: li 5, 255
3981 ; AIX32-NEXT: slw 4, 3, 21
3982 ; AIX32-NEXT: slw 5, 5, 21
3983 ; AIX32-NEXT: lwz 9, 60(1) # 4-byte Folded Reload
3984 ; AIX32-NEXT: L..BB2_67: # %atomicrmw.end1
3986 ; AIX32-NEXT: lwarx 6, 0, 19
3987 ; AIX32-NEXT: and 7, 4, 6
3988 ; AIX32-NEXT: andc 8, 6, 5
3989 ; AIX32-NEXT: and 7, 7, 5
3990 ; AIX32-NEXT: or 7, 7, 8
3991 ; AIX32-NEXT: stwcx. 7, 0, 19
3992 ; AIX32-NEXT: bne 0, L..BB2_67
3993 ; AIX32-NEXT: # %bb.68: # %atomicrmw.end1
3994 ; AIX32-NEXT: srw 4, 6, 21
3995 ; AIX32-NEXT: lwsync
3996 ; AIX32-NEXT: clrlwi 4, 4, 24
3997 ; AIX32-NEXT: and 3, 4, 3
3998 ; AIX32-NEXT: li 4, 0
3999 ; AIX32-NEXT: ori 5, 4, 65535
4000 ; AIX32-NEXT: stb 3, 0(26)
4001 ; AIX32-NEXT: slw 4, 3, 18
4002 ; AIX32-NEXT: slw 5, 5, 18
4004 ; AIX32-NEXT: L..BB2_69: # %atomicrmw.end1
4006 ; AIX32-NEXT: lwarx 6, 0, 17
4007 ; AIX32-NEXT: and 7, 4, 6
4008 ; AIX32-NEXT: andc 8, 6, 5
4009 ; AIX32-NEXT: and 7, 7, 5
4010 ; AIX32-NEXT: or 7, 7, 8
4011 ; AIX32-NEXT: stwcx. 7, 0, 17
4012 ; AIX32-NEXT: bne 0, L..BB2_69
4013 ; AIX32-NEXT: # %bb.70: # %atomicrmw.end1
4014 ; AIX32-NEXT: srw 4, 6, 18
4015 ; AIX32-NEXT: lwsync
4016 ; AIX32-NEXT: li 5, 0
4017 ; AIX32-NEXT: clrlwi 4, 4, 16
4018 ; AIX32-NEXT: ori 5, 5, 65535
4019 ; AIX32-NEXT: and 4, 4, 3
4020 ; AIX32-NEXT: lbz 3, 0(26)
4021 ; AIX32-NEXT: slw 5, 5, 15
4022 ; AIX32-NEXT: sth 4, 0(9)
4023 ; AIX32-NEXT: slw 4, 3, 15
4025 ; AIX32-NEXT: L..BB2_71: # %atomicrmw.end1
4027 ; AIX32-NEXT: lwarx 6, 0, 14
4028 ; AIX32-NEXT: and 7, 4, 6
4029 ; AIX32-NEXT: andc 8, 6, 5
4030 ; AIX32-NEXT: and 7, 7, 5
4031 ; AIX32-NEXT: or 7, 7, 8
4032 ; AIX32-NEXT: stwcx. 7, 0, 14
4033 ; AIX32-NEXT: bne 0, L..BB2_71
4034 ; AIX32-NEXT: # %bb.72: # %atomicrmw.end1
4035 ; AIX32-NEXT: srw 4, 6, 15
4036 ; AIX32-NEXT: lwsync
4037 ; AIX32-NEXT: clrlwi 4, 4, 16
4038 ; AIX32-NEXT: and 3, 4, 3
4039 ; AIX32-NEXT: sth 3, 0(20)
4040 ; AIX32-NEXT: lbz 3, 0(26)
4042 ; AIX32-NEXT: L..BB2_73: # %atomicrmw.end1
4044 ; AIX32-NEXT: lwarx 4, 0, 13
4045 ; AIX32-NEXT: and 4, 3, 4
4046 ; AIX32-NEXT: stwcx. 4, 0, 13
4047 ; AIX32-NEXT: bne 0, L..BB2_73
4048 ; AIX32-NEXT: # %bb.74: # %atomicrmw.end1
4049 ; AIX32-NEXT: lwsync
4050 ; AIX32-NEXT: stw 4, 0(13)
4051 ; AIX32-NEXT: lbz 3, 0(26)
4053 ; AIX32-NEXT: L..BB2_75: # %atomicrmw.end1
4055 ; AIX32-NEXT: lwarx 4, 0, 16
4056 ; AIX32-NEXT: and 7, 3, 4
4057 ; AIX32-NEXT: stwcx. 7, 0, 16
4058 ; AIX32-NEXT: bne 0, L..BB2_75
4059 ; AIX32-NEXT: # %bb.76: # %atomicrmw.end1
4060 ; AIX32-NEXT: lwsync
4061 ; AIX32-NEXT: mr 3, 31
4062 ; AIX32-NEXT: li 4, 0
4063 ; AIX32-NEXT: li 6, 5
4064 ; AIX32-NEXT: li 27, 0
4065 ; AIX32-NEXT: lbz 29, 0(26)
4066 ; AIX32-NEXT: stw 7, 0(16)
4067 ; AIX32-NEXT: mr 5, 29
4068 ; AIX32-NEXT: bl .__atomic_fetch_and_8[PR]
4070 ; AIX32-NEXT: lbz 28, 0(26)
4071 ; AIX32-NEXT: and 7, 4, 29
4072 ; AIX32-NEXT: mr 3, 30
4073 ; AIX32-NEXT: li 4, 0
4074 ; AIX32-NEXT: li 6, 5
4075 ; AIX32-NEXT: stw 7, 4(31)
4076 ; AIX32-NEXT: mr 5, 28
4077 ; AIX32-NEXT: stw 27, 0(31)
4078 ; AIX32-NEXT: bl .__atomic_fetch_and_8[PR]
4080 ; AIX32-NEXT: and 3, 4, 28
4081 ; AIX32-NEXT: stw 27, 0(30)
4082 ; AIX32-NEXT: lwz 31, 172(1) # 4-byte Folded Reload
4083 ; AIX32-NEXT: stw 3, 4(30)
4084 ; AIX32-NEXT: lwz 30, 168(1) # 4-byte Folded Reload
4085 ; AIX32-NEXT: lwz 29, 164(1) # 4-byte Folded Reload
4086 ; AIX32-NEXT: lwz 28, 160(1) # 4-byte Folded Reload
4087 ; AIX32-NEXT: lwz 27, 156(1) # 4-byte Folded Reload
4088 ; AIX32-NEXT: lwz 26, 152(1) # 4-byte Folded Reload
4089 ; AIX32-NEXT: lwz 25, 148(1) # 4-byte Folded Reload
4090 ; AIX32-NEXT: lwz 24, 144(1) # 4-byte Folded Reload
4091 ; AIX32-NEXT: lwz 23, 140(1) # 4-byte Folded Reload
4092 ; AIX32-NEXT: lwz 22, 136(1) # 4-byte Folded Reload
4093 ; AIX32-NEXT: lwz 21, 132(1) # 4-byte Folded Reload
4094 ; AIX32-NEXT: lwz 20, 128(1) # 4-byte Folded Reload
4095 ; AIX32-NEXT: lwz 19, 124(1) # 4-byte Folded Reload
4096 ; AIX32-NEXT: lwz 18, 120(1) # 4-byte Folded Reload
4097 ; AIX32-NEXT: lwz 17, 116(1) # 4-byte Folded Reload
4098 ; AIX32-NEXT: lwz 16, 112(1) # 4-byte Folded Reload
4099 ; AIX32-NEXT: lwz 15, 108(1) # 4-byte Folded Reload
4100 ; AIX32-NEXT: lwz 14, 104(1) # 4-byte Folded Reload
4101 ; AIX32-NEXT: lwz 13, 100(1) # 4-byte Folded Reload
4102 ; AIX32-NEXT: addi 1, 1, 176
4103 ; AIX32-NEXT: lwz 0, 8(1)
4104 ; AIX32-NEXT: mtlr 0
4107 %0 = load i8, ptr @uc, align 1
4108 %1 = atomicrmw add ptr @sc, i8 %0 seq_cst, align 1
4110 store i8 %2, ptr @sc, align 1
4111 %3 = load i8, ptr @uc, align 1
4112 %4 = atomicrmw add ptr @uc, i8 %3 seq_cst, align 1
4114 store i8 %5, ptr @uc, align 1
4115 %conv = zext i8 %5 to i16
4116 %6 = atomicrmw add ptr @ss, i16 %conv seq_cst, align 2
4117 %7 = add i16 %6, %conv
4118 store i16 %7, ptr @ss, align 2
4119 %8 = load i8, ptr @uc, align 1
4120 %conv1 = zext i8 %8 to i16
4121 %9 = atomicrmw add ptr @us, i16 %conv1 seq_cst, align 2
4122 %10 = add i16 %9, %conv1
4123 store i16 %10, ptr @us, align 2
4124 %11 = load i8, ptr @uc, align 1
4125 %conv2 = zext i8 %11 to i32
4126 %12 = atomicrmw add ptr @si, i32 %conv2 seq_cst, align 4
4127 %13 = add i32 %12, %conv2
4128 store i32 %13, ptr @si, align 4
4129 %14 = load i8, ptr @uc, align 1
4130 %conv3 = zext i8 %14 to i32
4131 %15 = atomicrmw add ptr @ui, i32 %conv3 seq_cst, align 4
4132 %16 = add i32 %15, %conv3
4133 store i32 %16, ptr @ui, align 4
4134 %17 = load i8, ptr @uc, align 1
4135 %conv4 = zext i8 %17 to i64
4136 %18 = atomicrmw add ptr @sll, i64 %conv4 seq_cst, align 8
4137 %19 = add i64 %18, %conv4
4138 store i64 %19, ptr @sll, align 8
4139 %20 = load i8, ptr @uc, align 1
4140 %conv5 = zext i8 %20 to i64
4141 %21 = atomicrmw add ptr @ull, i64 %conv5 seq_cst, align 8
4142 %22 = add i64 %21, %conv5
4143 store i64 %22, ptr @ull, align 8
4144 %23 = load i8, ptr @uc, align 1
4145 %24 = atomicrmw sub ptr @sc, i8 %23 seq_cst, align 1
4146 %25 = sub i8 %24, %23
4147 store i8 %25, ptr @sc, align 1
4148 %26 = load i8, ptr @uc, align 1
4149 %27 = atomicrmw sub ptr @uc, i8 %26 seq_cst, align 1
4150 %28 = sub i8 %27, %26
4151 store i8 %28, ptr @uc, align 1
4152 %conv6 = zext i8 %28 to i16
4153 %29 = atomicrmw sub ptr @ss, i16 %conv6 seq_cst, align 2
4154 %30 = sub i16 %29, %conv6
4155 store i16 %30, ptr @ss, align 2
4156 %31 = load i8, ptr @uc, align 1
4157 %conv7 = zext i8 %31 to i16
4158 %32 = atomicrmw sub ptr @us, i16 %conv7 seq_cst, align 2
4159 %33 = sub i16 %32, %conv7
4160 store i16 %33, ptr @us, align 2
4161 %34 = load i8, ptr @uc, align 1
4162 %conv8 = zext i8 %34 to i32
4163 %35 = atomicrmw sub ptr @si, i32 %conv8 seq_cst, align 4
4164 %36 = sub i32 %35, %conv8
4165 store i32 %36, ptr @si, align 4
4166 %37 = load i8, ptr @uc, align 1
4167 %conv9 = zext i8 %37 to i32
4168 %38 = atomicrmw sub ptr @ui, i32 %conv9 seq_cst, align 4
4169 %39 = sub i32 %38, %conv9
4170 store i32 %39, ptr @ui, align 4
4171 %40 = load i8, ptr @uc, align 1
4172 %conv10 = zext i8 %40 to i64
4173 %41 = atomicrmw sub ptr @sll, i64 %conv10 seq_cst, align 8
4174 %42 = sub i64 %41, %conv10
4175 store i64 %42, ptr @sll, align 8
4176 %43 = load i8, ptr @uc, align 1
4177 %conv11 = zext i8 %43 to i64
4178 %44 = atomicrmw sub ptr @ull, i64 %conv11 seq_cst, align 8
4179 %45 = sub i64 %44, %conv11
4180 store i64 %45, ptr @ull, align 8
4181 %46 = load i8, ptr @uc, align 1
4182 %47 = atomicrmw or ptr @sc, i8 %46 seq_cst, align 1
4183 %48 = or i8 %47, %46
4184 store i8 %48, ptr @sc, align 1
4185 %49 = load i8, ptr @uc, align 1
4186 %50 = atomicrmw or ptr @uc, i8 %49 seq_cst, align 1
4187 %51 = or i8 %50, %49
4188 store i8 %51, ptr @uc, align 1
4189 %conv12 = zext i8 %51 to i16
4190 %52 = atomicrmw or ptr @ss, i16 %conv12 seq_cst, align 2
4191 %53 = or i16 %52, %conv12
4192 store i16 %53, ptr @ss, align 2
4193 %54 = load i8, ptr @uc, align 1
4194 %conv13 = zext i8 %54 to i16
4195 %55 = atomicrmw or ptr @us, i16 %conv13 seq_cst, align 2
4196 %56 = or i16 %55, %conv13
4197 store i16 %56, ptr @us, align 2
4198 %57 = load i8, ptr @uc, align 1
4199 %conv14 = zext i8 %57 to i32
4200 %58 = atomicrmw or ptr @si, i32 %conv14 seq_cst, align 4
4201 %59 = or i32 %58, %conv14
4202 store i32 %59, ptr @si, align 4
4203 %60 = load i8, ptr @uc, align 1
4204 %conv15 = zext i8 %60 to i32
4205 %61 = atomicrmw or ptr @ui, i32 %conv15 seq_cst, align 4
4206 %62 = or i32 %61, %conv15
4207 store i32 %62, ptr @ui, align 4
4208 %63 = load i8, ptr @uc, align 1
4209 %conv16 = zext i8 %63 to i64
4210 %64 = atomicrmw or ptr @sll, i64 %conv16 seq_cst, align 8
4211 %65 = or i64 %64, %conv16
4212 store i64 %65, ptr @sll, align 8
4213 %66 = load i8, ptr @uc, align 1
4214 %conv17 = zext i8 %66 to i64
4215 %67 = atomicrmw or ptr @ull, i64 %conv17 seq_cst, align 8
4216 %68 = or i64 %67, %conv17
4217 store i64 %68, ptr @ull, align 8
4218 %69 = load i8, ptr @uc, align 1
4219 %70 = atomicrmw xor ptr @sc, i8 %69 seq_cst, align 1
4220 %71 = xor i8 %70, %69
4221 store i8 %71, ptr @sc, align 1
4222 %72 = load i8, ptr @uc, align 1
4223 %73 = atomicrmw xor ptr @uc, i8 %72 seq_cst, align 1
4224 %74 = xor i8 %73, %72
4225 store i8 %74, ptr @uc, align 1
4226 %conv18 = zext i8 %74 to i16
4227 %75 = atomicrmw xor ptr @ss, i16 %conv18 seq_cst, align 2
4228 %76 = xor i16 %75, %conv18
4229 store i16 %76, ptr @ss, align 2
4230 %77 = load i8, ptr @uc, align 1
4231 %conv19 = zext i8 %77 to i16
4232 %78 = atomicrmw xor ptr @us, i16 %conv19 seq_cst, align 2
4233 %79 = xor i16 %78, %conv19
4234 store i16 %79, ptr @us, align 2
4235 %80 = load i8, ptr @uc, align 1
4236 %conv20 = zext i8 %80 to i32
4237 %81 = atomicrmw xor ptr @si, i32 %conv20 seq_cst, align 4
4238 %82 = xor i32 %81, %conv20
4239 store i32 %82, ptr @si, align 4
4240 %83 = load i8, ptr @uc, align 1
4241 %conv21 = zext i8 %83 to i32
4242 %84 = atomicrmw xor ptr @ui, i32 %conv21 seq_cst, align 4
4243 %85 = xor i32 %84, %conv21
4244 store i32 %85, ptr @ui, align 4
4245 %86 = load i8, ptr @uc, align 1
4246 %conv22 = zext i8 %86 to i64
4247 %87 = atomicrmw xor ptr @sll, i64 %conv22 seq_cst, align 8
4248 %88 = xor i64 %87, %conv22
4249 store i64 %88, ptr @sll, align 8
4250 %89 = load i8, ptr @uc, align 1
4251 %conv23 = zext i8 %89 to i64
4252 %90 = atomicrmw xor ptr @ull, i64 %conv23 seq_cst, align 8
4253 %91 = xor i64 %90, %conv23
4254 store i64 %91, ptr @ull, align 8
4255 %92 = load i8, ptr @uc, align 1
4256 %93 = atomicrmw nand ptr @sc, i8 %92 seq_cst, align 1
4257 %94 = and i8 %93, %92
4258 %95 = xor i8 %94, -1
4259 store i8 %95, ptr @sc, align 1
4260 %96 = load i8, ptr @uc, align 1
4261 %97 = atomicrmw nand ptr @uc, i8 %96 seq_cst, align 1
4262 %98 = and i8 %97, %96
4263 %99 = xor i8 %98, -1
4264 store i8 %99, ptr @uc, align 1
4265 %conv24 = zext i8 %99 to i16
4266 %100 = atomicrmw nand ptr @ss, i16 %conv24 seq_cst, align 2
4267 %101 = and i16 %100, %conv24
4268 %102 = xor i16 %101, -1
4269 store i16 %102, ptr @ss, align 2
4270 %103 = load i8, ptr @uc, align 1
4271 %conv25 = zext i8 %103 to i16
4272 %104 = atomicrmw nand ptr @us, i16 %conv25 seq_cst, align 2
4273 %105 = and i16 %104, %conv25
4274 %106 = xor i16 %105, -1
4275 store i16 %106, ptr @us, align 2
4276 %107 = load i8, ptr @uc, align 1
4277 %conv26 = zext i8 %107 to i32
4278 %108 = atomicrmw nand ptr @si, i32 %conv26 seq_cst, align 4
4279 %109 = and i32 %108, %conv26
4280 %110 = xor i32 %109, -1
4281 store i32 %110, ptr @si, align 4
4282 %111 = load i8, ptr @uc, align 1
4283 %conv27 = zext i8 %111 to i32
4284 %112 = atomicrmw nand ptr @ui, i32 %conv27 seq_cst, align 4
4285 %113 = and i32 %112, %conv27
4286 %114 = xor i32 %113, -1
4287 store i32 %114, ptr @ui, align 4
4288 %115 = load i8, ptr @uc, align 1
4289 %conv28 = zext i8 %115 to i64
4290 %116 = atomicrmw nand ptr @sll, i64 %conv28 seq_cst, align 8
4291 %117 = and i64 %116, %conv28
4292 %118 = xor i64 %117, -1
4293 store i64 %118, ptr @sll, align 8
4294 %119 = load i8, ptr @uc, align 1
4295 %conv29 = zext i8 %119 to i64
4296 %120 = atomicrmw nand ptr @ull, i64 %conv29 seq_cst, align 8
4297 %121 = and i64 %120, %conv29
4298 %122 = xor i64 %121, -1
4299 store i64 %122, ptr @ull, align 8
4300 %123 = load i8, ptr @uc, align 1
4301 %conv30 = zext i8 %123 to i128
4302 %124 = atomicrmw nand ptr @u128, i128 %conv30 seq_cst, align 16
4303 %125 = and i128 %124, %conv30
4304 %126 = xor i128 %125, -1
4305 store i128 %126, ptr @u128, align 16
4306 %127 = load i8, ptr @uc, align 1
4307 %conv31 = zext i8 %127 to i128
4308 %128 = atomicrmw nand ptr @s128, i128 %conv31 seq_cst, align 16
4309 %129 = and i128 %128, %conv31
4310 %130 = xor i128 %129, -1
4311 store i128 %130, ptr @s128, align 16
4312 %131 = load i8, ptr @uc, align 1
4313 %132 = atomicrmw and ptr @sc, i8 %131 seq_cst, align 1
4314 %133 = and i8 %132, %131
4315 store i8 %133, ptr @sc, align 1
4316 %134 = load i8, ptr @uc, align 1
4317 %135 = atomicrmw and ptr @uc, i8 %134 seq_cst, align 1
4318 %136 = and i8 %135, %134
4319 store i8 %136, ptr @uc, align 1
4320 %conv32 = zext i8 %136 to i16
4321 %137 = atomicrmw and ptr @ss, i16 %conv32 seq_cst, align 2
4322 %138 = and i16 %137, %conv32
4323 store i16 %138, ptr @ss, align 2
4324 %139 = load i8, ptr @uc, align 1
4325 %conv33 = zext i8 %139 to i16
4326 %140 = atomicrmw and ptr @us, i16 %conv33 seq_cst, align 2
4327 %141 = and i16 %140, %conv33
4328 store i16 %141, ptr @us, align 2
4329 %142 = load i8, ptr @uc, align 1
4330 %conv34 = zext i8 %142 to i32
4331 %143 = atomicrmw and ptr @si, i32 %conv34 seq_cst, align 4
4332 %144 = and i32 %143, %conv34
4333 store i32 %144, ptr @si, align 4
4334 %145 = load i8, ptr @uc, align 1
4335 %conv35 = zext i8 %145 to i32
4336 %146 = atomicrmw and ptr @ui, i32 %conv35 seq_cst, align 4
4337 %147 = and i32 %146, %conv35
4338 store i32 %147, ptr @ui, align 4
4339 %148 = load i8, ptr @uc, align 1
4340 %conv36 = zext i8 %148 to i64
4341 %149 = atomicrmw and ptr @sll, i64 %conv36 seq_cst, align 8
4342 %150 = and i64 %149, %conv36
4343 store i64 %150, ptr @sll, align 8
4344 %151 = load i8, ptr @uc, align 1
4345 %conv37 = zext i8 %151 to i64
4346 %152 = atomicrmw and ptr @ull, i64 %conv37 seq_cst, align 8
4347 %153 = and i64 %152, %conv37
4348 store i64 %153, ptr @ull, align 8
4352 define dso_local void @test_compare_and_swap() local_unnamed_addr #0 {
4353 ; CHECK-LABEL: test_compare_and_swap:
4354 ; CHECK: # %bb.0: # %entry
4355 ; CHECK-NEXT: addis 3, 2, uc@toc@ha
4356 ; CHECK-NEXT: addis 4, 2, sc@toc@ha
4357 ; CHECK-NEXT: std 27, -40(1) # 8-byte Folded Spill
4358 ; CHECK-NEXT: std 28, -32(1) # 8-byte Folded Spill
4359 ; CHECK-NEXT: std 29, -24(1) # 8-byte Folded Spill
4360 ; CHECK-NEXT: std 30, -16(1) # 8-byte Folded Spill
4361 ; CHECK-NEXT: addi 6, 3, uc@toc@l
4362 ; CHECK-NEXT: addi 0, 4, sc@toc@l
4363 ; CHECK-NEXT: lbz 5, uc@toc@l(3)
4364 ; CHECK-NEXT: lbz 8, sc@toc@l(4)
4366 ; CHECK-NEXT: .LBB3_1: # %entry
4368 ; CHECK-NEXT: lbarx 7, 0, 0
4369 ; CHECK-NEXT: cmpw 7, 5
4370 ; CHECK-NEXT: bne 0, .LBB3_3
4371 ; CHECK-NEXT: # %bb.2: # %entry
4373 ; CHECK-NEXT: stbcx. 8, 0, 0
4374 ; CHECK-NEXT: bne 0, .LBB3_1
4375 ; CHECK-NEXT: .LBB3_3: # %entry
4376 ; CHECK-NEXT: lwsync
4377 ; CHECK-NEXT: stb 7, sc@toc@l(4)
4378 ; CHECK-NEXT: lbz 8, uc@toc@l(3)
4380 ; CHECK-NEXT: .LBB3_4: # %entry
4382 ; CHECK-NEXT: lbarx 5, 0, 6
4383 ; CHECK-NEXT: cmpw 5, 8
4384 ; CHECK-NEXT: bne 0, .LBB3_6
4385 ; CHECK-NEXT: # %bb.5: # %entry
4387 ; CHECK-NEXT: stbcx. 7, 0, 6
4388 ; CHECK-NEXT: bne 0, .LBB3_4
4389 ; CHECK-NEXT: .LBB3_6: # %entry
4390 ; CHECK-NEXT: lwsync
4391 ; CHECK-NEXT: addis 7, 2, ss@toc@ha
4392 ; CHECK-NEXT: stb 5, uc@toc@l(3)
4393 ; CHECK-NEXT: lbz 8, sc@toc@l(4)
4394 ; CHECK-NEXT: addi 12, 7, ss@toc@l
4396 ; CHECK-NEXT: extsb 8, 8
4397 ; CHECK-NEXT: .LBB3_7: # %entry
4399 ; CHECK-NEXT: lharx 9, 0, 12
4400 ; CHECK-NEXT: cmpw 9, 5
4401 ; CHECK-NEXT: bne 0, .LBB3_9
4402 ; CHECK-NEXT: # %bb.8: # %entry
4404 ; CHECK-NEXT: sthcx. 8, 0, 12
4405 ; CHECK-NEXT: bne 0, .LBB3_7
4406 ; CHECK-NEXT: .LBB3_9: # %entry
4407 ; CHECK-NEXT: lwsync
4408 ; CHECK-NEXT: sth 9, ss@toc@l(7)
4409 ; CHECK-NEXT: addis 7, 2, us@toc@ha
4410 ; CHECK-NEXT: lbz 8, sc@toc@l(4)
4411 ; CHECK-NEXT: lbz 5, uc@toc@l(3)
4412 ; CHECK-NEXT: addi 11, 7, us@toc@l
4414 ; CHECK-NEXT: extsb 8, 8
4415 ; CHECK-NEXT: .LBB3_10: # %entry
4417 ; CHECK-NEXT: lharx 9, 0, 11
4418 ; CHECK-NEXT: cmpw 9, 5
4419 ; CHECK-NEXT: bne 0, .LBB3_12
4420 ; CHECK-NEXT: # %bb.11: # %entry
4422 ; CHECK-NEXT: sthcx. 8, 0, 11
4423 ; CHECK-NEXT: bne 0, .LBB3_10
4424 ; CHECK-NEXT: .LBB3_12: # %entry
4425 ; CHECK-NEXT: lwsync
4426 ; CHECK-NEXT: sth 9, us@toc@l(7)
4427 ; CHECK-NEXT: addis 7, 2, si@toc@ha
4428 ; CHECK-NEXT: lbz 8, sc@toc@l(4)
4429 ; CHECK-NEXT: lbz 5, uc@toc@l(3)
4430 ; CHECK-NEXT: addi 10, 7, si@toc@l
4432 ; CHECK-NEXT: extsb 8, 8
4433 ; CHECK-NEXT: .LBB3_13: # %entry
4435 ; CHECK-NEXT: lwarx 9, 0, 10
4436 ; CHECK-NEXT: cmpw 9, 5
4437 ; CHECK-NEXT: bne 0, .LBB3_15
4438 ; CHECK-NEXT: # %bb.14: # %entry
4440 ; CHECK-NEXT: stwcx. 8, 0, 10
4441 ; CHECK-NEXT: bne 0, .LBB3_13
4442 ; CHECK-NEXT: .LBB3_15: # %entry
4443 ; CHECK-NEXT: lwsync
4444 ; CHECK-NEXT: stw 9, si@toc@l(7)
4445 ; CHECK-NEXT: addis 5, 2, ui@toc@ha
4446 ; CHECK-NEXT: lbz 8, sc@toc@l(4)
4447 ; CHECK-NEXT: lbz 7, uc@toc@l(3)
4448 ; CHECK-NEXT: addi 9, 5, ui@toc@l
4450 ; CHECK-NEXT: extsb 8, 8
4451 ; CHECK-NEXT: .LBB3_16: # %entry
4453 ; CHECK-NEXT: lwarx 30, 0, 9
4454 ; CHECK-NEXT: cmpw 30, 7
4455 ; CHECK-NEXT: bne 0, .LBB3_18
4456 ; CHECK-NEXT: # %bb.17: # %entry
4458 ; CHECK-NEXT: stwcx. 8, 0, 9
4459 ; CHECK-NEXT: bne 0, .LBB3_16
4460 ; CHECK-NEXT: .LBB3_18: # %entry
4461 ; CHECK-NEXT: lwsync
4462 ; CHECK-NEXT: stw 30, ui@toc@l(5)
4463 ; CHECK-NEXT: addis 30, 2, sll@toc@ha
4464 ; CHECK-NEXT: lbz 8, sc@toc@l(4)
4465 ; CHECK-NEXT: lbz 7, uc@toc@l(3)
4467 ; CHECK-NEXT: extsb 29, 8
4468 ; CHECK-NEXT: addi 8, 30, sll@toc@l
4469 ; CHECK-NEXT: .LBB3_19: # %entry
4471 ; CHECK-NEXT: ldarx 28, 0, 8
4472 ; CHECK-NEXT: cmpd 28, 7
4473 ; CHECK-NEXT: bne 0, .LBB3_21
4474 ; CHECK-NEXT: # %bb.20: # %entry
4476 ; CHECK-NEXT: stdcx. 29, 0, 8
4477 ; CHECK-NEXT: bne 0, .LBB3_19
4478 ; CHECK-NEXT: .LBB3_21: # %entry
4479 ; CHECK-NEXT: lwsync
4480 ; CHECK-NEXT: std 28, sll@toc@l(30)
4481 ; CHECK-NEXT: addis 29, 2, ull@toc@ha
4482 ; CHECK-NEXT: lbz 7, sc@toc@l(4)
4483 ; CHECK-NEXT: lbz 30, uc@toc@l(3)
4485 ; CHECK-NEXT: extsb 28, 7
4486 ; CHECK-NEXT: addi 7, 29, ull@toc@l
4487 ; CHECK-NEXT: .LBB3_22: # %entry
4489 ; CHECK-NEXT: ldarx 27, 0, 7
4490 ; CHECK-NEXT: cmpd 27, 30
4491 ; CHECK-NEXT: bne 0, .LBB3_24
4492 ; CHECK-NEXT: # %bb.23: # %entry
4494 ; CHECK-NEXT: stdcx. 28, 0, 7
4495 ; CHECK-NEXT: bne 0, .LBB3_22
4496 ; CHECK-NEXT: .LBB3_24: # %entry
4497 ; CHECK-NEXT: lwsync
4498 ; CHECK-NEXT: std 27, ull@toc@l(29)
4499 ; CHECK-NEXT: lbz 30, uc@toc@l(3)
4500 ; CHECK-NEXT: lbz 29, sc@toc@l(4)
4502 ; CHECK-NEXT: .LBB3_25: # %entry
4504 ; CHECK-NEXT: lbarx 28, 0, 0
4505 ; CHECK-NEXT: cmpw 28, 30
4506 ; CHECK-NEXT: bne 0, .LBB3_27
4507 ; CHECK-NEXT: # %bb.26: # %entry
4509 ; CHECK-NEXT: stbcx. 29, 0, 0
4510 ; CHECK-NEXT: bne 0, .LBB3_25
4511 ; CHECK-NEXT: .LBB3_27: # %entry
4512 ; CHECK-NEXT: xor 0, 28, 30
4513 ; CHECK-NEXT: lwsync
4514 ; CHECK-NEXT: cntlzw 0, 0
4515 ; CHECK-NEXT: lbz 30, sc@toc@l(4)
4516 ; CHECK-NEXT: srwi 0, 0, 5
4517 ; CHECK-NEXT: stw 0, ui@toc@l(5)
4518 ; CHECK-NEXT: lbz 0, uc@toc@l(3)
4520 ; CHECK-NEXT: .LBB3_28: # %entry
4522 ; CHECK-NEXT: lbarx 29, 0, 6
4523 ; CHECK-NEXT: cmpw 29, 0
4524 ; CHECK-NEXT: bne 0, .LBB3_30
4525 ; CHECK-NEXT: # %bb.29: # %entry
4527 ; CHECK-NEXT: stbcx. 30, 0, 6
4528 ; CHECK-NEXT: bne 0, .LBB3_28
4529 ; CHECK-NEXT: .LBB3_30: # %entry
4530 ; CHECK-NEXT: xor 6, 29, 0
4531 ; CHECK-NEXT: lwsync
4532 ; CHECK-NEXT: cntlzw 6, 6
4533 ; CHECK-NEXT: lbz 0, sc@toc@l(4)
4534 ; CHECK-NEXT: srwi 6, 6, 5
4535 ; CHECK-NEXT: stw 6, ui@toc@l(5)
4536 ; CHECK-NEXT: lbz 6, uc@toc@l(3)
4537 ; CHECK-NEXT: extsb 0, 0
4539 ; CHECK-NEXT: .LBB3_31: # %entry
4541 ; CHECK-NEXT: lharx 30, 0, 12
4542 ; CHECK-NEXT: cmpw 30, 6
4543 ; CHECK-NEXT: bne 0, .LBB3_33
4544 ; CHECK-NEXT: # %bb.32: # %entry
4546 ; CHECK-NEXT: sthcx. 0, 0, 12
4547 ; CHECK-NEXT: bne 0, .LBB3_31
4548 ; CHECK-NEXT: .LBB3_33: # %entry
4549 ; CHECK-NEXT: xor 6, 30, 6
4550 ; CHECK-NEXT: lwsync
4551 ; CHECK-NEXT: cntlzw 6, 6
4552 ; CHECK-NEXT: lbz 12, sc@toc@l(4)
4553 ; CHECK-NEXT: srwi 6, 6, 5
4554 ; CHECK-NEXT: stw 6, ui@toc@l(5)
4555 ; CHECK-NEXT: lbz 6, uc@toc@l(3)
4556 ; CHECK-NEXT: extsb 12, 12
4558 ; CHECK-NEXT: .LBB3_34: # %entry
4560 ; CHECK-NEXT: lharx 0, 0, 11
4561 ; CHECK-NEXT: cmpw 0, 6
4562 ; CHECK-NEXT: bne 0, .LBB3_36
4563 ; CHECK-NEXT: # %bb.35: # %entry
4565 ; CHECK-NEXT: sthcx. 12, 0, 11
4566 ; CHECK-NEXT: bne 0, .LBB3_34
4567 ; CHECK-NEXT: .LBB3_36: # %entry
4568 ; CHECK-NEXT: xor 6, 0, 6
4569 ; CHECK-NEXT: lwsync
4570 ; CHECK-NEXT: cntlzw 6, 6
4571 ; CHECK-NEXT: lbz 11, sc@toc@l(4)
4572 ; CHECK-NEXT: srwi 6, 6, 5
4573 ; CHECK-NEXT: stw 6, ui@toc@l(5)
4574 ; CHECK-NEXT: lbz 6, uc@toc@l(3)
4575 ; CHECK-NEXT: extsb 11, 11
4577 ; CHECK-NEXT: .LBB3_37: # %entry
4579 ; CHECK-NEXT: lwarx 12, 0, 10
4580 ; CHECK-NEXT: cmpw 12, 6
4581 ; CHECK-NEXT: bne 0, .LBB3_39
4582 ; CHECK-NEXT: # %bb.38: # %entry
4584 ; CHECK-NEXT: stwcx. 11, 0, 10
4585 ; CHECK-NEXT: bne 0, .LBB3_37
4586 ; CHECK-NEXT: .LBB3_39: # %entry
4587 ; CHECK-NEXT: xor 6, 12, 6
4588 ; CHECK-NEXT: lwsync
4589 ; CHECK-NEXT: cntlzw 6, 6
4590 ; CHECK-NEXT: lbz 10, sc@toc@l(4)
4591 ; CHECK-NEXT: srwi 6, 6, 5
4592 ; CHECK-NEXT: stw 6, ui@toc@l(5)
4593 ; CHECK-NEXT: lbz 6, uc@toc@l(3)
4594 ; CHECK-NEXT: extsb 10, 10
4596 ; CHECK-NEXT: .LBB3_40: # %entry
4598 ; CHECK-NEXT: lwarx 11, 0, 9
4599 ; CHECK-NEXT: cmpw 11, 6
4600 ; CHECK-NEXT: bne 0, .LBB3_42
4601 ; CHECK-NEXT: # %bb.41: # %entry
4603 ; CHECK-NEXT: stwcx. 10, 0, 9
4604 ; CHECK-NEXT: bne 0, .LBB3_40
4605 ; CHECK-NEXT: .LBB3_42: # %entry
4606 ; CHECK-NEXT: xor 6, 11, 6
4607 ; CHECK-NEXT: lwsync
4608 ; CHECK-NEXT: cntlzw 6, 6
4609 ; CHECK-NEXT: lbz 9, sc@toc@l(4)
4610 ; CHECK-NEXT: srwi 6, 6, 5
4611 ; CHECK-NEXT: stw 6, ui@toc@l(5)
4612 ; CHECK-NEXT: lbz 6, uc@toc@l(3)
4613 ; CHECK-NEXT: extsb 9, 9
4615 ; CHECK-NEXT: .LBB3_43: # %entry
4617 ; CHECK-NEXT: ldarx 10, 0, 8
4618 ; CHECK-NEXT: cmpd 10, 6
4619 ; CHECK-NEXT: bne 0, .LBB3_45
4620 ; CHECK-NEXT: # %bb.44: # %entry
4622 ; CHECK-NEXT: stdcx. 9, 0, 8
4623 ; CHECK-NEXT: bne 0, .LBB3_43
4624 ; CHECK-NEXT: .LBB3_45: # %entry
4625 ; CHECK-NEXT: xor 6, 10, 6
4626 ; CHECK-NEXT: lwsync
4627 ; CHECK-NEXT: cntlzd 6, 6
4628 ; CHECK-NEXT: lbz 4, sc@toc@l(4)
4629 ; CHECK-NEXT: lbz 3, uc@toc@l(3)
4630 ; CHECK-NEXT: rldicl 6, 6, 58, 63
4631 ; CHECK-NEXT: stw 6, ui@toc@l(5)
4632 ; CHECK-NEXT: extsb 4, 4
4634 ; CHECK-NEXT: .LBB3_46: # %entry
4636 ; CHECK-NEXT: ldarx 6, 0, 7
4637 ; CHECK-NEXT: cmpd 6, 3
4638 ; CHECK-NEXT: bne 0, .LBB3_48
4639 ; CHECK-NEXT: # %bb.47: # %entry
4641 ; CHECK-NEXT: stdcx. 4, 0, 7
4642 ; CHECK-NEXT: bne 0, .LBB3_46
4643 ; CHECK-NEXT: .LBB3_48: # %entry
4644 ; CHECK-NEXT: xor 3, 6, 3
4645 ; CHECK-NEXT: lwsync
4646 ; CHECK-NEXT: cntlzd 3, 3
4647 ; CHECK-NEXT: ld 30, -16(1) # 8-byte Folded Reload
4648 ; CHECK-NEXT: ld 29, -24(1) # 8-byte Folded Reload
4649 ; CHECK-NEXT: ld 28, -32(1) # 8-byte Folded Reload
4650 ; CHECK-NEXT: ld 27, -40(1) # 8-byte Folded Reload
4651 ; CHECK-NEXT: rldicl 3, 3, 58, 63
4652 ; CHECK-NEXT: stw 3, ui@toc@l(5)
4655 ; AIX32-LABEL: test_compare_and_swap:
4656 ; AIX32: # %bb.0: # %entry
4657 ; AIX32-NEXT: mflr 0
4658 ; AIX32-NEXT: stwu 1, -128(1)
4659 ; AIX32-NEXT: stw 0, 136(1)
4660 ; AIX32-NEXT: stw 28, 112(1) # 4-byte Folded Spill
4661 ; AIX32-NEXT: lwz 28, L..C0(2) # @sc
4662 ; AIX32-NEXT: stw 29, 116(1) # 4-byte Folded Spill
4663 ; AIX32-NEXT: lwz 29, L..C1(2) # @uc
4664 ; AIX32-NEXT: stw 23, 92(1) # 4-byte Folded Spill
4665 ; AIX32-NEXT: stw 17, 68(1) # 4-byte Folded Spill
4666 ; AIX32-NEXT: stw 18, 72(1) # 4-byte Folded Spill
4667 ; AIX32-NEXT: lbz 3, 0(28)
4668 ; AIX32-NEXT: rlwinm 4, 28, 3, 27, 28
4669 ; AIX32-NEXT: stw 19, 76(1) # 4-byte Folded Spill
4670 ; AIX32-NEXT: lbz 5, 0(29)
4671 ; AIX32-NEXT: xori 23, 4, 24
4672 ; AIX32-NEXT: li 4, 255
4673 ; AIX32-NEXT: slw 6, 3, 23
4674 ; AIX32-NEXT: slw 3, 4, 23
4675 ; AIX32-NEXT: slw 5, 5, 23
4676 ; AIX32-NEXT: stw 20, 80(1) # 4-byte Folded Spill
4677 ; AIX32-NEXT: and 4, 6, 3
4678 ; AIX32-NEXT: stw 21, 84(1) # 4-byte Folded Spill
4679 ; AIX32-NEXT: stw 22, 88(1) # 4-byte Folded Spill
4680 ; AIX32-NEXT: stw 24, 96(1) # 4-byte Folded Spill
4681 ; AIX32-NEXT: stw 25, 100(1) # 4-byte Folded Spill
4682 ; AIX32-NEXT: stw 26, 104(1) # 4-byte Folded Spill
4683 ; AIX32-NEXT: stw 27, 108(1) # 4-byte Folded Spill
4684 ; AIX32-NEXT: stw 30, 120(1) # 4-byte Folded Spill
4685 ; AIX32-NEXT: stw 31, 124(1) # 4-byte Folded Spill
4686 ; AIX32-NEXT: rlwinm 19, 28, 0, 0, 29
4687 ; AIX32-NEXT: and 5, 5, 3
4689 ; AIX32-NEXT: L..BB3_1: # %entry
4691 ; AIX32-NEXT: lwarx 7, 0, 19
4692 ; AIX32-NEXT: and 6, 7, 3
4693 ; AIX32-NEXT: cmpw 6, 5
4694 ; AIX32-NEXT: bne 0, L..BB3_3
4695 ; AIX32-NEXT: # %bb.2: # %entry
4697 ; AIX32-NEXT: andc 7, 7, 3
4698 ; AIX32-NEXT: or 7, 7, 4
4699 ; AIX32-NEXT: stwcx. 7, 0, 19
4700 ; AIX32-NEXT: bne 0, L..BB3_1
4701 ; AIX32-NEXT: L..BB3_3: # %entry
4702 ; AIX32-NEXT: lwsync
4703 ; AIX32-NEXT: rlwinm 4, 29, 3, 27, 28
4704 ; AIX32-NEXT: srw 3, 6, 23
4705 ; AIX32-NEXT: lbz 5, 0(29)
4706 ; AIX32-NEXT: xori 25, 4, 24
4707 ; AIX32-NEXT: stb 3, 0(28)
4708 ; AIX32-NEXT: slw 4, 3, 25
4709 ; AIX32-NEXT: li 3, 255
4711 ; AIX32-NEXT: slw 6, 5, 25
4712 ; AIX32-NEXT: slw 3, 3, 25
4713 ; AIX32-NEXT: rlwinm 22, 29, 0, 0, 29
4714 ; AIX32-NEXT: and 5, 4, 3
4715 ; AIX32-NEXT: and 6, 6, 3
4716 ; AIX32-NEXT: L..BB3_4: # %entry
4718 ; AIX32-NEXT: lwarx 7, 0, 22
4719 ; AIX32-NEXT: and 4, 7, 3
4720 ; AIX32-NEXT: cmpw 4, 6
4721 ; AIX32-NEXT: bne 0, L..BB3_6
4722 ; AIX32-NEXT: # %bb.5: # %entry
4724 ; AIX32-NEXT: andc 7, 7, 3
4725 ; AIX32-NEXT: or 7, 7, 5
4726 ; AIX32-NEXT: stwcx. 7, 0, 22
4727 ; AIX32-NEXT: bne 0, L..BB3_4
4728 ; AIX32-NEXT: L..BB3_6: # %entry
4729 ; AIX32-NEXT: lwz 3, L..C2(2) # @ss
4730 ; AIX32-NEXT: lwsync
4731 ; AIX32-NEXT: li 7, 0
4732 ; AIX32-NEXT: srw 4, 4, 25
4733 ; AIX32-NEXT: lbz 5, 0(28)
4734 ; AIX32-NEXT: stb 4, 0(29)
4736 ; AIX32-NEXT: rlwinm 6, 3, 3, 27, 27
4737 ; AIX32-NEXT: extsb 5, 5
4738 ; AIX32-NEXT: xori 24, 6, 16
4739 ; AIX32-NEXT: ori 6, 7, 65535
4740 ; AIX32-NEXT: slw 5, 5, 24
4741 ; AIX32-NEXT: slw 7, 4, 24
4742 ; AIX32-NEXT: slw 4, 6, 24
4743 ; AIX32-NEXT: rlwinm 20, 3, 0, 0, 29
4744 ; AIX32-NEXT: and 6, 5, 4
4745 ; AIX32-NEXT: and 7, 7, 4
4746 ; AIX32-NEXT: L..BB3_7: # %entry
4748 ; AIX32-NEXT: lwarx 8, 0, 20
4749 ; AIX32-NEXT: and 5, 8, 4
4750 ; AIX32-NEXT: cmpw 5, 7
4751 ; AIX32-NEXT: bne 0, L..BB3_9
4752 ; AIX32-NEXT: # %bb.8: # %entry
4754 ; AIX32-NEXT: andc 8, 8, 4
4755 ; AIX32-NEXT: or 8, 8, 6
4756 ; AIX32-NEXT: stwcx. 8, 0, 20
4757 ; AIX32-NEXT: bne 0, L..BB3_7
4758 ; AIX32-NEXT: L..BB3_9: # %entry
4759 ; AIX32-NEXT: lwz 4, L..C3(2) # @us
4760 ; AIX32-NEXT: lwsync
4761 ; AIX32-NEXT: srw 5, 5, 24
4762 ; AIX32-NEXT: lbz 6, 0(28)
4763 ; AIX32-NEXT: sth 5, 0(3)
4764 ; AIX32-NEXT: li 5, 0
4765 ; AIX32-NEXT: lbz 7, 0(29)
4767 ; AIX32-NEXT: rlwinm 3, 4, 3, 27, 27
4768 ; AIX32-NEXT: extsb 6, 6
4769 ; AIX32-NEXT: xori 21, 3, 16
4770 ; AIX32-NEXT: ori 3, 5, 65535
4771 ; AIX32-NEXT: slw 5, 6, 21
4772 ; AIX32-NEXT: slw 7, 7, 21
4773 ; AIX32-NEXT: slw 3, 3, 21
4774 ; AIX32-NEXT: rlwinm 18, 4, 0, 0, 29
4775 ; AIX32-NEXT: and 6, 5, 3
4776 ; AIX32-NEXT: and 7, 7, 3
4777 ; AIX32-NEXT: L..BB3_10: # %entry
4779 ; AIX32-NEXT: lwarx 8, 0, 18
4780 ; AIX32-NEXT: and 5, 8, 3
4781 ; AIX32-NEXT: cmpw 5, 7
4782 ; AIX32-NEXT: bne 0, L..BB3_12
4783 ; AIX32-NEXT: # %bb.11: # %entry
4785 ; AIX32-NEXT: andc 8, 8, 3
4786 ; AIX32-NEXT: or 8, 8, 6
4787 ; AIX32-NEXT: stwcx. 8, 0, 18
4788 ; AIX32-NEXT: bne 0, L..BB3_10
4789 ; AIX32-NEXT: L..BB3_12: # %entry
4790 ; AIX32-NEXT: lwsync
4791 ; AIX32-NEXT: srw 3, 5, 21
4792 ; AIX32-NEXT: lwz 17, L..C4(2) # @si
4793 ; AIX32-NEXT: lbz 5, 0(28)
4794 ; AIX32-NEXT: sth 3, 0(4)
4795 ; AIX32-NEXT: lbz 3, 0(29)
4797 ; AIX32-NEXT: extsb 4, 5
4798 ; AIX32-NEXT: L..BB3_13: # %entry
4800 ; AIX32-NEXT: lwarx 5, 0, 17
4801 ; AIX32-NEXT: cmpw 5, 3
4802 ; AIX32-NEXT: bne 0, L..BB3_15
4803 ; AIX32-NEXT: # %bb.14: # %entry
4805 ; AIX32-NEXT: stwcx. 4, 0, 17
4806 ; AIX32-NEXT: bne 0, L..BB3_13
4807 ; AIX32-NEXT: L..BB3_15: # %entry
4808 ; AIX32-NEXT: lwsync
4809 ; AIX32-NEXT: lwz 27, L..C5(2) # @ui
4810 ; AIX32-NEXT: stw 5, 0(17)
4811 ; AIX32-NEXT: lbz 4, 0(28)
4812 ; AIX32-NEXT: lbz 3, 0(29)
4814 ; AIX32-NEXT: extsb 4, 4
4815 ; AIX32-NEXT: L..BB3_16: # %entry
4817 ; AIX32-NEXT: lwarx 5, 0, 27
4818 ; AIX32-NEXT: cmpw 5, 3
4819 ; AIX32-NEXT: bne 0, L..BB3_18
4820 ; AIX32-NEXT: # %bb.17: # %entry
4822 ; AIX32-NEXT: stwcx. 4, 0, 27
4823 ; AIX32-NEXT: bne 0, L..BB3_16
4824 ; AIX32-NEXT: L..BB3_18: # %entry
4825 ; AIX32-NEXT: lwsync
4826 ; AIX32-NEXT: lwz 31, L..C6(2) # @sll
4827 ; AIX32-NEXT: stw 5, 0(27)
4828 ; AIX32-NEXT: li 26, 0
4829 ; AIX32-NEXT: li 7, 5
4830 ; AIX32-NEXT: lbz 4, 0(28)
4831 ; AIX32-NEXT: lbz 3, 0(29)
4832 ; AIX32-NEXT: li 8, 5
4833 ; AIX32-NEXT: stw 26, 56(1)
4834 ; AIX32-NEXT: extsb 6, 4
4835 ; AIX32-NEXT: stw 3, 60(1)
4836 ; AIX32-NEXT: addi 4, 1, 56
4837 ; AIX32-NEXT: srawi 5, 6, 31
4838 ; AIX32-NEXT: mr 3, 31
4839 ; AIX32-NEXT: bl .__atomic_compare_exchange_8[PR]
4841 ; AIX32-NEXT: lbz 5, 0(28)
4842 ; AIX32-NEXT: lwz 30, L..C7(2) # @ull
4843 ; AIX32-NEXT: lwz 3, 60(1)
4844 ; AIX32-NEXT: li 7, 5
4845 ; AIX32-NEXT: li 8, 5
4846 ; AIX32-NEXT: lwz 4, 56(1)
4847 ; AIX32-NEXT: lbz 9, 0(29)
4848 ; AIX32-NEXT: extsb 6, 5
4849 ; AIX32-NEXT: stw 3, 4(31)
4850 ; AIX32-NEXT: stw 4, 0(31)
4851 ; AIX32-NEXT: srawi 5, 6, 31
4852 ; AIX32-NEXT: addi 4, 1, 56
4853 ; AIX32-NEXT: mr 3, 30
4854 ; AIX32-NEXT: stw 9, 60(1)
4855 ; AIX32-NEXT: stw 26, 56(1)
4856 ; AIX32-NEXT: bl .__atomic_compare_exchange_8[PR]
4858 ; AIX32-NEXT: lwz 3, 60(1)
4859 ; AIX32-NEXT: lwz 5, 56(1)
4860 ; AIX32-NEXT: lbz 6, 0(28)
4861 ; AIX32-NEXT: lbz 4, 0(29)
4862 ; AIX32-NEXT: stw 3, 4(30)
4863 ; AIX32-NEXT: li 3, 255
4864 ; AIX32-NEXT: stw 5, 0(30)
4865 ; AIX32-NEXT: slw 5, 6, 23
4866 ; AIX32-NEXT: slw 6, 4, 23
4867 ; AIX32-NEXT: slw 3, 3, 23
4869 ; AIX32-NEXT: and 5, 5, 3
4870 ; AIX32-NEXT: and 6, 6, 3
4871 ; AIX32-NEXT: L..BB3_19: # %entry
4873 ; AIX32-NEXT: lwarx 8, 0, 19
4874 ; AIX32-NEXT: and 7, 8, 3
4875 ; AIX32-NEXT: cmpw 7, 6
4876 ; AIX32-NEXT: bne 0, L..BB3_21
4877 ; AIX32-NEXT: # %bb.20: # %entry
4879 ; AIX32-NEXT: andc 8, 8, 3
4880 ; AIX32-NEXT: or 8, 8, 5
4881 ; AIX32-NEXT: stwcx. 8, 0, 19
4882 ; AIX32-NEXT: bne 0, L..BB3_19
4883 ; AIX32-NEXT: L..BB3_21: # %entry
4884 ; AIX32-NEXT: srw 5, 7, 23
4885 ; AIX32-NEXT: lwsync
4886 ; AIX32-NEXT: li 3, 1
4887 ; AIX32-NEXT: li 7, 255
4888 ; AIX32-NEXT: cmpw 5, 4
4889 ; AIX32-NEXT: lbz 5, 0(28)
4890 ; AIX32-NEXT: lbz 4, 0(29)
4891 ; AIX32-NEXT: iseleq 6, 3, 26
4892 ; AIX32-NEXT: stw 6, 0(27)
4893 ; AIX32-NEXT: slw 5, 5, 25
4894 ; AIX32-NEXT: slw 8, 4, 25
4895 ; AIX32-NEXT: slw 6, 7, 25
4897 ; AIX32-NEXT: and 7, 5, 6
4898 ; AIX32-NEXT: and 8, 8, 6
4899 ; AIX32-NEXT: L..BB3_22: # %entry
4901 ; AIX32-NEXT: lwarx 9, 0, 22
4902 ; AIX32-NEXT: and 5, 9, 6
4903 ; AIX32-NEXT: cmpw 5, 8
4904 ; AIX32-NEXT: bne 0, L..BB3_24
4905 ; AIX32-NEXT: # %bb.23: # %entry
4907 ; AIX32-NEXT: andc 9, 9, 6
4908 ; AIX32-NEXT: or 9, 9, 7
4909 ; AIX32-NEXT: stwcx. 9, 0, 22
4910 ; AIX32-NEXT: bne 0, L..BB3_22
4911 ; AIX32-NEXT: L..BB3_24: # %entry
4912 ; AIX32-NEXT: lwsync
4913 ; AIX32-NEXT: srw 5, 5, 25
4914 ; AIX32-NEXT: lbz 6, 0(28)
4915 ; AIX32-NEXT: cmpw 5, 4
4916 ; AIX32-NEXT: li 5, 0
4917 ; AIX32-NEXT: lbz 4, 0(29)
4918 ; AIX32-NEXT: iseleq 7, 3, 26
4919 ; AIX32-NEXT: ori 5, 5, 65535
4920 ; AIX32-NEXT: extsb 6, 6
4921 ; AIX32-NEXT: stw 7, 0(27)
4922 ; AIX32-NEXT: slw 7, 6, 24
4923 ; AIX32-NEXT: slw 8, 4, 24
4925 ; AIX32-NEXT: slw 6, 5, 24
4926 ; AIX32-NEXT: and 7, 7, 6
4927 ; AIX32-NEXT: and 8, 8, 6
4928 ; AIX32-NEXT: L..BB3_25: # %entry
4930 ; AIX32-NEXT: lwarx 9, 0, 20
4931 ; AIX32-NEXT: and 5, 9, 6
4932 ; AIX32-NEXT: cmpw 5, 8
4933 ; AIX32-NEXT: bne 0, L..BB3_27
4934 ; AIX32-NEXT: # %bb.26: # %entry
4936 ; AIX32-NEXT: andc 9, 9, 6
4937 ; AIX32-NEXT: or 9, 9, 7
4938 ; AIX32-NEXT: stwcx. 9, 0, 20
4939 ; AIX32-NEXT: bne 0, L..BB3_25
4940 ; AIX32-NEXT: L..BB3_27: # %entry
4941 ; AIX32-NEXT: lwsync
4942 ; AIX32-NEXT: srw 5, 5, 24
4943 ; AIX32-NEXT: lbz 6, 0(28)
4944 ; AIX32-NEXT: cmpw 5, 4
4945 ; AIX32-NEXT: li 5, 0
4946 ; AIX32-NEXT: lbz 4, 0(29)
4947 ; AIX32-NEXT: iseleq 7, 3, 26
4948 ; AIX32-NEXT: ori 5, 5, 65535
4949 ; AIX32-NEXT: extsb 6, 6
4950 ; AIX32-NEXT: stw 7, 0(27)
4951 ; AIX32-NEXT: slw 6, 6, 21
4952 ; AIX32-NEXT: slw 7, 4, 21
4954 ; AIX32-NEXT: slw 5, 5, 21
4955 ; AIX32-NEXT: and 6, 6, 5
4956 ; AIX32-NEXT: and 7, 7, 5
4957 ; AIX32-NEXT: L..BB3_28: # %entry
4959 ; AIX32-NEXT: lwarx 9, 0, 18
4960 ; AIX32-NEXT: and 8, 9, 5
4961 ; AIX32-NEXT: cmpw 8, 7
4962 ; AIX32-NEXT: bne 0, L..BB3_30
4963 ; AIX32-NEXT: # %bb.29: # %entry
4965 ; AIX32-NEXT: andc 9, 9, 5
4966 ; AIX32-NEXT: or 9, 9, 6
4967 ; AIX32-NEXT: stwcx. 9, 0, 18
4968 ; AIX32-NEXT: bne 0, L..BB3_28
4969 ; AIX32-NEXT: L..BB3_30: # %entry
4970 ; AIX32-NEXT: srw 5, 8, 21
4971 ; AIX32-NEXT: lwsync
4972 ; AIX32-NEXT: cmpw 5, 4
4973 ; AIX32-NEXT: lbz 5, 0(28)
4974 ; AIX32-NEXT: iseleq 4, 3, 26
4975 ; AIX32-NEXT: stw 4, 0(27)
4976 ; AIX32-NEXT: lbz 4, 0(29)
4977 ; AIX32-NEXT: extsb 5, 5
4979 ; AIX32-NEXT: L..BB3_31: # %entry
4981 ; AIX32-NEXT: lwarx 6, 0, 17
4982 ; AIX32-NEXT: cmpw 1, 6, 4
4983 ; AIX32-NEXT: bne 1, L..BB3_33
4984 ; AIX32-NEXT: # %bb.32: # %entry
4986 ; AIX32-NEXT: stwcx. 5, 0, 17
4987 ; AIX32-NEXT: bne 0, L..BB3_31
4988 ; AIX32-NEXT: L..BB3_33: # %entry
4989 ; AIX32-NEXT: lwsync
4990 ; AIX32-NEXT: isel 4, 3, 26, 6
4991 ; AIX32-NEXT: lbz 5, 0(28)
4992 ; AIX32-NEXT: stw 4, 0(27)
4993 ; AIX32-NEXT: lbz 4, 0(29)
4995 ; AIX32-NEXT: extsb 5, 5
4996 ; AIX32-NEXT: L..BB3_34: # %entry
4998 ; AIX32-NEXT: lwarx 6, 0, 27
4999 ; AIX32-NEXT: cmpw 1, 6, 4
5000 ; AIX32-NEXT: bne 1, L..BB3_36
5001 ; AIX32-NEXT: # %bb.35: # %entry
5003 ; AIX32-NEXT: stwcx. 5, 0, 27
5004 ; AIX32-NEXT: bne 0, L..BB3_34
5005 ; AIX32-NEXT: L..BB3_36: # %entry
5006 ; AIX32-NEXT: lwsync
5007 ; AIX32-NEXT: isel 3, 3, 26, 6
5008 ; AIX32-NEXT: li 7, 5
5009 ; AIX32-NEXT: li 8, 5
5010 ; AIX32-NEXT: lbz 4, 0(28)
5011 ; AIX32-NEXT: lbz 9, 0(29)
5012 ; AIX32-NEXT: stw 3, 0(27)
5013 ; AIX32-NEXT: mr 3, 31
5014 ; AIX32-NEXT: extsb 6, 4
5015 ; AIX32-NEXT: addi 4, 1, 56
5016 ; AIX32-NEXT: srawi 5, 6, 31
5017 ; AIX32-NEXT: stw 9, 60(1)
5018 ; AIX32-NEXT: stw 26, 56(1)
5019 ; AIX32-NEXT: bl .__atomic_compare_exchange_8[PR]
5021 ; AIX32-NEXT: lbz 4, 0(28)
5022 ; AIX32-NEXT: lbz 9, 0(29)
5023 ; AIX32-NEXT: li 7, 5
5024 ; AIX32-NEXT: li 8, 5
5025 ; AIX32-NEXT: stw 3, 0(27)
5026 ; AIX32-NEXT: mr 3, 30
5027 ; AIX32-NEXT: extsb 6, 4
5028 ; AIX32-NEXT: addi 4, 1, 56
5029 ; AIX32-NEXT: srawi 5, 6, 31
5030 ; AIX32-NEXT: stw 9, 60(1)
5031 ; AIX32-NEXT: stw 26, 56(1)
5032 ; AIX32-NEXT: bl .__atomic_compare_exchange_8[PR]
5034 ; AIX32-NEXT: stw 3, 0(27)
5035 ; AIX32-NEXT: lwz 31, 124(1) # 4-byte Folded Reload
5036 ; AIX32-NEXT: lwz 30, 120(1) # 4-byte Folded Reload
5037 ; AIX32-NEXT: lwz 29, 116(1) # 4-byte Folded Reload
5038 ; AIX32-NEXT: lwz 28, 112(1) # 4-byte Folded Reload
5039 ; AIX32-NEXT: lwz 27, 108(1) # 4-byte Folded Reload
5040 ; AIX32-NEXT: lwz 26, 104(1) # 4-byte Folded Reload
5041 ; AIX32-NEXT: lwz 25, 100(1) # 4-byte Folded Reload
5042 ; AIX32-NEXT: lwz 24, 96(1) # 4-byte Folded Reload
5043 ; AIX32-NEXT: lwz 23, 92(1) # 4-byte Folded Reload
5044 ; AIX32-NEXT: lwz 22, 88(1) # 4-byte Folded Reload
5045 ; AIX32-NEXT: lwz 21, 84(1) # 4-byte Folded Reload
5046 ; AIX32-NEXT: lwz 20, 80(1) # 4-byte Folded Reload
5047 ; AIX32-NEXT: lwz 19, 76(1) # 4-byte Folded Reload
5048 ; AIX32-NEXT: lwz 18, 72(1) # 4-byte Folded Reload
5049 ; AIX32-NEXT: lwz 17, 68(1) # 4-byte Folded Reload
5050 ; AIX32-NEXT: addi 1, 1, 128
5051 ; AIX32-NEXT: lwz 0, 8(1)
5052 ; AIX32-NEXT: mtlr 0
5055 %0 = load i8, ptr @uc, align 1
5056 %1 = load i8, ptr @sc, align 1
5057 %2 = cmpxchg ptr @sc, i8 %0, i8 %1 seq_cst seq_cst, align 1
5058 %3 = extractvalue { i8, i1 } %2, 0
5059 store i8 %3, ptr @sc, align 1
5060 %4 = load i8, ptr @uc, align 1
5061 %5 = cmpxchg ptr @uc, i8 %4, i8 %3 seq_cst seq_cst, align 1
5062 %6 = extractvalue { i8, i1 } %5, 0
5063 store i8 %6, ptr @uc, align 1
5064 %conv = zext i8 %6 to i16
5065 %7 = load i8, ptr @sc, align 1
5066 %conv1 = sext i8 %7 to i16
5067 %8 = cmpxchg ptr @ss, i16 %conv, i16 %conv1 seq_cst seq_cst, align 2
5068 %9 = extractvalue { i16, i1 } %8, 0
5069 store i16 %9, ptr @ss, align 2
5070 %10 = load i8, ptr @uc, align 1
5071 %conv2 = zext i8 %10 to i16
5072 %11 = load i8, ptr @sc, align 1
5073 %conv3 = sext i8 %11 to i16
5074 %12 = cmpxchg ptr @us, i16 %conv2, i16 %conv3 seq_cst seq_cst, align 2
5075 %13 = extractvalue { i16, i1 } %12, 0
5076 store i16 %13, ptr @us, align 2
5077 %14 = load i8, ptr @uc, align 1
5078 %conv4 = zext i8 %14 to i32
5079 %15 = load i8, ptr @sc, align 1
5080 %conv5 = sext i8 %15 to i32
5081 %16 = cmpxchg ptr @si, i32 %conv4, i32 %conv5 seq_cst seq_cst, align 4
5082 %17 = extractvalue { i32, i1 } %16, 0
5083 store i32 %17, ptr @si, align 4
5084 %18 = load i8, ptr @uc, align 1
5085 %conv6 = zext i8 %18 to i32
5086 %19 = load i8, ptr @sc, align 1
5087 %conv7 = sext i8 %19 to i32
5088 %20 = cmpxchg ptr @ui, i32 %conv6, i32 %conv7 seq_cst seq_cst, align 4
5089 %21 = extractvalue { i32, i1 } %20, 0
5090 store i32 %21, ptr @ui, align 4
5091 %22 = load i8, ptr @uc, align 1
5092 %conv8 = zext i8 %22 to i64
5093 %23 = load i8, ptr @sc, align 1
5094 %conv9 = sext i8 %23 to i64
5095 %24 = cmpxchg ptr @sll, i64 %conv8, i64 %conv9 seq_cst seq_cst, align 8
5096 %25 = extractvalue { i64, i1 } %24, 0
5097 store i64 %25, ptr @sll, align 8
5098 %26 = load i8, ptr @uc, align 1
5099 %conv10 = zext i8 %26 to i64
5100 %27 = load i8, ptr @sc, align 1
5101 %conv11 = sext i8 %27 to i64
5102 %28 = cmpxchg ptr @ull, i64 %conv10, i64 %conv11 seq_cst seq_cst, align 8
5103 %29 = extractvalue { i64, i1 } %28, 0
5104 store i64 %29, ptr @ull, align 8
5105 %30 = load i8, ptr @uc, align 1
5106 %31 = load i8, ptr @sc, align 1
5107 %32 = cmpxchg ptr @sc, i8 %30, i8 %31 seq_cst seq_cst, align 1
5108 %33 = extractvalue { i8, i1 } %32, 1
5109 %conv12 = zext i1 %33 to i32
5110 store i32 %conv12, ptr @ui, align 4
5111 %34 = load i8, ptr @uc, align 1
5112 %35 = load i8, ptr @sc, align 1
5113 %36 = cmpxchg ptr @uc, i8 %34, i8 %35 seq_cst seq_cst, align 1
5114 %37 = extractvalue { i8, i1 } %36, 1
5115 %conv13 = zext i1 %37 to i32
5116 store i32 %conv13, ptr @ui, align 4
5117 %38 = load i8, ptr @uc, align 1
5118 %conv14 = zext i8 %38 to i16
5119 %39 = load i8, ptr @sc, align 1
5120 %conv15 = sext i8 %39 to i16
5121 %40 = cmpxchg ptr @ss, i16 %conv14, i16 %conv15 seq_cst seq_cst, align 2
5122 %41 = extractvalue { i16, i1 } %40, 1
5123 %conv16 = zext i1 %41 to i32
5124 store i32 %conv16, ptr @ui, align 4
5125 %42 = load i8, ptr @uc, align 1
5126 %conv17 = zext i8 %42 to i16
5127 %43 = load i8, ptr @sc, align 1
5128 %conv18 = sext i8 %43 to i16
5129 %44 = cmpxchg ptr @us, i16 %conv17, i16 %conv18 seq_cst seq_cst, align 2
5130 %45 = extractvalue { i16, i1 } %44, 1
5131 %conv19 = zext i1 %45 to i32
5132 store i32 %conv19, ptr @ui, align 4
5133 %46 = load i8, ptr @uc, align 1
5134 %conv20 = zext i8 %46 to i32
5135 %47 = load i8, ptr @sc, align 1
5136 %conv21 = sext i8 %47 to i32
5137 %48 = cmpxchg ptr @si, i32 %conv20, i32 %conv21 seq_cst seq_cst, align 4
5138 %49 = extractvalue { i32, i1 } %48, 1
5139 %conv22 = zext i1 %49 to i32
5140 store i32 %conv22, ptr @ui, align 4
5141 %50 = load i8, ptr @uc, align 1
5142 %conv23 = zext i8 %50 to i32
5143 %51 = load i8, ptr @sc, align 1
5144 %conv24 = sext i8 %51 to i32
5145 %52 = cmpxchg ptr @ui, i32 %conv23, i32 %conv24 seq_cst seq_cst, align 4
5146 %53 = extractvalue { i32, i1 } %52, 1
5147 %conv25 = zext i1 %53 to i32
5148 store i32 %conv25, ptr @ui, align 4
5149 %54 = load i8, ptr @uc, align 1
5150 %conv26 = zext i8 %54 to i64
5151 %55 = load i8, ptr @sc, align 1
5152 %conv27 = sext i8 %55 to i64
5153 %56 = cmpxchg ptr @sll, i64 %conv26, i64 %conv27 seq_cst seq_cst, align 8
5154 %57 = extractvalue { i64, i1 } %56, 1
5155 %conv28 = zext i1 %57 to i32
5156 store i32 %conv28, ptr @ui, align 4
5157 %58 = load i8, ptr @uc, align 1
5158 %conv29 = zext i8 %58 to i64
5159 %59 = load i8, ptr @sc, align 1
5160 %conv30 = sext i8 %59 to i64
5161 %60 = cmpxchg ptr @ull, i64 %conv29, i64 %conv30 seq_cst seq_cst, align 8
5162 %61 = extractvalue { i64, i1 } %60, 1
5163 %conv31 = zext i1 %61 to i32
5164 store i32 %conv31, ptr @ui, align 4
5168 define dso_local void @test_lock() local_unnamed_addr #0 {
5169 ; CHECK-LABEL: test_lock:
5170 ; CHECK: # %bb.0: # %entry
5171 ; CHECK-NEXT: addis 3, 2, sc@toc@ha
5172 ; CHECK-NEXT: li 7, 1
5174 ; CHECK-NEXT: addi 4, 3, sc@toc@l
5175 ; CHECK-NEXT: .LBB4_1: # %entry
5177 ; CHECK-NEXT: lbarx 5, 0, 4
5178 ; CHECK-NEXT: stbcx. 7, 0, 4
5179 ; CHECK-NEXT: bne 0, .LBB4_1
5180 ; CHECK-NEXT: # %bb.2: # %entry
5181 ; CHECK-NEXT: addis 4, 2, uc@toc@ha
5182 ; CHECK-NEXT: lwsync
5183 ; CHECK-NEXT: stb 5, sc@toc@l(3)
5184 ; CHECK-NEXT: addi 6, 4, uc@toc@l
5186 ; CHECK-NEXT: .LBB4_3: # %entry
5188 ; CHECK-NEXT: lbarx 5, 0, 6
5189 ; CHECK-NEXT: stbcx. 7, 0, 6
5190 ; CHECK-NEXT: bne 0, .LBB4_3
5191 ; CHECK-NEXT: # %bb.4: # %entry
5192 ; CHECK-NEXT: lwsync
5193 ; CHECK-NEXT: stb 5, uc@toc@l(4)
5194 ; CHECK-NEXT: addis 5, 2, ss@toc@ha
5195 ; CHECK-NEXT: addi 8, 5, ss@toc@l
5197 ; CHECK-NEXT: .LBB4_5: # %entry
5199 ; CHECK-NEXT: lharx 6, 0, 8
5200 ; CHECK-NEXT: sthcx. 7, 0, 8
5201 ; CHECK-NEXT: bne 0, .LBB4_5
5202 ; CHECK-NEXT: # %bb.6: # %entry
5203 ; CHECK-NEXT: lwsync
5204 ; CHECK-NEXT: sth 6, ss@toc@l(5)
5205 ; CHECK-NEXT: addis 6, 2, us@toc@ha
5206 ; CHECK-NEXT: addi 9, 6, us@toc@l
5208 ; CHECK-NEXT: .LBB4_7: # %entry
5210 ; CHECK-NEXT: lharx 8, 0, 9
5211 ; CHECK-NEXT: sthcx. 7, 0, 9
5212 ; CHECK-NEXT: bne 0, .LBB4_7
5213 ; CHECK-NEXT: # %bb.8: # %entry
5214 ; CHECK-NEXT: lwsync
5215 ; CHECK-NEXT: sth 8, us@toc@l(6)
5216 ; CHECK-NEXT: addis 8, 2, si@toc@ha
5217 ; CHECK-NEXT: addi 10, 8, si@toc@l
5219 ; CHECK-NEXT: .LBB4_9: # %entry
5221 ; CHECK-NEXT: lwarx 9, 0, 10
5222 ; CHECK-NEXT: stwcx. 7, 0, 10
5223 ; CHECK-NEXT: bne 0, .LBB4_9
5224 ; CHECK-NEXT: # %bb.10: # %entry
5225 ; CHECK-NEXT: lwsync
5226 ; CHECK-NEXT: stw 9, si@toc@l(8)
5227 ; CHECK-NEXT: addis 9, 2, ui@toc@ha
5228 ; CHECK-NEXT: addi 11, 9, ui@toc@l
5230 ; CHECK-NEXT: .LBB4_11: # %entry
5232 ; CHECK-NEXT: lwarx 10, 0, 11
5233 ; CHECK-NEXT: stwcx. 7, 0, 11
5234 ; CHECK-NEXT: bne 0, .LBB4_11
5235 ; CHECK-NEXT: # %bb.12: # %entry
5236 ; CHECK-NEXT: addis 7, 2, sll@toc@ha
5237 ; CHECK-NEXT: lwsync
5238 ; CHECK-NEXT: stw 10, ui@toc@l(9)
5239 ; CHECK-NEXT: li 11, 1
5240 ; CHECK-NEXT: addi 10, 7, sll@toc@l
5242 ; CHECK-NEXT: .LBB4_13: # %entry
5244 ; CHECK-NEXT: ldarx 12, 0, 10
5245 ; CHECK-NEXT: stdcx. 11, 0, 10
5246 ; CHECK-NEXT: bne 0, .LBB4_13
5247 ; CHECK-NEXT: # %bb.14: # %entry
5248 ; CHECK-NEXT: addis 10, 2, ull@toc@ha
5249 ; CHECK-NEXT: lwsync
5250 ; CHECK-NEXT: std 12, sll@toc@l(7)
5251 ; CHECK-NEXT: addi 0, 10, ull@toc@l
5253 ; CHECK-NEXT: .LBB4_15: # %entry
5255 ; CHECK-NEXT: ldarx 12, 0, 0
5256 ; CHECK-NEXT: stdcx. 11, 0, 0
5257 ; CHECK-NEXT: bne 0, .LBB4_15
5258 ; CHECK-NEXT: # %bb.16: # %entry
5259 ; CHECK-NEXT: lwsync
5260 ; CHECK-NEXT: std 12, ull@toc@l(10)
5261 ; CHECK-NEXT: li 11, 0
5263 ; CHECK-NEXT: lwsync
5264 ; CHECK-NEXT: stb 11, sc@toc@l(3)
5265 ; CHECK-NEXT: li 3, 0
5266 ; CHECK-NEXT: lwsync
5267 ; CHECK-NEXT: stb 11, uc@toc@l(4)
5268 ; CHECK-NEXT: lwsync
5269 ; CHECK-NEXT: sth 11, ss@toc@l(5)
5270 ; CHECK-NEXT: lwsync
5271 ; CHECK-NEXT: sth 11, us@toc@l(6)
5272 ; CHECK-NEXT: lwsync
5273 ; CHECK-NEXT: stw 11, si@toc@l(8)
5274 ; CHECK-NEXT: lwsync
5275 ; CHECK-NEXT: stw 11, ui@toc@l(9)
5276 ; CHECK-NEXT: lwsync
5277 ; CHECK-NEXT: std 3, sll@toc@l(7)
5278 ; CHECK-NEXT: lwsync
5279 ; CHECK-NEXT: std 3, ull@toc@l(10)
5282 ; AIX32-LABEL: test_lock:
5283 ; AIX32: # %bb.0: # %entry
5284 ; AIX32-NEXT: mflr 0
5285 ; AIX32-NEXT: stwu 1, -96(1)
5286 ; AIX32-NEXT: stw 0, 104(1)
5287 ; AIX32-NEXT: stw 29, 84(1) # 4-byte Folded Spill
5288 ; AIX32-NEXT: lwz 29, L..C0(2) # @sc
5289 ; AIX32-NEXT: li 3, 1
5290 ; AIX32-NEXT: li 5, 255
5291 ; AIX32-NEXT: stw 23, 60(1) # 4-byte Folded Spill
5292 ; AIX32-NEXT: stw 24, 64(1) # 4-byte Folded Spill
5293 ; AIX32-NEXT: rlwinm 4, 29, 3, 27, 28
5294 ; AIX32-NEXT: stw 25, 68(1) # 4-byte Folded Spill
5295 ; AIX32-NEXT: xori 4, 4, 24
5296 ; AIX32-NEXT: stw 26, 72(1) # 4-byte Folded Spill
5297 ; AIX32-NEXT: slw 8, 3, 4
5298 ; AIX32-NEXT: slw 6, 5, 4
5299 ; AIX32-NEXT: stw 27, 76(1) # 4-byte Folded Spill
5300 ; AIX32-NEXT: stw 28, 80(1) # 4-byte Folded Spill
5301 ; AIX32-NEXT: stw 30, 88(1) # 4-byte Folded Spill
5302 ; AIX32-NEXT: stw 31, 92(1) # 4-byte Folded Spill
5303 ; AIX32-NEXT: rlwinm 7, 29, 0, 0, 29
5304 ; AIX32-NEXT: and 8, 8, 6
5306 ; AIX32-NEXT: L..BB4_1: # %entry
5308 ; AIX32-NEXT: lwarx 5, 0, 7
5309 ; AIX32-NEXT: andc 9, 5, 6
5310 ; AIX32-NEXT: or 9, 8, 9
5311 ; AIX32-NEXT: stwcx. 9, 0, 7
5312 ; AIX32-NEXT: bne 0, L..BB4_1
5313 ; AIX32-NEXT: # %bb.2: # %entry
5314 ; AIX32-NEXT: lwz 28, L..C1(2) # @uc
5315 ; AIX32-NEXT: srw 4, 5, 4
5316 ; AIX32-NEXT: lwsync
5317 ; AIX32-NEXT: li 5, 255
5318 ; AIX32-NEXT: clrlwi 4, 4, 24
5319 ; AIX32-NEXT: stb 4, 0(29)
5320 ; AIX32-NEXT: rlwinm 4, 28, 3, 27, 28
5321 ; AIX32-NEXT: rlwinm 6, 28, 0, 0, 29
5323 ; AIX32-NEXT: xori 4, 4, 24
5324 ; AIX32-NEXT: slw 7, 3, 4
5325 ; AIX32-NEXT: slw 5, 5, 4
5326 ; AIX32-NEXT: and 7, 7, 5
5327 ; AIX32-NEXT: L..BB4_3: # %entry
5329 ; AIX32-NEXT: lwarx 8, 0, 6
5330 ; AIX32-NEXT: andc 9, 8, 5
5331 ; AIX32-NEXT: or 9, 7, 9
5332 ; AIX32-NEXT: stwcx. 9, 0, 6
5333 ; AIX32-NEXT: bne 0, L..BB4_3
5334 ; AIX32-NEXT: # %bb.4: # %entry
5335 ; AIX32-NEXT: lwz 27, L..C2(2) # @ss
5336 ; AIX32-NEXT: srw 4, 8, 4
5337 ; AIX32-NEXT: lwsync
5338 ; AIX32-NEXT: li 5, 0
5339 ; AIX32-NEXT: clrlwi 4, 4, 24
5340 ; AIX32-NEXT: ori 5, 5, 65535
5341 ; AIX32-NEXT: stb 4, 0(28)
5342 ; AIX32-NEXT: rlwinm 4, 27, 3, 27, 27
5343 ; AIX32-NEXT: rlwinm 6, 27, 0, 0, 29
5345 ; AIX32-NEXT: xori 4, 4, 16
5346 ; AIX32-NEXT: slw 7, 3, 4
5347 ; AIX32-NEXT: slw 5, 5, 4
5348 ; AIX32-NEXT: and 7, 7, 5
5349 ; AIX32-NEXT: L..BB4_5: # %entry
5351 ; AIX32-NEXT: lwarx 8, 0, 6
5352 ; AIX32-NEXT: andc 9, 8, 5
5353 ; AIX32-NEXT: or 9, 7, 9
5354 ; AIX32-NEXT: stwcx. 9, 0, 6
5355 ; AIX32-NEXT: bne 0, L..BB4_5
5356 ; AIX32-NEXT: # %bb.6: # %entry
5357 ; AIX32-NEXT: lwz 26, L..C3(2) # @us
5358 ; AIX32-NEXT: srw 4, 8, 4
5359 ; AIX32-NEXT: lwsync
5360 ; AIX32-NEXT: li 5, 0
5361 ; AIX32-NEXT: clrlwi 4, 4, 16
5362 ; AIX32-NEXT: ori 5, 5, 65535
5363 ; AIX32-NEXT: sth 4, 0(27)
5364 ; AIX32-NEXT: rlwinm 4, 26, 3, 27, 27
5365 ; AIX32-NEXT: rlwinm 6, 26, 0, 0, 29
5367 ; AIX32-NEXT: xori 4, 4, 16
5368 ; AIX32-NEXT: slw 7, 3, 4
5369 ; AIX32-NEXT: slw 5, 5, 4
5370 ; AIX32-NEXT: and 7, 7, 5
5371 ; AIX32-NEXT: L..BB4_7: # %entry
5373 ; AIX32-NEXT: lwarx 8, 0, 6
5374 ; AIX32-NEXT: andc 9, 8, 5
5375 ; AIX32-NEXT: or 9, 7, 9
5376 ; AIX32-NEXT: stwcx. 9, 0, 6
5377 ; AIX32-NEXT: bne 0, L..BB4_7
5378 ; AIX32-NEXT: # %bb.8: # %entry
5379 ; AIX32-NEXT: srw 4, 8, 4
5380 ; AIX32-NEXT: lwz 25, L..C4(2) # @si
5381 ; AIX32-NEXT: lwsync
5382 ; AIX32-NEXT: clrlwi 4, 4, 16
5383 ; AIX32-NEXT: sth 4, 0(26)
5385 ; AIX32-NEXT: L..BB4_9: # %entry
5387 ; AIX32-NEXT: lwarx 4, 0, 25
5388 ; AIX32-NEXT: stwcx. 3, 0, 25
5389 ; AIX32-NEXT: bne 0, L..BB4_9
5390 ; AIX32-NEXT: # %bb.10: # %entry
5391 ; AIX32-NEXT: lwz 24, L..C5(2) # @ui
5392 ; AIX32-NEXT: lwsync
5393 ; AIX32-NEXT: stw 4, 0(25)
5395 ; AIX32-NEXT: L..BB4_11: # %entry
5397 ; AIX32-NEXT: lwarx 4, 0, 24
5398 ; AIX32-NEXT: stwcx. 3, 0, 24
5399 ; AIX32-NEXT: bne 0, L..BB4_11
5400 ; AIX32-NEXT: # %bb.12: # %entry
5401 ; AIX32-NEXT: lwz 31, L..C6(2) # @sll
5402 ; AIX32-NEXT: lwsync
5403 ; AIX32-NEXT: stw 4, 0(24)
5404 ; AIX32-NEXT: li 4, 0
5405 ; AIX32-NEXT: li 5, 1
5406 ; AIX32-NEXT: li 6, 5
5407 ; AIX32-NEXT: li 23, 0
5408 ; AIX32-NEXT: mr 3, 31
5409 ; AIX32-NEXT: bl .__atomic_exchange_8[PR]
5411 ; AIX32-NEXT: lwz 30, L..C7(2) # @ull
5412 ; AIX32-NEXT: mr 7, 3
5413 ; AIX32-NEXT: mr 8, 4
5414 ; AIX32-NEXT: li 4, 0
5415 ; AIX32-NEXT: li 5, 1
5416 ; AIX32-NEXT: li 6, 5
5417 ; AIX32-NEXT: stw 8, 4(31)
5418 ; AIX32-NEXT: stw 7, 0(31)
5419 ; AIX32-NEXT: mr 3, 30
5420 ; AIX32-NEXT: bl .__atomic_exchange_8[PR]
5422 ; AIX32-NEXT: stw 4, 4(30)
5423 ; AIX32-NEXT: stw 3, 0(30)
5425 ; AIX32-NEXT: mr 3, 31
5426 ; AIX32-NEXT: li 4, 0
5427 ; AIX32-NEXT: li 5, 0
5428 ; AIX32-NEXT: li 6, 3
5429 ; AIX32-NEXT: lwsync
5430 ; AIX32-NEXT: stb 23, 0(29)
5431 ; AIX32-NEXT: lwsync
5432 ; AIX32-NEXT: stb 23, 0(28)
5433 ; AIX32-NEXT: lwsync
5434 ; AIX32-NEXT: sth 23, 0(27)
5435 ; AIX32-NEXT: lwsync
5436 ; AIX32-NEXT: sth 23, 0(26)
5437 ; AIX32-NEXT: lwsync
5438 ; AIX32-NEXT: stw 23, 0(25)
5439 ; AIX32-NEXT: lwsync
5440 ; AIX32-NEXT: stw 23, 0(24)
5441 ; AIX32-NEXT: bl .__atomic_store_8[PR]
5443 ; AIX32-NEXT: mr 3, 30
5444 ; AIX32-NEXT: li 4, 0
5445 ; AIX32-NEXT: li 5, 0
5446 ; AIX32-NEXT: li 6, 3
5447 ; AIX32-NEXT: bl .__atomic_store_8[PR]
5449 ; AIX32-NEXT: lwz 31, 92(1) # 4-byte Folded Reload
5450 ; AIX32-NEXT: lwz 30, 88(1) # 4-byte Folded Reload
5451 ; AIX32-NEXT: lwz 29, 84(1) # 4-byte Folded Reload
5452 ; AIX32-NEXT: lwz 28, 80(1) # 4-byte Folded Reload
5453 ; AIX32-NEXT: lwz 27, 76(1) # 4-byte Folded Reload
5454 ; AIX32-NEXT: lwz 26, 72(1) # 4-byte Folded Reload
5455 ; AIX32-NEXT: lwz 25, 68(1) # 4-byte Folded Reload
5456 ; AIX32-NEXT: lwz 24, 64(1) # 4-byte Folded Reload
5457 ; AIX32-NEXT: lwz 23, 60(1) # 4-byte Folded Reload
5458 ; AIX32-NEXT: addi 1, 1, 96
5459 ; AIX32-NEXT: lwz 0, 8(1)
5460 ; AIX32-NEXT: mtlr 0
5463 %0 = atomicrmw xchg ptr @sc, i8 1 seq_cst, align 1
5464 store i8 %0, ptr @sc, align 1
5465 %1 = atomicrmw xchg ptr @uc, i8 1 seq_cst, align 1
5466 store i8 %1, ptr @uc, align 1
5467 %2 = atomicrmw xchg ptr @ss, i16 1 seq_cst, align 2
5468 store i16 %2, ptr @ss, align 2
5469 %3 = atomicrmw xchg ptr @us, i16 1 seq_cst, align 2
5470 store i16 %3, ptr @us, align 2
5471 %4 = atomicrmw xchg ptr @si, i32 1 seq_cst, align 4
5472 store i32 %4, ptr @si, align 4
5473 %5 = atomicrmw xchg ptr @ui, i32 1 seq_cst, align 4
5474 store i32 %5, ptr @ui, align 4
5475 %6 = atomicrmw xchg ptr @sll, i64 1 seq_cst, align 8
5476 store i64 %6, ptr @sll, align 8
5477 %7 = atomicrmw xchg ptr @ull, i64 1 seq_cst, align 8
5478 store i64 %7, ptr @ull, align 8
5480 store atomic i8 0, ptr @sc release, align 1
5481 store atomic i8 0, ptr @uc release, align 1
5482 store atomic i16 0, ptr @ss release, align 2
5483 store atomic i16 0, ptr @us release, align 2
5484 store atomic i32 0, ptr @si release, align 4
5485 store atomic i32 0, ptr @ui release, align 4
5486 store atomic i64 0, ptr @sll release, align 8
5487 store atomic i64 0, ptr @ull release, align 8
5491 define dso_local void @test_atomic() local_unnamed_addr #0 {
5492 ; CHECK-LABEL: test_atomic:
5493 ; CHECK: # %bb.0: # %entry
5494 ; CHECK-NEXT: addis 4, 2, ui@toc@ha
5495 ; CHECK-NEXT: li 3, 5
5496 ; CHECK-NEXT: addi 6, 4, ui@toc@l
5497 ; CHECK-NEXT: .LBB5_1: # %entry
5499 ; CHECK-NEXT: lwarx 5, 0, 6
5500 ; CHECK-NEXT: cmplwi 5, 5
5501 ; CHECK-NEXT: blt 0, .LBB5_3
5502 ; CHECK-NEXT: # %bb.2: # %entry
5504 ; CHECK-NEXT: stwcx. 3, 0, 6
5505 ; CHECK-NEXT: bne 0, .LBB5_1
5506 ; CHECK-NEXT: .LBB5_3: # %entry
5507 ; CHECK-NEXT: stw 5, ui@toc@l(4)
5508 ; CHECK-NEXT: addis 5, 2, si@toc@ha
5509 ; CHECK-NEXT: addi 7, 5, si@toc@l
5511 ; CHECK-NEXT: .LBB5_4: # %entry
5513 ; CHECK-NEXT: lwarx 8, 0, 7
5514 ; CHECK-NEXT: cmpwi 8, 5
5515 ; CHECK-NEXT: blt 0, .LBB5_6
5516 ; CHECK-NEXT: # %bb.5: # %entry
5518 ; CHECK-NEXT: stwcx. 3, 0, 7
5519 ; CHECK-NEXT: bne 0, .LBB5_4
5520 ; CHECK-NEXT: .LBB5_6: # %entry
5521 ; CHECK-NEXT: lwsync
5522 ; CHECK-NEXT: stw 8, si@toc@l(5)
5523 ; CHECK-NEXT: .LBB5_7: # %entry
5525 ; CHECK-NEXT: lwarx 8, 0, 6
5526 ; CHECK-NEXT: cmplwi 8, 5
5527 ; CHECK-NEXT: bgt 0, .LBB5_9
5528 ; CHECK-NEXT: # %bb.8: # %entry
5530 ; CHECK-NEXT: stwcx. 3, 0, 6
5531 ; CHECK-NEXT: bne 0, .LBB5_7
5532 ; CHECK-NEXT: .LBB5_9: # %entry
5533 ; CHECK-NEXT: lwsync
5534 ; CHECK-NEXT: stw 8, ui@toc@l(4)
5535 ; CHECK-NEXT: lwsync
5536 ; CHECK-NEXT: .LBB5_10: # %entry
5538 ; CHECK-NEXT: lwarx 4, 0, 7
5539 ; CHECK-NEXT: cmpwi 4, 5
5540 ; CHECK-NEXT: bgt 0, .LBB5_12
5541 ; CHECK-NEXT: # %bb.11: # %entry
5543 ; CHECK-NEXT: stwcx. 3, 0, 7
5544 ; CHECK-NEXT: bne 0, .LBB5_10
5545 ; CHECK-NEXT: .LBB5_12: # %entry
5546 ; CHECK-NEXT: stw 4, si@toc@l(5)
5549 ; AIX32-LABEL: test_atomic:
5550 ; AIX32: # %bb.0: # %entry
5551 ; AIX32-NEXT: lwz 4, L..C5(2) # @ui
5552 ; AIX32-NEXT: li 3, 5
5553 ; AIX32-NEXT: L..BB5_1: # %entry
5555 ; AIX32-NEXT: lwarx 5, 0, 4
5556 ; AIX32-NEXT: cmplwi 5, 5
5557 ; AIX32-NEXT: blt 0, L..BB5_3
5558 ; AIX32-NEXT: # %bb.2: # %entry
5560 ; AIX32-NEXT: stwcx. 3, 0, 4
5561 ; AIX32-NEXT: bne 0, L..BB5_1
5562 ; AIX32-NEXT: L..BB5_3: # %entry
5563 ; AIX32-NEXT: stw 5, 0(4)
5564 ; AIX32-NEXT: lwz 5, L..C4(2) # @si
5566 ; AIX32-NEXT: L..BB5_4: # %entry
5568 ; AIX32-NEXT: lwarx 6, 0, 5
5569 ; AIX32-NEXT: cmpwi 6, 5
5570 ; AIX32-NEXT: blt 0, L..BB5_6
5571 ; AIX32-NEXT: # %bb.5: # %entry
5573 ; AIX32-NEXT: stwcx. 3, 0, 5
5574 ; AIX32-NEXT: bne 0, L..BB5_4
5575 ; AIX32-NEXT: L..BB5_6: # %entry
5576 ; AIX32-NEXT: lwsync
5577 ; AIX32-NEXT: stw 6, 0(5)
5578 ; AIX32-NEXT: L..BB5_7: # %entry
5580 ; AIX32-NEXT: lwarx 6, 0, 4
5581 ; AIX32-NEXT: cmplwi 6, 5
5582 ; AIX32-NEXT: bgt 0, L..BB5_9
5583 ; AIX32-NEXT: # %bb.8: # %entry
5585 ; AIX32-NEXT: stwcx. 3, 0, 4
5586 ; AIX32-NEXT: bne 0, L..BB5_7
5587 ; AIX32-NEXT: L..BB5_9: # %entry
5588 ; AIX32-NEXT: lwsync
5589 ; AIX32-NEXT: stw 6, 0(4)
5590 ; AIX32-NEXT: lwsync
5591 ; AIX32-NEXT: L..BB5_10: # %entry
5593 ; AIX32-NEXT: lwarx 4, 0, 5
5594 ; AIX32-NEXT: cmpwi 4, 5
5595 ; AIX32-NEXT: bgt 0, L..BB5_12
5596 ; AIX32-NEXT: # %bb.11: # %entry
5598 ; AIX32-NEXT: stwcx. 3, 0, 5
5599 ; AIX32-NEXT: bne 0, L..BB5_10
5600 ; AIX32-NEXT: L..BB5_12: # %entry
5601 ; AIX32-NEXT: stw 4, 0(5)
5604 %0 = atomicrmw umin ptr @ui, i32 5 monotonic, align 4
5605 store i32 %0, ptr @ui, align 4
5606 %1 = atomicrmw min ptr @si, i32 5 seq_cst, align 4
5607 store i32 %1, ptr @si, align 4
5608 %2 = atomicrmw umax ptr @ui, i32 5 acquire, align 4
5609 store i32 %2, ptr @ui, align 4
5610 %3 = atomicrmw max ptr @si, i32 5 release, align 4
5611 store i32 %3, ptr @si, align 4
5615 define dso_local i64 @cmpswplp(ptr noundef %ptr, ptr nocapture noundef readnone %oldval, i64 noundef %newval) local_unnamed_addr #0 {
5616 ; CHECK-LABEL: cmpswplp:
5617 ; CHECK: # %bb.0: # %entry
5618 ; CHECK-NEXT: addi 4, 5, 1
5619 ; CHECK-NEXT: .LBB6_1: # %entry
5621 ; CHECK-NEXT: ldarx 6, 0, 3
5622 ; CHECK-NEXT: cmpd 1, 6, 5
5623 ; CHECK-NEXT: bne 1, .LBB6_3
5624 ; CHECK-NEXT: # %bb.2: # %entry
5626 ; CHECK-NEXT: stdcx. 4, 0, 3
5627 ; CHECK-NEXT: bne 0, .LBB6_1
5628 ; CHECK-NEXT: .LBB6_3: # %entry
5629 ; CHECK-NEXT: li 3, 66
5630 ; CHECK-NEXT: li 4, 55
5631 ; CHECK-NEXT: isel 3, 4, 3, 6
5634 ; AIX32-LABEL: cmpswplp:
5635 ; AIX32: # %bb.0: # %entry
5636 ; AIX32-NEXT: mflr 0
5637 ; AIX32-NEXT: stwu 1, -64(1)
5638 ; AIX32-NEXT: addic 7, 6, 1
5639 ; AIX32-NEXT: stw 0, 72(1)
5640 ; AIX32-NEXT: addi 4, 1, 56
5641 ; AIX32-NEXT: addze 8, 5
5642 ; AIX32-NEXT: stw 6, 60(1)
5643 ; AIX32-NEXT: mr 6, 7
5644 ; AIX32-NEXT: stw 5, 56(1)
5645 ; AIX32-NEXT: mr 5, 8
5646 ; AIX32-NEXT: li 7, 0
5647 ; AIX32-NEXT: li 8, 0
5648 ; AIX32-NEXT: bl .__atomic_compare_exchange_8[PR]
5650 ; AIX32-NEXT: andi. 3, 3, 1
5651 ; AIX32-NEXT: li 4, 55
5652 ; AIX32-NEXT: li 3, 66
5653 ; AIX32-NEXT: iselgt 4, 4, 3
5654 ; AIX32-NEXT: li 3, 0
5655 ; AIX32-NEXT: addi 1, 1, 64
5656 ; AIX32-NEXT: lwz 0, 8(1)
5657 ; AIX32-NEXT: mtlr 0
5660 %add = add nsw i64 %newval, 1
5661 %0 = cmpxchg weak volatile ptr %ptr, i64 %newval, i64 %add monotonic monotonic, align 8
5662 %1 = extractvalue { i64, i1 } %0, 1
5663 %conv = select i1 %1, i64 55, i64 66
5667 define dso_local i64 @atommax8(ptr nocapture noundef %ptr, i64 noundef %val) local_unnamed_addr #0 {
5668 ; CHECK-LABEL: atommax8:
5669 ; CHECK: # %bb.0: # %entry
5671 ; CHECK-NEXT: .LBB7_1: # %entry
5673 ; CHECK-NEXT: ldarx 5, 0, 3
5674 ; CHECK-NEXT: cmpd 1, 5, 4
5675 ; CHECK-NEXT: bgt 1, .LBB7_3
5676 ; CHECK-NEXT: # %bb.2: # %entry
5678 ; CHECK-NEXT: stdcx. 4, 0, 3
5679 ; CHECK-NEXT: bne 0, .LBB7_1
5680 ; CHECK-NEXT: .LBB7_3: # %entry
5681 ; CHECK-NEXT: li 3, 55
5682 ; CHECK-NEXT: li 4, 66
5683 ; CHECK-NEXT: lwsync
5684 ; CHECK-NEXT: isel 3, 4, 3, 5
5687 ; AIX32-LABEL: atommax8:
5688 ; AIX32: # %bb.0: # %entry
5689 ; AIX32-NEXT: mflr 0
5690 ; AIX32-NEXT: stwu 1, -80(1)
5691 ; AIX32-NEXT: stw 0, 88(1)
5692 ; AIX32-NEXT: stw 28, 64(1) # 4-byte Folded Spill
5693 ; AIX32-NEXT: lwz 9, 4(3)
5694 ; AIX32-NEXT: lwz 10, 0(3)
5695 ; AIX32-NEXT: addi 28, 1, 56
5696 ; AIX32-NEXT: stw 29, 68(1) # 4-byte Folded Spill
5697 ; AIX32-NEXT: stw 30, 72(1) # 4-byte Folded Spill
5698 ; AIX32-NEXT: stw 31, 76(1) # 4-byte Folded Spill
5699 ; AIX32-NEXT: mr 31, 5
5700 ; AIX32-NEXT: mr 29, 3
5701 ; AIX32-NEXT: mr 30, 4
5702 ; AIX32-NEXT: .align 4
5703 ; AIX32-NEXT: L..BB7_1: # %atomicrmw.start
5705 ; AIX32-NEXT: cmplw 10, 30
5706 ; AIX32-NEXT: cmpw 1, 10, 30
5707 ; AIX32-NEXT: mr 3, 29
5708 ; AIX32-NEXT: mr 4, 28
5709 ; AIX32-NEXT: crandc 20, 5, 2
5710 ; AIX32-NEXT: cmplw 1, 9, 31
5711 ; AIX32-NEXT: li 7, 5
5712 ; AIX32-NEXT: li 8, 5
5713 ; AIX32-NEXT: crand 21, 2, 5
5714 ; AIX32-NEXT: stw 10, 56(1)
5715 ; AIX32-NEXT: stw 9, 60(1)
5716 ; AIX32-NEXT: cror 20, 21, 20
5717 ; AIX32-NEXT: isel 5, 10, 30, 20
5718 ; AIX32-NEXT: isel 6, 9, 31, 20
5719 ; AIX32-NEXT: bl .__atomic_compare_exchange_8[PR]
5721 ; AIX32-NEXT: lwz 9, 60(1)
5722 ; AIX32-NEXT: lwz 10, 56(1)
5723 ; AIX32-NEXT: cmplwi 3, 0
5724 ; AIX32-NEXT: beq 0, L..BB7_1
5725 ; AIX32-NEXT: # %bb.2: # %atomicrmw.end
5726 ; AIX32-NEXT: cmplw 10, 30
5727 ; AIX32-NEXT: cmpw 1, 10, 30
5728 ; AIX32-NEXT: li 3, 55
5729 ; AIX32-NEXT: li 4, 66
5730 ; AIX32-NEXT: crandc 20, 5, 2
5731 ; AIX32-NEXT: cmplw 1, 9, 31
5732 ; AIX32-NEXT: lwz 31, 76(1) # 4-byte Folded Reload
5733 ; AIX32-NEXT: lwz 30, 72(1) # 4-byte Folded Reload
5734 ; AIX32-NEXT: crand 21, 2, 5
5735 ; AIX32-NEXT: lwz 29, 68(1) # 4-byte Folded Reload
5736 ; AIX32-NEXT: lwz 28, 64(1) # 4-byte Folded Reload
5737 ; AIX32-NEXT: cror 20, 21, 20
5738 ; AIX32-NEXT: isel 4, 4, 3, 20
5739 ; AIX32-NEXT: li 3, 0
5740 ; AIX32-NEXT: addi 1, 1, 80
5741 ; AIX32-NEXT: lwz 0, 8(1)
5742 ; AIX32-NEXT: mtlr 0
5745 %0 = atomicrmw max ptr %ptr, i64 %val seq_cst, align 8
5746 %cmp.not = icmp sgt i64 %0, %val
5747 %conv = select i1 %cmp.not, i64 66, i64 55
5751 define dso_local signext i32 @atommax4(ptr nocapture noundef %ptr, i32 noundef signext %val) local_unnamed_addr #0 {
5752 ; CHECK-LABEL: atommax4:
5753 ; CHECK: # %bb.0: # %entry
5755 ; CHECK-NEXT: .LBB8_1: # %entry
5757 ; CHECK-NEXT: lwarx 5, 0, 3
5758 ; CHECK-NEXT: cmpw 1, 5, 4
5759 ; CHECK-NEXT: bgt 1, .LBB8_3
5760 ; CHECK-NEXT: # %bb.2: # %entry
5762 ; CHECK-NEXT: stwcx. 4, 0, 3
5763 ; CHECK-NEXT: bne 0, .LBB8_1
5764 ; CHECK-NEXT: .LBB8_3: # %entry
5765 ; CHECK-NEXT: li 3, 55
5766 ; CHECK-NEXT: li 4, 66
5767 ; CHECK-NEXT: lwsync
5768 ; CHECK-NEXT: isel 3, 4, 3, 5
5771 ; AIX32-LABEL: atommax4:
5772 ; AIX32: # %bb.0: # %entry
5774 ; AIX32-NEXT: L..BB8_1: # %entry
5776 ; AIX32-NEXT: lwarx 5, 0, 3
5777 ; AIX32-NEXT: cmpw 1, 5, 4
5778 ; AIX32-NEXT: bgt 1, L..BB8_3
5779 ; AIX32-NEXT: # %bb.2: # %entry
5781 ; AIX32-NEXT: stwcx. 4, 0, 3
5782 ; AIX32-NEXT: bne 0, L..BB8_1
5783 ; AIX32-NEXT: L..BB8_3: # %entry
5784 ; AIX32-NEXT: li 3, 55
5785 ; AIX32-NEXT: li 4, 66
5786 ; AIX32-NEXT: lwsync
5787 ; AIX32-NEXT: isel 3, 4, 3, 5
5790 %0 = atomicrmw max ptr %ptr, i32 %val seq_cst, align 4
5791 %cmp.not = icmp sgt i32 %0, %val
5792 %cond = select i1 %cmp.not, i32 66, i32 55
5796 define dso_local signext i16 @atommax2(ptr nocapture noundef %ptr, i16 noundef signext %val) local_unnamed_addr #0 {
5797 ; CHECK-LABEL: atommax2:
5798 ; CHECK: # %bb.0: # %entry
5800 ; CHECK-NEXT: .LBB9_1: # %entry
5802 ; CHECK-NEXT: lharx 5, 0, 3
5803 ; CHECK-NEXT: extsh 5, 5
5804 ; CHECK-NEXT: cmpw 1, 5, 4
5805 ; CHECK-NEXT: bgt 1, .LBB9_3
5806 ; CHECK-NEXT: # %bb.2: # %entry
5808 ; CHECK-NEXT: sthcx. 4, 0, 3
5809 ; CHECK-NEXT: bne 0, .LBB9_1
5810 ; CHECK-NEXT: .LBB9_3: # %entry
5811 ; CHECK-NEXT: li 3, 55
5812 ; CHECK-NEXT: li 4, 66
5813 ; CHECK-NEXT: lwsync
5814 ; CHECK-NEXT: isel 3, 4, 3, 5
5817 ; AIX32-LABEL: atommax2:
5818 ; AIX32: # %bb.0: # %entry
5819 ; AIX32-NEXT: li 7, 0
5820 ; AIX32-NEXT: rlwinm 5, 3, 3, 27, 27
5821 ; AIX32-NEXT: extsh 6, 4
5823 ; AIX32-NEXT: xori 5, 5, 16
5824 ; AIX32-NEXT: ori 7, 7, 65535
5825 ; AIX32-NEXT: slw 8, 6, 5
5826 ; AIX32-NEXT: slw 7, 7, 5
5827 ; AIX32-NEXT: rlwinm 3, 3, 0, 0, 29
5828 ; AIX32-NEXT: and 8, 8, 7
5829 ; AIX32-NEXT: L..BB9_1: # %entry
5831 ; AIX32-NEXT: lwarx 9, 0, 3
5832 ; AIX32-NEXT: and 10, 9, 7
5833 ; AIX32-NEXT: srw 10, 10, 5
5834 ; AIX32-NEXT: extsh 10, 10
5835 ; AIX32-NEXT: cmpw 10, 6
5836 ; AIX32-NEXT: bgt 0, L..BB9_3
5837 ; AIX32-NEXT: # %bb.2: # %entry
5839 ; AIX32-NEXT: andc 10, 9, 7
5840 ; AIX32-NEXT: or 10, 8, 10
5841 ; AIX32-NEXT: stwcx. 10, 0, 3
5842 ; AIX32-NEXT: bne 0, L..BB9_1
5843 ; AIX32-NEXT: L..BB9_3: # %entry
5844 ; AIX32-NEXT: srw 3, 9, 5
5845 ; AIX32-NEXT: lwsync
5846 ; AIX32-NEXT: clrlwi 3, 3, 16
5847 ; AIX32-NEXT: extsh 3, 3
5848 ; AIX32-NEXT: cmpw 3, 4
5849 ; AIX32-NEXT: li 3, 55
5850 ; AIX32-NEXT: li 4, 66
5851 ; AIX32-NEXT: iselgt 3, 4, 3
5854 %0 = atomicrmw max ptr %ptr, i16 %val seq_cst, align 2
5855 %cmp.not = icmp sgt i16 %0, %val
5856 %conv3 = select i1 %cmp.not, i16 66, i16 55
5860 define dso_local zeroext i8 @atommax1(ptr nocapture noundef %ptr, i8 noundef zeroext %val) local_unnamed_addr #0 {
5861 ; CHECK-LABEL: atommax1:
5862 ; CHECK: # %bb.0: # %entry
5864 ; CHECK-NEXT: .LBB10_1: # %entry
5866 ; CHECK-NEXT: lbarx 5, 0, 3
5867 ; CHECK-NEXT: cmplw 1, 5, 4
5868 ; CHECK-NEXT: bgt 1, .LBB10_3
5869 ; CHECK-NEXT: # %bb.2: # %entry
5871 ; CHECK-NEXT: stbcx. 4, 0, 3
5872 ; CHECK-NEXT: bne 0, .LBB10_1
5873 ; CHECK-NEXT: .LBB10_3: # %entry
5874 ; CHECK-NEXT: li 3, 55
5875 ; CHECK-NEXT: li 4, 66
5876 ; CHECK-NEXT: lwsync
5877 ; CHECK-NEXT: isel 3, 4, 3, 5
5880 ; AIX32-LABEL: atommax1:
5881 ; AIX32: # %bb.0: # %entry
5882 ; AIX32-NEXT: rlwinm 5, 3, 3, 27, 28
5883 ; AIX32-NEXT: li 7, 255
5885 ; AIX32-NEXT: xori 5, 5, 24
5886 ; AIX32-NEXT: rlwinm 3, 3, 0, 0, 29
5887 ; AIX32-NEXT: slw 6, 4, 5
5888 ; AIX32-NEXT: slw 7, 7, 5
5889 ; AIX32-NEXT: and 8, 6, 7
5890 ; AIX32-NEXT: L..BB10_1: # %entry
5892 ; AIX32-NEXT: lwarx 9, 0, 3
5893 ; AIX32-NEXT: and 10, 9, 7
5894 ; AIX32-NEXT: cmplw 10, 6
5895 ; AIX32-NEXT: bgt 0, L..BB10_3
5896 ; AIX32-NEXT: # %bb.2: # %entry
5898 ; AIX32-NEXT: andc 10, 9, 7
5899 ; AIX32-NEXT: or 10, 8, 10
5900 ; AIX32-NEXT: stwcx. 10, 0, 3
5901 ; AIX32-NEXT: bne 0, L..BB10_1
5902 ; AIX32-NEXT: L..BB10_3: # %entry
5903 ; AIX32-NEXT: srw 3, 9, 5
5904 ; AIX32-NEXT: lwsync
5905 ; AIX32-NEXT: clrlwi 3, 3, 24
5906 ; AIX32-NEXT: cmplw 3, 4
5907 ; AIX32-NEXT: li 3, 55
5908 ; AIX32-NEXT: li 4, 66
5909 ; AIX32-NEXT: iselgt 3, 4, 3
5912 %0 = atomicrmw umax ptr %ptr, i8 %val seq_cst, align 1
5913 %cmp.not = icmp ugt i8 %0, %val
5914 %conv3 = select i1 %cmp.not, i8 66, i8 55