@@ -714,6 +714,26 @@ class VOP2e_SGPR<list<ValueType> ArgVT> : VOPProfile<ArgVT> {
714714def VOP2e_I32_I32_I32_I1 : VOP2e_SGPR<[i32, i32, i32, i1]>;
715715def VOP2e_I16_I16_I16_I1 : VOP2e_SGPR<[i16, i16, i16, i1]>;
716716// V_CNDMASK_B16 is VOP3 only
717+ def VOP2e_I16_I16_I16_I1_true16 : VOP2e_SGPR<[i16, i16, i16, i1]> {
718+ let IsTrue16 = 1;
719+ let IsRealTrue16 = 1;
720+ let HasOpSel = 1;
721+ let DstRC64 = getVALUDstForVT<DstVT, 1, 1>.ret;
722+ let Src0RC64 = getVOP3SrcForVT<Src0VT, 1/*IsTrue16*/>.ret;
723+ let Src1RC64 = getVOP3SrcForVT<Src1VT, 1/*IsTrue16*/>.ret;
724+ let Src2RC64 = getVOP3SrcForVT<Src2VT, 1/*IsTrue16*/>.ret;
725+ let Src0Mod = getSrc0Mod<f16, DstVT, 1/*IsTrue16*/, 0/*IsFake16*/>.ret;
726+ let Src1Mod = getSrcMod<f16, 1/*IsTrue16*/, 0/*IsFake16*/>.ret;
727+ let HasSrc2Mods = 0;
728+ let InsVOP3OpSel = getInsVOP3Base<Src0RC64, Src1RC64,
729+ Src2RC64, NumSrcArgs,
730+ HasClamp, 1/*HasModifiers*/, 0/*HasSrc2Mods*/, HasOMod,
731+ Src0Mod, Src1Mod, Src2Mod, 1/*HasOpSel*/>.ret;
732+ let Src0VOP3DPP = VGPRSrc_16;
733+ let Src1VOP3DPP = getVOP3DPPSrcForVT<Src1VT, 0/*IsFake16*/>.ret;
734+ let Src0ModVOP3DPP = getSrc0ModVOP3DPP<f16, DstVT, 0/*IsFake16*/>.ret;
735+ let Src1ModVOP3DPP = getSrcModVOP3DPP<f16, 0/*IsFake16*/>.ret;
736+ }
717737def VOP2e_I16_I16_I16_I1_fake16 : VOP2e_SGPR<[i16, i16, i16, i1]> {
718738 let IsTrue16 = 1;
719739 let DstRC64 = getVALUDstForVT<DstVT>.ret;
@@ -765,8 +785,10 @@ def VOP_WRITELANE : VOPProfile<[i32, i32, i32, i32]> {
765785// VOP2 Instructions
766786//===----------------------------------------------------------------------===//
767787
768- let SubtargetPredicate = isGFX11Plus in
769- defm V_CNDMASK_B16 : VOP2eInst <"v_cndmask_b16", VOP2e_I16_I16_I16_I1_fake16>;
788+ let SubtargetPredicate = isGFX11Plus, True16Predicate = UseRealTrue16Insts in
789+ defm V_CNDMASK_B16_t16 : VOP2eInst <"v_cndmask_b16_t16", VOP2e_I16_I16_I16_I1_true16>;
790+ let SubtargetPredicate = isGFX11Plus, True16Predicate = UseFakeTrue16Insts in
791+ defm V_CNDMASK_B16_fake16 : VOP2eInst <"v_cndmask_b16_fake16", VOP2e_I16_I16_I16_I1_fake16>;
770792defm V_CNDMASK_B32 : VOP2eInst_VOPD <"v_cndmask_b32", VOP2e_I32_I32_I32_I1, 0x9, "v_cndmask_b32">;
771793let SubtargetPredicate = HasMadMacF32Insts, isReMaterializable = 1 in
772794def V_MADMK_F32 : VOP2_Pseudo <"v_madmk_f32", VOP_MADMK_F32, []>;
@@ -1846,7 +1868,7 @@ defm V_FMAMK_F16 : VOP2Only_Real_MADK_t16_and_fake16_gfx11_gfx12<0x037
18461868defm V_FMAAK_F16 : VOP2Only_Real_MADK_t16_and_fake16_gfx11_gfx12<0x038, "v_fmaak_f16">;
18471869
18481870// VOP3 only.
1849- defm V_CNDMASK_B16 : VOP3Only_Realtriple_gfx11_gfx12 <0x25d>;
1871+ defm V_CNDMASK_B16 : VOP3Only_Realtriple_t16_and_fake16_gfx11_gfx12 <0x25d, "v_cndmask_b16" >;
18501872defm V_LDEXP_F32 : VOP3Only_Realtriple_gfx11_gfx12<0x31c>;
18511873defm V_BFM_B32 : VOP3Only_Realtriple_gfx11_gfx12<0x31d>;
18521874defm V_BCNT_U32_B32 : VOP3Only_Realtriple_gfx11_gfx12<0x31e>;
0 commit comments