@@ -26,15 +26,16 @@ define i8 @atomicrmw_uinc_wrap_i8(ptr %ptr, i8 %val) {
2626; LA64-NEXT: andi $a5, $a5, 255
2727; LA64-NEXT: sll.w $a5, $a5, $a0
2828; LA64-NEXT: and $a6, $a3, $a4
29- ; LA64-NEXT: or $a6, $a6, $a5
29+ ; LA64-NEXT: or $a5, $a6, $a5
30+ ; LA64-NEXT: addi.w $a6, $a3, 0
3031; LA64-NEXT: .LBB0_3: # %atomicrmw.start
3132; LA64-NEXT: # Parent Loop BB0_1 Depth=1
3233; LA64-NEXT: # => This Inner Loop Header: Depth=2
33- ; LA64-NEXT: ll.w $a5 , $a2, 0
34- ; LA64-NEXT: bne $a5 , $a3 , .LBB0_5
34+ ; LA64-NEXT: ll.w $a3 , $a2, 0
35+ ; LA64-NEXT: bne $a3 , $a6 , .LBB0_5
3536; LA64-NEXT: # %bb.4: # %atomicrmw.start
3637; LA64-NEXT: # in Loop: Header=BB0_3 Depth=2
37- ; LA64-NEXT: move $a7, $a6
38+ ; LA64-NEXT: move $a7, $a5
3839; LA64-NEXT: sc.w $a7, $a2, 0
3940; LA64-NEXT: beqz $a7, .LBB0_3
4041; LA64-NEXT: b .LBB0_6
@@ -43,11 +44,9 @@ define i8 @atomicrmw_uinc_wrap_i8(ptr %ptr, i8 %val) {
4344; LA64-NEXT: dbar 20
4445; LA64-NEXT: .LBB0_6: # %atomicrmw.start
4546; LA64-NEXT: # in Loop: Header=BB0_1 Depth=1
46- ; LA64-NEXT: addi.w $a6, $a3, 0
47- ; LA64-NEXT: move $a3, $a5
48- ; LA64-NEXT: bne $a5, $a6, .LBB0_1
47+ ; LA64-NEXT: bne $a3, $a6, .LBB0_1
4948; LA64-NEXT: # %bb.2: # %atomicrmw.end
50- ; LA64-NEXT: srl.w $a0, $a5 , $a0
49+ ; LA64-NEXT: srl.w $a0, $a3 , $a0
5150; LA64-NEXT: ret
5251 %result = atomicrmw uinc_wrap ptr %ptr , i8 %val seq_cst
5352 ret i8 %result
@@ -79,15 +78,16 @@ define i16 @atomicrmw_uinc_wrap_i16(ptr %ptr, i16 %val) {
7978; LA64-NEXT: bstrpick.d $a5, $a5, 15, 0
8079; LA64-NEXT: sll.w $a5, $a5, $a0
8180; LA64-NEXT: and $a6, $a3, $a4
82- ; LA64-NEXT: or $a6, $a6, $a5
81+ ; LA64-NEXT: or $a5, $a6, $a5
82+ ; LA64-NEXT: addi.w $a6, $a3, 0
8383; LA64-NEXT: .LBB1_3: # %atomicrmw.start
8484; LA64-NEXT: # Parent Loop BB1_1 Depth=1
8585; LA64-NEXT: # => This Inner Loop Header: Depth=2
86- ; LA64-NEXT: ll.w $a5 , $a2, 0
87- ; LA64-NEXT: bne $a5 , $a3 , .LBB1_5
86+ ; LA64-NEXT: ll.w $a3 , $a2, 0
87+ ; LA64-NEXT: bne $a3 , $a6 , .LBB1_5
8888; LA64-NEXT: # %bb.4: # %atomicrmw.start
8989; LA64-NEXT: # in Loop: Header=BB1_3 Depth=2
90- ; LA64-NEXT: move $a7, $a6
90+ ; LA64-NEXT: move $a7, $a5
9191; LA64-NEXT: sc.w $a7, $a2, 0
9292; LA64-NEXT: beqz $a7, .LBB1_3
9393; LA64-NEXT: b .LBB1_6
@@ -96,11 +96,9 @@ define i16 @atomicrmw_uinc_wrap_i16(ptr %ptr, i16 %val) {
9696; LA64-NEXT: dbar 20
9797; LA64-NEXT: .LBB1_6: # %atomicrmw.start
9898; LA64-NEXT: # in Loop: Header=BB1_1 Depth=1
99- ; LA64-NEXT: addi.w $a6, $a3, 0
100- ; LA64-NEXT: move $a3, $a5
101- ; LA64-NEXT: bne $a5, $a6, .LBB1_1
99+ ; LA64-NEXT: bne $a3, $a6, .LBB1_1
102100; LA64-NEXT: # %bb.2: # %atomicrmw.end
103- ; LA64-NEXT: srl.w $a0, $a5 , $a0
101+ ; LA64-NEXT: srl.w $a0, $a3 , $a0
104102; LA64-NEXT: ret
105103 %result = atomicrmw uinc_wrap ptr %ptr , i16 %val seq_cst
106104 ret i16 %result
@@ -109,37 +107,36 @@ define i16 @atomicrmw_uinc_wrap_i16(ptr %ptr, i16 %val) {
109107define i32 @atomicrmw_uinc_wrap_i32 (ptr %ptr , i32 %val ) {
110108; LA64-LABEL: atomicrmw_uinc_wrap_i32:
111109; LA64: # %bb.0:
112- ; LA64-NEXT: ld.w $a3 , $a0, 0
113- ; LA64-NEXT: addi.w $a2 , $a1, 0
110+ ; LA64-NEXT: ld.w $a2 , $a0, 0
111+ ; LA64-NEXT: addi.w $a1 , $a1, 0
114112; LA64-NEXT: .p2align 4, , 16
115113; LA64-NEXT: .LBB2_1: # %atomicrmw.start
116114; LA64-NEXT: # =>This Loop Header: Depth=1
117115; LA64-NEXT: # Child Loop BB2_3 Depth 2
118- ; LA64-NEXT: addi.w $a4 , $a3 , 0
119- ; LA64-NEXT: sltu $a1 , $a4 , $a2
120- ; LA64-NEXT: xori $a1 , $a1 , 1
121- ; LA64-NEXT: addi.d $a5 , $a3 , 1
122- ; LA64-NEXT: masknez $a5 , $a5 , $a1
116+ ; LA64-NEXT: addi.w $a3 , $a2 , 0
117+ ; LA64-NEXT: sltu $a4 , $a3 , $a1
118+ ; LA64-NEXT: xori $a4 , $a4 , 1
119+ ; LA64-NEXT: addi.d $a2 , $a2 , 1
120+ ; LA64-NEXT: masknez $a4 , $a2 , $a4
123121; LA64-NEXT: .LBB2_3: # %atomicrmw.start
124122; LA64-NEXT: # Parent Loop BB2_1 Depth=1
125123; LA64-NEXT: # => This Inner Loop Header: Depth=2
126- ; LA64-NEXT: ll.w $a1 , $a0, 0
127- ; LA64-NEXT: bne $a1 , $a3, .LBB2_5
124+ ; LA64-NEXT: ll.w $a2 , $a0, 0
125+ ; LA64-NEXT: bne $a2 , $a3, .LBB2_5
128126; LA64-NEXT: # %bb.4: # %atomicrmw.start
129127; LA64-NEXT: # in Loop: Header=BB2_3 Depth=2
130- ; LA64-NEXT: move $a6 , $a5
131- ; LA64-NEXT: sc.w $a6 , $a0, 0
132- ; LA64-NEXT: beqz $a6 , .LBB2_3
128+ ; LA64-NEXT: move $a5 , $a4
129+ ; LA64-NEXT: sc.w $a5 , $a0, 0
130+ ; LA64-NEXT: beqz $a5 , .LBB2_3
133131; LA64-NEXT: b .LBB2_6
134132; LA64-NEXT: .LBB2_5: # %atomicrmw.start
135133; LA64-NEXT: # in Loop: Header=BB2_1 Depth=1
136134; LA64-NEXT: dbar 20
137135; LA64-NEXT: .LBB2_6: # %atomicrmw.start
138136; LA64-NEXT: # in Loop: Header=BB2_1 Depth=1
139- ; LA64-NEXT: move $a3, $a1
140- ; LA64-NEXT: bne $a1, $a4, .LBB2_1
137+ ; LA64-NEXT: bne $a2, $a3, .LBB2_1
141138; LA64-NEXT: # %bb.2: # %atomicrmw.end
142- ; LA64-NEXT: move $a0, $a1
139+ ; LA64-NEXT: move $a0, $a2
143140; LA64-NEXT: ret
144141 %result = atomicrmw uinc_wrap ptr %ptr , i32 %val seq_cst
145142 ret i32 %result
@@ -212,15 +209,16 @@ define i8 @atomicrmw_udec_wrap_i8(ptr %ptr, i8 %val) {
212209; LA64-NEXT: andi $a6, $a6, 255
213210; LA64-NEXT: sll.w $a6, $a6, $a0
214211; LA64-NEXT: and $a7, $a3, $a4
215- ; LA64-NEXT: or $a7, $a7, $a6
212+ ; LA64-NEXT: or $a6, $a7, $a6
213+ ; LA64-NEXT: addi.w $a7, $a3, 0
216214; LA64-NEXT: .LBB4_3: # %atomicrmw.start
217215; LA64-NEXT: # Parent Loop BB4_1 Depth=1
218216; LA64-NEXT: # => This Inner Loop Header: Depth=2
219- ; LA64-NEXT: ll.w $a6 , $a2, 0
220- ; LA64-NEXT: bne $a6 , $a3 , .LBB4_5
217+ ; LA64-NEXT: ll.w $a3 , $a2, 0
218+ ; LA64-NEXT: bne $a3 , $a7 , .LBB4_5
221219; LA64-NEXT: # %bb.4: # %atomicrmw.start
222220; LA64-NEXT: # in Loop: Header=BB4_3 Depth=2
223- ; LA64-NEXT: move $t0, $a7
221+ ; LA64-NEXT: move $t0, $a6
224222; LA64-NEXT: sc.w $t0, $a2, 0
225223; LA64-NEXT: beqz $t0, .LBB4_3
226224; LA64-NEXT: b .LBB4_6
@@ -229,11 +227,9 @@ define i8 @atomicrmw_udec_wrap_i8(ptr %ptr, i8 %val) {
229227; LA64-NEXT: dbar 20
230228; LA64-NEXT: .LBB4_6: # %atomicrmw.start
231229; LA64-NEXT: # in Loop: Header=BB4_1 Depth=1
232- ; LA64-NEXT: addi.w $a7, $a3, 0
233- ; LA64-NEXT: move $a3, $a6
234- ; LA64-NEXT: bne $a6, $a7, .LBB4_1
230+ ; LA64-NEXT: bne $a3, $a7, .LBB4_1
235231; LA64-NEXT: # %bb.2: # %atomicrmw.end
236- ; LA64-NEXT: srl.w $a0, $a6 , $a0
232+ ; LA64-NEXT: srl.w $a0, $a3 , $a0
237233; LA64-NEXT: ret
238234 %result = atomicrmw udec_wrap ptr %ptr , i8 %val seq_cst
239235 ret i8 %result
@@ -270,15 +266,16 @@ define i16 @atomicrmw_udec_wrap_i16(ptr %ptr, i16 %val) {
270266; LA64-NEXT: bstrpick.d $a6, $a6, 15, 0
271267; LA64-NEXT: sll.w $a6, $a6, $a0
272268; LA64-NEXT: and $a7, $a3, $a4
273- ; LA64-NEXT: or $a7, $a7, $a6
269+ ; LA64-NEXT: or $a6, $a7, $a6
270+ ; LA64-NEXT: addi.w $a7, $a3, 0
274271; LA64-NEXT: .LBB5_3: # %atomicrmw.start
275272; LA64-NEXT: # Parent Loop BB5_1 Depth=1
276273; LA64-NEXT: # => This Inner Loop Header: Depth=2
277- ; LA64-NEXT: ll.w $a6 , $a2, 0
278- ; LA64-NEXT: bne $a6 , $a3 , .LBB5_5
274+ ; LA64-NEXT: ll.w $a3 , $a2, 0
275+ ; LA64-NEXT: bne $a3 , $a7 , .LBB5_5
279276; LA64-NEXT: # %bb.4: # %atomicrmw.start
280277; LA64-NEXT: # in Loop: Header=BB5_3 Depth=2
281- ; LA64-NEXT: move $t0, $a7
278+ ; LA64-NEXT: move $t0, $a6
282279; LA64-NEXT: sc.w $t0, $a2, 0
283280; LA64-NEXT: beqz $t0, .LBB5_3
284281; LA64-NEXT: b .LBB5_6
@@ -287,11 +284,9 @@ define i16 @atomicrmw_udec_wrap_i16(ptr %ptr, i16 %val) {
287284; LA64-NEXT: dbar 20
288285; LA64-NEXT: .LBB5_6: # %atomicrmw.start
289286; LA64-NEXT: # in Loop: Header=BB5_1 Depth=1
290- ; LA64-NEXT: addi.w $a7, $a3, 0
291- ; LA64-NEXT: move $a3, $a6
292- ; LA64-NEXT: bne $a6, $a7, .LBB5_1
287+ ; LA64-NEXT: bne $a3, $a7, .LBB5_1
293288; LA64-NEXT: # %bb.2: # %atomicrmw.end
294- ; LA64-NEXT: srl.w $a0, $a6 , $a0
289+ ; LA64-NEXT: srl.w $a0, $a3 , $a0
295290; LA64-NEXT: ret
296291 %result = atomicrmw udec_wrap ptr %ptr , i16 %val seq_cst
297292 ret i16 %result
@@ -300,40 +295,39 @@ define i16 @atomicrmw_udec_wrap_i16(ptr %ptr, i16 %val) {
300295define i32 @atomicrmw_udec_wrap_i32 (ptr %ptr , i32 %val ) {
301296; LA64-LABEL: atomicrmw_udec_wrap_i32:
302297; LA64: # %bb.0:
303- ; LA64-NEXT: ld.w $a4 , $a0, 0
298+ ; LA64-NEXT: ld.w $a2 , $a0, 0
304299; LA64-NEXT: addi.w $a3, $a1, 0
305300; LA64-NEXT: .p2align 4, , 16
306301; LA64-NEXT: .LBB6_1: # %atomicrmw.start
307302; LA64-NEXT: # =>This Loop Header: Depth=1
308303; LA64-NEXT: # Child Loop BB6_3 Depth 2
309- ; LA64-NEXT: addi.w $a5 , $a4 , 0
310- ; LA64-NEXT: sltu $a2 , $a3, $a5
311- ; LA64-NEXT: addi.d $a6 , $a4 , -1
312- ; LA64-NEXT: masknez $a6 , $a6 , $a2
313- ; LA64-NEXT: maskeqz $a2 , $a1, $a2
314- ; LA64-NEXT: or $a2, $a2 , $a6
315- ; LA64-NEXT: sltui $a6 , $a5 , 1
316- ; LA64-NEXT: masknez $a2, $a2, $a6
317- ; LA64-NEXT: maskeqz $a6 , $a1, $a6
318- ; LA64-NEXT: or $a6 , $a6 , $a2
304+ ; LA64-NEXT: addi.w $a4 , $a2 , 0
305+ ; LA64-NEXT: sltu $a5 , $a3, $a4
306+ ; LA64-NEXT: addi.d $a2 , $a2 , -1
307+ ; LA64-NEXT: masknez $a2 , $a2 , $a5
308+ ; LA64-NEXT: maskeqz $a5 , $a1, $a5
309+ ; LA64-NEXT: or $a2, $a5 , $a2
310+ ; LA64-NEXT: sltui $a5 , $a4 , 1
311+ ; LA64-NEXT: masknez $a2, $a2, $a5
312+ ; LA64-NEXT: maskeqz $a5 , $a1, $a5
313+ ; LA64-NEXT: or $a5 , $a5 , $a2
319314; LA64-NEXT: .LBB6_3: # %atomicrmw.start
320315; LA64-NEXT: # Parent Loop BB6_1 Depth=1
321316; LA64-NEXT: # => This Inner Loop Header: Depth=2
322317; LA64-NEXT: ll.w $a2, $a0, 0
323318; LA64-NEXT: bne $a2, $a4, .LBB6_5
324319; LA64-NEXT: # %bb.4: # %atomicrmw.start
325320; LA64-NEXT: # in Loop: Header=BB6_3 Depth=2
326- ; LA64-NEXT: move $a7 , $a6
327- ; LA64-NEXT: sc.w $a7 , $a0, 0
328- ; LA64-NEXT: beqz $a7 , .LBB6_3
321+ ; LA64-NEXT: move $a6 , $a5
322+ ; LA64-NEXT: sc.w $a6 , $a0, 0
323+ ; LA64-NEXT: beqz $a6 , .LBB6_3
329324; LA64-NEXT: b .LBB6_6
330325; LA64-NEXT: .LBB6_5: # %atomicrmw.start
331326; LA64-NEXT: # in Loop: Header=BB6_1 Depth=1
332327; LA64-NEXT: dbar 20
333328; LA64-NEXT: .LBB6_6: # %atomicrmw.start
334329; LA64-NEXT: # in Loop: Header=BB6_1 Depth=1
335- ; LA64-NEXT: move $a4, $a2
336- ; LA64-NEXT: bne $a2, $a5, .LBB6_1
330+ ; LA64-NEXT: bne $a2, $a4, .LBB6_1
337331; LA64-NEXT: # %bb.2: # %atomicrmw.end
338332; LA64-NEXT: move $a0, $a2
339333; LA64-NEXT: ret
0 commit comments