xref: /llvm-project/llvm/test/CodeGen/PowerPC/all-atomics.ll (revision 100d9b89947bb1d42af20010bb594fa4c02542fc)
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'
7
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
18
19define 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
508;
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.start2
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.end1
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.start
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.end
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.end
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.end
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.end
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.end
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.end
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.end
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.end
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.end
1038; AIX32-NEXT:    lwsync
1039; AIX32-NEXT:    sync
1040; AIX32-NEXT:  L..BB0_61: # %atomicrmw.end
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.end
1047; AIX32-NEXT:    lwsync
1048; AIX32-NEXT:    sync
1049; AIX32-NEXT:  L..BB0_63: # %atomicrmw.end
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.end
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.end
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.end
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.end
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.end
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.end
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.end
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.end
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.end
1128; AIX32-NEXT:    lwsync
1129; AIX32-NEXT:    sync
1130; AIX32-NEXT:  L..BB0_73: # %atomicrmw.end
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.end
1137; AIX32-NEXT:    lwsync
1138; AIX32-NEXT:    sync
1139; AIX32-NEXT:  L..BB0_75: # %atomicrmw.end
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.end
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
1180entry:
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
1232}
1233
1234define 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
1754;
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
2473entry:
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
2571}
2572
2573define 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
3184;
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.start2
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.end1
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.start
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.end
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.end
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.end
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.end
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.end
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.end
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.end
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.end
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.end
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.end
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.end
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.end
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.end
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
4090entry:
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
4334}
4335
4336define 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
4638;
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
5038entry:
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
5150}
5151
5152define 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
5265;
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
5444entry:
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
5471}
5472
5473define 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
5530;
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
5585entry:
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
5595}
5596
5597define 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
5615;
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
5641entry:
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
5647}
5648
5649define 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
5668;
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
5726entry:
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
5731}
5732
5733define 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
5752;
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
5771entry:
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
5776}
5777
5778define 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
5798;
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
5835entry:
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
5840}
5841
5842define 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
5861;
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
5893entry:
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
5898}
5899