@@ -111,25 +111,6 @@ static bool isSMovRel(unsigned Opcode) {
111
111
}
112
112
}
113
113
114
- static bool isDGEMM (unsigned Opcode) {
115
- return AMDGPU::getMAIIsDGEMM (Opcode);
116
- }
117
-
118
- static bool isXDL (const GCNSubtarget &ST, const MachineInstr &MI) {
119
- unsigned Opcode = MI.getOpcode ();
120
-
121
- if (!SIInstrInfo::isMAI (MI) ||
122
- isDGEMM (Opcode) ||
123
- Opcode == AMDGPU::V_ACCVGPR_WRITE_B32_e64 ||
124
- Opcode == AMDGPU::V_ACCVGPR_READ_B32_e64)
125
- return false ;
126
-
127
- if (!ST.hasGFX940Insts ())
128
- return true ;
129
-
130
- return AMDGPU::getMAIIsGFX940XDL (Opcode);
131
- }
132
-
133
114
static bool isSendMsgTraceDataOrGDS (const SIInstrInfo &TII,
134
115
const MachineInstr &MI) {
135
116
if (TII.isAlwaysGDS (MI.getOpcode ()))
@@ -2375,7 +2356,8 @@ int GCNHazardRecognizer::checkMAIHazards90A(MachineInstr *MI) {
2375
2356
unsigned Opc1 = MI1->getOpcode ();
2376
2357
int NeedWaitStates = 0 ;
2377
2358
if (OpNo == SrcCIdx) {
2378
- if (!isDGEMM (Opc) && (!ST.hasGFX940Insts () && isDGEMM (Opc1))) {
2359
+ if (!SIInstrInfo::isDGEMM (Opc) &&
2360
+ (!ST.hasGFX940Insts () && SIInstrInfo::isDGEMM (Opc1))) {
2379
2361
NeedWaitStates = 0 ;
2380
2362
} else if (FullReg) {
2381
2363
if ((Opc == AMDGPU::V_MFMA_F64_4X4X4F64_e64 ||
@@ -2392,26 +2374,26 @@ int GCNHazardRecognizer::checkMAIHazards90A(MachineInstr *MI) {
2392
2374
case AMDGPU::V_MFMA_F64_16X16X4F64_vgprcd_e64:
2393
2375
case AMDGPU::V_MFMA_F64_16X16X4F64_mac_e64:
2394
2376
case AMDGPU::V_MFMA_F64_16X16X4F64_mac_vgprcd_e64:
2395
- if (!isXDL (ST, *MI))
2377
+ if (!TII. isXDL (*MI))
2396
2378
NeedWaitStates =
2397
2379
ST.hasGFX950Insts ()
2398
2380
? GFX950_DMFMA16x16WritesVGPROverlappedSrcCWaitStates
2399
2381
: DMFMA16x16WritesVGPROverlappedSrcCWaitStates;
2400
2382
break ;
2401
2383
case AMDGPU::V_MFMA_F64_4X4X4F64_e64:
2402
2384
case AMDGPU::V_MFMA_F64_4X4X4F64_vgprcd_e64:
2403
- if (!isXDL (ST, *MI))
2385
+ if (!TII. isXDL (*MI))
2404
2386
NeedWaitStates = DMFMA4x4WritesVGPROverlappedSrcCWaitStates;
2405
2387
break ;
2406
2388
default :
2407
2389
int NumPasses = TSchedModel.computeInstrLatency (MI1);
2408
2390
if (ST.hasGFX940Insts ()) {
2409
- if (isXDL (ST, *MI) && !isXDL (ST, *MI1))
2391
+ if (TII. isXDL (*MI) && !TII. isXDL (*MI1))
2410
2392
break ;
2411
2393
2412
2394
NeedWaitStates =
2413
- isXDL (ST, *MI1)
2414
- ? (isXDL (ST, *MI)
2395
+ TII. isXDL (*MI1)
2396
+ ? (TII. isXDL (*MI)
2415
2397
? GFX940_XDL_N_PassWritesVGPROverlappedXDLOrSMFMASrcCWaitStates (
2416
2398
NumPasses, ST.hasGFX950Insts ())
2417
2399
: GFX940_XDL_N_PassWritesVGPROverlappedSGEMMDGEMMSrcCWaitStates (
@@ -2424,18 +2406,19 @@ int GCNHazardRecognizer::checkMAIHazards90A(MachineInstr *MI) {
2424
2406
switch (NumPasses) {
2425
2407
case 2 :
2426
2408
NeedWaitStates =
2427
- isDGEMM (Opc) ? SMFMA4x4WritesVGPROverlappedDMFMASrcCWaitStates
2428
- : SMFMA4x4WritesVGPROverlappedSMFMASrcCWaitStates;
2409
+ SIInstrInfo::isDGEMM (Opc)
2410
+ ? SMFMA4x4WritesVGPROverlappedDMFMASrcCWaitStates
2411
+ : SMFMA4x4WritesVGPROverlappedSMFMASrcCWaitStates;
2429
2412
break ;
2430
2413
case 8 :
2431
2414
NeedWaitStates =
2432
- isDGEMM (Opc)
2415
+ SIInstrInfo:: isDGEMM (Opc)
2433
2416
? SMFMA16x16WritesVGPROverlappedDMFMASrcCWaitStates
2434
2417
: SMFMA16x16WritesVGPROverlappedSMFMASrcCWaitStates;
2435
2418
break ;
2436
2419
case 16 :
2437
2420
NeedWaitStates =
2438
- isDGEMM (Opc)
2421
+ SIInstrInfo:: isDGEMM (Opc)
2439
2422
? SMFMA32x32WritesVGPROverlappedDMFMASrcCWaitStates
2440
2423
: SMFMA32x32WritesVGPROverlappedSMFMASrcCWaitStates;
2441
2424
break ;
@@ -2464,7 +2447,7 @@ int GCNHazardRecognizer::checkMAIHazards90A(MachineInstr *MI) {
2464
2447
2465
2448
if (ST.hasGFX940Insts ()) {
2466
2449
NeedWaitStates =
2467
- isXDL (ST, *MI1)
2450
+ TII. isXDL (*MI1)
2468
2451
? GFX940_XDL_N_PassWritesVGPROverlappedSrcABWaitStates (
2469
2452
NumPasses, ST.hasGFX950Insts ())
2470
2453
: GFX940_SMFMA_N_PassWritesVGPROverlappedSrcABWaitStates (
@@ -2631,7 +2614,7 @@ int GCNHazardRecognizer::checkMAIVALUHazards(MachineInstr *MI) {
2631
2614
return 0 ;
2632
2615
2633
2616
auto IsDGEMMFn = [](const MachineInstr &MI) -> bool {
2634
- return isDGEMM (MI.getOpcode ());
2617
+ return SIInstrInfo:: isDGEMM (MI.getOpcode ());
2635
2618
};
2636
2619
2637
2620
// This is checked in checkMAIHazards90A()
@@ -2670,7 +2653,7 @@ int GCNHazardRecognizer::checkMAIVALUHazards(MachineInstr *MI) {
2670
2653
bool DGEMMAfterVALUWrite = false ;
2671
2654
auto IsDGEMMHazard = [&DGEMMAfterVALUWrite, this ](const MachineInstr &MI) {
2672
2655
// Found DGEMM on reverse traversal to def.
2673
- if (isDGEMM (MI.getOpcode ()))
2656
+ if (SIInstrInfo:: isDGEMM (MI.getOpcode ()))
2674
2657
DGEMMAfterVALUWrite = true ;
2675
2658
2676
2659
// Only hazard if register is defined by a VALU and a DGEMM is found after
@@ -2745,7 +2728,7 @@ int GCNHazardRecognizer::checkMAIVALUHazards(MachineInstr *MI) {
2745
2728
int NumPasses = HazardDefLatency;
2746
2729
int NeedWaitStates = MaxWaitStates;
2747
2730
2748
- if (isDGEMM (MFMA->getOpcode ())) {
2731
+ if (SIInstrInfo:: isDGEMM (MFMA->getOpcode ())) {
2749
2732
switch (HazardDefLatency) {
2750
2733
case 4 :
2751
2734
NeedWaitStates = IsMemOrExport ? DMFMA4x4WriteVgprMemExpReadWaitStates
@@ -2765,7 +2748,7 @@ int GCNHazardRecognizer::checkMAIVALUHazards(MachineInstr *MI) {
2765
2748
}
2766
2749
} else if (ST.hasGFX940Insts ()) {
2767
2750
NeedWaitStates =
2768
- isXDL (ST, *MFMA)
2751
+ TII. isXDL (*MFMA)
2769
2752
? GFX940_XDL_N_PassWriteVgprVALUMemExpReadWaitStates (
2770
2753
NumPasses, ST.hasGFX950Insts ())
2771
2754
: GFX940_SMFMA_N_PassWriteVgprVALUMemExpReadWaitStates (
@@ -2838,7 +2821,7 @@ int GCNHazardRecognizer::checkMAIVALUHazards(MachineInstr *MI) {
2838
2821
int NeedWaitStates = MaxWaitStates;
2839
2822
int NumPasses = TSchedModel.computeInstrLatency (MFMA);
2840
2823
2841
- if (isDGEMM (MFMA->getOpcode ())) {
2824
+ if (SIInstrInfo:: isDGEMM (MFMA->getOpcode ())) {
2842
2825
switch (NumPasses) {
2843
2826
case 4 :
2844
2827
NeedWaitStates = DMFMA4x4WriteVgprVALUWriteWaitStates;
@@ -2852,7 +2835,7 @@ int GCNHazardRecognizer::checkMAIVALUHazards(MachineInstr *MI) {
2852
2835
}
2853
2836
} else if (ST.hasGFX940Insts ()) {
2854
2837
NeedWaitStates =
2855
- isXDL (ST, *MFMA)
2838
+ TII. isXDL (*MFMA)
2856
2839
? GFX940_XDL_N_PassWriteVgprVALUWawWaitStates (
2857
2840
NumPasses, ST.hasGFX950Insts ())
2858
2841
: GFX940_SMFMA_N_PassWriteVgprVALUWawWaitStates (NumPasses);
@@ -2880,11 +2863,11 @@ int GCNHazardRecognizer::checkMAIVALUHazards(MachineInstr *MI) {
2880
2863
}
2881
2864
2882
2865
auto IsSMFMAReadAsCFn = [&Reg, &MFMA, this ](const MachineInstr &MI) {
2883
- if (!SIInstrInfo::isMFMA (MI) || isDGEMM (MI.getOpcode ()) ||
2866
+ if (!SIInstrInfo::isMFMA (MI) || SIInstrInfo:: isDGEMM (MI.getOpcode ()) ||
2884
2867
!MI.readsRegister (Reg, &TRI))
2885
2868
return false ;
2886
2869
2887
- if (ST.hasGFX940Insts () && !isXDL (ST, MI))
2870
+ if (ST.hasGFX940Insts () && !TII. isXDL (MI))
2888
2871
return false ;
2889
2872
2890
2873
const MachineOperand *SrcC =
0 commit comments