[NFC][Py Reformat] Reformat python files in llvm
[llvm-project.git] / llvm / test / CodeGen / PowerPC / all-atomics.ll
blob9e8b3a625841d4ead5510102a18d8fca416bf736
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
28 ; CHECK-NEXT:    li 3, 1
29 ; CHECK-NEXT:    std 30, -16(1) # 8-byte Folded Spill
30 ; CHECK-NEXT:    sync
31 ; CHECK-NEXT:  .LBB0_1: # %entry
32 ; CHECK-NEXT:    #
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
39 ; CHECK-NEXT:    lwsync
40 ; CHECK-NEXT:    addi 5, 5, uc@toc@l
41 ; CHECK-NEXT:    sync
42 ; CHECK-NEXT:  .LBB0_3: # %entry
43 ; CHECK-NEXT:    #
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
50 ; CHECK-NEXT:    lwsync
51 ; CHECK-NEXT:    addi 6, 6, ss@toc@l
52 ; CHECK-NEXT:    sync
53 ; CHECK-NEXT:  .LBB0_5: # %entry
54 ; CHECK-NEXT:    #
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
61 ; CHECK-NEXT:    lwsync
62 ; CHECK-NEXT:    addi 8, 7, us@toc@l
63 ; CHECK-NEXT:    sync
64 ; CHECK-NEXT:  .LBB0_7: # %entry
65 ; CHECK-NEXT:    #
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
72 ; CHECK-NEXT:    lwsync
73 ; CHECK-NEXT:    addi 9, 7, si@toc@l
74 ; CHECK-NEXT:    sync
75 ; CHECK-NEXT:  .LBB0_9: # %entry
76 ; CHECK-NEXT:    #
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
83 ; CHECK-NEXT:    lwsync
84 ; CHECK-NEXT:    addi 10, 7, ui@toc@l
85 ; CHECK-NEXT:    sync
86 ; CHECK-NEXT:  .LBB0_11: # %entry
87 ; CHECK-NEXT:    #
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
94 ; CHECK-NEXT:    lwsync
95 ; CHECK-NEXT:    addi 11, 7, sll@toc@l
96 ; CHECK-NEXT:    li 7, 1
97 ; CHECK-NEXT:    sync
98 ; CHECK-NEXT:  .LBB0_13: # %entry
99 ; CHECK-NEXT:    #
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
106 ; CHECK-NEXT:    lwsync
107 ; CHECK-NEXT:    addi 12, 12, ull@toc@l
108 ; CHECK-NEXT:    sync
109 ; CHECK-NEXT:  .LBB0_15: # %entry
110 ; CHECK-NEXT:    #
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
116 ; CHECK-NEXT:    lwsync
117 ; CHECK-NEXT:    sync
118 ; CHECK-NEXT:  .LBB0_17: # %entry
119 ; CHECK-NEXT:    #
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
125 ; CHECK-NEXT:    lwsync
126 ; CHECK-NEXT:    sync
127 ; CHECK-NEXT:  .LBB0_19: # %entry
128 ; CHECK-NEXT:    #
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
134 ; CHECK-NEXT:    lwsync
135 ; CHECK-NEXT:    sync
136 ; CHECK-NEXT:  .LBB0_21: # %entry
137 ; CHECK-NEXT:    #
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
143 ; CHECK-NEXT:    lwsync
144 ; CHECK-NEXT:    sync
145 ; CHECK-NEXT:  .LBB0_23: # %entry
146 ; CHECK-NEXT:    #
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
152 ; CHECK-NEXT:    lwsync
153 ; CHECK-NEXT:    sync
154 ; CHECK-NEXT:  .LBB0_25: # %entry
155 ; CHECK-NEXT:    #
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
161 ; CHECK-NEXT:    lwsync
162 ; CHECK-NEXT:    sync
163 ; CHECK-NEXT:  .LBB0_27: # %entry
164 ; CHECK-NEXT:    #
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
170 ; CHECK-NEXT:    lwsync
171 ; CHECK-NEXT:    sync
172 ; CHECK-NEXT:  .LBB0_29: # %entry
173 ; CHECK-NEXT:    #
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
179 ; CHECK-NEXT:    lwsync
180 ; CHECK-NEXT:    sync
181 ; CHECK-NEXT:  .LBB0_31: # %entry
182 ; CHECK-NEXT:    #
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
188 ; CHECK-NEXT:    lwsync
189 ; CHECK-NEXT:    sync
190 ; CHECK-NEXT:  .LBB0_33: # %entry
191 ; CHECK-NEXT:    #
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
197 ; CHECK-NEXT:    lwsync
198 ; CHECK-NEXT:    sync
199 ; CHECK-NEXT:  .LBB0_35: # %entry
200 ; CHECK-NEXT:    #
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
206 ; CHECK-NEXT:    lwsync
207 ; CHECK-NEXT:    sync
208 ; CHECK-NEXT:  .LBB0_37: # %entry
209 ; CHECK-NEXT:    #
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
215 ; CHECK-NEXT:    lwsync
216 ; CHECK-NEXT:    sync
217 ; CHECK-NEXT:  .LBB0_39: # %entry
218 ; CHECK-NEXT:    #
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
224 ; CHECK-NEXT:    lwsync
225 ; CHECK-NEXT:    sync
226 ; CHECK-NEXT:  .LBB0_41: # %entry
227 ; CHECK-NEXT:    #
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
233 ; CHECK-NEXT:    lwsync
234 ; CHECK-NEXT:    sync
235 ; CHECK-NEXT:  .LBB0_43: # %entry
236 ; CHECK-NEXT:    #
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
242 ; CHECK-NEXT:    lwsync
243 ; CHECK-NEXT:    sync
244 ; CHECK-NEXT:  .LBB0_45: # %entry
245 ; CHECK-NEXT:    #
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
251 ; CHECK-NEXT:    lwsync
252 ; CHECK-NEXT:    sync
253 ; CHECK-NEXT:  .LBB0_47: # %entry
254 ; CHECK-NEXT:    #
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
260 ; CHECK-NEXT:    lwsync
261 ; CHECK-NEXT:    sync
262 ; CHECK-NEXT:  .LBB0_49: # %entry
263 ; CHECK-NEXT:    #
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
269 ; CHECK-NEXT:    lwsync
270 ; CHECK-NEXT:    sync
271 ; CHECK-NEXT:  .LBB0_51: # %entry
272 ; CHECK-NEXT:    #
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
278 ; CHECK-NEXT:    lwsync
279 ; CHECK-NEXT:    sync
280 ; CHECK-NEXT:  .LBB0_53: # %entry
281 ; CHECK-NEXT:    #
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
287 ; CHECK-NEXT:    lwsync
288 ; CHECK-NEXT:    sync
289 ; CHECK-NEXT:  .LBB0_55: # %entry
290 ; CHECK-NEXT:    #
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
296 ; CHECK-NEXT:    lwsync
297 ; CHECK-NEXT:    sync
298 ; CHECK-NEXT:  .LBB0_57: # %entry
299 ; CHECK-NEXT:    #
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
305 ; CHECK-NEXT:    lwsync
306 ; CHECK-NEXT:    sync
307 ; CHECK-NEXT:  .LBB0_59: # %entry
308 ; CHECK-NEXT:    #
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
314 ; CHECK-NEXT:    lwsync
315 ; CHECK-NEXT:    sync
316 ; CHECK-NEXT:  .LBB0_61: # %entry
317 ; CHECK-NEXT:    #
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
323 ; CHECK-NEXT:    lwsync
324 ; CHECK-NEXT:    sync
325 ; CHECK-NEXT:  .LBB0_63: # %entry
326 ; CHECK-NEXT:    #
327 ; CHECK-NEXT:    ldarx 0, 0, 12
328 ; CHECK-NEXT:    xori 0, 0, 1
329 ; CHECK-NEXT:    stdcx. 0, 0, 12
330 ; CHECK-NEXT:    bne 0, .LBB0_63
331 ; CHECK-NEXT:  # %bb.64: # %entry
332 ; CHECK-NEXT:    lwsync
333 ; CHECK-NEXT:    addis 30, 2, u128@toc@ha
334 ; CHECK-NEXT:    sync
335 ; CHECK-NEXT:    addi 0, 30, u128@toc@l
336 ; CHECK-NEXT:    li 30, 0
337 ; CHECK-NEXT:  .LBB0_65: # %entry
338 ; CHECK-NEXT:    #
339 ; CHECK-NEXT:    lqarx 28, 0, 0
340 ; CHECK-NEXT:    xor 27, 7, 29
341 ; CHECK-NEXT:    xor 26, 30, 28
342 ; CHECK-NEXT:    stqcx. 26, 0, 0
343 ; CHECK-NEXT:    bne 0, .LBB0_65
344 ; CHECK-NEXT:  # %bb.66: # %entry
345 ; CHECK-NEXT:    lwsync
346 ; CHECK-NEXT:    addis 29, 2, s128@toc@ha
347 ; CHECK-NEXT:    sync
348 ; CHECK-NEXT:    addi 0, 29, s128@toc@l
349 ; CHECK-NEXT:  .LBB0_67: # %entry
350 ; CHECK-NEXT:    #
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
357 ; CHECK-NEXT:    lwsync
358 ; CHECK-NEXT:    sync
359 ; CHECK-NEXT:  .LBB0_69: # %entry
360 ; CHECK-NEXT:    #
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
366 ; CHECK-NEXT:    lwsync
367 ; CHECK-NEXT:    sync
368 ; CHECK-NEXT:  .LBB0_71: # %entry
369 ; CHECK-NEXT:    #
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
375 ; CHECK-NEXT:    lwsync
376 ; CHECK-NEXT:    sync
377 ; CHECK-NEXT:  .LBB0_73: # %entry
378 ; CHECK-NEXT:    #
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
384 ; CHECK-NEXT:    lwsync
385 ; CHECK-NEXT:    sync
386 ; CHECK-NEXT:  .LBB0_75: # %entry
387 ; CHECK-NEXT:    #
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
393 ; CHECK-NEXT:    lwsync
394 ; CHECK-NEXT:    sync
395 ; CHECK-NEXT:  .LBB0_77: # %entry
396 ; CHECK-NEXT:    #
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
402 ; CHECK-NEXT:    lwsync
403 ; CHECK-NEXT:    sync
404 ; CHECK-NEXT:  .LBB0_79: # %entry
405 ; CHECK-NEXT:    #
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
411 ; CHECK-NEXT:    lwsync
412 ; CHECK-NEXT:    sync
413 ; CHECK-NEXT:  .LBB0_81: # %entry
414 ; CHECK-NEXT:    #
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
420 ; CHECK-NEXT:    lwsync
421 ; CHECK-NEXT:    sync
422 ; CHECK-NEXT:  .LBB0_83: # %entry
423 ; CHECK-NEXT:    #
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
429 ; CHECK-NEXT:    lwsync
430 ; CHECK-NEXT:    sync
431 ; CHECK-NEXT:  .LBB0_85: # %entry
432 ; CHECK-NEXT:    #
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
438 ; CHECK-NEXT:    lwsync
439 ; CHECK-NEXT:    sync
440 ; CHECK-NEXT:  .LBB0_87: # %entry
441 ; CHECK-NEXT:    #
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
447 ; CHECK-NEXT:    lwsync
448 ; CHECK-NEXT:    sync
449 ; CHECK-NEXT:  .LBB0_89: # %entry
450 ; CHECK-NEXT:    #
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
456 ; CHECK-NEXT:    lwsync
457 ; CHECK-NEXT:    sync
458 ; CHECK-NEXT:  .LBB0_91: # %entry
459 ; CHECK-NEXT:    #
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
465 ; CHECK-NEXT:    lwsync
466 ; CHECK-NEXT:    sync
467 ; CHECK-NEXT:  .LBB0_93: # %entry
468 ; CHECK-NEXT:    #
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
474 ; CHECK-NEXT:    lwsync
475 ; CHECK-NEXT:    sync
476 ; CHECK-NEXT:  .LBB0_95: # %entry
477 ; CHECK-NEXT:    #
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
483 ; CHECK-NEXT:    lwsync
484 ; CHECK-NEXT:    sync
485 ; CHECK-NEXT:  .LBB0_97: # %entry
486 ; CHECK-NEXT:    #
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
492 ; CHECK-NEXT:    lwsync
493 ; CHECK-NEXT:    sync
494 ; CHECK-NEXT:  .LBB0_99: # %entry
495 ; CHECK-NEXT:    #
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
501 ; CHECK-NEXT:    lwsync
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
507 ; CHECK-NEXT:    blr
509 ; AIX32-LABEL: test_op_ignore:
510 ; AIX32:       # %bb.0: # %entry
511 ; AIX32-NEXT:    mflr 0
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
539 ; AIX32-NEXT:    sync
540 ; AIX32-NEXT:  L..BB0_1: # %entry
541 ; AIX32-NEXT:    #
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
551 ; AIX32-NEXT:    lwsync
552 ; AIX32-NEXT:    sync
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
560 ; AIX32-NEXT:    #
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
571 ; AIX32-NEXT:    lwsync
572 ; AIX32-NEXT:    sync
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
580 ; AIX32-NEXT:    #
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
591 ; AIX32-NEXT:    lwsync
592 ; AIX32-NEXT:    sync
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
600 ; AIX32-NEXT:    #
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
610 ; AIX32-NEXT:    lwsync
611 ; AIX32-NEXT:    sync
612 ; AIX32-NEXT:  L..BB0_9: # %entry
613 ; AIX32-NEXT:    #
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
620 ; AIX32-NEXT:    lwsync
621 ; AIX32-NEXT:    sync
622 ; AIX32-NEXT:  L..BB0_11: # %entry
623 ; AIX32-NEXT:    #
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
633 ; AIX32-NEXT:    lwsync
634 ; AIX32-NEXT:    mr 3, 31
635 ; AIX32-NEXT:    bl .__atomic_fetch_add_8[PR]
636 ; AIX32-NEXT:    nop
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]
643 ; AIX32-NEXT:    nop
644 ; AIX32-NEXT:    li 3, 255
645 ; AIX32-NEXT:    sync
646 ; AIX32-NEXT:    slw 3, 3, 26
647 ; AIX32-NEXT:  L..BB0_13: # %entry
648 ; AIX32-NEXT:    #
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
658 ; AIX32-NEXT:    lwsync
659 ; AIX32-NEXT:    slw 3, 3, 24
660 ; AIX32-NEXT:    sync
661 ; AIX32-NEXT:  L..BB0_15: # %entry
662 ; AIX32-NEXT:    #
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
672 ; AIX32-NEXT:    lwsync
673 ; AIX32-NEXT:    ori 3, 3, 65535
674 ; AIX32-NEXT:    sync
675 ; AIX32-NEXT:    slw 3, 3, 22
676 ; AIX32-NEXT:  L..BB0_17: # %entry
677 ; AIX32-NEXT:    #
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
687 ; AIX32-NEXT:    lwsync
688 ; AIX32-NEXT:    ori 3, 3, 65535
689 ; AIX32-NEXT:    sync
690 ; AIX32-NEXT:    slw 3, 3, 19
691 ; AIX32-NEXT:  L..BB0_19: # %entry
692 ; AIX32-NEXT:    #
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
701 ; AIX32-NEXT:    lwsync
702 ; AIX32-NEXT:    sync
703 ; AIX32-NEXT:  L..BB0_21: # %entry
704 ; AIX32-NEXT:    #
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
710 ; AIX32-NEXT:    lwsync
711 ; AIX32-NEXT:    sync
712 ; AIX32-NEXT:  L..BB0_23: # %entry
713 ; AIX32-NEXT:    #
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
723 ; AIX32-NEXT:    lwsync
724 ; AIX32-NEXT:    bl .__atomic_fetch_sub_8[PR]
725 ; AIX32-NEXT:    nop
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]
731 ; AIX32-NEXT:    nop
732 ; AIX32-NEXT:    li 3, 255
733 ; AIX32-NEXT:    sync
734 ; AIX32-NEXT:    slw 3, 3, 26
735 ; AIX32-NEXT:  L..BB0_25: # %entry
736 ; AIX32-NEXT:    #
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
746 ; AIX32-NEXT:    lwsync
747 ; AIX32-NEXT:    slw 3, 3, 24
748 ; AIX32-NEXT:    sync
749 ; AIX32-NEXT:  L..BB0_27: # %entry
750 ; AIX32-NEXT:    #
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
760 ; AIX32-NEXT:    lwsync
761 ; AIX32-NEXT:    ori 3, 3, 65535
762 ; AIX32-NEXT:    sync
763 ; AIX32-NEXT:    slw 3, 3, 22
764 ; AIX32-NEXT:  L..BB0_29: # %entry
765 ; AIX32-NEXT:    #
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
775 ; AIX32-NEXT:    lwsync
776 ; AIX32-NEXT:    ori 3, 3, 65535
777 ; AIX32-NEXT:    sync
778 ; AIX32-NEXT:    slw 3, 3, 19
779 ; AIX32-NEXT:  L..BB0_31: # %entry
780 ; AIX32-NEXT:    #
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
789 ; AIX32-NEXT:    lwsync
790 ; AIX32-NEXT:    sync
791 ; AIX32-NEXT:  L..BB0_33: # %entry
792 ; AIX32-NEXT:    #
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
798 ; AIX32-NEXT:    lwsync
799 ; AIX32-NEXT:    sync
800 ; AIX32-NEXT:  L..BB0_35: # %entry
801 ; AIX32-NEXT:    #
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
811 ; AIX32-NEXT:    lwsync
812 ; AIX32-NEXT:    bl .__atomic_fetch_or_8[PR]
813 ; AIX32-NEXT:    nop
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]
819 ; AIX32-NEXT:    nop
820 ; AIX32-NEXT:    li 3, 255
821 ; AIX32-NEXT:    sync
822 ; AIX32-NEXT:    slw 3, 3, 26
823 ; AIX32-NEXT:  L..BB0_37: # %entry
824 ; AIX32-NEXT:    #
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
834 ; AIX32-NEXT:    lwsync
835 ; AIX32-NEXT:    slw 3, 3, 24
836 ; AIX32-NEXT:    sync
837 ; AIX32-NEXT:  L..BB0_39: # %entry
838 ; AIX32-NEXT:    #
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
848 ; AIX32-NEXT:    lwsync
849 ; AIX32-NEXT:    ori 3, 3, 65535
850 ; AIX32-NEXT:    sync
851 ; AIX32-NEXT:    slw 3, 3, 22
852 ; AIX32-NEXT:  L..BB0_41: # %entry
853 ; AIX32-NEXT:    #
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
863 ; AIX32-NEXT:    lwsync
864 ; AIX32-NEXT:    ori 3, 3, 65535
865 ; AIX32-NEXT:    sync
866 ; AIX32-NEXT:    slw 3, 3, 19
867 ; AIX32-NEXT:  L..BB0_43: # %entry
868 ; AIX32-NEXT:    #
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
877 ; AIX32-NEXT:    lwsync
878 ; AIX32-NEXT:    sync
879 ; AIX32-NEXT:  L..BB0_45: # %entry
880 ; AIX32-NEXT:    #
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
886 ; AIX32-NEXT:    lwsync
887 ; AIX32-NEXT:    sync
888 ; AIX32-NEXT:  L..BB0_47: # %entry
889 ; AIX32-NEXT:    #
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
899 ; AIX32-NEXT:    lwsync
900 ; AIX32-NEXT:    bl .__atomic_fetch_xor_8[PR]
901 ; AIX32-NEXT:    nop
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]
907 ; AIX32-NEXT:    nop
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
917 ; AIX32-NEXT:    #
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]
934 ; AIX32-NEXT:    nop
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
951 ; AIX32-NEXT:    #
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]
968 ; AIX32-NEXT:    nop
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
978 ; AIX32-NEXT:    sync
979 ; AIX32-NEXT:    slw 18, 29, 26
980 ; AIX32-NEXT:    slw 3, 3, 26
981 ; AIX32-NEXT:  L..BB0_53: # %atomicrmw.end1
982 ; AIX32-NEXT:    #
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
992 ; AIX32-NEXT:    lwsync
993 ; AIX32-NEXT:    slw 17, 29, 24
994 ; AIX32-NEXT:    slw 3, 3, 24
995 ; AIX32-NEXT:    sync
996 ; AIX32-NEXT:  L..BB0_55: # %atomicrmw.end1
997 ; AIX32-NEXT:    #
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
1010 ; AIX32-NEXT:    sync
1011 ; AIX32-NEXT:    slw 3, 3, 22
1012 ; AIX32-NEXT:  L..BB0_57: # %atomicrmw.end1
1013 ; AIX32-NEXT:    #
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
1026 ; AIX32-NEXT:    sync
1027 ; AIX32-NEXT:    slw 3, 3, 19
1028 ; AIX32-NEXT:  L..BB0_59: # %atomicrmw.end1
1029 ; AIX32-NEXT:    #
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
1039 ; AIX32-NEXT:    sync
1040 ; AIX32-NEXT:  L..BB0_61: # %atomicrmw.end1
1041 ; AIX32-NEXT:    #
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
1048 ; AIX32-NEXT:    sync
1049 ; AIX32-NEXT:  L..BB0_63: # %atomicrmw.end1
1050 ; AIX32-NEXT:    #
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]
1063 ; AIX32-NEXT:    nop
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]
1070 ; AIX32-NEXT:    nop
1071 ; AIX32-NEXT:    li 3, 255
1072 ; AIX32-NEXT:    sync
1073 ; AIX32-NEXT:    slw 3, 3, 26
1074 ; AIX32-NEXT:  L..BB0_65: # %atomicrmw.end1
1075 ; AIX32-NEXT:    #
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
1087 ; AIX32-NEXT:    sync
1088 ; AIX32-NEXT:  L..BB0_67: # %atomicrmw.end1
1089 ; AIX32-NEXT:    #
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
1101 ; AIX32-NEXT:    sync
1102 ; AIX32-NEXT:    slw 3, 3, 22
1103 ; AIX32-NEXT:  L..BB0_69: # %atomicrmw.end1
1104 ; AIX32-NEXT:    #
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
1116 ; AIX32-NEXT:    sync
1117 ; AIX32-NEXT:    slw 3, 3, 19
1118 ; AIX32-NEXT:  L..BB0_71: # %atomicrmw.end1
1119 ; AIX32-NEXT:    #
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
1129 ; AIX32-NEXT:    sync
1130 ; AIX32-NEXT:  L..BB0_73: # %atomicrmw.end1
1131 ; AIX32-NEXT:    #
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
1138 ; AIX32-NEXT:    sync
1139 ; AIX32-NEXT:  L..BB0_75: # %atomicrmw.end1
1140 ; AIX32-NEXT:    #
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]
1152 ; AIX32-NEXT:    nop
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]
1158 ; AIX32-NEXT:    nop
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
1179 ; AIX32-NEXT:    blr
1180 entry:
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
1231   ret void
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
1249 ; CHECK-NEXT:    sync
1250 ; CHECK-NEXT:  .LBB1_1: # %entry
1251 ; CHECK-NEXT:    #
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
1261 ; CHECK-NEXT:    sync
1262 ; CHECK-NEXT:  .LBB1_3: # %entry
1263 ; CHECK-NEXT:    #
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
1273 ; CHECK-NEXT:    sync
1274 ; CHECK-NEXT:  .LBB1_5: # %entry
1275 ; CHECK-NEXT:    #
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
1285 ; CHECK-NEXT:    sync
1286 ; CHECK-NEXT:  .LBB1_7: # %entry
1287 ; CHECK-NEXT:    #
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
1297 ; CHECK-NEXT:    sync
1298 ; CHECK-NEXT:  .LBB1_9: # %entry
1299 ; CHECK-NEXT:    #
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
1309 ; CHECK-NEXT:    sync
1310 ; CHECK-NEXT:  .LBB1_11: # %entry
1311 ; CHECK-NEXT:    #
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
1322 ; CHECK-NEXT:    sync
1323 ; CHECK-NEXT:  .LBB1_13: # %entry
1324 ; CHECK-NEXT:    #
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
1334 ; CHECK-NEXT:    sync
1335 ; CHECK-NEXT:  .LBB1_15: # %entry
1336 ; CHECK-NEXT:    #
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)
1344 ; CHECK-NEXT:    sync
1345 ; CHECK-NEXT:  .LBB1_17: # %entry
1346 ; CHECK-NEXT:    #
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)
1354 ; CHECK-NEXT:    sync
1355 ; CHECK-NEXT:  .LBB1_19: # %entry
1356 ; CHECK-NEXT:    #
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)
1364 ; CHECK-NEXT:    sync
1365 ; CHECK-NEXT:  .LBB1_21: # %entry
1366 ; CHECK-NEXT:    #
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)
1374 ; CHECK-NEXT:    sync
1375 ; CHECK-NEXT:  .LBB1_23: # %entry
1376 ; CHECK-NEXT:    #
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)
1384 ; CHECK-NEXT:    sync
1385 ; CHECK-NEXT:  .LBB1_25: # %entry
1386 ; CHECK-NEXT:    #
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)
1394 ; CHECK-NEXT:    sync
1395 ; CHECK-NEXT:  .LBB1_27: # %entry
1396 ; CHECK-NEXT:    #
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)
1404 ; CHECK-NEXT:    sync
1405 ; CHECK-NEXT:  .LBB1_29: # %entry
1406 ; CHECK-NEXT:    #
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)
1414 ; CHECK-NEXT:    sync
1415 ; CHECK-NEXT:  .LBB1_31: # %entry
1416 ; CHECK-NEXT:    #
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)
1424 ; CHECK-NEXT:    sync
1425 ; CHECK-NEXT:  .LBB1_33: # %entry
1426 ; CHECK-NEXT:    #
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)
1434 ; CHECK-NEXT:    sync
1435 ; CHECK-NEXT:  .LBB1_35: # %entry
1436 ; CHECK-NEXT:    #
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)
1444 ; CHECK-NEXT:    sync
1445 ; CHECK-NEXT:  .LBB1_37: # %entry
1446 ; CHECK-NEXT:    #
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)
1454 ; CHECK-NEXT:    sync
1455 ; CHECK-NEXT:  .LBB1_39: # %entry
1456 ; CHECK-NEXT:    #
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)
1464 ; CHECK-NEXT:    sync
1465 ; CHECK-NEXT:  .LBB1_41: # %entry
1466 ; CHECK-NEXT:    #
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)
1474 ; CHECK-NEXT:    sync
1475 ; CHECK-NEXT:  .LBB1_43: # %entry
1476 ; CHECK-NEXT:    #
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)
1484 ; CHECK-NEXT:    sync
1485 ; CHECK-NEXT:  .LBB1_45: # %entry
1486 ; CHECK-NEXT:    #
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)
1494 ; CHECK-NEXT:    sync
1495 ; CHECK-NEXT:  .LBB1_47: # %entry
1496 ; CHECK-NEXT:    #
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)
1504 ; CHECK-NEXT:    sync
1505 ; CHECK-NEXT:  .LBB1_49: # %entry
1506 ; CHECK-NEXT:    #
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)
1514 ; CHECK-NEXT:    sync
1515 ; CHECK-NEXT:  .LBB1_51: # %entry
1516 ; CHECK-NEXT:    #
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)
1524 ; CHECK-NEXT:    sync
1525 ; CHECK-NEXT:  .LBB1_53: # %entry
1526 ; CHECK-NEXT:    #
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)
1534 ; CHECK-NEXT:    sync
1535 ; CHECK-NEXT:  .LBB1_55: # %entry
1536 ; CHECK-NEXT:    #
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)
1544 ; CHECK-NEXT:    sync
1545 ; CHECK-NEXT:  .LBB1_57: # %entry
1546 ; CHECK-NEXT:    #
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)
1554 ; CHECK-NEXT:    sync
1555 ; CHECK-NEXT:  .LBB1_59: # %entry
1556 ; CHECK-NEXT:    #
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)
1564 ; CHECK-NEXT:    sync
1565 ; CHECK-NEXT:  .LBB1_61: # %entry
1566 ; CHECK-NEXT:    #
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)
1574 ; CHECK-NEXT:    sync
1575 ; CHECK-NEXT:  .LBB1_63: # %entry
1576 ; CHECK-NEXT:    #
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)
1584 ; CHECK-NEXT:    sync
1585 ; CHECK-NEXT:  .LBB1_65: # %entry
1586 ; CHECK-NEXT:    #
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)
1594 ; CHECK-NEXT:    sync
1595 ; CHECK-NEXT:  .LBB1_67: # %entry
1596 ; CHECK-NEXT:    #
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)
1604 ; CHECK-NEXT:    sync
1605 ; CHECK-NEXT:  .LBB1_69: # %entry
1606 ; CHECK-NEXT:    #
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)
1614 ; CHECK-NEXT:    sync
1615 ; CHECK-NEXT:  .LBB1_71: # %entry
1616 ; CHECK-NEXT:    #
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)
1624 ; CHECK-NEXT:    sync
1625 ; CHECK-NEXT:  .LBB1_73: # %entry
1626 ; CHECK-NEXT:    #
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)
1634 ; CHECK-NEXT:    sync
1635 ; CHECK-NEXT:  .LBB1_75: # %entry
1636 ; CHECK-NEXT:    #
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)
1644 ; CHECK-NEXT:    sync
1645 ; CHECK-NEXT:  .LBB1_77: # %entry
1646 ; CHECK-NEXT:    #
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)
1654 ; CHECK-NEXT:    sync
1655 ; CHECK-NEXT:  .LBB1_79: # %entry
1656 ; CHECK-NEXT:    #
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)
1664 ; CHECK-NEXT:    sync
1665 ; CHECK-NEXT:  .LBB1_81: # %entry
1666 ; CHECK-NEXT:    #
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)
1674 ; CHECK-NEXT:    sync
1675 ; CHECK-NEXT:  .LBB1_83: # %entry
1676 ; CHECK-NEXT:    #
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)
1684 ; CHECK-NEXT:    sync
1685 ; CHECK-NEXT:  .LBB1_85: # %entry
1686 ; CHECK-NEXT:    #
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)
1694 ; CHECK-NEXT:    sync
1695 ; CHECK-NEXT:  .LBB1_87: # %entry
1696 ; CHECK-NEXT:    #
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)
1704 ; CHECK-NEXT:    sync
1705 ; CHECK-NEXT:  .LBB1_89: # %entry
1706 ; CHECK-NEXT:    #
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)
1714 ; CHECK-NEXT:    sync
1715 ; CHECK-NEXT:  .LBB1_91: # %entry
1716 ; CHECK-NEXT:    #
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)
1724 ; CHECK-NEXT:    sync
1725 ; CHECK-NEXT:  .LBB1_93: # %entry
1726 ; CHECK-NEXT:    #
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)
1734 ; CHECK-NEXT:    sync
1735 ; CHECK-NEXT:  .LBB1_95: # %entry
1736 ; CHECK-NEXT:    #
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
1753 ; CHECK-NEXT:    blr
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
1788 ; AIX32-NEXT:    sync
1789 ; AIX32-NEXT:  L..BB1_1: # %entry
1790 ; AIX32-NEXT:    #
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
1808 ; AIX32-NEXT:    sync
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
1813 ; AIX32-NEXT:    #
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
1830 ; AIX32-NEXT:    sync
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
1836 ; AIX32-NEXT:    #
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
1853 ; AIX32-NEXT:    sync
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
1859 ; AIX32-NEXT:    #
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)
1873 ; AIX32-NEXT:    sync
1874 ; AIX32-NEXT:  L..BB1_9: # %entry
1875 ; AIX32-NEXT:    #
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)
1884 ; AIX32-NEXT:    sync
1885 ; AIX32-NEXT:  L..BB1_11: # %entry
1886 ; AIX32-NEXT:    #
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]
1900 ; AIX32-NEXT:    nop
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]
1911 ; AIX32-NEXT:    nop
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
1916 ; AIX32-NEXT:    sync
1917 ; AIX32-NEXT:  L..BB1_13: # %entry
1918 ; AIX32-NEXT:    #
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
1934 ; AIX32-NEXT:    sync
1935 ; AIX32-NEXT:  L..BB1_15: # %entry
1936 ; AIX32-NEXT:    #
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
1953 ; AIX32-NEXT:    sync
1954 ; AIX32-NEXT:  L..BB1_17: # %entry
1955 ; AIX32-NEXT:    #
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
1971 ; AIX32-NEXT:    sync
1972 ; AIX32-NEXT:  L..BB1_19: # %entry
1973 ; AIX32-NEXT:    #
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)
1986 ; AIX32-NEXT:    sync
1987 ; AIX32-NEXT:  L..BB1_21: # %entry
1988 ; AIX32-NEXT:    #
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)
1996 ; AIX32-NEXT:    sync
1997 ; AIX32-NEXT:  L..BB1_23: # %entry
1998 ; AIX32-NEXT:    #
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]
2011 ; AIX32-NEXT:    nop
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]
2021 ; AIX32-NEXT:    nop
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
2026 ; AIX32-NEXT:    sync
2027 ; AIX32-NEXT:  L..BB1_25: # %entry
2028 ; AIX32-NEXT:    #
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
2044 ; AIX32-NEXT:    sync
2045 ; AIX32-NEXT:  L..BB1_27: # %entry
2046 ; AIX32-NEXT:    #
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
2062 ; AIX32-NEXT:    sync
2063 ; AIX32-NEXT:  L..BB1_29: # %entry
2064 ; AIX32-NEXT:    #
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
2080 ; AIX32-NEXT:    sync
2081 ; AIX32-NEXT:  L..BB1_31: # %entry
2082 ; AIX32-NEXT:    #
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)
2095 ; AIX32-NEXT:    sync
2096 ; AIX32-NEXT:  L..BB1_33: # %entry
2097 ; AIX32-NEXT:    #
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)
2105 ; AIX32-NEXT:    sync
2106 ; AIX32-NEXT:  L..BB1_35: # %entry
2107 ; AIX32-NEXT:    #
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]
2120 ; AIX32-NEXT:    nop
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]
2130 ; AIX32-NEXT:    nop
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
2135 ; AIX32-NEXT:    sync
2136 ; AIX32-NEXT:  L..BB1_37: # %entry
2137 ; AIX32-NEXT:    #
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
2153 ; AIX32-NEXT:    sync
2154 ; AIX32-NEXT:  L..BB1_39: # %entry
2155 ; AIX32-NEXT:    #
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
2171 ; AIX32-NEXT:    sync
2172 ; AIX32-NEXT:  L..BB1_41: # %entry
2173 ; AIX32-NEXT:    #
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
2189 ; AIX32-NEXT:    sync
2190 ; AIX32-NEXT:  L..BB1_43: # %entry
2191 ; AIX32-NEXT:    #
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)
2204 ; AIX32-NEXT:    sync
2205 ; AIX32-NEXT:  L..BB1_45: # %entry
2206 ; AIX32-NEXT:    #
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)
2214 ; AIX32-NEXT:    sync
2215 ; AIX32-NEXT:  L..BB1_47: # %entry
2216 ; AIX32-NEXT:    #
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]
2229 ; AIX32-NEXT:    nop
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]
2239 ; AIX32-NEXT:    nop
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
2244 ; AIX32-NEXT:    sync
2245 ; AIX32-NEXT:  L..BB1_49: # %entry
2246 ; AIX32-NEXT:    #
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
2263 ; AIX32-NEXT:    sync
2264 ; AIX32-NEXT:  L..BB1_51: # %entry
2265 ; AIX32-NEXT:    #
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
2281 ; AIX32-NEXT:    sync
2282 ; AIX32-NEXT:  L..BB1_53: # %entry
2283 ; AIX32-NEXT:    #
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
2299 ; AIX32-NEXT:    sync
2300 ; AIX32-NEXT:  L..BB1_55: # %entry
2301 ; AIX32-NEXT:    #
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)
2314 ; AIX32-NEXT:    sync
2315 ; AIX32-NEXT:  L..BB1_57: # %entry
2316 ; AIX32-NEXT:    #
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)
2324 ; AIX32-NEXT:    sync
2325 ; AIX32-NEXT:  L..BB1_59: # %entry
2326 ; AIX32-NEXT:    #
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]
2339 ; AIX32-NEXT:    nop
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]
2349 ; AIX32-NEXT:    nop
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
2354 ; AIX32-NEXT:    sync
2355 ; AIX32-NEXT:  L..BB1_61: # %entry
2356 ; AIX32-NEXT:    #
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
2372 ; AIX32-NEXT:    sync
2373 ; AIX32-NEXT:  L..BB1_63: # %entry
2374 ; AIX32-NEXT:    #
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
2391 ; AIX32-NEXT:    sync
2392 ; AIX32-NEXT:  L..BB1_65: # %entry
2393 ; AIX32-NEXT:    #
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
2409 ; AIX32-NEXT:    sync
2410 ; AIX32-NEXT:  L..BB1_67: # %entry
2411 ; AIX32-NEXT:    #
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)
2424 ; AIX32-NEXT:    sync
2425 ; AIX32-NEXT:  L..BB1_69: # %entry
2426 ; AIX32-NEXT:    #
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)
2434 ; AIX32-NEXT:    sync
2435 ; AIX32-NEXT:  L..BB1_71: # %entry
2436 ; AIX32-NEXT:    #
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]
2449 ; AIX32-NEXT:    nop
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]
2459 ; AIX32-NEXT:    nop
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
2484 ; AIX32-NEXT:    blr
2485 entry:
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
2582   ret void
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
2608 ; CHECK-NEXT:    sync
2609 ; CHECK-NEXT:  .LBB2_1: # %entry
2610 ; CHECK-NEXT:    #
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)
2619 ; CHECK-NEXT:    sync
2620 ; CHECK-NEXT:  .LBB2_3: # %entry
2621 ; CHECK-NEXT:    #
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
2632 ; CHECK-NEXT:    sync
2633 ; CHECK-NEXT:  .LBB2_5: # %entry
2634 ; CHECK-NEXT:    #
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
2645 ; CHECK-NEXT:    sync
2646 ; CHECK-NEXT:  .LBB2_7: # %entry
2647 ; CHECK-NEXT:    #
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
2658 ; CHECK-NEXT:    sync
2659 ; CHECK-NEXT:  .LBB2_9: # %entry
2660 ; CHECK-NEXT:    #
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
2671 ; CHECK-NEXT:    sync
2672 ; CHECK-NEXT:  .LBB2_11: # %entry
2673 ; CHECK-NEXT:    #
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
2684 ; CHECK-NEXT:    sync
2685 ; CHECK-NEXT:  .LBB2_13: # %entry
2686 ; CHECK-NEXT:    #
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
2697 ; CHECK-NEXT:    sync
2698 ; CHECK-NEXT:  .LBB2_15: # %entry
2699 ; CHECK-NEXT:    #
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)
2708 ; CHECK-NEXT:    sync
2709 ; CHECK-NEXT:  .LBB2_17: # %entry
2710 ; CHECK-NEXT:    #
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)
2719 ; CHECK-NEXT:    sync
2720 ; CHECK-NEXT:  .LBB2_19: # %entry
2721 ; CHECK-NEXT:    #
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
2730 ; CHECK-NEXT:    sync
2731 ; CHECK-NEXT:  .LBB2_21: # %entry
2732 ; CHECK-NEXT:    #
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)
2741 ; CHECK-NEXT:    sync
2742 ; CHECK-NEXT:  .LBB2_23: # %entry
2743 ; CHECK-NEXT:    #
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)
2752 ; CHECK-NEXT:    sync
2753 ; CHECK-NEXT:  .LBB2_25: # %entry
2754 ; CHECK-NEXT:    #
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)
2763 ; CHECK-NEXT:    sync
2764 ; CHECK-NEXT:  .LBB2_27: # %entry
2765 ; CHECK-NEXT:    #
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)
2774 ; CHECK-NEXT:    sync
2775 ; CHECK-NEXT:  .LBB2_29: # %entry
2776 ; CHECK-NEXT:    #
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)
2785 ; CHECK-NEXT:    sync
2786 ; CHECK-NEXT:  .LBB2_31: # %entry
2787 ; CHECK-NEXT:    #
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)
2796 ; CHECK-NEXT:    sync
2797 ; CHECK-NEXT:  .LBB2_33: # %entry
2798 ; CHECK-NEXT:    #
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)
2807 ; CHECK-NEXT:    sync
2808 ; CHECK-NEXT:  .LBB2_35: # %entry
2809 ; CHECK-NEXT:    #
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
2818 ; CHECK-NEXT:    sync
2819 ; CHECK-NEXT:  .LBB2_37: # %entry
2820 ; CHECK-NEXT:    #
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)
2829 ; CHECK-NEXT:    sync
2830 ; CHECK-NEXT:  .LBB2_39: # %entry
2831 ; CHECK-NEXT:    #
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)
2840 ; CHECK-NEXT:    sync
2841 ; CHECK-NEXT:  .LBB2_41: # %entry
2842 ; CHECK-NEXT:    #
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)
2851 ; CHECK-NEXT:    sync
2852 ; CHECK-NEXT:  .LBB2_43: # %entry
2853 ; CHECK-NEXT:    #
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)
2862 ; CHECK-NEXT:    sync
2863 ; CHECK-NEXT:  .LBB2_45: # %entry
2864 ; CHECK-NEXT:    #
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)
2873 ; CHECK-NEXT:    sync
2874 ; CHECK-NEXT:  .LBB2_47: # %entry
2875 ; CHECK-NEXT:    #
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)
2884 ; CHECK-NEXT:    sync
2885 ; CHECK-NEXT:  .LBB2_49: # %entry
2886 ; CHECK-NEXT:    #
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)
2895 ; CHECK-NEXT:    sync
2896 ; CHECK-NEXT:  .LBB2_51: # %entry
2897 ; CHECK-NEXT:    #
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
2906 ; CHECK-NEXT:    sync
2907 ; CHECK-NEXT:  .LBB2_53: # %entry
2908 ; CHECK-NEXT:    #
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)
2917 ; CHECK-NEXT:    sync
2918 ; CHECK-NEXT:  .LBB2_55: # %entry
2919 ; CHECK-NEXT:    #
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)
2928 ; CHECK-NEXT:    sync
2929 ; CHECK-NEXT:  .LBB2_57: # %entry
2930 ; CHECK-NEXT:    #
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)
2939 ; CHECK-NEXT:    sync
2940 ; CHECK-NEXT:  .LBB2_59: # %entry
2941 ; CHECK-NEXT:    #
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)
2950 ; CHECK-NEXT:    sync
2951 ; CHECK-NEXT:  .LBB2_61: # %entry
2952 ; CHECK-NEXT:    #
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)
2961 ; CHECK-NEXT:    sync
2962 ; CHECK-NEXT:  .LBB2_63: # %entry
2963 ; CHECK-NEXT:    #
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)
2972 ; CHECK-NEXT:    sync
2973 ; CHECK-NEXT:  .LBB2_65: # %entry
2974 ; CHECK-NEXT:    #
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)
2983 ; CHECK-NEXT:    sync
2984 ; CHECK-NEXT:  .LBB2_67: # %entry
2985 ; CHECK-NEXT:    #
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
2994 ; CHECK-NEXT:    sync
2995 ; CHECK-NEXT:  .LBB2_69: # %entry
2996 ; CHECK-NEXT:    #
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)
3005 ; CHECK-NEXT:    sync
3006 ; CHECK-NEXT:  .LBB2_71: # %entry
3007 ; CHECK-NEXT:    #
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)
3016 ; CHECK-NEXT:    sync
3017 ; CHECK-NEXT:  .LBB2_73: # %entry
3018 ; CHECK-NEXT:    #
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)
3027 ; CHECK-NEXT:    sync
3028 ; CHECK-NEXT:  .LBB2_75: # %entry
3029 ; CHECK-NEXT:    #
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)
3038 ; CHECK-NEXT:    sync
3039 ; CHECK-NEXT:  .LBB2_77: # %entry
3040 ; CHECK-NEXT:    #
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)
3049 ; CHECK-NEXT:    sync
3050 ; CHECK-NEXT:  .LBB2_79: # %entry
3051 ; CHECK-NEXT:    #
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)
3062 ; CHECK-NEXT:    sync
3063 ; CHECK-NEXT:    addi 23, 24, u128@toc@l
3064 ; CHECK-NEXT:  .LBB2_81: # %entry
3065 ; CHECK-NEXT:    #
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
3079 ; CHECK-NEXT:    sync
3080 ; CHECK-NEXT:    addi 24, 25, s128@toc@l
3081 ; CHECK-NEXT:  .LBB2_83: # %entry
3082 ; CHECK-NEXT:    #
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)
3094 ; CHECK-NEXT:    sync
3095 ; CHECK-NEXT:  .LBB2_85: # %entry
3096 ; CHECK-NEXT:    #
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)
3105 ; CHECK-NEXT:    sync
3106 ; CHECK-NEXT:  .LBB2_87: # %entry
3107 ; CHECK-NEXT:    #
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)
3115 ; CHECK-NEXT:    sync
3116 ; CHECK-NEXT:  .LBB2_89: # %entry
3117 ; CHECK-NEXT:    #
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)
3126 ; CHECK-NEXT:    sync
3127 ; CHECK-NEXT:  .LBB2_91: # %entry
3128 ; CHECK-NEXT:    #
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)
3137 ; CHECK-NEXT:    sync
3138 ; CHECK-NEXT:  .LBB2_93: # %entry
3139 ; CHECK-NEXT:    #
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)
3148 ; CHECK-NEXT:    sync
3149 ; CHECK-NEXT:  .LBB2_95: # %entry
3150 ; CHECK-NEXT:    #
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)
3159 ; CHECK-NEXT:    sync
3160 ; CHECK-NEXT:  .LBB2_97: # %entry
3161 ; CHECK-NEXT:    #
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)
3170 ; CHECK-NEXT:    sync
3171 ; CHECK-NEXT:  .LBB2_99: # %entry
3172 ; CHECK-NEXT:    #
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
3195 ; CHECK-NEXT:    blr
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
3231 ; AIX32-NEXT:    sync
3232 ; AIX32-NEXT:  L..BB2_1: # %entry
3233 ; AIX32-NEXT:    #
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
3254 ; AIX32-NEXT:    sync
3255 ; AIX32-NEXT:  L..BB2_3: # %entry
3256 ; AIX32-NEXT:    #
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
3276 ; AIX32-NEXT:    sync
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
3281 ; AIX32-NEXT:    #
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
3302 ; AIX32-NEXT:    sync
3303 ; AIX32-NEXT:    slw 4, 3, 15
3304 ; AIX32-NEXT:    slw 5, 5, 15
3305 ; AIX32-NEXT:  L..BB2_7: # %entry
3306 ; AIX32-NEXT:    #
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)
3322 ; AIX32-NEXT:    sync
3323 ; AIX32-NEXT:  L..BB2_9: # %entry
3324 ; AIX32-NEXT:    #
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)
3335 ; AIX32-NEXT:    sync
3336 ; AIX32-NEXT:  L..BB2_11: # %entry
3337 ; AIX32-NEXT:    #
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]
3353 ; AIX32-NEXT:    nop
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]
3365 ; AIX32-NEXT:    nop
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
3374 ; AIX32-NEXT:    sync
3375 ; AIX32-NEXT:  L..BB2_13: # %entry
3376 ; AIX32-NEXT:    #
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
3394 ; AIX32-NEXT:    sync
3395 ; AIX32-NEXT:  L..BB2_15: # %entry
3396 ; AIX32-NEXT:    #
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
3415 ; AIX32-NEXT:    sync
3416 ; AIX32-NEXT:  L..BB2_17: # %entry
3417 ; AIX32-NEXT:    #
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
3437 ; AIX32-NEXT:    sync
3438 ; AIX32-NEXT:  L..BB2_19: # %entry
3439 ; AIX32-NEXT:    #
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)
3454 ; AIX32-NEXT:    sync
3455 ; AIX32-NEXT:  L..BB2_21: # %entry
3456 ; AIX32-NEXT:    #
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)
3465 ; AIX32-NEXT:    sync
3466 ; AIX32-NEXT:  L..BB2_23: # %entry
3467 ; AIX32-NEXT:    #
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]
3481 ; AIX32-NEXT:    nop
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]
3492 ; AIX32-NEXT:    nop
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
3501 ; AIX32-NEXT:    sync
3502 ; AIX32-NEXT:  L..BB2_25: # %entry
3503 ; AIX32-NEXT:    #
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
3520 ; AIX32-NEXT:    sync
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
3524 ; AIX32-NEXT:    #
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
3543 ; AIX32-NEXT:    sync
3544 ; AIX32-NEXT:  L..BB2_29: # %entry
3545 ; AIX32-NEXT:    #
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
3564 ; AIX32-NEXT:    sync
3565 ; AIX32-NEXT:  L..BB2_31: # %entry
3566 ; AIX32-NEXT:    #
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)
3581 ; AIX32-NEXT:    sync
3582 ; AIX32-NEXT:  L..BB2_33: # %entry
3583 ; AIX32-NEXT:    #
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)
3592 ; AIX32-NEXT:    sync
3593 ; AIX32-NEXT:  L..BB2_35: # %entry
3594 ; AIX32-NEXT:    #
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]
3608 ; AIX32-NEXT:    nop
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]
3619 ; AIX32-NEXT:    nop
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
3627 ; AIX32-NEXT:    sync
3628 ; AIX32-NEXT:  L..BB2_37: # %entry
3629 ; AIX32-NEXT:    #
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
3647 ; AIX32-NEXT:    sync
3648 ; AIX32-NEXT:  L..BB2_39: # %entry
3649 ; AIX32-NEXT:    #
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
3668 ; AIX32-NEXT:    sync
3669 ; AIX32-NEXT:  L..BB2_41: # %entry
3670 ; AIX32-NEXT:    #
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
3689 ; AIX32-NEXT:    sync
3690 ; AIX32-NEXT:  L..BB2_43: # %entry
3691 ; AIX32-NEXT:    #
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)
3706 ; AIX32-NEXT:    sync
3707 ; AIX32-NEXT:  L..BB2_45: # %entry
3708 ; AIX32-NEXT:    #
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)
3717 ; AIX32-NEXT:    sync
3718 ; AIX32-NEXT:  L..BB2_47: # %entry
3719 ; AIX32-NEXT:    #
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]
3733 ; AIX32-NEXT:    nop
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]
3744 ; AIX32-NEXT:    nop
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
3752 ; AIX32-NEXT:    sync
3753 ; AIX32-NEXT:  L..BB2_49: # %entry
3754 ; AIX32-NEXT:    #
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
3772 ; AIX32-NEXT:    sync
3773 ; AIX32-NEXT:  L..BB2_51: # %entry
3774 ; AIX32-NEXT:    #
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
3793 ; AIX32-NEXT:    sync
3794 ; AIX32-NEXT:  L..BB2_53: # %entry
3795 ; AIX32-NEXT:    #
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
3814 ; AIX32-NEXT:    sync
3815 ; AIX32-NEXT:  L..BB2_55: # %entry
3816 ; AIX32-NEXT:    #
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)
3831 ; AIX32-NEXT:    sync
3832 ; AIX32-NEXT:  L..BB2_57: # %entry
3833 ; AIX32-NEXT:    #
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)
3843 ; AIX32-NEXT:    sync
3844 ; AIX32-NEXT:  L..BB2_59: # %entry
3845 ; AIX32-NEXT:    #
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]
3859 ; AIX32-NEXT:    nop
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]
3869 ; AIX32-NEXT:    nop
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
3883 ; AIX32-NEXT:    #
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]
3901 ; AIX32-NEXT:    nop
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
3925 ; AIX32-NEXT:    #
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]
3943 ; AIX32-NEXT:    nop
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
3961 ; AIX32-NEXT:    sync
3962 ; AIX32-NEXT:  L..BB2_65: # %atomicrmw.end1
3963 ; AIX32-NEXT:    #
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
3980 ; AIX32-NEXT:    sync
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
3985 ; AIX32-NEXT:    #
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
4003 ; AIX32-NEXT:    sync
4004 ; AIX32-NEXT:  L..BB2_69: # %atomicrmw.end1
4005 ; AIX32-NEXT:    #
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
4024 ; AIX32-NEXT:    sync
4025 ; AIX32-NEXT:  L..BB2_71: # %atomicrmw.end1
4026 ; AIX32-NEXT:    #
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)
4041 ; AIX32-NEXT:    sync
4042 ; AIX32-NEXT:  L..BB2_73: # %atomicrmw.end1
4043 ; AIX32-NEXT:    #
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)
4052 ; AIX32-NEXT:    sync
4053 ; AIX32-NEXT:  L..BB2_75: # %atomicrmw.end1
4054 ; AIX32-NEXT:    #
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]
4069 ; AIX32-NEXT:    nop
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]
4079 ; AIX32-NEXT:    nop
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
4105 ; AIX32-NEXT:    blr
4106 entry:
4107   %0 = load i8, ptr @uc, align 1
4108   %1 = atomicrmw add ptr @sc, i8 %0 seq_cst, align 1
4109   %2 = add i8 %1, %0
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
4113   %5 = add i8 %4, %3
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
4349   ret void
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)
4365 ; CHECK-NEXT:    sync
4366 ; CHECK-NEXT:  .LBB3_1: # %entry
4367 ; CHECK-NEXT:    #
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
4372 ; CHECK-NEXT:    #
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)
4379 ; CHECK-NEXT:    sync
4380 ; CHECK-NEXT:  .LBB3_4: # %entry
4381 ; CHECK-NEXT:    #
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
4386 ; CHECK-NEXT:    #
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
4395 ; CHECK-NEXT:    sync
4396 ; CHECK-NEXT:    extsb 8, 8
4397 ; CHECK-NEXT:  .LBB3_7: # %entry
4398 ; CHECK-NEXT:    #
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
4403 ; CHECK-NEXT:    #
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
4413 ; CHECK-NEXT:    sync
4414 ; CHECK-NEXT:    extsb 8, 8
4415 ; CHECK-NEXT:  .LBB3_10: # %entry
4416 ; CHECK-NEXT:    #
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
4421 ; CHECK-NEXT:    #
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
4431 ; CHECK-NEXT:    sync
4432 ; CHECK-NEXT:    extsb 8, 8
4433 ; CHECK-NEXT:  .LBB3_13: # %entry
4434 ; CHECK-NEXT:    #
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
4439 ; CHECK-NEXT:    #
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
4449 ; CHECK-NEXT:    sync
4450 ; CHECK-NEXT:    extsb 8, 8
4451 ; CHECK-NEXT:  .LBB3_16: # %entry
4452 ; CHECK-NEXT:    #
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
4457 ; CHECK-NEXT:    #
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)
4466 ; CHECK-NEXT:    sync
4467 ; CHECK-NEXT:    extsb 29, 8
4468 ; CHECK-NEXT:    addi 8, 30, sll@toc@l
4469 ; CHECK-NEXT:  .LBB3_19: # %entry
4470 ; CHECK-NEXT:    #
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
4475 ; CHECK-NEXT:    #
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)
4484 ; CHECK-NEXT:    sync
4485 ; CHECK-NEXT:    extsb 28, 7
4486 ; CHECK-NEXT:    addi 7, 29, ull@toc@l
4487 ; CHECK-NEXT:  .LBB3_22: # %entry
4488 ; CHECK-NEXT:    #
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
4493 ; CHECK-NEXT:    #
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)
4501 ; CHECK-NEXT:    sync
4502 ; CHECK-NEXT:  .LBB3_25: # %entry
4503 ; CHECK-NEXT:    #
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
4508 ; CHECK-NEXT:    #
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)
4519 ; CHECK-NEXT:    sync
4520 ; CHECK-NEXT:  .LBB3_28: # %entry
4521 ; CHECK-NEXT:    #
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
4526 ; CHECK-NEXT:    #
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
4538 ; CHECK-NEXT:    sync
4539 ; CHECK-NEXT:  .LBB3_31: # %entry
4540 ; CHECK-NEXT:    #
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
4545 ; CHECK-NEXT:    #
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
4557 ; CHECK-NEXT:    sync
4558 ; CHECK-NEXT:  .LBB3_34: # %entry
4559 ; CHECK-NEXT:    #
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
4564 ; CHECK-NEXT:    #
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
4576 ; CHECK-NEXT:    sync
4577 ; CHECK-NEXT:  .LBB3_37: # %entry
4578 ; CHECK-NEXT:    #
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
4583 ; CHECK-NEXT:    #
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
4595 ; CHECK-NEXT:    sync
4596 ; CHECK-NEXT:  .LBB3_40: # %entry
4597 ; CHECK-NEXT:    #
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
4602 ; CHECK-NEXT:    #
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
4614 ; CHECK-NEXT:    sync
4615 ; CHECK-NEXT:  .LBB3_43: # %entry
4616 ; CHECK-NEXT:    #
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
4621 ; CHECK-NEXT:    #
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
4633 ; CHECK-NEXT:    sync
4634 ; CHECK-NEXT:  .LBB3_46: # %entry
4635 ; CHECK-NEXT:    #
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
4640 ; CHECK-NEXT:    #
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)
4653 ; CHECK-NEXT:    blr
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
4688 ; AIX32-NEXT:    sync
4689 ; AIX32-NEXT:  L..BB3_1: # %entry
4690 ; AIX32-NEXT:    #
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
4696 ; AIX32-NEXT:    #
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
4710 ; AIX32-NEXT:    sync
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
4717 ; AIX32-NEXT:    #
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
4723 ; AIX32-NEXT:    #
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)
4735 ; AIX32-NEXT:    sync
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
4747 ; AIX32-NEXT:    #
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
4753 ; AIX32-NEXT:    #
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)
4766 ; AIX32-NEXT:    sync
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
4778 ; AIX32-NEXT:    #
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
4784 ; AIX32-NEXT:    #
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)
4796 ; AIX32-NEXT:    sync
4797 ; AIX32-NEXT:    extsb 4, 5
4798 ; AIX32-NEXT:  L..BB3_13: # %entry
4799 ; AIX32-NEXT:    #
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
4804 ; AIX32-NEXT:    #
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)
4813 ; AIX32-NEXT:    sync
4814 ; AIX32-NEXT:    extsb 4, 4
4815 ; AIX32-NEXT:  L..BB3_16: # %entry
4816 ; AIX32-NEXT:    #
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
4821 ; AIX32-NEXT:    #
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]
4840 ; AIX32-NEXT:    nop
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]
4857 ; AIX32-NEXT:    nop
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
4868 ; AIX32-NEXT:    sync
4869 ; AIX32-NEXT:    and 5, 5, 3
4870 ; AIX32-NEXT:    and 6, 6, 3
4871 ; AIX32-NEXT:  L..BB3_19: # %entry
4872 ; AIX32-NEXT:    #
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
4878 ; AIX32-NEXT:    #
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
4896 ; AIX32-NEXT:    sync
4897 ; AIX32-NEXT:    and 7, 5, 6
4898 ; AIX32-NEXT:    and 8, 8, 6
4899 ; AIX32-NEXT:  L..BB3_22: # %entry
4900 ; AIX32-NEXT:    #
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
4906 ; AIX32-NEXT:    #
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
4924 ; AIX32-NEXT:    sync
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
4929 ; AIX32-NEXT:    #
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
4935 ; AIX32-NEXT:    #
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
4953 ; AIX32-NEXT:    sync
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
4958 ; AIX32-NEXT:    #
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
4964 ; AIX32-NEXT:    #
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
4978 ; AIX32-NEXT:    sync
4979 ; AIX32-NEXT:  L..BB3_31: # %entry
4980 ; AIX32-NEXT:    #
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
4985 ; AIX32-NEXT:    #
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)
4994 ; AIX32-NEXT:    sync
4995 ; AIX32-NEXT:    extsb 5, 5
4996 ; AIX32-NEXT:  L..BB3_34: # %entry
4997 ; AIX32-NEXT:    #
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
5002 ; AIX32-NEXT:    #
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]
5020 ; AIX32-NEXT:    nop
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]
5033 ; AIX32-NEXT:    nop
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
5053 ; AIX32-NEXT:    blr
5054 entry:
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
5165   ret void
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
5173 ; CHECK-NEXT:    sync
5174 ; CHECK-NEXT:    addi 4, 3, sc@toc@l
5175 ; CHECK-NEXT:  .LBB4_1: # %entry
5176 ; CHECK-NEXT:    #
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
5185 ; CHECK-NEXT:    sync
5186 ; CHECK-NEXT:  .LBB4_3: # %entry
5187 ; CHECK-NEXT:    #
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
5196 ; CHECK-NEXT:    sync
5197 ; CHECK-NEXT:  .LBB4_5: # %entry
5198 ; CHECK-NEXT:    #
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
5207 ; CHECK-NEXT:    sync
5208 ; CHECK-NEXT:  .LBB4_7: # %entry
5209 ; CHECK-NEXT:    #
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
5218 ; CHECK-NEXT:    sync
5219 ; CHECK-NEXT:  .LBB4_9: # %entry
5220 ; CHECK-NEXT:    #
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
5229 ; CHECK-NEXT:    sync
5230 ; CHECK-NEXT:  .LBB4_11: # %entry
5231 ; CHECK-NEXT:    #
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
5241 ; CHECK-NEXT:    sync
5242 ; CHECK-NEXT:  .LBB4_13: # %entry
5243 ; CHECK-NEXT:    #
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
5252 ; CHECK-NEXT:    sync
5253 ; CHECK-NEXT:  .LBB4_15: # %entry
5254 ; CHECK-NEXT:    #
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
5262 ; CHECK-NEXT:    sync
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)
5280 ; CHECK-NEXT:    blr
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
5305 ; AIX32-NEXT:    sync
5306 ; AIX32-NEXT:  L..BB4_1: # %entry
5307 ; AIX32-NEXT:    #
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
5322 ; AIX32-NEXT:    sync
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
5328 ; AIX32-NEXT:    #
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
5344 ; AIX32-NEXT:    sync
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
5350 ; AIX32-NEXT:    #
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
5366 ; AIX32-NEXT:    sync
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
5372 ; AIX32-NEXT:    #
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)
5384 ; AIX32-NEXT:    sync
5385 ; AIX32-NEXT:  L..BB4_9: # %entry
5386 ; AIX32-NEXT:    #
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)
5394 ; AIX32-NEXT:    sync
5395 ; AIX32-NEXT:  L..BB4_11: # %entry
5396 ; AIX32-NEXT:    #
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]
5410 ; AIX32-NEXT:    nop
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]
5421 ; AIX32-NEXT:    nop
5422 ; AIX32-NEXT:    stw 4, 4(30)
5423 ; AIX32-NEXT:    stw 3, 0(30)
5424 ; AIX32-NEXT:    sync
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]
5442 ; AIX32-NEXT:    nop
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]
5448 ; AIX32-NEXT:    nop
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
5461 ; AIX32-NEXT:    blr
5462 entry:
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
5479   fence seq_cst
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
5488   ret void
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
5498 ; CHECK-NEXT:    #
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
5503 ; CHECK-NEXT:    #
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
5510 ; CHECK-NEXT:    sync
5511 ; CHECK-NEXT:  .LBB5_4: # %entry
5512 ; CHECK-NEXT:    #
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
5517 ; CHECK-NEXT:    #
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
5524 ; CHECK-NEXT:    #
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
5529 ; CHECK-NEXT:    #
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
5537 ; CHECK-NEXT:    #
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
5542 ; CHECK-NEXT:    #
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)
5547 ; CHECK-NEXT:    blr
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
5554 ; AIX32-NEXT:    #
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
5559 ; AIX32-NEXT:    #
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
5565 ; AIX32-NEXT:    sync
5566 ; AIX32-NEXT:  L..BB5_4: # %entry
5567 ; AIX32-NEXT:    #
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
5572 ; AIX32-NEXT:    #
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
5579 ; AIX32-NEXT:    #
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
5584 ; AIX32-NEXT:    #
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
5592 ; AIX32-NEXT:    #
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
5597 ; AIX32-NEXT:    #
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)
5602 ; AIX32-NEXT:    blr
5603 entry:
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
5612   ret void
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
5620 ; CHECK-NEXT:    #
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
5625 ; CHECK-NEXT:    #
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
5632 ; CHECK-NEXT:    blr
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]
5649 ; AIX32-NEXT:    nop
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
5658 ; AIX32-NEXT:    blr
5659 entry:
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
5664   ret i64 %conv
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
5670 ; CHECK-NEXT:    sync
5671 ; CHECK-NEXT:  .LBB7_1: # %entry
5672 ; CHECK-NEXT:    #
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
5677 ; CHECK-NEXT:    #
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
5685 ; CHECK-NEXT:    blr
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
5704 ; AIX32-NEXT:    #
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]
5720 ; AIX32-NEXT:    nop
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
5743 ; AIX32-NEXT:    blr
5744 entry:
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
5748   ret i64 %conv
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
5754 ; CHECK-NEXT:    sync
5755 ; CHECK-NEXT:  .LBB8_1: # %entry
5756 ; CHECK-NEXT:    #
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
5761 ; CHECK-NEXT:    #
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
5769 ; CHECK-NEXT:    blr
5771 ; AIX32-LABEL: atommax4:
5772 ; AIX32:       # %bb.0: # %entry
5773 ; AIX32-NEXT:    sync
5774 ; AIX32-NEXT:  L..BB8_1: # %entry
5775 ; AIX32-NEXT:    #
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
5780 ; AIX32-NEXT:    #
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
5788 ; AIX32-NEXT:    blr
5789 entry:
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
5793   ret i32 %cond
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
5799 ; CHECK-NEXT:    sync
5800 ; CHECK-NEXT:  .LBB9_1: # %entry
5801 ; CHECK-NEXT:    #
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
5807 ; CHECK-NEXT:    #
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
5815 ; CHECK-NEXT:    blr
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
5822 ; AIX32-NEXT:    sync
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
5830 ; AIX32-NEXT:    #
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
5838 ; AIX32-NEXT:    #
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
5852 ; AIX32-NEXT:    blr
5853 entry:
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
5857   ret i16 %conv3
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
5863 ; CHECK-NEXT:    sync
5864 ; CHECK-NEXT:  .LBB10_1: # %entry
5865 ; CHECK-NEXT:    #
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
5870 ; CHECK-NEXT:    #
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
5878 ; CHECK-NEXT:    blr
5880 ; AIX32-LABEL: atommax1:
5881 ; AIX32:       # %bb.0: # %entry
5882 ; AIX32-NEXT:    rlwinm 5, 3, 3, 27, 28
5883 ; AIX32-NEXT:    li 7, 255
5884 ; AIX32-NEXT:    sync
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
5891 ; AIX32-NEXT:    #
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
5897 ; AIX32-NEXT:    #
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
5910 ; AIX32-NEXT:    blr
5911 entry:
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
5915   ret i8 %conv3