@@ -557,11 +557,11 @@ multiclass VOP3PDOTIUInst <string OpName, SDPatternOperator intrinsic_node> {
557557 null_frag, 1>;
558558 // Dot-iu instructions consider input as signed if imod neg bits are set. Thus
559559 // Dot-iu Intrinsics have extra operands and require separate codegen pattern.
560- def : GCNPat < (intrinsic_node (VOP3PModsNeg i32 :$src0_mods) , i32:$src0,
561- (VOP3PModsNeg i32 :$src1_mods) , i32:$src1,
560+ def : GCNPat < (intrinsic_node timm :$src0_mods, i32:$src0,
561+ timm :$src1_mods, i32:$src1,
562562 i32:$src2, (i1 timm:$clamp)),
563- (!cast<Instruction>(NAME) $src0_mods, i32:$src0,
564- $src1_mods, i32:$src1,
563+ (!cast<Instruction>(NAME) (VOP3PModsNeg $src0_mods) , i32:$src0,
564+ (VOP3PModsNeg $src1_mods) , i32:$src1,
565565 (i32 8), i32:$src2, i1:$clamp)
566566 >;
567567}
@@ -1302,11 +1302,11 @@ class WMMAOpSelPat<Instruction Inst, SDPatternOperator node, VOPProfile P> :
13021302
13031303class WMMAUIClampPat<Instruction Inst, SDPatternOperator node, VOPProfile P> :
13041304 GCNPat < (P.DstVT (node
1305- (VOP3PModsNeg i32 :$src0_modifiers) , (P.Src0VT P.Src0VT:$src0),
1306- (VOP3PModsNeg i32 :$src1_modifiers) , (P.Src1VT P.Src1VT:$src1),
1305+ timm :$src0_modifiers, (P.Src0VT P.Src0VT:$src0),
1306+ timm :$src1_modifiers, (P.Src1VT P.Src1VT:$src1),
13071307 (P.Src2VT P.Src2VT:$src2), (i1 timm:$clamp)
13081308 )),
1309- (P.DstVT (Inst i32: $src0_modifiers, P.Src0VT:$src0, i32: $src1_modifiers, P.Src1VT:$src1, (i32 8), P.Src2VT:$src2, i1:$clamp))
1309+ (P.DstVT (Inst (VOP3PModsNeg $src0_modifiers) , P.Src0VT:$src0, (VOP3PModsNeg $src1_modifiers) , P.Src1VT:$src1, (i32 8), P.Src2VT:$src2, i1:$clamp))
13101310>;
13111311
13121312class WMMAOpcodeMapping<Instruction TwoAddr, Instruction ThreeAddr> {
@@ -1563,44 +1563,44 @@ class VOP3PWMMA_Profile<list<ValueType> ArgTy, bit _IsSWMMAC, int _IndexType,
15631563 bit IsAB_F16_IMod0 = !and(IsAB_F16, !not(HasIModOp));
15641564 bit IsAB_F32F64_IMod1 = !and(!or(IsAB_F64, IsAB_F32), HasIModOp);
15651565 bit IsAB_F16BF16_IMod1 = !and(!or(IsAB_F16, IsAB_BF16), HasIModOp);
1566- dag Src0InPat = !cond(IsAB_F32F64_IMod1 : (ins (VOP3PModsNeg i32 :$src0_modifiers) , Src0VT:$src0),
1567- IsAB_F16BF16_IMod1 : (ins (VOP3PModsNegs i32 :$src0_modifiers) , Src0VT:$src0),
1566+ dag Src0InPat = !cond(IsAB_F32F64_IMod1 : (ins timm :$src0_modifiers, Src0VT:$src0),
1567+ IsAB_F16BF16_IMod1 : (ins timm :$src0_modifiers, Src0VT:$src0),
15681568 IsAB_F16_IMod0 : (ins (Src0VT (WMMAModsF16Neg Src0VT:$src0, i32:$src0_modifiers))),
15691569 IsAB_BF16_IMod0 : (ins Src0VT:$src0),
1570- IsIU : (ins (VOP3PModsNeg i32 :$src0_modifiers) , Src0VT:$src0),
1570+ IsIU : (ins timm :$src0_modifiers, Src0VT:$src0),
15711571 HasMatrixFMT : (ins timm:$matrix_a_fmt, Src0VT:$src0),
15721572 NoABMods : (ins Src0VT:$src0));
1573- dag Src0OutPat = !cond(IsAB_F32F64_IMod1 : (ins i32: $src0_modifiers, Src0VT:$src0),
1574- IsAB_F16BF16_IMod1 : (ins i32: $src0_modifiers, Src0VT:$src0),
1573+ dag Src0OutPat = !cond(IsAB_F32F64_IMod1 : (ins (VOP3PModsNeg $src0_modifiers) , Src0VT:$src0),
1574+ IsAB_F16BF16_IMod1 : (ins (VOP3PModsNegs $src0_modifiers) , Src0VT:$src0),
15751575 IsAB_F16_IMod0 : (ins i32:$src0_modifiers, Src0VT:$src0),
15761576 IsAB_BF16_IMod0 : (ins (i32 8), Src0VT:$src0),
1577- IsIU : (ins i32: $src0_modifiers, Src0VT:$src0),
1577+ IsIU : (ins (VOP3PModsNeg $src0_modifiers) , Src0VT:$src0),
15781578 NoABMods : (ins Src0VT:$src0));
1579- dag Src1InPat = !cond(IsAB_F32F64_IMod1 : (ins (VOP3PModsNeg i32 :$src1_modifiers) , Src1VT:$src1),
1580- IsAB_F16BF16_IMod1 : (ins (VOP3PModsNegs i32 :$src1_modifiers) , Src1VT:$src1),
1579+ dag Src1InPat = !cond(IsAB_F32F64_IMod1 : (ins timm :$src1_modifiers, Src1VT:$src1),
1580+ IsAB_F16BF16_IMod1 : (ins timm :$src1_modifiers, Src1VT:$src1),
15811581 IsAB_F16_IMod0 : (ins (Src1VT (WMMAModsF16Neg Src1VT:$src1, i32:$src1_modifiers))),
15821582 IsAB_BF16_IMod0 : (ins Src1VT:$src1),
1583- IsIU : (ins (VOP3PModsNeg i32 :$src1_modifiers) , Src1VT:$src1),
1583+ IsIU : (ins timm :$src1_modifiers, Src1VT:$src1),
15841584 HasMatrixFMT : (ins timm:$matrix_b_fmt, Src1VT:$src1),
15851585 NoABMods : (ins Src1VT:$src1));
1586- dag Src1OutPat = !cond(IsAB_F32F64_IMod1 : (ins i32: $src1_modifiers, Src1VT:$src1),
1587- IsAB_F16BF16_IMod1 : (ins i32: $src1_modifiers, Src1VT:$src1),
1586+ dag Src1OutPat = !cond(IsAB_F32F64_IMod1 : (ins (VOP3PModsNeg $src1_modifiers) , Src1VT:$src1),
1587+ IsAB_F16BF16_IMod1 : (ins (VOP3PModsNegs $src1_modifiers) , Src1VT:$src1),
15881588 IsAB_F16_IMod0 : (ins i32:$src1_modifiers, Src1VT:$src1),
15891589 IsAB_BF16_IMod0 : (ins (i32 8), Src1VT:$src1),
1590- IsIU : (ins i32: $src1_modifiers, Src1VT:$src1),
1590+ IsIU : (ins (VOP3PModsNeg $src1_modifiers) , Src1VT:$src1),
15911591 NoABMods : (ins Src1VT:$src1));
15921592 bit IsC_IMod1 = !and(HasIModOp, IsWMMA, !not(IsIU), !not(IsXF32));
15931593 bit IsC_F32_IMod0 = !and(IsC_F32, !not(HasIModOp));
15941594 bit IsC_F16_IMod0 = !and(IsC_F16, !not(HasIModOp));
15951595 bit IsC_BF16_IMod0 = !and(IsC_BF16, !not(HasIModOp));
15961596 bit IsIUXF32 = !or(IsIU, IsXF32);
1597- dag Src2InPatWmma = !cond(IsC_IMod1 : (ins (VOP3PModsNegAbs i32 :$src2_modifiers) , Src2VT:$src2),
1597+ dag Src2InPatWmma = !cond(IsC_IMod1 : (ins timm :$src2_modifiers, Src2VT:$src2),
15981598 IsC_F32_IMod0 : (ins (Src2VT (WMMAModsF32NegAbs Src2VT:$src2, i32:$src2_modifiers))),
15991599 IsC_F16_IMod0 : (ins (Src2VT (WMMAModsF16NegAbs Src2VT:$src2, i32:$src2_modifiers))),
16001600 IsC_BF16_IMod0 : (ins Src2VT:$src2),
16011601 IsIUXF32 : (ins Src2VT:$src2),
16021602 IsSWMMAC : (ins));
1603- dag Src2OutPatWmma = !cond(IsC_IMod1 : (ins i32: $src2_modifiers, Src2VT:$src2),
1603+ dag Src2OutPatWmma = !cond(IsC_IMod1 : (ins (VOP3PModsNegAbs $src2_modifiers) , Src2VT:$src2),
16041604 IsC_F32_IMod0 : (ins i32:$src2_modifiers, Src2VT:$src2),
16051605 IsC_F16_IMod0 : (ins i32:$src2_modifiers, Src2VT:$src2),
16061606 IsC_BF16_IMod0 : (ins (i32 8), Src2VT:$src2),
@@ -1616,8 +1616,8 @@ class VOP3PWMMA_Profile<list<ValueType> ArgTy, bit _IsSWMMAC, int _IndexType,
16161616 !eq(IndexType, 16): (ins i32:$src2, i32:$index_key_16bit),
16171617 !eq(IndexType, 32): (ins i64:$src2, i32:$index_key_32bit));
16181618 dag MatrixFMTOutPat = !if(HasMatrixFMT, (ins i32:$matrix_a_fmt, i32:$matrix_b_fmt), (ins));
1619- dag Src2InlineInPat = !con(!if(IsC_IMod1, (ins (VOP3PModsNegAbs i32 :$src2_modifiers) ), (ins)), (ins (Src2VT (WMMAVISrc Src2VT:$src2))));
1620- dag Src2InlineOutPat = !con(!if(IsIUXF32, (ins), !if(IsC_IMod1, (ins i32: $src2_modifiers), (ins (i32 8)))), (ins Src2VT:$src2));
1619+ dag Src2InlineInPat = !con(!if(IsC_IMod1, (ins timm :$src2_modifiers), (ins)), (ins (Src2VT (WMMAVISrc Src2VT:$src2))));
1620+ dag Src2InlineOutPat = !con(!if(IsIUXF32, (ins), !if(IsC_IMod1, (ins (VOP3PModsNegAbs $src2_modifiers) ), (ins (i32 8)))), (ins Src2VT:$src2));
16211621 dag MatrixScaleInPat = !if(HasMatrixScale, (ins timm:$matrix_a_scale, timm:$matrix_a_scale_fmt, ScaleTy:$scale_src0,
16221622 timm:$matrix_b_scale, timm:$matrix_b_scale_fmt, ScaleTy:$scale_src1),
16231623 (ins));
0 commit comments