@@ -25,15 +25,16 @@ define i8 @atomicrmw_uinc_wrap_i8(ptr %ptr, i8 %val) {
2525; LA64-NEXT: andi $a5, $a5, 255
2626; LA64-NEXT: sll.w $a5, $a5, $a3
2727; LA64-NEXT: and $a6, $a2, $a4
28- ; LA64-NEXT: or $a6, $a6, $a5
28+ ; LA64-NEXT: or $a5, $a6, $a5
29+ ; LA64-NEXT: addi.w $a6, $a2, 0
2930; LA64-NEXT: .LBB0_3: # %atomicrmw.start
3031; LA64-NEXT: # Parent Loop BB0_1 Depth=1
3132; LA64-NEXT: # => This Inner Loop Header: Depth=2
32- ; LA64-NEXT: ll.w $a5 , $a0, 0
33- ; LA64-NEXT: bne $a5 , $a2 , .LBB0_5
33+ ; LA64-NEXT: ll.w $a2 , $a0, 0
34+ ; LA64-NEXT: bne $a2 , $a6 , .LBB0_5
3435; LA64-NEXT: # %bb.4: # %atomicrmw.start
3536; LA64-NEXT: # in Loop: Header=BB0_3 Depth=2
36- ; LA64-NEXT: move $a7, $a6
37+ ; LA64-NEXT: move $a7, $a5
3738; LA64-NEXT: sc.w $a7, $a0, 0
3839; LA64-NEXT: beqz $a7, .LBB0_3
3940; LA64-NEXT: b .LBB0_6
@@ -42,11 +43,9 @@ define i8 @atomicrmw_uinc_wrap_i8(ptr %ptr, i8 %val) {
4243; LA64-NEXT: dbar 20
4344; LA64-NEXT: .LBB0_6: # %atomicrmw.start
4445; LA64-NEXT: # in Loop: Header=BB0_1 Depth=1
45- ; LA64-NEXT: addi.w $a6, $a2, 0
46- ; LA64-NEXT: move $a2, $a5
47- ; LA64-NEXT: bne $a5, $a6, .LBB0_1
46+ ; LA64-NEXT: bne $a2, $a6, .LBB0_1
4847; LA64-NEXT: # %bb.2: # %atomicrmw.end
49- ; LA64-NEXT: srl.w $a0, $a5 , $a3
48+ ; LA64-NEXT: srl.w $a0, $a2 , $a3
5049; LA64-NEXT: ret
5150 %result = atomicrmw uinc_wrap ptr %ptr , i8 %val seq_cst
5251 ret i8 %result
@@ -77,15 +76,16 @@ define i16 @atomicrmw_uinc_wrap_i16(ptr %ptr, i16 %val) {
7776; LA64-NEXT: bstrpick.d $a5, $a5, 15, 0
7877; LA64-NEXT: sll.w $a5, $a5, $a3
7978; LA64-NEXT: and $a6, $a2, $a4
80- ; LA64-NEXT: or $a6, $a6, $a5
79+ ; LA64-NEXT: or $a5, $a6, $a5
80+ ; LA64-NEXT: addi.w $a6, $a2, 0
8181; LA64-NEXT: .LBB1_3: # %atomicrmw.start
8282; LA64-NEXT: # Parent Loop BB1_1 Depth=1
8383; LA64-NEXT: # => This Inner Loop Header: Depth=2
84- ; LA64-NEXT: ll.w $a5 , $a0, 0
85- ; LA64-NEXT: bne $a5 , $a2 , .LBB1_5
84+ ; LA64-NEXT: ll.w $a2 , $a0, 0
85+ ; LA64-NEXT: bne $a2 , $a6 , .LBB1_5
8686; LA64-NEXT: # %bb.4: # %atomicrmw.start
8787; LA64-NEXT: # in Loop: Header=BB1_3 Depth=2
88- ; LA64-NEXT: move $a7, $a6
88+ ; LA64-NEXT: move $a7, $a5
8989; LA64-NEXT: sc.w $a7, $a0, 0
9090; LA64-NEXT: beqz $a7, .LBB1_3
9191; LA64-NEXT: b .LBB1_6
@@ -94,11 +94,9 @@ define i16 @atomicrmw_uinc_wrap_i16(ptr %ptr, i16 %val) {
9494; LA64-NEXT: dbar 20
9595; LA64-NEXT: .LBB1_6: # %atomicrmw.start
9696; LA64-NEXT: # in Loop: Header=BB1_1 Depth=1
97- ; LA64-NEXT: addi.w $a6, $a2, 0
98- ; LA64-NEXT: move $a2, $a5
99- ; LA64-NEXT: bne $a5, $a6, .LBB1_1
97+ ; LA64-NEXT: bne $a2, $a6, .LBB1_1
10098; LA64-NEXT: # %bb.2: # %atomicrmw.end
101- ; LA64-NEXT: srl.w $a0, $a5 , $a3
99+ ; LA64-NEXT: srl.w $a0, $a2 , $a3
102100; LA64-NEXT: ret
103101 %result = atomicrmw uinc_wrap ptr %ptr , i16 %val seq_cst
104102 ret i16 %result
@@ -107,37 +105,36 @@ define i16 @atomicrmw_uinc_wrap_i16(ptr %ptr, i16 %val) {
107105define i32 @atomicrmw_uinc_wrap_i32 (ptr %ptr , i32 %val ) {
108106; LA64-LABEL: atomicrmw_uinc_wrap_i32:
109107; LA64: # %bb.0:
110- ; LA64-NEXT: ld.w $a3 , $a0, 0
111- ; LA64-NEXT: addi.w $a2 , $a1, 0
108+ ; LA64-NEXT: ld.w $a2 , $a0, 0
109+ ; LA64-NEXT: addi.w $a1 , $a1, 0
112110; LA64-NEXT: .p2align 4, , 16
113111; LA64-NEXT: .LBB2_1: # %atomicrmw.start
114112; LA64-NEXT: # =>This Loop Header: Depth=1
115113; LA64-NEXT: # Child Loop BB2_3 Depth 2
116- ; LA64-NEXT: addi.w $a4 , $a3 , 0
117- ; LA64-NEXT: sltu $a1 , $a4 , $a2
118- ; LA64-NEXT: xori $a1 , $a1 , 1
119- ; LA64-NEXT: addi.d $a5 , $a3 , 1
120- ; LA64-NEXT: masknez $a5 , $a5 , $a1
114+ ; LA64-NEXT: addi.w $a3 , $a2 , 0
115+ ; LA64-NEXT: sltu $a4 , $a3 , $a1
116+ ; LA64-NEXT: xori $a4 , $a4 , 1
117+ ; LA64-NEXT: addi.d $a2 , $a2 , 1
118+ ; LA64-NEXT: masknez $a4 , $a2 , $a4
121119; LA64-NEXT: .LBB2_3: # %atomicrmw.start
122120; LA64-NEXT: # Parent Loop BB2_1 Depth=1
123121; LA64-NEXT: # => This Inner Loop Header: Depth=2
124- ; LA64-NEXT: ll.w $a1 , $a0, 0
125- ; LA64-NEXT: bne $a1 , $a3, .LBB2_5
122+ ; LA64-NEXT: ll.w $a2 , $a0, 0
123+ ; LA64-NEXT: bne $a2 , $a3, .LBB2_5
126124; LA64-NEXT: # %bb.4: # %atomicrmw.start
127125; LA64-NEXT: # in Loop: Header=BB2_3 Depth=2
128- ; LA64-NEXT: move $a6 , $a5
129- ; LA64-NEXT: sc.w $a6 , $a0, 0
130- ; LA64-NEXT: beqz $a6 , .LBB2_3
126+ ; LA64-NEXT: move $a5 , $a4
127+ ; LA64-NEXT: sc.w $a5 , $a0, 0
128+ ; LA64-NEXT: beqz $a5 , .LBB2_3
131129; LA64-NEXT: b .LBB2_6
132130; LA64-NEXT: .LBB2_5: # %atomicrmw.start
133131; LA64-NEXT: # in Loop: Header=BB2_1 Depth=1
134132; LA64-NEXT: dbar 20
135133; LA64-NEXT: .LBB2_6: # %atomicrmw.start
136134; LA64-NEXT: # in Loop: Header=BB2_1 Depth=1
137- ; LA64-NEXT: move $a3, $a1
138- ; LA64-NEXT: bne $a1, $a4, .LBB2_1
135+ ; LA64-NEXT: bne $a2, $a3, .LBB2_1
139136; LA64-NEXT: # %bb.2: # %atomicrmw.end
140- ; LA64-NEXT: move $a0, $a1
137+ ; LA64-NEXT: move $a0, $a2
141138; LA64-NEXT: ret
142139 %result = atomicrmw uinc_wrap ptr %ptr , i32 %val seq_cst
143140 ret i32 %result
@@ -209,15 +206,16 @@ define i8 @atomicrmw_udec_wrap_i8(ptr %ptr, i8 %val) {
209206; LA64-NEXT: andi $a6, $a6, 255
210207; LA64-NEXT: sll.w $a6, $a6, $a3
211208; LA64-NEXT: and $a7, $a2, $a4
212- ; LA64-NEXT: or $a7, $a7, $a6
209+ ; LA64-NEXT: or $a6, $a7, $a6
210+ ; LA64-NEXT: addi.w $a7, $a2, 0
213211; LA64-NEXT: .LBB4_3: # %atomicrmw.start
214212; LA64-NEXT: # Parent Loop BB4_1 Depth=1
215213; LA64-NEXT: # => This Inner Loop Header: Depth=2
216- ; LA64-NEXT: ll.w $a6 , $a0, 0
217- ; LA64-NEXT: bne $a6 , $a2 , .LBB4_5
214+ ; LA64-NEXT: ll.w $a2 , $a0, 0
215+ ; LA64-NEXT: bne $a2 , $a7 , .LBB4_5
218216; LA64-NEXT: # %bb.4: # %atomicrmw.start
219217; LA64-NEXT: # in Loop: Header=BB4_3 Depth=2
220- ; LA64-NEXT: move $t0, $a7
218+ ; LA64-NEXT: move $t0, $a6
221219; LA64-NEXT: sc.w $t0, $a0, 0
222220; LA64-NEXT: beqz $t0, .LBB4_3
223221; LA64-NEXT: b .LBB4_6
@@ -226,11 +224,9 @@ define i8 @atomicrmw_udec_wrap_i8(ptr %ptr, i8 %val) {
226224; LA64-NEXT: dbar 20
227225; LA64-NEXT: .LBB4_6: # %atomicrmw.start
228226; LA64-NEXT: # in Loop: Header=BB4_1 Depth=1
229- ; LA64-NEXT: addi.w $a7, $a2, 0
230- ; LA64-NEXT: move $a2, $a6
231- ; LA64-NEXT: bne $a6, $a7, .LBB4_1
227+ ; LA64-NEXT: bne $a2, $a7, .LBB4_1
232228; LA64-NEXT: # %bb.2: # %atomicrmw.end
233- ; LA64-NEXT: srl.w $a0, $a6 , $a3
229+ ; LA64-NEXT: srl.w $a0, $a2 , $a3
234230; LA64-NEXT: ret
235231 %result = atomicrmw udec_wrap ptr %ptr , i8 %val seq_cst
236232 ret i8 %result
@@ -266,15 +262,16 @@ define i16 @atomicrmw_udec_wrap_i16(ptr %ptr, i16 %val) {
266262; LA64-NEXT: bstrpick.d $a6, $a6, 15, 0
267263; LA64-NEXT: sll.w $a6, $a6, $a3
268264; LA64-NEXT: and $a7, $a2, $a4
269- ; LA64-NEXT: or $a7, $a7, $a6
265+ ; LA64-NEXT: or $a6, $a7, $a6
266+ ; LA64-NEXT: addi.w $a7, $a2, 0
270267; LA64-NEXT: .LBB5_3: # %atomicrmw.start
271268; LA64-NEXT: # Parent Loop BB5_1 Depth=1
272269; LA64-NEXT: # => This Inner Loop Header: Depth=2
273- ; LA64-NEXT: ll.w $a6 , $a0, 0
274- ; LA64-NEXT: bne $a6 , $a2 , .LBB5_5
270+ ; LA64-NEXT: ll.w $a2 , $a0, 0
271+ ; LA64-NEXT: bne $a2 , $a7 , .LBB5_5
275272; LA64-NEXT: # %bb.4: # %atomicrmw.start
276273; LA64-NEXT: # in Loop: Header=BB5_3 Depth=2
277- ; LA64-NEXT: move $t0, $a7
274+ ; LA64-NEXT: move $t0, $a6
278275; LA64-NEXT: sc.w $t0, $a0, 0
279276; LA64-NEXT: beqz $t0, .LBB5_3
280277; LA64-NEXT: b .LBB5_6
@@ -283,11 +280,9 @@ define i16 @atomicrmw_udec_wrap_i16(ptr %ptr, i16 %val) {
283280; LA64-NEXT: dbar 20
284281; LA64-NEXT: .LBB5_6: # %atomicrmw.start
285282; LA64-NEXT: # in Loop: Header=BB5_1 Depth=1
286- ; LA64-NEXT: addi.w $a7, $a2, 0
287- ; LA64-NEXT: move $a2, $a6
288- ; LA64-NEXT: bne $a6, $a7, .LBB5_1
283+ ; LA64-NEXT: bne $a2, $a7, .LBB5_1
289284; LA64-NEXT: # %bb.2: # %atomicrmw.end
290- ; LA64-NEXT: srl.w $a0, $a6 , $a3
285+ ; LA64-NEXT: srl.w $a0, $a2 , $a3
291286; LA64-NEXT: ret
292287 %result = atomicrmw udec_wrap ptr %ptr , i16 %val seq_cst
293288 ret i16 %result
@@ -296,40 +291,39 @@ define i16 @atomicrmw_udec_wrap_i16(ptr %ptr, i16 %val) {
296291define i32 @atomicrmw_udec_wrap_i32 (ptr %ptr , i32 %val ) {
297292; LA64-LABEL: atomicrmw_udec_wrap_i32:
298293; LA64: # %bb.0:
299- ; LA64-NEXT: ld.w $a4 , $a0, 0
294+ ; LA64-NEXT: ld.w $a2 , $a0, 0
300295; LA64-NEXT: addi.w $a3, $a1, 0
301296; LA64-NEXT: .p2align 4, , 16
302297; LA64-NEXT: .LBB6_1: # %atomicrmw.start
303298; LA64-NEXT: # =>This Loop Header: Depth=1
304299; LA64-NEXT: # Child Loop BB6_3 Depth 2
305- ; LA64-NEXT: addi.w $a5 , $a4 , 0
306- ; LA64-NEXT: sltu $a2 , $a3, $a5
307- ; LA64-NEXT: addi.d $a6 , $a4 , -1
308- ; LA64-NEXT: masknez $a6 , $a6 , $a2
309- ; LA64-NEXT: maskeqz $a2 , $a1, $a2
310- ; LA64-NEXT: or $a2, $a2 , $a6
311- ; LA64-NEXT: sltui $a6 , $a5 , 1
312- ; LA64-NEXT: masknez $a2, $a2, $a6
313- ; LA64-NEXT: maskeqz $a6 , $a1, $a6
314- ; LA64-NEXT: or $a6 , $a6 , $a2
300+ ; LA64-NEXT: addi.w $a4 , $a2 , 0
301+ ; LA64-NEXT: sltu $a5 , $a3, $a4
302+ ; LA64-NEXT: addi.d $a2 , $a2 , -1
303+ ; LA64-NEXT: masknez $a2 , $a2 , $a5
304+ ; LA64-NEXT: maskeqz $a5 , $a1, $a5
305+ ; LA64-NEXT: or $a2, $a5 , $a2
306+ ; LA64-NEXT: sltui $a5 , $a4 , 1
307+ ; LA64-NEXT: masknez $a2, $a2, $a5
308+ ; LA64-NEXT: maskeqz $a5 , $a1, $a5
309+ ; LA64-NEXT: or $a5 , $a5 , $a2
315310; LA64-NEXT: .LBB6_3: # %atomicrmw.start
316311; LA64-NEXT: # Parent Loop BB6_1 Depth=1
317312; LA64-NEXT: # => This Inner Loop Header: Depth=2
318313; LA64-NEXT: ll.w $a2, $a0, 0
319314; LA64-NEXT: bne $a2, $a4, .LBB6_5
320315; LA64-NEXT: # %bb.4: # %atomicrmw.start
321316; LA64-NEXT: # in Loop: Header=BB6_3 Depth=2
322- ; LA64-NEXT: move $a7 , $a6
323- ; LA64-NEXT: sc.w $a7 , $a0, 0
324- ; LA64-NEXT: beqz $a7 , .LBB6_3
317+ ; LA64-NEXT: move $a6 , $a5
318+ ; LA64-NEXT: sc.w $a6 , $a0, 0
319+ ; LA64-NEXT: beqz $a6 , .LBB6_3
325320; LA64-NEXT: b .LBB6_6
326321; LA64-NEXT: .LBB6_5: # %atomicrmw.start
327322; LA64-NEXT: # in Loop: Header=BB6_1 Depth=1
328323; LA64-NEXT: dbar 20
329324; LA64-NEXT: .LBB6_6: # %atomicrmw.start
330325; LA64-NEXT: # in Loop: Header=BB6_1 Depth=1
331- ; LA64-NEXT: move $a4, $a2
332- ; LA64-NEXT: bne $a2, $a5, .LBB6_1
326+ ; LA64-NEXT: bne $a2, $a4, .LBB6_1
333327; LA64-NEXT: # %bb.2: # %atomicrmw.end
334328; LA64-NEXT: move $a0, $a2
335329; LA64-NEXT: ret
0 commit comments