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