@@ -1358,15 +1358,15 @@ defm VNCLIP_W : VNCLP_IV_V_X_I<"vnclip", 0b101111>;
1358
1358
1359
1359
let Predicates = [HasVInstructionsAnyF] in {
1360
1360
// Vector Single-Width Floating-Point Add/Subtract Instructions
1361
- let Uses = [FRM], mayRaiseFPException = true in {
1361
+ let Uses = [FRM, VL, VTYPE ], mayRaiseFPException = true in {
1362
1362
defm VFADD_V : VALU_FV_V_F<"vfadd", 0b000000>;
1363
1363
defm VFSUB_V : VALU_FV_V_F<"vfsub", 0b000010>;
1364
1364
defm VFRSUB_V : VALU_FV_F<"vfrsub", 0b100111>;
1365
1365
}
1366
1366
1367
1367
// Vector Widening Floating-Point Add/Subtract Instructions
1368
1368
let Constraints = "@earlyclobber $vd",
1369
- Uses = [FRM],
1369
+ Uses = [FRM, VL, VTYPE ],
1370
1370
mayRaiseFPException = true,
1371
1371
DestEEW = EEWSEWx2 in {
1372
1372
let RVVConstraint = WidenV in {
@@ -1381,23 +1381,23 @@ let RVVConstraint = WidenW in {
1381
1381
defm VFWADD_W : VWALU_FV_V_F<"vfwadd", 0b110100, "w">;
1382
1382
defm VFWSUB_W : VWALU_FV_V_F<"vfwsub", 0b110110, "w">;
1383
1383
} // RVVConstraint = WidenW
1384
- } // Constraints = "@earlyclobber $vd", Uses = [FRM], mayRaiseFPException = true, DestEEW = EEWSEWx2
1384
+ } // Constraints = "@earlyclobber $vd", Uses = [FRM, VL, VTYPE ], mayRaiseFPException = true, DestEEW = EEWSEWx2
1385
1385
1386
1386
// Vector Single-Width Floating-Point Multiply/Divide Instructions
1387
- let Uses = [FRM], mayRaiseFPException = true in {
1387
+ let Uses = [FRM, VL, VTYPE ], mayRaiseFPException = true in {
1388
1388
defm VFMUL_V : VMUL_FV_V_F<"vfmul", 0b100100>;
1389
1389
defm VFDIV_V : VDIV_FV_V_F<"vfdiv", 0b100000>;
1390
1390
defm VFRDIV_V : VDIV_FV_F<"vfrdiv", 0b100001>;
1391
1391
}
1392
1392
1393
1393
// Vector Widening Floating-Point Multiply
1394
1394
let Constraints = "@earlyclobber $vd", RVVConstraint = WidenV,
1395
- Uses = [FRM], mayRaiseFPException = true, DestEEW = EEWSEWx2 in {
1395
+ Uses = [FRM, VL, VTYPE ], mayRaiseFPException = true, DestEEW = EEWSEWx2 in {
1396
1396
defm VFWMUL_V : VWMUL_FV_V_F<"vfwmul", 0b111000>;
1397
- } // Constraints = "@earlyclobber $vd", RVVConstraint = WidenV, Uses = [FRM], mayRaiseFPException = true, DestEEW = EEWSEWx2
1397
+ } // Constraints = "@earlyclobber $vd", RVVConstraint = WidenV, Uses = [FRM, VL, VTYPE ], mayRaiseFPException = true, DestEEW = EEWSEWx2
1398
1398
1399
1399
// Vector Single-Width Floating-Point Fused Multiply-Add Instructions
1400
- let Uses = [FRM], mayRaiseFPException = true in {
1400
+ let Uses = [FRM, VL, VTYPE ], mayRaiseFPException = true in {
1401
1401
defm VFMACC_V : VMAC_FV_V_F<"vfmacc", 0b101100>;
1402
1402
defm VFNMACC_V : VMAC_FV_V_F<"vfnmacc", 0b101101>;
1403
1403
defm VFMSAC_V : VMAC_FV_V_F<"vfmsac", 0b101110>;
@@ -1409,15 +1409,15 @@ defm VFNMSUB_V : VMAC_FV_V_F<"vfnmsub", 0b101011>;
1409
1409
}
1410
1410
1411
1411
// Vector Widening Floating-Point Fused Multiply-Add Instructions
1412
- let Uses = [FRM], mayRaiseFPException = true, DestEEW = EEWSEWx2 in {
1412
+ let Uses = [FRM, VL, VTYPE ], mayRaiseFPException = true, DestEEW = EEWSEWx2 in {
1413
1413
defm VFWMACC_V : VWMAC_FV_V_F<"vfwmacc", 0b111100>;
1414
1414
defm VFWNMACC_V : VWMAC_FV_V_F<"vfwnmacc", 0b111101>;
1415
1415
defm VFWMSAC_V : VWMAC_FV_V_F<"vfwmsac", 0b111110>;
1416
1416
defm VFWNMSAC_V : VWMAC_FV_V_F<"vfwnmsac", 0b111111>;
1417
- } // Constraints = "@earlyclobber $vd", RVVConstraint = WidenV, Uses = [FRM], mayRaiseFPException = true, DestEEW = EEWSEWx2
1417
+ } // Constraints = "@earlyclobber $vd", RVVConstraint = WidenV, Uses = [FRM, VL, VTYPE ], mayRaiseFPException = true, DestEEW = EEWSEWx2
1418
1418
1419
1419
// Vector Floating-Point Square-Root Instruction
1420
- let Uses = [FRM], mayRaiseFPException = true in {
1420
+ let Uses = [FRM, VL, VTYPE ], mayRaiseFPException = true in {
1421
1421
defm VFSQRT_V : VSQR_FV_VS2<"vfsqrt.v", 0b010011, 0b00000>;
1422
1422
defm VFREC7_V : VRCP_FV_VS2<"vfrec7.v", 0b010011, 0b00101>;
1423
1423
}
@@ -1482,13 +1482,13 @@ def VFMV_V_F : RVInstVX<0b010111, OPFVF, (outs VR:$vd),
1482
1482
1483
1483
// Single-Width Floating-Point/Integer Type-Convert Instructions
1484
1484
let mayRaiseFPException = true in {
1485
- let Uses = [FRM] in {
1485
+ let Uses = [FRM, VL, VTYPE ] in {
1486
1486
defm VFCVT_XU_F_V : VCVTI_FV_VS2<"vfcvt.xu.f.v", 0b010010, 0b00000>;
1487
1487
defm VFCVT_X_F_V : VCVTI_FV_VS2<"vfcvt.x.f.v", 0b010010, 0b00001>;
1488
1488
}
1489
1489
defm VFCVT_RTZ_XU_F_V : VCVTI_FV_VS2<"vfcvt.rtz.xu.f.v", 0b010010, 0b00110>;
1490
1490
defm VFCVT_RTZ_X_F_V : VCVTI_FV_VS2<"vfcvt.rtz.x.f.v", 0b010010, 0b00111>;
1491
- let Uses = [FRM] in {
1491
+ let Uses = [FRM, VL, VTYPE ] in {
1492
1492
defm VFCVT_F_XU_V : VCVTF_IV_VS2<"vfcvt.f.xu.v", 0b010010, 0b00010>;
1493
1493
defm VFCVT_F_X_V : VCVTF_IV_VS2<"vfcvt.f.x.v", 0b010010, 0b00011>;
1494
1494
}
@@ -1497,7 +1497,7 @@ defm VFCVT_F_X_V : VCVTF_IV_VS2<"vfcvt.f.x.v", 0b010010, 0b00011>;
1497
1497
// Widening Floating-Point/Integer Type-Convert Instructions
1498
1498
let Constraints = "@earlyclobber $vd", RVVConstraint = WidenCvt,
1499
1499
mayRaiseFPException = true, DestEEW = EEWSEWx2 in {
1500
- let Uses = [FRM] in {
1500
+ let Uses = [FRM, VL, VTYPE ] in {
1501
1501
defm VFWCVT_XU_F_V : VWCVTI_FV_VS2<"vfwcvt.xu.f.v", 0b010010, 0b01000>;
1502
1502
defm VFWCVT_X_F_V : VWCVTI_FV_VS2<"vfwcvt.x.f.v", 0b010010, 0b01001>;
1503
1503
}
@@ -1510,13 +1510,13 @@ defm VFWCVT_F_F_V : VWCVTF_FV_VS2<"vfwcvt.f.f.v", 0b010010, 0b01100>;
1510
1510
1511
1511
// Narrowing Floating-Point/Integer Type-Convert Instructions
1512
1512
let Constraints = "@earlyclobber $vd", mayRaiseFPException = true in {
1513
- let Uses = [FRM] in {
1513
+ let Uses = [FRM, VL, VTYPE ] in {
1514
1514
defm VFNCVT_XU_F_W : VNCVTI_FV_VS2<"vfncvt.xu.f.w", 0b010010, 0b10000>;
1515
1515
defm VFNCVT_X_F_W : VNCVTI_FV_VS2<"vfncvt.x.f.w", 0b010010, 0b10001>;
1516
1516
}
1517
1517
defm VFNCVT_RTZ_XU_F_W : VNCVTI_FV_VS2<"vfncvt.rtz.xu.f.w", 0b010010, 0b10110>;
1518
1518
defm VFNCVT_RTZ_X_F_W : VNCVTI_FV_VS2<"vfncvt.rtz.x.f.w", 0b010010, 0b10111>;
1519
- let Uses = [FRM] in {
1519
+ let Uses = [FRM, VL, VTYPE ] in {
1520
1520
defm VFNCVT_F_XU_W : VNCVTF_IV_VS2<"vfncvt.f.xu.w", 0b010010, 0b10010>;
1521
1521
defm VFNCVT_F_X_W : VNCVTF_IV_VS2<"vfncvt.f.x.w", 0b010010, 0b10011>;
1522
1522
defm VFNCVT_F_F_W : VNCVTF_FV_VS2<"vfncvt.f.f.w", 0b010010, 0b10100>;
@@ -1554,7 +1554,7 @@ defm VWREDSUM : VWRED_IV_V<"vwredsum", 0b110001>;
1554
1554
let Predicates = [HasVInstructionsAnyF] in {
1555
1555
// Vector Single-Width Floating-Point Reduction Instructions
1556
1556
let RVVConstraint = NoConstraint, ElementsDependOn = EltDepsVLMask in {
1557
- let Uses = [FRM], mayRaiseFPException = true in {
1557
+ let Uses = [FRM, VL, VTYPE ], mayRaiseFPException = true in {
1558
1558
defm VFREDOSUM : VREDO_FV_V<"vfredosum", 0b000011>;
1559
1559
defm VFREDUSUM : VRED_FV_V<"vfredusum", 0b000001>;
1560
1560
}
@@ -1573,7 +1573,7 @@ let Constraints = "@earlyclobber $vd", RVVConstraint = NoConstraint, ElementsDep
1573
1573
// This has the downside that the earlyclobber constraint is too coarse and
1574
1574
// will impose unnecessary restrictions by not allowing the destination to
1575
1575
// overlap with the first (wide) operand.
1576
- let Uses = [FRM], mayRaiseFPException = true in {
1576
+ let Uses = [FRM, VL, VTYPE ], mayRaiseFPException = true in {
1577
1577
defm VFWREDOSUM : VWREDO_FV_V<"vfwredosum", 0b110011>;
1578
1578
defm VFWREDUSUM : VWRED_FV_V<"vfwredusum", 0b110001>;
1579
1579
}
0 commit comments