@@ -26,15 +26,16 @@ define i8 @atomicrmw_uinc_wrap_i8(ptr %ptr, i8 %val) {
26
26
; LA64-NEXT: andi $a5, $a5, 255
27
27
; LA64-NEXT: sll.w $a5, $a5, $a0
28
28
; 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
30
31
; LA64-NEXT: .LBB0_3: # %atomicrmw.start
31
32
; LA64-NEXT: # Parent Loop BB0_1 Depth=1
32
33
; 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
35
36
; LA64-NEXT: # %bb.4: # %atomicrmw.start
36
37
; LA64-NEXT: # in Loop: Header=BB0_3 Depth=2
37
- ; LA64-NEXT: move $a7, $a6
38
+ ; LA64-NEXT: move $a7, $a5
38
39
; LA64-NEXT: sc.w $a7, $a2, 0
39
40
; LA64-NEXT: beqz $a7, .LBB0_3
40
41
; LA64-NEXT: b .LBB0_6
@@ -43,11 +44,9 @@ define i8 @atomicrmw_uinc_wrap_i8(ptr %ptr, i8 %val) {
43
44
; LA64-NEXT: dbar 20
44
45
; LA64-NEXT: .LBB0_6: # %atomicrmw.start
45
46
; 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
49
48
; LA64-NEXT: # %bb.2: # %atomicrmw.end
50
- ; LA64-NEXT: srl.w $a0, $a5 , $a0
49
+ ; LA64-NEXT: srl.w $a0, $a3 , $a0
51
50
; LA64-NEXT: ret
52
51
%result = atomicrmw uinc_wrap ptr %ptr , i8 %val seq_cst
53
52
ret i8 %result
@@ -79,15 +78,16 @@ define i16 @atomicrmw_uinc_wrap_i16(ptr %ptr, i16 %val) {
79
78
; LA64-NEXT: bstrpick.d $a5, $a5, 15, 0
80
79
; LA64-NEXT: sll.w $a5, $a5, $a0
81
80
; 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
83
83
; LA64-NEXT: .LBB1_3: # %atomicrmw.start
84
84
; LA64-NEXT: # Parent Loop BB1_1 Depth=1
85
85
; 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
88
88
; LA64-NEXT: # %bb.4: # %atomicrmw.start
89
89
; LA64-NEXT: # in Loop: Header=BB1_3 Depth=2
90
- ; LA64-NEXT: move $a7, $a6
90
+ ; LA64-NEXT: move $a7, $a5
91
91
; LA64-NEXT: sc.w $a7, $a2, 0
92
92
; LA64-NEXT: beqz $a7, .LBB1_3
93
93
; LA64-NEXT: b .LBB1_6
@@ -96,11 +96,9 @@ define i16 @atomicrmw_uinc_wrap_i16(ptr %ptr, i16 %val) {
96
96
; LA64-NEXT: dbar 20
97
97
; LA64-NEXT: .LBB1_6: # %atomicrmw.start
98
98
; 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
102
100
; LA64-NEXT: # %bb.2: # %atomicrmw.end
103
- ; LA64-NEXT: srl.w $a0, $a5 , $a0
101
+ ; LA64-NEXT: srl.w $a0, $a3 , $a0
104
102
; LA64-NEXT: ret
105
103
%result = atomicrmw uinc_wrap ptr %ptr , i16 %val seq_cst
106
104
ret i16 %result
@@ -109,37 +107,36 @@ define i16 @atomicrmw_uinc_wrap_i16(ptr %ptr, i16 %val) {
109
107
define i32 @atomicrmw_uinc_wrap_i32 (ptr %ptr , i32 %val ) {
110
108
; LA64-LABEL: atomicrmw_uinc_wrap_i32:
111
109
; 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
114
112
; LA64-NEXT: .p2align 4, , 16
115
113
; LA64-NEXT: .LBB2_1: # %atomicrmw.start
116
114
; LA64-NEXT: # =>This Loop Header: Depth=1
117
115
; 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
123
121
; LA64-NEXT: .LBB2_3: # %atomicrmw.start
124
122
; LA64-NEXT: # Parent Loop BB2_1 Depth=1
125
123
; 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
128
126
; LA64-NEXT: # %bb.4: # %atomicrmw.start
129
127
; 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
133
131
; LA64-NEXT: b .LBB2_6
134
132
; LA64-NEXT: .LBB2_5: # %atomicrmw.start
135
133
; LA64-NEXT: # in Loop: Header=BB2_1 Depth=1
136
134
; LA64-NEXT: dbar 20
137
135
; LA64-NEXT: .LBB2_6: # %atomicrmw.start
138
136
; 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
141
138
; LA64-NEXT: # %bb.2: # %atomicrmw.end
142
- ; LA64-NEXT: move $a0, $a1
139
+ ; LA64-NEXT: move $a0, $a2
143
140
; LA64-NEXT: ret
144
141
%result = atomicrmw uinc_wrap ptr %ptr , i32 %val seq_cst
145
142
ret i32 %result
@@ -212,15 +209,16 @@ define i8 @atomicrmw_udec_wrap_i8(ptr %ptr, i8 %val) {
212
209
; LA64-NEXT: andi $a6, $a6, 255
213
210
; LA64-NEXT: sll.w $a6, $a6, $a0
214
211
; 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
216
214
; LA64-NEXT: .LBB4_3: # %atomicrmw.start
217
215
; LA64-NEXT: # Parent Loop BB4_1 Depth=1
218
216
; 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
221
219
; LA64-NEXT: # %bb.4: # %atomicrmw.start
222
220
; LA64-NEXT: # in Loop: Header=BB4_3 Depth=2
223
- ; LA64-NEXT: move $t0, $a7
221
+ ; LA64-NEXT: move $t0, $a6
224
222
; LA64-NEXT: sc.w $t0, $a2, 0
225
223
; LA64-NEXT: beqz $t0, .LBB4_3
226
224
; LA64-NEXT: b .LBB4_6
@@ -229,11 +227,9 @@ define i8 @atomicrmw_udec_wrap_i8(ptr %ptr, i8 %val) {
229
227
; LA64-NEXT: dbar 20
230
228
; LA64-NEXT: .LBB4_6: # %atomicrmw.start
231
229
; 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
235
231
; LA64-NEXT: # %bb.2: # %atomicrmw.end
236
- ; LA64-NEXT: srl.w $a0, $a6 , $a0
232
+ ; LA64-NEXT: srl.w $a0, $a3 , $a0
237
233
; LA64-NEXT: ret
238
234
%result = atomicrmw udec_wrap ptr %ptr , i8 %val seq_cst
239
235
ret i8 %result
@@ -270,15 +266,16 @@ define i16 @atomicrmw_udec_wrap_i16(ptr %ptr, i16 %val) {
270
266
; LA64-NEXT: bstrpick.d $a6, $a6, 15, 0
271
267
; LA64-NEXT: sll.w $a6, $a6, $a0
272
268
; 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
274
271
; LA64-NEXT: .LBB5_3: # %atomicrmw.start
275
272
; LA64-NEXT: # Parent Loop BB5_1 Depth=1
276
273
; 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
279
276
; LA64-NEXT: # %bb.4: # %atomicrmw.start
280
277
; LA64-NEXT: # in Loop: Header=BB5_3 Depth=2
281
- ; LA64-NEXT: move $t0, $a7
278
+ ; LA64-NEXT: move $t0, $a6
282
279
; LA64-NEXT: sc.w $t0, $a2, 0
283
280
; LA64-NEXT: beqz $t0, .LBB5_3
284
281
; LA64-NEXT: b .LBB5_6
@@ -287,11 +284,9 @@ define i16 @atomicrmw_udec_wrap_i16(ptr %ptr, i16 %val) {
287
284
; LA64-NEXT: dbar 20
288
285
; LA64-NEXT: .LBB5_6: # %atomicrmw.start
289
286
; 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
293
288
; LA64-NEXT: # %bb.2: # %atomicrmw.end
294
- ; LA64-NEXT: srl.w $a0, $a6 , $a0
289
+ ; LA64-NEXT: srl.w $a0, $a3 , $a0
295
290
; LA64-NEXT: ret
296
291
%result = atomicrmw udec_wrap ptr %ptr , i16 %val seq_cst
297
292
ret i16 %result
@@ -300,40 +295,39 @@ define i16 @atomicrmw_udec_wrap_i16(ptr %ptr, i16 %val) {
300
295
define i32 @atomicrmw_udec_wrap_i32 (ptr %ptr , i32 %val ) {
301
296
; LA64-LABEL: atomicrmw_udec_wrap_i32:
302
297
; LA64: # %bb.0:
303
- ; LA64-NEXT: ld.w $a4 , $a0, 0
298
+ ; LA64-NEXT: ld.w $a2 , $a0, 0
304
299
; LA64-NEXT: addi.w $a3, $a1, 0
305
300
; LA64-NEXT: .p2align 4, , 16
306
301
; LA64-NEXT: .LBB6_1: # %atomicrmw.start
307
302
; LA64-NEXT: # =>This Loop Header: Depth=1
308
303
; 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
319
314
; LA64-NEXT: .LBB6_3: # %atomicrmw.start
320
315
; LA64-NEXT: # Parent Loop BB6_1 Depth=1
321
316
; LA64-NEXT: # => This Inner Loop Header: Depth=2
322
317
; LA64-NEXT: ll.w $a2, $a0, 0
323
318
; LA64-NEXT: bne $a2, $a4, .LBB6_5
324
319
; LA64-NEXT: # %bb.4: # %atomicrmw.start
325
320
; 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
329
324
; LA64-NEXT: b .LBB6_6
330
325
; LA64-NEXT: .LBB6_5: # %atomicrmw.start
331
326
; LA64-NEXT: # in Loop: Header=BB6_1 Depth=1
332
327
; LA64-NEXT: dbar 20
333
328
; LA64-NEXT: .LBB6_6: # %atomicrmw.start
334
329
; 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
337
331
; LA64-NEXT: # %bb.2: # %atomicrmw.end
338
332
; LA64-NEXT: move $a0, $a2
339
333
; LA64-NEXT: ret
0 commit comments