@@ -11147,6 +11147,7 @@ SDValue PPCTargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op,
1114711147 }
1114811148
1114911149 case Intrinsic::ppc_mma_dmxxextfdmr512: {
11150+ assert(Subtarget.isISAFuture() && "dmxxextfdmr512 requires ISA Future");
1115011151 auto *Idx = dyn_cast<ConstantSDNode>(Op.getOperand(2));
1115111152 assert(Idx && (Idx->getSExtValue() == 0 || Idx->getSExtValue() == 1) &&
1115211153 "Specify P of 0 or 1 for lower or upper 512 bytes");
@@ -11170,28 +11171,39 @@ SDValue PPCTargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op,
1117011171 }
1117111172
1117211173 case Intrinsic::ppc_mma_dmxxextfdmr256: {
11174+ assert(Subtarget.isISAFuture() && "dmxxextfdmr256 requires ISA Future");
1117311175 auto *Idx = dyn_cast<ConstantSDNode>(Op.getOperand(2));
1117411176 assert(Idx && (Idx->getSExtValue() >= 0 || Idx->getSExtValue() <= 3) &&
1117511177 "Specify a dmr row pair 0-3");
1117611178 unsigned IdxVal = Idx->getSExtValue();
11177- unsigned Pairx ;
11179+ unsigned Subx ;
1117811180 switch (IdxVal) {
11179- case 0: Pairx = PPC::sub_dmrrowp0; break;
11180- case 1: Pairx = PPC::sub_dmrrowp1; break;
11181- case 2: Pairx = PPC::sub_wacc_hi_then_sub_dmrrowp0; break;
11182- case 3: Pairx = PPC::sub_wacc_hi_then_sub_dmrrowp1; break;
11181+ case 0:
11182+ Subx = PPC::sub_dmrrowp0;
11183+ break;
11184+ case 1:
11185+ Subx = PPC::sub_dmrrowp1;
11186+ break;
11187+ case 2:
11188+ Subx = PPC::sub_wacc_hi_then_sub_dmrrowp0;
11189+ break;
11190+ case 3:
11191+ Subx = PPC::sub_wacc_hi_then_sub_dmrrowp1;
11192+ break;
1118311193 }
11184- SDValue Pair (
11194+ SDValue Subreg (
1118511195 DAG.getMachineNode(TargetOpcode::EXTRACT_SUBREG, dl, MVT::v256i1,
1118611196 Op.getOperand(1),
11187- DAG.getTargetConstant(Pairx , dl, MVT::i32)),
11197+ DAG.getTargetConstant(Subx , dl, MVT::i32)),
1118811198 0);
11189- SDValue C = DAG.getTargetConstant(IdxVal, dl, MVT::i32);
11199+ SDValue P = DAG.getTargetConstant(IdxVal, dl, MVT::i32);
1119011200 return SDValue(
11191- DAG.getMachineNode(PPC::DMXXEXTFDMR256, dl, MVT::v256i1, {Pair, C}), 0);
11201+ DAG.getMachineNode(PPC::DMXXEXTFDMR256, dl, MVT::v256i1, {Subreg, P}),
11202+ 0);
1119211203 }
1119311204
1119411205 case Intrinsic::ppc_mma_dmxxinstdmr512: {
11206+ assert(Subtarget.isISAFuture() && "dmxxinstdmr512 requires ISA Future");
1119511207 auto *Idx = dyn_cast<ConstantSDNode>(Op.getOperand(4));
1119611208 assert(Idx && (Idx->getSExtValue() == 0 || Idx->getSExtValue() == 1) &&
1119711209 "Specify P of 0 or 1 for lower or upper 512 bytes");
@@ -11205,41 +11217,43 @@ SDValue PPCTargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op,
1120511217 Opcode = PPC::DMXXINSTDMR512_HI;
1120611218 Subx = PPC::sub_wacc_hi;
1120711219 }
11208- SDValue Ops[] = { Op.getOperand(2), Op.getOperand(3) };
11209- SDValue WideVec =
11210- SDValue(DAG.getMachineNode(Opcode, dl, MVT::v512i1, Ops), 0);
11220+ SDValue Ops[] = {Op.getOperand(2), Op.getOperand(3)};
11221+ SDValue Wacc = SDValue(DAG.getMachineNode(Opcode, dl, MVT::v512i1, Ops), 0);
1121111222 SDValue SubReg = DAG.getTargetConstant(Subx, dl, MVT::i32);
11212- return
11213- SDValue(DAG.getMachineNode(PPC::INSERT_SUBREG, dl,
11214- MVT::v1024i1, Op.getOperand(1), WideVec,
11215- SubReg),
11216- 0);
11223+ return SDValue(DAG.getMachineNode(PPC::INSERT_SUBREG, dl, MVT::v1024i1,
11224+ Op.getOperand(1), Wacc, SubReg),
11225+ 0);
1121711226 }
1121811227
1121911228 case Intrinsic::ppc_mma_dmxxinstdmr256: {
11229+ assert(Subtarget.isISAFuture() && "dmxxinstdmr256 requires ISA Future");
1122011230 auto *Idx = dyn_cast<ConstantSDNode>(Op.getOperand(3));
1122111231 assert(Idx && (Idx->getSExtValue() >= 0 || Idx->getSExtValue() <= 3) &&
1122211232 "Specify a dmr row pair 0-3");
1122311233 unsigned IdxVal = Idx->getSExtValue();
11224- unsigned Pairx;
1122511234 unsigned Subx;
1122611235 switch (IdxVal) {
11227- case 0: Subx = PPC::sub_dmrrowp0; break;
11228- case 1: Subx = PPC::sub_dmrrowp1; break;
11229- case 2: Subx = PPC::sub_wacc_hi_then_sub_dmrrowp0; break;
11230- case 3: Subx = PPC::sub_wacc_hi_then_sub_dmrrowp1; break;
11236+ case 0:
11237+ Subx = PPC::sub_dmrrowp0;
11238+ break;
11239+ case 1:
11240+ Subx = PPC::sub_dmrrowp1;
11241+ break;
11242+ case 2:
11243+ Subx = PPC::sub_wacc_hi_then_sub_dmrrowp0;
11244+ break;
11245+ case 3:
11246+ Subx = PPC::sub_wacc_hi_then_sub_dmrrowp1;
11247+ break;
1123111248 }
1123211249 SDValue SubReg = DAG.getTargetConstant(Subx, dl, MVT::i32);
11233- SDValue C = DAG.getTargetConstant(IdxVal, dl, MVT::i32);
11234- SDValue Ops[] = { Op.getOperand(2), C };
11235- SDValue WideVec =
11236- SDValue(DAG.getMachineNode(PPC::DMXXINSTDMR256, dl, MVT::v512i1, Ops),
11237- 0);
11238- return
11239- SDValue(DAG.getMachineNode(PPC::INSERT_SUBREG, dl,
11240- MVT::v1024i1, Op.getOperand(1), WideVec,
11241- SubReg),
11242- 0);
11250+ SDValue P = DAG.getTargetConstant(IdxVal, dl, MVT::i32);
11251+ SDValue Ops[] = {Op.getOperand(2), P};
11252+ SDValue DMRRowp = SDValue(
11253+ DAG.getMachineNode(PPC::DMXXINSTDMR256, dl, MVT::v256i1, Ops), 0);
11254+ return SDValue(DAG.getMachineNode(PPC::INSERT_SUBREG, dl, MVT::v1024i1,
11255+ Op.getOperand(1), DMRRowp, SubReg),
11256+ 0);
1124311257 }
1124411258
1124511259 case Intrinsic::ppc_mma_xxmfacc:
0 commit comments