@@ -1321,3 +1321,87 @@ bool AIE2InstrInfo::canHoistCheapInst(const MachineInstr &MI) const {
13211321 AIE2::eSRegClass.hasSubClassEq (
13221322 MRI.getRegClass (MI.getOperand (0 ).getReg ()));
13231323}
1324+
1325+ std::optional<const AIEBaseInstrInfo::VConcatOpInfo>
1326+ AIE2InstrInfo::getVConcatOpInfo (const MachineInstr &MI) const {
1327+
1328+ std::optional<const AIEBaseInstrInfo::VConcatOpInfo> BaseOpInfo =
1329+ AIEBaseInstrInfo::getVConcatOpInfo (MI);
1330+
1331+ if (BaseOpInfo)
1332+ return BaseOpInfo;
1333+
1334+ if (MI.getOpcode () != TargetOpcode::G_INTRINSIC)
1335+ return std::nullopt ;
1336+
1337+ const GIntrinsic &GMI = cast<const GIntrinsic>(MI);
1338+
1339+ switch (GMI.getIntrinsicID ()) {
1340+ case Intrinsic::aie2_concat_I512_I256:
1341+ case Intrinsic::aie2_concat_I1024_I512:
1342+ case Intrinsic::aie2_concat_I1024_I256:
1343+
1344+ case Intrinsic::aie2_concat_bf512_bf256:
1345+ case Intrinsic::aie2_concat_bf1024_bf512:
1346+ case Intrinsic::aie2_concat_bf1024_bf256:
1347+
1348+ case Intrinsic::aie2_concat_512_256_acc:
1349+ case Intrinsic::aie2_concat_1024_512_acc:
1350+ case Intrinsic::aie2_concat_1024_256_acc:
1351+ return VConcatOpInfo{2 , 1 };
1352+ default :
1353+ return std::nullopt ;
1354+ }
1355+ }
1356+
1357+ std::optional<const AIEBaseInstrInfo::VUpdateOpInfo>
1358+ AIE2InstrInfo::getVUpdateOpInfo (const MachineInstr &MI) const {
1359+
1360+ if (MI.getOpcode () != TargetOpcode::G_INTRINSIC)
1361+ return std::nullopt ;
1362+
1363+ const GIntrinsic &GMI = cast<const GIntrinsic>(MI);
1364+
1365+ switch (GMI.getIntrinsicID ()) {
1366+ case Intrinsic::aie2_upd_I512_I256:
1367+ case Intrinsic::aie2_upd_I1024_I512:
1368+ case Intrinsic::aie2_upd_I1024_I256:
1369+
1370+ case Intrinsic::aie2_upd_bf512_bf256:
1371+ case Intrinsic::aie2_upd_bf1024_bf512:
1372+ case Intrinsic::aie2_upd_bf1024_bf256:
1373+
1374+ case Intrinsic::aie2_upd_512_256_acc:
1375+ case Intrinsic::aie2_upd_1024_512_acc:
1376+ case Intrinsic::aie2_upd_1024_256_acc:
1377+ return VUpdateOpInfo{2 , 3 , 4 };
1378+ default :
1379+ return std::nullopt ;
1380+ }
1381+ }
1382+
1383+ std::optional<const AIEBaseInstrInfo::VExtractOpInfo>
1384+ AIE2InstrInfo::getVExtractOpInfo (const MachineInstr &MI) const {
1385+
1386+ if (MI.getOpcode () != TargetOpcode::G_INTRINSIC)
1387+ return std::nullopt ;
1388+
1389+ const GIntrinsic &GMI = cast<const GIntrinsic>(MI);
1390+
1391+ switch (GMI.getIntrinsicID ()) {
1392+ case Intrinsic::aie2_ext_I256_I512:
1393+ case Intrinsic::aie2_ext_I512_I1024:
1394+ case Intrinsic::aie2_ext_I256_I1024:
1395+
1396+ case Intrinsic::aie2_ext_bf256_bf512:
1397+ case Intrinsic::aie2_ext_bf512_bf1024:
1398+ case Intrinsic::aie2_ext_bf256_bf1024:
1399+
1400+ case Intrinsic::aie2_ext_256_512_acc:
1401+ case Intrinsic::aie2_ext_512_1024_acc:
1402+ case Intrinsic::aie2_ext_256_1024_acc:
1403+ return VExtractOpInfo{2 , 3 };
1404+ default :
1405+ return std::nullopt ;
1406+ }
1407+ }
0 commit comments