@@ -360,7 +360,7 @@ class UDot2Pat<Instruction Inst> : GCNPat <
360
360
(and i32:$src1, (i32 65535)))
361
361
),
362
362
(Inst (i32 8), $src0, (i32 8), $src1, (i32 8), $src2, (i1 0))> {
363
- let SubtargetPredicate = !cast<VOP_Pseudo>(Inst).SubtargetPredicate ;
363
+ let Predicates = !cast<VOP_Pseudo>(Inst).Predicates ;
364
364
}
365
365
366
366
class SDot2Pat<Instruction Inst> : GCNPat <
@@ -369,40 +369,35 @@ class SDot2Pat<Instruction Inst> : GCNPat <
369
369
(AMDGPUmul_i24_oneuse (sext_inreg i32:$src0, i16),
370
370
(sext_inreg i32:$src1, i16))),
371
371
(Inst (i32 8), $src0, (i32 8), $src1, (i32 8), $src2, (i1 0))> {
372
- let SubtargetPredicate = !cast<VOP_Pseudo>(Inst).SubtargetPredicate ;
372
+ let Predicates = !cast<VOP_Pseudo>(Inst).Predicates ;
373
373
}
374
374
375
375
let IsDOT = 1 in {
376
- let SubtargetPredicate = HasDot2Insts in {
377
-
376
+ let OtherPredicates = [HasDot2Insts] in {
378
377
defm V_DOT2_I32_I16 : VOP3PInst<"v_dot2_i32_i16",
379
378
VOP3P_Profile<VOP_I32_V2I16_V2I16_I32>, int_amdgcn_sdot2, 1>;
380
379
defm V_DOT2_U32_U16 : VOP3PInst<"v_dot2_u32_u16",
381
380
VOP3P_Profile<VOP_I32_V2I16_V2I16_I32>, int_amdgcn_udot2, 1>;
381
+ } // End OtherPredicates = [HasDot2Insts]
382
382
383
- } // End SubtargetPredicate = HasDot2Insts
384
-
385
- let SubtargetPredicate = HasDot10Insts in
383
+ let OtherPredicates = [HasDot10Insts] in
386
384
defm V_DOT2_F32_F16 : VOP3PInst<"v_dot2_f32_f16",
387
385
VOP3P_Profile<VOP_F32_V2F16_V2F16_F32, VOP3_REGULAR, /*HasDPP*/ 1>,
388
386
AMDGPUfdot2, 1/*ExplicitClamp*/>;
389
387
390
- let SubtargetPredicate = HasDot7Insts in {
388
+ let OtherPredicates = [ HasDot7Insts] in {
391
389
defm V_DOT4_U32_U8 : VOP3PInst<"v_dot4_u32_u8",
392
390
VOP3P_Profile<VOP_I32_I32_I32_I32, VOP3_PACKED>, int_amdgcn_udot4, 1>;
393
391
defm V_DOT8_U32_U4 : VOP3PInst<"v_dot8_u32_u4",
394
392
VOP3P_Profile<VOP_I32_I32_I32_I32, VOP3_PACKED>, int_amdgcn_udot8, 1>;
393
+ } // End OtherPredicates = [HasDot7Insts]
395
394
396
- } // End SubtargetPredicate = HasDot7Insts
397
-
398
- let SubtargetPredicate = HasDot1Insts in {
399
-
395
+ let OtherPredicates = [HasDot1Insts] in {
400
396
defm V_DOT4_I32_I8 : VOP3PInst<"v_dot4_i32_i8",
401
397
VOP3P_Profile<VOP_I32_I32_I32_I32, VOP3_PACKED>, int_amdgcn_sdot4, 1>;
402
398
defm V_DOT8_I32_I4 : VOP3PInst<"v_dot8_i32_i4",
403
399
VOP3P_Profile<VOP_I32_I32_I32_I32, VOP3_PACKED>, int_amdgcn_sdot8, 1>;
404
-
405
- } // End SubtargetPredicate = HasDot1Insts
400
+ } // End OtherPredicates = [HasDot1Insts]
406
401
407
402
def DOT2_BF16_Profile
408
403
: VOP3P_Profile<VOP_F32_V2I16_V2I16_F32, VOP3_REGULAR, /*HasDPP*/ 1> {
@@ -456,14 +451,14 @@ def : UDot2Pat<V_DOT2_U32_U16>;
456
451
def : SDot2Pat<V_DOT2_I32_I16>;
457
452
458
453
foreach Type = ["U", "I"] in
459
- let SubtargetPredicate = !cast<VOP_Pseudo>("V_DOT4_"#Type#"32_"#Type#8).SubtargetPredicate in
454
+ let Predicates = !cast<VOP_Pseudo>("V_DOT4_"#Type#"32_"#Type#8).Predicates in
460
455
def : GCNPat <
461
456
!cast<dag>(!foldl((i32 i32:$src2), [0, 1, 2, 3], lhs, y,
462
457
(add_oneuse lhs, (!cast<PatFrag>("Mul"#Type#"_Elt"#y) i32:$src0, i32:$src1)))),
463
458
(!cast<VOP3P_Pseudo>("V_DOT4_"#Type#"32_"#Type#8) (i32 8), $src0, (i32 8), $src1, (i32 8), $src2, (i1 0))>;
464
459
465
460
foreach Type = ["U", "I"] in
466
- let SubtargetPredicate = !cast<VOP_Pseudo>("V_DOT8_"#Type#"32_"#Type#4).SubtargetPredicate in
461
+ let Predicates = !cast<VOP_Pseudo>("V_DOT8_"#Type#"32_"#Type#4).Predicates in
467
462
def : GCNPat <
468
463
!cast<dag>(!foldl((add_oneuse i32:$src2, (!cast<PatFrag>("Mul"#Type#"0_4bit") i32:$src0, i32:$src1)),
469
464
[1, 2, 3, 4, 5, 6, 7], lhs, y,
@@ -473,7 +468,7 @@ foreach Type = ["U", "I"] in
473
468
// Different variants of dot8 code-gen dag patterns are not generated through table-gen due to a huge increase
474
469
// in the compile time. Directly handle the pattern generated by the FE here.
475
470
foreach Type = ["U", "I"] in
476
- let SubtargetPredicate = !cast<VOP_Pseudo>("V_DOT8_"#Type#"32_"#Type#4).SubtargetPredicate in
471
+ let Predicates = !cast<VOP_Pseudo>("V_DOT8_"#Type#"32_"#Type#4).Predicates in
477
472
def : GCNPat <
478
473
!cast<dag>(!foldl((add_oneuse i32:$src2, (!cast<PatFrag>("Mul"#Type#"0_4bit") i32:$src0, i32:$src1)),
479
474
[7, 1, 2, 3, 4, 5, 6], lhs, y,
@@ -1128,25 +1123,22 @@ defm V_PK_ADD_F16 : VOP3P_Real_vi <0x0f>;
1128
1123
defm V_PK_MUL_F16 : VOP3P_Real_vi <0x10>;
1129
1124
defm V_PK_MIN_F16 : VOP3P_Real_vi <0x11>;
1130
1125
defm V_PK_MAX_F16 : VOP3P_Real_vi <0x12>;
1131
- } // End SubtargetPredicate = isGFX8GFX9
1132
1126
1133
- let SubtargetPredicate = HasMadMixInsts in {
1127
+ let OtherPredicates = [ HasMadMixInsts] in {
1134
1128
defm V_MAD_MIX_F32 : VOP3P_Real_vi <0x20>;
1135
1129
defm V_MAD_MIXLO_F16 : VOP3P_Real_vi <0x21>;
1136
1130
defm V_MAD_MIXHI_F16 : VOP3P_Real_vi <0x22>;
1137
1131
}
1138
1132
1139
- let SubtargetPredicate = HasFmaMixInsts in {
1140
- let DecoderNamespace = "GFX9_DL" in {
1133
+ let OtherPredicates = [ HasFmaMixInsts],
1134
+ DecoderNamespace = "GFX9_DL" in {
1141
1135
// The mad_mix instructions were renamed and their behaviors changed,
1142
1136
// but the opcode stayed the same so we need to put these in a
1143
1137
// different DecoderNamespace to avoid the ambiguity.
1144
1138
defm V_FMA_MIX_F32 : VOP3P_Real_vi <0x20>;
1145
1139
defm V_FMA_MIXLO_F16 : VOP3P_Real_vi <0x21>;
1146
1140
defm V_FMA_MIXHI_F16 : VOP3P_Real_vi <0x22>;
1147
1141
}
1148
- }
1149
-
1150
1142
1151
1143
defm V_DOT2_I32_I16 : VOP3P_Real_vi <0x26>;
1152
1144
defm V_DOT2_U32_U16 : VOP3P_Real_vi <0x27>;
@@ -1157,6 +1149,7 @@ defm V_DOT8_U32_U4 : VOP3P_Real_vi <0x2b>;
1157
1149
1158
1150
defm V_DOT4_I32_I8 : VOP3P_Real_vi <0x28>;
1159
1151
defm V_DOT8_I32_I4 : VOP3P_Real_vi <0x2a>;
1152
+ } // End SubtargetPredicate = isGFX8GFX9
1160
1153
1161
1154
let OtherPredicates = [HasMAIInsts] in {
1162
1155
0 commit comments