@@ -714,6 +714,26 @@ class VOP2e_SGPR<list<ValueType> ArgVT> : VOPProfile<ArgVT> {
714
714
def VOP2e_I32_I32_I32_I1 : VOP2e_SGPR<[i32, i32, i32, i1]>;
715
715
def VOP2e_I16_I16_I16_I1 : VOP2e_SGPR<[i16, i16, i16, i1]>;
716
716
// 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
+ }
717
737
def VOP2e_I16_I16_I16_I1_fake16 : VOP2e_SGPR<[i16, i16, i16, i1]> {
718
738
let IsTrue16 = 1;
719
739
let DstRC64 = getVALUDstForVT<DstVT>.ret;
@@ -765,8 +785,10 @@ def VOP_WRITELANE : VOPProfile<[i32, i32, i32, i32]> {
765
785
// VOP2 Instructions
766
786
//===----------------------------------------------------------------------===//
767
787
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>;
770
792
defm V_CNDMASK_B32 : VOP2eInst_VOPD <"v_cndmask_b32", VOP2e_I32_I32_I32_I1, 0x9, "v_cndmask_b32">;
771
793
let SubtargetPredicate = HasMadMacF32Insts, isReMaterializable = 1 in
772
794
def 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
1846
1868
defm V_FMAAK_F16 : VOP2Only_Real_MADK_t16_and_fake16_gfx11_gfx12<0x038, "v_fmaak_f16">;
1847
1869
1848
1870
// 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" >;
1850
1872
defm V_LDEXP_F32 : VOP3Only_Realtriple_gfx11_gfx12<0x31c>;
1851
1873
defm V_BFM_B32 : VOP3Only_Realtriple_gfx11_gfx12<0x31d>;
1852
1874
defm V_BCNT_U32_B32 : VOP3Only_Realtriple_gfx11_gfx12<0x31e>;
0 commit comments