@@ -655,8 +655,7 @@ body: |
655
655
; CHECK-NEXT: %c:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
656
656
; CHECK-NEXT: %d:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
657
657
; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(eq), %c(s64), %d
658
- ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s1) = G_FREEZE %cmp
659
- ; CHECK-NEXT: %ext:_(s64) = G_ZEXT [[FREEZE]](s1)
658
+ ; CHECK-NEXT: %ext:_(s64) = G_ZEXT %cmp(s1)
660
659
; CHECK-NEXT: $x0 = COPY %ext(s64)
661
660
; CHECK-NEXT: RET_ReallyLR implicit $x0
662
661
%0:_(s64) = COPY $x0
@@ -682,8 +681,7 @@ body: |
682
681
; CHECK-NEXT: %c:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
683
682
; CHECK-NEXT: %d:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
684
683
; CHECK-NEXT: %cmp:_(s1) = G_FCMP floatpred(oeq), %c(s64), %d
685
- ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s1) = G_FREEZE %cmp
686
- ; CHECK-NEXT: %ext:_(s64) = G_ZEXT [[FREEZE]](s1)
684
+ ; CHECK-NEXT: %ext:_(s64) = G_ZEXT %cmp(s1)
687
685
; CHECK-NEXT: $x0 = COPY %ext(s64)
688
686
; CHECK-NEXT: RET_ReallyLR implicit $x0
689
687
%0:_(s64) = COPY $x0
@@ -1152,3 +1150,293 @@ body: |
1152
1150
%2:_(s64) = G_FREEZE %1
1153
1151
$x0 = COPY %2(s64)
1154
1152
RET_ReallyLR implicit $x0
1153
+ ...
1154
+ ---
1155
+ name : freeze_fneg_fold_barrier
1156
+ body : |
1157
+ bb.1:
1158
+ liveins: $w0
1159
+
1160
+ ; CHECK-LABEL: name: freeze_fneg_fold_barrier
1161
+ ; CHECK: liveins: $w0
1162
+ ; CHECK-NEXT: {{ $}}
1163
+ ; CHECK-NEXT: %cst:_(s64) = G_FCONSTANT double 0.000000e+00
1164
+ ; CHECK-NEXT: %c:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1165
+ ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s64) = G_FNEG %c
1166
+ ; CHECK-NEXT: $x0 = COPY [[FNEG]](s64)
1167
+ ; CHECK-NEXT: RET_ReallyLR implicit $x0
1168
+ %0:_(s64) = COPY $x0
1169
+ %cst:_(s64) = G_FCONSTANT double 0.0
1170
+ %c:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1171
+ %d:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1172
+ %1:_(s64) = G_FNEG %c
1173
+ %2:_(s64) = G_FREEZE %1
1174
+ $x0 = COPY %2(s64)
1175
+ RET_ReallyLR implicit $x0
1176
+ ...
1177
+ ---
1178
+ name : freeze_frem_fold_barrier
1179
+ body : |
1180
+ bb.1:
1181
+ liveins: $w0
1182
+
1183
+ ; CHECK-LABEL: name: freeze_frem_fold_barrier
1184
+ ; CHECK: liveins: $w0
1185
+ ; CHECK-NEXT: {{ $}}
1186
+ ; CHECK-NEXT: %cst:_(s64) = G_FCONSTANT double 0.000000e+00
1187
+ ; CHECK-NEXT: %c:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1188
+ ; CHECK-NEXT: %d:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1189
+ ; CHECK-NEXT: [[FREM:%[0-9]+]]:_(s64) = G_FREM %c, %d
1190
+ ; CHECK-NEXT: $x0 = COPY [[FREM]](s64)
1191
+ ; CHECK-NEXT: RET_ReallyLR implicit $x0
1192
+ %0:_(s64) = COPY $x0
1193
+ %cst:_(s64) = G_FCONSTANT double 0.0
1194
+ %c:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1195
+ %d:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1196
+ %1:_(s64) = G_FREM %c, %d
1197
+ %2:_(s64) = G_FREEZE %1
1198
+ $x0 = COPY %2(s64)
1199
+ RET_ReallyLR implicit $x0
1200
+ ...
1201
+ ---
1202
+ name : freeze_fdiv_fold_barrier
1203
+ body : |
1204
+ bb.1:
1205
+ liveins: $w0
1206
+
1207
+ ; CHECK-LABEL: name: freeze_fdiv_fold_barrier
1208
+ ; CHECK: liveins: $w0
1209
+ ; CHECK-NEXT: {{ $}}
1210
+ ; CHECK-NEXT: %cst:_(s64) = G_FCONSTANT double 0.000000e+00
1211
+ ; CHECK-NEXT: %c:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1212
+ ; CHECK-NEXT: %d:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1213
+ ; CHECK-NEXT: [[FDIV:%[0-9]+]]:_(s64) = G_FDIV %c, %d
1214
+ ; CHECK-NEXT: $x0 = COPY [[FDIV]](s64)
1215
+ ; CHECK-NEXT: RET_ReallyLR implicit $x0
1216
+ %0:_(s64) = COPY $x0
1217
+ %cst:_(s64) = G_FCONSTANT double 0.0
1218
+ %c:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1219
+ %d:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1220
+ %1:_(s64) = G_FDIV %c, %d
1221
+ %2:_(s64) = G_FREEZE %1
1222
+ $x0 = COPY %2(s64)
1223
+ RET_ReallyLR implicit $x0
1224
+ ...
1225
+ ---
1226
+ name : freeze_fmul_fold_barrier
1227
+ body : |
1228
+ bb.1:
1229
+ liveins: $w0
1230
+
1231
+ ; CHECK-LABEL: name: freeze_fmul_fold_barrier
1232
+ ; CHECK: liveins: $w0
1233
+ ; CHECK-NEXT: {{ $}}
1234
+ ; CHECK-NEXT: %cst:_(s64) = G_FCONSTANT double 0.000000e+00
1235
+ ; CHECK-NEXT: %c:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1236
+ ; CHECK-NEXT: %d:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1237
+ ; CHECK-NEXT: [[FMUL:%[0-9]+]]:_(s64) = G_FMUL %c, %d
1238
+ ; CHECK-NEXT: $x0 = COPY [[FMUL]](s64)
1239
+ ; CHECK-NEXT: RET_ReallyLR implicit $x0
1240
+ %0:_(s64) = COPY $x0
1241
+ %cst:_(s64) = G_FCONSTANT double 0.0
1242
+ %c:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1243
+ %d:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1244
+ %1:_(s64) = G_FMUL %c, %d
1245
+ %2:_(s64) = G_FREEZE %1
1246
+ $x0 = COPY %2(s64)
1247
+ RET_ReallyLR implicit $x0
1248
+ ...
1249
+ ---
1250
+ name : freeze_fsub_fold_barrier
1251
+ body : |
1252
+ bb.1:
1253
+ liveins: $w0
1254
+
1255
+ ; CHECK-LABEL: name: freeze_fsub_fold_barrier
1256
+ ; CHECK: liveins: $w0
1257
+ ; CHECK-NEXT: {{ $}}
1258
+ ; CHECK-NEXT: %cst:_(s64) = G_FCONSTANT double 0.000000e+00
1259
+ ; CHECK-NEXT: %c:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1260
+ ; CHECK-NEXT: %d:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1261
+ ; CHECK-NEXT: [[FSUB:%[0-9]+]]:_(s64) = G_FSUB %c, %d
1262
+ ; CHECK-NEXT: $x0 = COPY [[FSUB]](s64)
1263
+ ; CHECK-NEXT: RET_ReallyLR implicit $x0
1264
+ %0:_(s64) = COPY $x0
1265
+ %cst:_(s64) = G_FCONSTANT double 0.0
1266
+ %c:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1267
+ %d:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1268
+ %1:_(s64) = G_FSUB %c, %d
1269
+ %2:_(s64) = G_FREEZE %1
1270
+ $x0 = COPY %2(s64)
1271
+ RET_ReallyLR implicit $x0
1272
+ ...
1273
+ ---
1274
+ name : freeze_fadd_fold_barrier
1275
+ body : |
1276
+ bb.1:
1277
+ liveins: $w0
1278
+
1279
+ ; CHECK-LABEL: name: freeze_fadd_fold_barrier
1280
+ ; CHECK: liveins: $w0
1281
+ ; CHECK-NEXT: {{ $}}
1282
+ ; CHECK-NEXT: %cst:_(s64) = G_FCONSTANT double 0.000000e+00
1283
+ ; CHECK-NEXT: %c:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1284
+ ; CHECK-NEXT: %d:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1285
+ ; CHECK-NEXT: [[FADD:%[0-9]+]]:_(s64) = G_FADD %c, %d
1286
+ ; CHECK-NEXT: $x0 = COPY [[FADD]](s64)
1287
+ ; CHECK-NEXT: RET_ReallyLR implicit $x0
1288
+ %0:_(s64) = COPY $x0
1289
+ %cst:_(s64) = G_FCONSTANT double 0.0
1290
+ %c:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1291
+ %d:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1292
+ %1:_(s64) = G_FADD %c, %d
1293
+ %2:_(s64) = G_FREEZE %1
1294
+ $x0 = COPY %2(s64)
1295
+ RET_ReallyLR implicit $x0
1296
+ ...
1297
+ ---
1298
+ name : freeze_urem_fold_barrier
1299
+ body : |
1300
+ bb.1:
1301
+ liveins: $w0
1302
+
1303
+ ; CHECK-LABEL: name: freeze_urem_fold_barrier
1304
+ ; CHECK: liveins: $w0
1305
+ ; CHECK-NEXT: {{ $}}
1306
+ ; CHECK-NEXT: %cst:_(s64) = G_CONSTANT i64 9
1307
+ ; CHECK-NEXT: %c:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1308
+ ; CHECK-NEXT: %d:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1309
+ ; CHECK-NEXT: [[UREM:%[0-9]+]]:_(s64) = G_UREM %c, %d
1310
+ ; CHECK-NEXT: $x0 = COPY [[UREM]](s64)
1311
+ ; CHECK-NEXT: RET_ReallyLR implicit $x0
1312
+ %0:_(s64) = COPY $x0
1313
+ %cst:_(s64) = G_CONSTANT i64 9
1314
+ %c:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1315
+ %d:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1316
+ %1:_(s64) = G_UREM %c, %d
1317
+ %2:_(s64) = G_FREEZE %1
1318
+ $x0 = COPY %2(s64)
1319
+ RET_ReallyLR implicit $x0
1320
+ ...
1321
+ ---
1322
+ name : freeze_srem_fold_barrier
1323
+ body : |
1324
+ bb.1:
1325
+ liveins: $w0
1326
+
1327
+ ; CHECK-LABEL: name: freeze_srem_fold_barrier
1328
+ ; CHECK: liveins: $w0
1329
+ ; CHECK-NEXT: {{ $}}
1330
+ ; CHECK-NEXT: %cst:_(s64) = G_CONSTANT i64 9
1331
+ ; CHECK-NEXT: %c:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1332
+ ; CHECK-NEXT: %d:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1333
+ ; CHECK-NEXT: [[SREM:%[0-9]+]]:_(s64) = G_SREM %c, %d
1334
+ ; CHECK-NEXT: $x0 = COPY [[SREM]](s64)
1335
+ ; CHECK-NEXT: RET_ReallyLR implicit $x0
1336
+ %0:_(s64) = COPY $x0
1337
+ %cst:_(s64) = G_CONSTANT i64 9
1338
+ %c:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1339
+ %d:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1340
+ %1:_(s64) = G_SREM %c, %d
1341
+ %2:_(s64) = G_FREEZE %1
1342
+ $x0 = COPY %2(s64)
1343
+ RET_ReallyLR implicit $x0
1344
+ ...
1345
+ ---
1346
+ name : freeze_ptradd_fold_barrier
1347
+ body : |
1348
+ bb.1:
1349
+ liveins: $w0
1350
+
1351
+ ; CHECK-LABEL: name: freeze_ptradd_fold_barrier
1352
+ ; CHECK: liveins: $w0
1353
+ ; CHECK-NEXT: {{ $}}
1354
+ ; CHECK-NEXT: %p:_(p0) = COPY $x0
1355
+ ; CHECK-NEXT: %cst:_(s64) = G_CONSTANT i64 9
1356
+ ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(p0) = G_FREEZE %p
1357
+ ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[FREEZE]], %cst(s64)
1358
+ ; CHECK-NEXT: $x0 = COPY [[PTR_ADD]](p0)
1359
+ ; CHECK-NEXT: RET_ReallyLR implicit $x0
1360
+ %0:_(s64) = COPY $x0
1361
+ %p:_(p0) = COPY $x0
1362
+ %cst:_(s64) = G_CONSTANT i64 9
1363
+ %c:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1364
+ %d:_(s64) = G_CONSTANT_FOLD_BARRIER %cst
1365
+ %1:_(p0) = G_PTR_ADD %p, %cst
1366
+ %2:_(p0) = G_FREEZE %1
1367
+ $x0 = COPY %2(p0)
1368
+ RET_ReallyLR implicit $x0
1369
+ ...
1370
+ ---
1371
+ # select (false, x, y) -> y
1372
+ name : freeze_select_fold_barrier
1373
+ body : |
1374
+ bb.1:
1375
+ liveins: $x0, $x1
1376
+ ; CHECK-LABEL: name: freeze_select_fold_barrier
1377
+ ; CHECK: liveins: $x0, $x1
1378
+ ; CHECK-NEXT: {{ $}}
1379
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x1
1380
+ ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s64) = G_FREEZE [[COPY]]
1381
+ ; CHECK-NEXT: $x0 = COPY [[FREEZE]](s64)
1382
+ %0:_(s64) = COPY $x0
1383
+ %1:_(s64) = COPY $x1
1384
+ %2:_(s1) = G_CONSTANT i1 false
1385
+ %3:_(s64) = G_SELECT %2, %0, %1
1386
+ %4:_(s64) = G_FREEZE %3
1387
+ $x0 = COPY %4(s64)
1388
+ ...
1389
+ ---
1390
+ name : freeze_extract_and_shuffle_vector_fold_barrier
1391
+ body : |
1392
+ bb.1:
1393
+ liveins: $x0, $x1
1394
+ ; CHECK-LABEL: name: freeze_extract_and_shuffle_vector_fold_barrier
1395
+ ; CHECK: liveins: $x0, $x1
1396
+ ; CHECK-NEXT: {{ $}}
1397
+ ; CHECK-NEXT: %arg1:_(<4 x s32>) = COPY $q0
1398
+ ; CHECK-NEXT: %arg2:_(<4 x s32>) = COPY $q1
1399
+ ; CHECK-NEXT: %idx:_(s64) = G_CONSTANT i64 0
1400
+ ; CHECK-NEXT: %sv:_(<4 x s32>) = G_SHUFFLE_VECTOR %arg1(<4 x s32>), %arg2, shufflemask(3, 0, 0, 0)
1401
+ ; CHECK-NEXT: %freeze_sv:_(<4 x s32>) = G_FREEZE %sv
1402
+ ; CHECK-NEXT: %extract:_(s32) = G_EXTRACT_VECTOR_ELT %freeze_sv(<4 x s32>), %idx(s64)
1403
+ ; CHECK-NEXT: $w0 = COPY %extract(s32)
1404
+ ; CHECK-NEXT: RET_ReallyLR implicit $x0
1405
+ %arg1:_(<4 x s32>) = COPY $q0
1406
+ %arg2:_(<4 x s32>) = COPY $q1
1407
+ %idx:_(s64) = G_CONSTANT i64 0
1408
+ %sv:_(<4 x s32>) = G_SHUFFLE_VECTOR %arg1(<4 x s32>), %arg2(<4 x s32>), shufflemask(3, 0, 0, 0)
1409
+ %freeze_sv:_(<4 x s32>) = G_FREEZE %sv
1410
+ %extract:_(s32) = G_EXTRACT_VECTOR_ELT %freeze_sv(<4 x s32>), %idx(s64)
1411
+ %freeze:_(s32) = G_FREEZE %extract
1412
+ $w0 = COPY %extract(s32)
1413
+ RET_ReallyLR implicit $x0
1414
+ ...
1415
+ ---
1416
+ name : freeze_insert_and_shuffle_vector_fold_barrier
1417
+ body : |
1418
+ bb.1:
1419
+ liveins: $x0, $x1
1420
+ ; CHECK-LABEL: name: freeze_insert_and_shuffle_vector_fold_barrier
1421
+ ; CHECK: liveins: $x0, $x1
1422
+ ; CHECK-NEXT: {{ $}}
1423
+ ; CHECK-NEXT: %elt:_(s32) = COPY $w0
1424
+ ; CHECK-NEXT: %arg1:_(<4 x s32>) = COPY $q0
1425
+ ; CHECK-NEXT: %arg2:_(<4 x s32>) = COPY $q1
1426
+ ; CHECK-NEXT: %idx:_(s64) = G_CONSTANT i64 0
1427
+ ; CHECK-NEXT: %sv:_(<4 x s32>) = G_SHUFFLE_VECTOR %arg1(<4 x s32>), %arg2, shufflemask(3, 0, 0, 0)
1428
+ ; CHECK-NEXT: %freeze_sv:_(<4 x s32>) = G_FREEZE %sv
1429
+ ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s32) = G_FREEZE %elt
1430
+ ; CHECK-NEXT: %extract:_(<4 x s32>) = G_INSERT_VECTOR_ELT %freeze_sv, [[FREEZE]](s32), %idx(s64)
1431
+ ; CHECK-NEXT: $q0 = COPY %extract(<4 x s32>)
1432
+ ; CHECK-NEXT: RET_ReallyLR implicit $x0
1433
+ %elt:_(s32) = COPY $w0
1434
+ %arg1:_(<4 x s32>) = COPY $q0
1435
+ %arg2:_(<4 x s32>) = COPY $q1
1436
+ %idx:_(s64) = G_CONSTANT i64 0
1437
+ %sv:_(<4 x s32>) = G_SHUFFLE_VECTOR %arg1(<4 x s32>), %arg2(<4 x s32>), shufflemask(3, 0, 0, 0)
1438
+ %freeze_sv:_(<4 x s32>) = G_FREEZE %sv
1439
+ %extract:_(<4 x s32>) = G_INSERT_VECTOR_ELT %freeze_sv(<4 x s32>), %elt(s32), %idx(s64)
1440
+ %freeze:_(<4 x s32>) = G_FREEZE %extract
1441
+ $q0 = COPY %freeze(<4 x s32>)
1442
+ RET_ReallyLR implicit $x0
0 commit comments