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