@@ -1413,44 +1413,21 @@ static bool isTupleInsertInstr(const MachineInstr &MI,
14131413 return false ;
14141414
14151415 const TargetRegisterClass *DstRC = MRI.getRegClass (MI.getOperand (0 ).getReg ());
1416- // Check whether it was lowered with the correct subreg index.
1416+ if (!RISCVRI::isVRegClass (DstRC->TSFlags ))
1417+ return false ;
1418+ unsigned NF = RISCVRI::getNF (DstRC->TSFlags );
1419+ if (NF < 2 )
1420+ return false ;
1421+
1422+ // Check whether INSERT_SUBREG was lowered with the correct subreg index.
1423+ auto VLMul = RISCVRI::getLMul (DstRC->TSFlags );
1424+ [[maybe_unused]] auto [LMul, IsFractional] = RISCVVType::decodeVLMUL (VLMul);
1425+ assert (!IsFractional && " unexpected LMUL for tuple register classes" );
14171426 [[maybe_unused]] const TargetRegisterInfo *TRI = MRI.getTargetRegisterInfo ();
14181427 [[maybe_unused]] unsigned SubRegIdx = MI.getOperand (3 ).getImm ();
1419- switch (DstRC->getID ()) {
1420- case RISCV::VRN2M1RegClassID:
1421- case RISCV::VRN2M1NoV0RegClassID:
1422- case RISCV::VRN3M1RegClassID:
1423- case RISCV::VRN3M1NoV0RegClassID:
1424- case RISCV::VRN4M1RegClassID:
1425- case RISCV::VRN4M1NoV0RegClassID:
1426- case RISCV::VRN5M1RegClassID:
1427- case RISCV::VRN5M1NoV0RegClassID:
1428- case RISCV::VRN6M1RegClassID:
1429- case RISCV::VRN6M1NoV0RegClassID:
1430- case RISCV::VRN7M1RegClassID:
1431- case RISCV::VRN7M1NoV0RegClassID:
1432- case RISCV::VRN8M1RegClassID:
1433- case RISCV::VRN8M1NoV0RegClassID:
1434- assert (TRI->getSubRegIdxSize (SubRegIdx) == RISCV::RVVBitsPerBlock &&
1435- " unexpected subreg index for VRM1 sub-register" );
1436- return true ;
1437- case RISCV::VRN2M2RegClassID:
1438- case RISCV::VRN2M2NoV0RegClassID:
1439- case RISCV::VRN3M2RegClassID:
1440- case RISCV::VRN3M2NoV0RegClassID:
1441- case RISCV::VRN4M2RegClassID:
1442- case RISCV::VRN4M2NoV0RegClassID:
1443- assert (TRI->getSubRegIdxSize (SubRegIdx) == RISCV::RVVBitsPerBlock * 2 &&
1444- " unexpected subreg index for VRM2 sub-register" );
1445- return true ;
1446- case RISCV::VRN2M4RegClassID:
1447- case RISCV::VRN2M4NoV0RegClassID:
1448- assert (TRI->getSubRegIdxSize (SubRegIdx) == RISCV::RVVBitsPerBlock * 4 &&
1449- " unexpected subreg index for VRM4 sub-register" );
1450- return true ;
1451- default :
1452- return false ;
1453- }
1428+ assert (TRI->getSubRegIdxSize (SubRegIdx) == RISCV::RVVBitsPerBlock * LMul &&
1429+ " unexpected subreg index of tuple register class" );
1430+ return true ;
14541431}
14551432
14561433static bool isSegmentedStoreInstr (const MachineInstr &MI) {
0 commit comments