@@ -56,14 +56,12 @@ define i8 @atomicrmw_xchg_0_i8_acquire(ptr %a) nounwind {
56
56
; LA32-NEXT: slli.w $a1, $a0, 3
57
57
; LA32-NEXT: ori $a2, $zero, 255
58
58
; LA32-NEXT: sll.w $a2, $a2, $a1
59
+ ; LA32-NEXT: nor $a2, $a2, $zero
59
60
; LA32-NEXT: bstrins.w $a0, $zero, 1, 0
60
61
; LA32-NEXT: .LBB1_1: # =>This Inner Loop Header: Depth=1
61
62
; LA32-NEXT: dbar 0
62
63
; LA32-NEXT: ll.w $a3, $a0, 0
63
- ; LA32-NEXT: addi.w $a4, $zero, 0
64
- ; LA32-NEXT: xor $a4, $a3, $a4
65
- ; LA32-NEXT: and $a4, $a4, $a2
66
- ; LA32-NEXT: xor $a4, $a3, $a4
64
+ ; LA32-NEXT: and $a4, $a3, $a2
67
65
; LA32-NEXT: sc.w $a4, $a0, 0
68
66
; LA32-NEXT: beqz $a4, .LBB1_1
69
67
; LA32-NEXT: # %bb.2:
@@ -75,18 +73,9 @@ define i8 @atomicrmw_xchg_0_i8_acquire(ptr %a) nounwind {
75
73
; LA64-NEXT: slli.d $a1, $a0, 3
76
74
; LA64-NEXT: ori $a2, $zero, 255
77
75
; LA64-NEXT: sll.w $a2, $a2, $a1
78
- ; LA64-NEXT: addi.w $a2, $a2, 0
76
+ ; LA64-NEXT: nor $a2, $a2, $zero
79
77
; LA64-NEXT: bstrins.d $a0, $zero, 1, 0
80
- ; LA64-NEXT: .LBB1_1: # =>This Inner Loop Header: Depth=1
81
- ; LA64-NEXT: dbar 0
82
- ; LA64-NEXT: ll.w $a3, $a0, 0
83
- ; LA64-NEXT: addi.w $a4, $zero, 0
84
- ; LA64-NEXT: xor $a4, $a3, $a4
85
- ; LA64-NEXT: and $a4, $a4, $a2
86
- ; LA64-NEXT: xor $a4, $a3, $a4
87
- ; LA64-NEXT: sc.w $a4, $a0, 0
88
- ; LA64-NEXT: beqz $a4, .LBB1_1
89
- ; LA64-NEXT: # %bb.2:
78
+ ; LA64-NEXT: amand_db.w $a3, $a2, $a0
90
79
; LA64-NEXT: srl.w $a0, $a3, $a1
91
80
; LA64-NEXT: ret
92
81
%1 = atomicrmw xchg ptr %a , i8 0 acquire
@@ -103,10 +92,7 @@ define i8 @atomicrmw_xchg_minus_1_i8_acquire(ptr %a) nounwind {
103
92
; LA32-NEXT: .LBB2_1: # =>This Inner Loop Header: Depth=1
104
93
; LA32-NEXT: dbar 0
105
94
; LA32-NEXT: ll.w $a3, $a0, 0
106
- ; LA32-NEXT: addi.w $a4, $a2, 0
107
- ; LA32-NEXT: xor $a4, $a3, $a4
108
- ; LA32-NEXT: and $a4, $a4, $a2
109
- ; LA32-NEXT: xor $a4, $a3, $a4
95
+ ; LA32-NEXT: or $a4, $a3, $a2
110
96
; LA32-NEXT: sc.w $a4, $a0, 0
111
97
; LA32-NEXT: beqz $a4, .LBB2_1
112
98
; LA32-NEXT: # %bb.2:
@@ -118,18 +104,8 @@ define i8 @atomicrmw_xchg_minus_1_i8_acquire(ptr %a) nounwind {
118
104
; LA64-NEXT: slli.d $a1, $a0, 3
119
105
; LA64-NEXT: ori $a2, $zero, 255
120
106
; LA64-NEXT: sll.w $a2, $a2, $a1
121
- ; LA64-NEXT: addi.w $a2, $a2, 0
122
107
; LA64-NEXT: bstrins.d $a0, $zero, 1, 0
123
- ; LA64-NEXT: .LBB2_1: # =>This Inner Loop Header: Depth=1
124
- ; LA64-NEXT: dbar 0
125
- ; LA64-NEXT: ll.w $a3, $a0, 0
126
- ; LA64-NEXT: addi.w $a4, $a2, 0
127
- ; LA64-NEXT: xor $a4, $a3, $a4
128
- ; LA64-NEXT: and $a4, $a4, $a2
129
- ; LA64-NEXT: xor $a4, $a3, $a4
130
- ; LA64-NEXT: sc.w $a4, $a0, 0
131
- ; LA64-NEXT: beqz $a4, .LBB2_1
132
- ; LA64-NEXT: # %bb.2:
108
+ ; LA64-NEXT: amor_db.w $a3, $a2, $a0
133
109
; LA64-NEXT: srl.w $a0, $a3, $a1
134
110
; LA64-NEXT: ret
135
111
%1 = atomicrmw xchg ptr %a , i8 -1 acquire
@@ -193,14 +169,12 @@ define i16 @atomicrmw_xchg_0_i16_acquire(ptr %a) nounwind {
193
169
; LA32-NEXT: ori $a1, $a1, 4095
194
170
; LA32-NEXT: slli.w $a2, $a0, 3
195
171
; LA32-NEXT: sll.w $a1, $a1, $a2
172
+ ; LA32-NEXT: nor $a1, $a1, $zero
196
173
; LA32-NEXT: bstrins.w $a0, $zero, 1, 0
197
174
; LA32-NEXT: .LBB4_1: # =>This Inner Loop Header: Depth=1
198
175
; LA32-NEXT: dbar 0
199
176
; LA32-NEXT: ll.w $a3, $a0, 0
200
- ; LA32-NEXT: addi.w $a4, $zero, 0
201
- ; LA32-NEXT: xor $a4, $a3, $a4
202
- ; LA32-NEXT: and $a4, $a4, $a1
203
- ; LA32-NEXT: xor $a4, $a3, $a4
177
+ ; LA32-NEXT: and $a4, $a3, $a1
204
178
; LA32-NEXT: sc.w $a4, $a0, 0
205
179
; LA32-NEXT: beqz $a4, .LBB4_1
206
180
; LA32-NEXT: # %bb.2:
@@ -213,18 +187,9 @@ define i16 @atomicrmw_xchg_0_i16_acquire(ptr %a) nounwind {
213
187
; LA64-NEXT: ori $a1, $a1, 4095
214
188
; LA64-NEXT: slli.d $a2, $a0, 3
215
189
; LA64-NEXT: sll.w $a1, $a1, $a2
216
- ; LA64-NEXT: addi.w $a1, $a1, 0
190
+ ; LA64-NEXT: nor $a1, $a1, $zero
217
191
; LA64-NEXT: bstrins.d $a0, $zero, 1, 0
218
- ; LA64-NEXT: .LBB4_1: # =>This Inner Loop Header: Depth=1
219
- ; LA64-NEXT: dbar 0
220
- ; LA64-NEXT: ll.w $a3, $a0, 0
221
- ; LA64-NEXT: addi.w $a4, $zero, 0
222
- ; LA64-NEXT: xor $a4, $a3, $a4
223
- ; LA64-NEXT: and $a4, $a4, $a1
224
- ; LA64-NEXT: xor $a4, $a3, $a4
225
- ; LA64-NEXT: sc.w $a4, $a0, 0
226
- ; LA64-NEXT: beqz $a4, .LBB4_1
227
- ; LA64-NEXT: # %bb.2:
192
+ ; LA64-NEXT: amand_db.w $a3, $a1, $a0
228
193
; LA64-NEXT: srl.w $a0, $a3, $a2
229
194
; LA64-NEXT: ret
230
195
%1 = atomicrmw xchg ptr %a , i16 0 acquire
@@ -242,10 +207,7 @@ define i16 @atomicrmw_xchg_minus_1_i16_acquire(ptr %a) nounwind {
242
207
; LA32-NEXT: .LBB5_1: # =>This Inner Loop Header: Depth=1
243
208
; LA32-NEXT: dbar 0
244
209
; LA32-NEXT: ll.w $a3, $a0, 0
245
- ; LA32-NEXT: addi.w $a4, $a1, 0
246
- ; LA32-NEXT: xor $a4, $a3, $a4
247
- ; LA32-NEXT: and $a4, $a4, $a1
248
- ; LA32-NEXT: xor $a4, $a3, $a4
210
+ ; LA32-NEXT: or $a4, $a3, $a1
249
211
; LA32-NEXT: sc.w $a4, $a0, 0
250
212
; LA32-NEXT: beqz $a4, .LBB5_1
251
213
; LA32-NEXT: # %bb.2:
@@ -258,18 +220,8 @@ define i16 @atomicrmw_xchg_minus_1_i16_acquire(ptr %a) nounwind {
258
220
; LA64-NEXT: ori $a1, $a1, 4095
259
221
; LA64-NEXT: slli.d $a2, $a0, 3
260
222
; LA64-NEXT: sll.w $a1, $a1, $a2
261
- ; LA64-NEXT: addi.w $a1, $a1, 0
262
223
; LA64-NEXT: bstrins.d $a0, $zero, 1, 0
263
- ; LA64-NEXT: .LBB5_1: # =>This Inner Loop Header: Depth=1
264
- ; LA64-NEXT: dbar 0
265
- ; LA64-NEXT: ll.w $a3, $a0, 0
266
- ; LA64-NEXT: addi.w $a4, $a1, 0
267
- ; LA64-NEXT: xor $a4, $a3, $a4
268
- ; LA64-NEXT: and $a4, $a4, $a1
269
- ; LA64-NEXT: xor $a4, $a3, $a4
270
- ; LA64-NEXT: sc.w $a4, $a0, 0
271
- ; LA64-NEXT: beqz $a4, .LBB5_1
272
- ; LA64-NEXT: # %bb.2:
224
+ ; LA64-NEXT: amor_db.w $a3, $a1, $a0
273
225
; LA64-NEXT: srl.w $a0, $a3, $a2
274
226
; LA64-NEXT: ret
275
227
%1 = atomicrmw xchg ptr %a , i16 -1 acquire
@@ -1131,13 +1083,11 @@ define i8 @atomicrmw_xchg_0_i8_monotonic(ptr %a) nounwind {
1131
1083
; LA32-NEXT: slli.w $a1, $a0, 3
1132
1084
; LA32-NEXT: ori $a2, $zero, 255
1133
1085
; LA32-NEXT: sll.w $a2, $a2, $a1
1086
+ ; LA32-NEXT: nor $a2, $a2, $zero
1134
1087
; LA32-NEXT: bstrins.w $a0, $zero, 1, 0
1135
1088
; LA32-NEXT: .LBB33_1: # =>This Inner Loop Header: Depth=1
1136
1089
; LA32-NEXT: ll.w $a3, $a0, 0
1137
- ; LA32-NEXT: addi.w $a4, $zero, 0
1138
- ; LA32-NEXT: xor $a4, $a3, $a4
1139
- ; LA32-NEXT: and $a4, $a4, $a2
1140
- ; LA32-NEXT: xor $a4, $a3, $a4
1090
+ ; LA32-NEXT: and $a4, $a3, $a2
1141
1091
; LA32-NEXT: sc.w $a4, $a0, 0
1142
1092
; LA32-NEXT: beqz $a4, .LBB33_1
1143
1093
; LA32-NEXT: # %bb.2:
@@ -1149,17 +1099,9 @@ define i8 @atomicrmw_xchg_0_i8_monotonic(ptr %a) nounwind {
1149
1099
; LA64-NEXT: slli.d $a1, $a0, 3
1150
1100
; LA64-NEXT: ori $a2, $zero, 255
1151
1101
; LA64-NEXT: sll.w $a2, $a2, $a1
1152
- ; LA64-NEXT: addi.w $a2, $a2, 0
1102
+ ; LA64-NEXT: nor $a2, $a2, $zero
1153
1103
; LA64-NEXT: bstrins.d $a0, $zero, 1, 0
1154
- ; LA64-NEXT: .LBB33_1: # =>This Inner Loop Header: Depth=1
1155
- ; LA64-NEXT: ll.w $a3, $a0, 0
1156
- ; LA64-NEXT: addi.w $a4, $zero, 0
1157
- ; LA64-NEXT: xor $a4, $a3, $a4
1158
- ; LA64-NEXT: and $a4, $a4, $a2
1159
- ; LA64-NEXT: xor $a4, $a3, $a4
1160
- ; LA64-NEXT: sc.w $a4, $a0, 0
1161
- ; LA64-NEXT: beqz $a4, .LBB33_1
1162
- ; LA64-NEXT: # %bb.2:
1104
+ ; LA64-NEXT: amand_db.w $a3, $a2, $a0
1163
1105
; LA64-NEXT: srl.w $a0, $a3, $a1
1164
1106
; LA64-NEXT: ret
1165
1107
%1 = atomicrmw xchg ptr %a , i8 0 monotonic
@@ -1175,10 +1117,7 @@ define i8 @atomicrmw_xchg_minus_1_i8_monotonic(ptr %a) nounwind {
1175
1117
; LA32-NEXT: bstrins.w $a0, $zero, 1, 0
1176
1118
; LA32-NEXT: .LBB34_1: # =>This Inner Loop Header: Depth=1
1177
1119
; LA32-NEXT: ll.w $a3, $a0, 0
1178
- ; LA32-NEXT: addi.w $a4, $a2, 0
1179
- ; LA32-NEXT: xor $a4, $a3, $a4
1180
- ; LA32-NEXT: and $a4, $a4, $a2
1181
- ; LA32-NEXT: xor $a4, $a3, $a4
1120
+ ; LA32-NEXT: or $a4, $a3, $a2
1182
1121
; LA32-NEXT: sc.w $a4, $a0, 0
1183
1122
; LA32-NEXT: beqz $a4, .LBB34_1
1184
1123
; LA32-NEXT: # %bb.2:
@@ -1190,17 +1129,8 @@ define i8 @atomicrmw_xchg_minus_1_i8_monotonic(ptr %a) nounwind {
1190
1129
; LA64-NEXT: slli.d $a1, $a0, 3
1191
1130
; LA64-NEXT: ori $a2, $zero, 255
1192
1131
; LA64-NEXT: sll.w $a2, $a2, $a1
1193
- ; LA64-NEXT: addi.w $a2, $a2, 0
1194
1132
; LA64-NEXT: bstrins.d $a0, $zero, 1, 0
1195
- ; LA64-NEXT: .LBB34_1: # =>This Inner Loop Header: Depth=1
1196
- ; LA64-NEXT: ll.w $a3, $a0, 0
1197
- ; LA64-NEXT: addi.w $a4, $a2, 0
1198
- ; LA64-NEXT: xor $a4, $a3, $a4
1199
- ; LA64-NEXT: and $a4, $a4, $a2
1200
- ; LA64-NEXT: xor $a4, $a3, $a4
1201
- ; LA64-NEXT: sc.w $a4, $a0, 0
1202
- ; LA64-NEXT: beqz $a4, .LBB34_1
1203
- ; LA64-NEXT: # %bb.2:
1133
+ ; LA64-NEXT: amor_db.w $a3, $a2, $a0
1204
1134
; LA64-NEXT: srl.w $a0, $a3, $a1
1205
1135
; LA64-NEXT: ret
1206
1136
%1 = atomicrmw xchg ptr %a , i8 -1 monotonic
@@ -1262,13 +1192,11 @@ define i16 @atomicrmw_xchg_0_i16_monotonic(ptr %a) nounwind {
1262
1192
; LA32-NEXT: ori $a1, $a1, 4095
1263
1193
; LA32-NEXT: slli.w $a2, $a0, 3
1264
1194
; LA32-NEXT: sll.w $a1, $a1, $a2
1195
+ ; LA32-NEXT: nor $a1, $a1, $zero
1265
1196
; LA32-NEXT: bstrins.w $a0, $zero, 1, 0
1266
1197
; LA32-NEXT: .LBB36_1: # =>This Inner Loop Header: Depth=1
1267
1198
; LA32-NEXT: ll.w $a3, $a0, 0
1268
- ; LA32-NEXT: addi.w $a4, $zero, 0
1269
- ; LA32-NEXT: xor $a4, $a3, $a4
1270
- ; LA32-NEXT: and $a4, $a4, $a1
1271
- ; LA32-NEXT: xor $a4, $a3, $a4
1199
+ ; LA32-NEXT: and $a4, $a3, $a1
1272
1200
; LA32-NEXT: sc.w $a4, $a0, 0
1273
1201
; LA32-NEXT: beqz $a4, .LBB36_1
1274
1202
; LA32-NEXT: # %bb.2:
@@ -1281,17 +1209,9 @@ define i16 @atomicrmw_xchg_0_i16_monotonic(ptr %a) nounwind {
1281
1209
; LA64-NEXT: ori $a1, $a1, 4095
1282
1210
; LA64-NEXT: slli.d $a2, $a0, 3
1283
1211
; LA64-NEXT: sll.w $a1, $a1, $a2
1284
- ; LA64-NEXT: addi.w $a1, $a1, 0
1212
+ ; LA64-NEXT: nor $a1, $a1, $zero
1285
1213
; LA64-NEXT: bstrins.d $a0, $zero, 1, 0
1286
- ; LA64-NEXT: .LBB36_1: # =>This Inner Loop Header: Depth=1
1287
- ; LA64-NEXT: ll.w $a3, $a0, 0
1288
- ; LA64-NEXT: addi.w $a4, $zero, 0
1289
- ; LA64-NEXT: xor $a4, $a3, $a4
1290
- ; LA64-NEXT: and $a4, $a4, $a1
1291
- ; LA64-NEXT: xor $a4, $a3, $a4
1292
- ; LA64-NEXT: sc.w $a4, $a0, 0
1293
- ; LA64-NEXT: beqz $a4, .LBB36_1
1294
- ; LA64-NEXT: # %bb.2:
1214
+ ; LA64-NEXT: amand_db.w $a3, $a1, $a0
1295
1215
; LA64-NEXT: srl.w $a0, $a3, $a2
1296
1216
; LA64-NEXT: ret
1297
1217
%1 = atomicrmw xchg ptr %a , i16 0 monotonic
@@ -1308,10 +1228,7 @@ define i16 @atomicrmw_xchg_minus_1_i16_monotonic(ptr %a) nounwind {
1308
1228
; LA32-NEXT: bstrins.w $a0, $zero, 1, 0
1309
1229
; LA32-NEXT: .LBB37_1: # =>This Inner Loop Header: Depth=1
1310
1230
; LA32-NEXT: ll.w $a3, $a0, 0
1311
- ; LA32-NEXT: addi.w $a4, $a1, 0
1312
- ; LA32-NEXT: xor $a4, $a3, $a4
1313
- ; LA32-NEXT: and $a4, $a4, $a1
1314
- ; LA32-NEXT: xor $a4, $a3, $a4
1231
+ ; LA32-NEXT: or $a4, $a3, $a1
1315
1232
; LA32-NEXT: sc.w $a4, $a0, 0
1316
1233
; LA32-NEXT: beqz $a4, .LBB37_1
1317
1234
; LA32-NEXT: # %bb.2:
@@ -1324,17 +1241,8 @@ define i16 @atomicrmw_xchg_minus_1_i16_monotonic(ptr %a) nounwind {
1324
1241
; LA64-NEXT: ori $a1, $a1, 4095
1325
1242
; LA64-NEXT: slli.d $a2, $a0, 3
1326
1243
; LA64-NEXT: sll.w $a1, $a1, $a2
1327
- ; LA64-NEXT: addi.w $a1, $a1, 0
1328
1244
; LA64-NEXT: bstrins.d $a0, $zero, 1, 0
1329
- ; LA64-NEXT: .LBB37_1: # =>This Inner Loop Header: Depth=1
1330
- ; LA64-NEXT: ll.w $a3, $a0, 0
1331
- ; LA64-NEXT: addi.w $a4, $a1, 0
1332
- ; LA64-NEXT: xor $a4, $a3, $a4
1333
- ; LA64-NEXT: and $a4, $a4, $a1
1334
- ; LA64-NEXT: xor $a4, $a3, $a4
1335
- ; LA64-NEXT: sc.w $a4, $a0, 0
1336
- ; LA64-NEXT: beqz $a4, .LBB37_1
1337
- ; LA64-NEXT: # %bb.2:
1245
+ ; LA64-NEXT: amor_db.w $a3, $a1, $a0
1338
1246
; LA64-NEXT: srl.w $a0, $a3, $a2
1339
1247
; LA64-NEXT: ret
1340
1248
%1 = atomicrmw xchg ptr %a , i16 -1 monotonic
0 commit comments