@@ -2290,12 +2290,14 @@ GFX940_SMFMA_N_PassWritesVGPROverlappedSrcABWaitStates(int NumPasses) {
22902290 return NumPasses + 2 ;
22912291}
22922292
2293- static int GFX940_XDL_N_PassWritesVGPROverlappedSrcABWaitStates (int NumPasses) {
2294- // 2 pass -> 5
2295- // 4 pass -> 7
2296- // 8 pass -> 11
2297- // 16 pass -> 19
2298- return NumPasses + 3 ;
2293+ static int GFX940_XDL_N_PassWritesVGPROverlappedSrcABWaitStates (int NumPasses,
2294+ bool IsGFX950) {
2295+ // xdl def cycles | gfx940 | gfx950
2296+ // 2 pass | 5 5
2297+ // 4 pass | 7 8
2298+ // 8 pass | 11 12
2299+ // 16 pass | 19 20
2300+ return NumPasses + 3 + (NumPasses != 2 && IsGFX950);
22992301}
23002302
23012303int GCNHazardRecognizer::checkMAIHazards90A (MachineInstr *MI) {
@@ -2464,7 +2466,7 @@ int GCNHazardRecognizer::checkMAIHazards90A(MachineInstr *MI) {
24642466 NeedWaitStates =
24652467 isXDL (ST, *MI1)
24662468 ? GFX940_XDL_N_PassWritesVGPROverlappedSrcABWaitStates (
2467- NumPasses)
2469+ NumPasses, ST. hasGFX950Insts () )
24682470 : GFX940_SMFMA_N_PassWritesVGPROverlappedSrcABWaitStates (
24692471 NumPasses);
24702472 break ;
@@ -2596,20 +2598,24 @@ static int GFX940_SMFMA_N_PassWriteVgprVALUWawWaitStates(int NumPasses) {
25962598 return NumPasses + 2 ;
25972599}
25982600
2599- static int GFX940_XDL_N_PassWriteVgprVALUWawWaitStates (int NumPasses) {
2600- // 2 pass -> 5
2601- // 4 pass -> 7
2602- // 8 pass -> 11
2603- // 16 pass -> 19
2604- return NumPasses + 3 ;
2601+ static int GFX940_XDL_N_PassWriteVgprVALUWawWaitStates (int NumPasses,
2602+ bool IsGFX950) {
2603+ // xdl def cycles | gfx940 | gfx950
2604+ // 2 pass | 5 5
2605+ // 4 pass | 7 8
2606+ // 8 pass | 11 12
2607+ // 16 pass | 19 20
2608+ return NumPasses + 3 + (NumPasses != 2 && IsGFX950);
26052609}
26062610
2607- static int GFX940_XDL_N_PassWriteVgprVALUMemExpReadWaitStates (int NumPasses) {
2608- // 2 pass -> 5
2609- // 4 pass -> 7
2610- // 8 pass -> 11
2611- // 16 pass -> 19
2612- return NumPasses + 3 ;
2611+ static int GFX940_XDL_N_PassWriteVgprVALUMemExpReadWaitStates (int NumPasses,
2612+ bool IsGFX950) {
2613+ // xdl def cycles | gfx940 | gfx950
2614+ // 2 pass | 5 5
2615+ // 4 pass | 7 8
2616+ // 8 pass | 11 12
2617+ // 16 pass | 19 20
2618+ return NumPasses + 3 + (NumPasses != 2 && IsGFX950);
26132619}
26142620
26152621static int GFX940_SMFMA_N_PassWriteVgprVALUMemExpReadWaitStates (int NumPasses) {
@@ -2760,7 +2766,8 @@ int GCNHazardRecognizer::checkMAIVALUHazards(MachineInstr *MI) {
27602766 } else if (ST.hasGFX940Insts ()) {
27612767 NeedWaitStates =
27622768 isXDL (ST, *MFMA)
2763- ? GFX940_XDL_N_PassWriteVgprVALUMemExpReadWaitStates (NumPasses)
2769+ ? GFX940_XDL_N_PassWriteVgprVALUMemExpReadWaitStates (
2770+ NumPasses, ST.hasGFX950Insts ())
27642771 : GFX940_SMFMA_N_PassWriteVgprVALUMemExpReadWaitStates (
27652772 NumPasses);
27662773 } else {
@@ -2846,7 +2853,8 @@ int GCNHazardRecognizer::checkMAIVALUHazards(MachineInstr *MI) {
28462853 } else if (ST.hasGFX940Insts ()) {
28472854 NeedWaitStates =
28482855 isXDL (ST, *MFMA)
2849- ? GFX940_XDL_N_PassWriteVgprVALUWawWaitStates (NumPasses)
2856+ ? GFX940_XDL_N_PassWriteVgprVALUWawWaitStates (
2857+ NumPasses, ST.hasGFX950Insts ())
28502858 : GFX940_SMFMA_N_PassWriteVgprVALUWawWaitStates (NumPasses);
28512859 } else {
28522860 switch (NumPasses) {
0 commit comments