From 1dab8017b8ea9fe473da80323cf0922ad6110c91 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Tue, 17 Dec 2024 15:06:20 -0800 Subject: [PATCH] [RISCV] Use inheritance to simplify usage of the UnsupportedSched* multiclasses. NFC Split UnsupportedSchedZfhmin from UnsupportedSchedZfh. UnsupportedSchedZfhmin inherits from UnsupportedSchedZfh and should be used when no F16 is supported. UnsupportedSchedZfh can be used direclty for CPUs that support Zfhmin but not Zfh. Make UnsupportedSchedF inherit from both UnsupportedSchedD and UnsupportedSchedZfhmin so that CPUs with no FP only need to include UnsupportedSchedF. This required some minor refactorings to RISCVSchedSyntacoreSCR345.td. I've also switch to inheritance instead of using defm. Alternative to #120196. --- llvm/lib/Target/RISCV/RISCVSchedRocket.td | 2 +- .../Target/RISCV/RISCVSchedSyntacoreSCR345.td | 53 +++++---- .../Target/RISCV/RISCVSchedSyntacoreSCR7.td | 2 +- .../Target/RISCV/RISCVSchedXiangShanNanHu.td | 2 +- llvm/lib/Target/RISCV/RISCVSchedule.td | 109 ++++++++++-------- 5 files changed, 88 insertions(+), 80 deletions(-) diff --git a/llvm/lib/Target/RISCV/RISCVSchedRocket.td b/llvm/lib/Target/RISCV/RISCVSchedRocket.td index 9ddc4281092dd..1148581415380 100644 --- a/llvm/lib/Target/RISCV/RISCVSchedRocket.td +++ b/llvm/lib/Target/RISCV/RISCVSchedRocket.td @@ -259,7 +259,7 @@ defm : UnsupportedSchedZbs; defm : UnsupportedSchedZbkb; defm : UnsupportedSchedZbkx; defm : UnsupportedSchedZfa; -defm : UnsupportedSchedZfh; +defm : UnsupportedSchedZfhmin; defm : UnsupportedSchedSFB; defm : UnsupportedSchedXsfvcp; defm : UnsupportedSchedZvk; diff --git a/llvm/lib/Target/RISCV/RISCVSchedSyntacoreSCR345.td b/llvm/lib/Target/RISCV/RISCVSchedSyntacoreSCR345.td index a1c63f22e5c09..e509abc9f922e 100644 --- a/llvm/lib/Target/RISCV/RISCVSchedSyntacoreSCR345.td +++ b/llvm/lib/Target/RISCV/RISCVSchedSyntacoreSCR345.td @@ -179,27 +179,27 @@ multiclass SCR_Other { } // Unsupported scheduling classes for SCR3-5. -multiclass SCR_Unsupported { - defm : UnsupportedSchedSFB; - defm : UnsupportedSchedV; - defm : UnsupportedSchedXsfvcp; - defm : UnsupportedSchedZabha; - defm : UnsupportedSchedZba; - defm : UnsupportedSchedZbb; - defm : UnsupportedSchedZbc; - defm : UnsupportedSchedZbs; - defm : UnsupportedSchedZbkb; - defm : UnsupportedSchedZbkx; - defm : UnsupportedSchedZfa; - defm : UnsupportedSchedZfh; - defm : UnsupportedSchedZvk; -} - -multiclass SCR3_Unsupported { - defm : SCR_Unsupported; - defm : UnsupportedSchedD; - defm : UnsupportedSchedF; -} +multiclass SCR_Unsupported : + UnsupportedSchedSFB, + UnsupportedSchedV, + UnsupportedSchedXsfvcp, + UnsupportedSchedZabha, + UnsupportedSchedZba, + UnsupportedSchedZbb, + UnsupportedSchedZbc, + UnsupportedSchedZbs, + UnsupportedSchedZbkb, + UnsupportedSchedZbkx, + UnsupportedSchedZfa, + UnsupportedSchedZvk; + +multiclass SCR3_Unsupported : + SCR_Unsupported, + UnsupportedSchedF; + +multiclass SCR4_SCR5_Unsupported : + SCR_Unsupported, + UnsupportedSchedZfhmin; // Bypasses (none) multiclass SCR_NoReadAdvances { @@ -231,8 +231,7 @@ multiclass SCR_NoReadAdvances { } // Floating-point bypasses (none) -multiclass SCR4_SCR5_NoReadAdvances { - defm : SCR_NoReadAdvances; +multiclass SCR4_SCR5_NoReadAdvances : SCR_NoReadAdvances { def : ReadAdvance; def : ReadAdvance; def : ReadAdvance; @@ -353,7 +352,7 @@ let SchedModel = SyntacoreSCR4RV32Model in { defm : SCR_FDU; defm : SCR_Other; - defm : SCR_Unsupported; + defm : SCR4_SCR5_Unsupported; defm : SCR4_SCR5_NoReadAdvances; } @@ -383,7 +382,7 @@ let SchedModel = SyntacoreSCR4RV64Model in { defm : SCR_FDU; defm : SCR_Other; - defm : SCR_Unsupported; + defm : SCR4_SCR5_Unsupported; defm : SCR4_SCR5_NoReadAdvances; } @@ -416,7 +415,7 @@ let SchedModel = SyntacoreSCR5RV32Model in { defm : SCR_FDU; defm : SCR_Other; - defm : SCR_Unsupported; + defm : SCR4_SCR5_Unsupported; defm : SCR4_SCR5_NoReadAdvances; } @@ -446,6 +445,6 @@ let SchedModel = SyntacoreSCR5RV64Model in { defm : SCR_FDU; defm : SCR_Other; - defm : SCR_Unsupported; + defm : SCR4_SCR5_Unsupported; defm : SCR4_SCR5_NoReadAdvances; } diff --git a/llvm/lib/Target/RISCV/RISCVSchedSyntacoreSCR7.td b/llvm/lib/Target/RISCV/RISCVSchedSyntacoreSCR7.td index 2818c2f60f3f9..4631474a945cb 100644 --- a/llvm/lib/Target/RISCV/RISCVSchedSyntacoreSCR7.td +++ b/llvm/lib/Target/RISCV/RISCVSchedSyntacoreSCR7.td @@ -246,7 +246,7 @@ multiclass SCR7_Unsupported { defm : UnsupportedSchedXsfvcp; defm : UnsupportedSchedZabha; defm : UnsupportedSchedZfa; - defm : UnsupportedSchedZfh; + defm : UnsupportedSchedZfhmin; defm : UnsupportedSchedZvk; } diff --git a/llvm/lib/Target/RISCV/RISCVSchedXiangShanNanHu.td b/llvm/lib/Target/RISCV/RISCVSchedXiangShanNanHu.td index dcd1a938a9147..16d192feafd29 100644 --- a/llvm/lib/Target/RISCV/RISCVSchedXiangShanNanHu.td +++ b/llvm/lib/Target/RISCV/RISCVSchedXiangShanNanHu.td @@ -308,7 +308,7 @@ def : ReadAdvance; // Unsupported extensions defm : UnsupportedSchedV; defm : UnsupportedSchedZfa; -defm : UnsupportedSchedZfh; +defm : UnsupportedSchedZfhmin; defm : UnsupportedSchedSFB; defm : UnsupportedSchedZabha; defm : UnsupportedSchedXsfvcp; diff --git a/llvm/lib/Target/RISCV/RISCVSchedule.td b/llvm/lib/Target/RISCV/RISCVSchedule.td index 1fdbc7cbcbaf4..7946a746efd02 100644 --- a/llvm/lib/Target/RISCV/RISCVSchedule.td +++ b/llvm/lib/Target/RISCV/RISCVSchedule.td @@ -211,90 +211,57 @@ def ReadFClass16 : SchedRead; def ReadFClass32 : SchedRead; def ReadFClass64 : SchedRead; +// For CPUs that support Zfhmin, but not Zfh. multiclass UnsupportedSchedZfh { let Unsupported = true in { def : WriteRes; def : WriteRes; -def : WriteRes; -def : WriteRes; def : WriteRes; -def : WriteRes; def : WriteRes; def : WriteRes; -def : WriteRes; def : WriteRes; def : WriteRes; def : WriteRes; -def : WriteRes; def : WriteRes; def : WriteRes; def : WriteRes; -def : WriteRes; -def : WriteRes; def : WriteRes; -def : WriteRes; def : WriteRes; def : ReadAdvance; def : ReadAdvance; -def : ReadAdvance; -def : ReadAdvance; def : ReadAdvance; -def : ReadAdvance; def : ReadAdvance; def : ReadAdvance; -def : ReadAdvance; def : ReadAdvance; def : ReadAdvance; def : ReadAdvance; def : ReadAdvance; def : ReadAdvance; def : ReadAdvance; -def : ReadAdvance; -def : ReadAdvance; def : ReadAdvance; def : ReadAdvance; } // Unsupported = true } -multiclass UnsupportedSchedF { +// For CPUs that support neither Zfhmin or Zfh. +multiclass UnsupportedSchedZfhmin : UnsupportedSchedZfh { let Unsupported = true in { -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; -def : ReadAdvance; -def : ReadAdvance; -def : ReadAdvance; -def : ReadAdvance; -def : ReadAdvance; -def : ReadAdvance; -def : ReadAdvance; -def : ReadAdvance; -def : ReadAdvance; -def : ReadAdvance; -def : ReadAdvance; -def : ReadAdvance; -def : ReadAdvance; -def : ReadAdvance; -def : ReadAdvance; -def : ReadAdvance; -def : ReadAdvance; -def : ReadAdvance; +def : ReadAdvance; +def : ReadAdvance; +def : ReadAdvance; +def : ReadAdvance; +def : ReadAdvance; +def : ReadAdvance; } // Unsupported = true } @@ -341,6 +308,48 @@ def : ReadAdvance; } // Unsupported = true } +// For CPUs with no floating point. +multiclass UnsupportedSchedF : UnsupportedSchedD, UnsupportedSchedZfhmin { +let Unsupported = true in { +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; + +def : ReadAdvance; +def : ReadAdvance; +def : ReadAdvance; +def : ReadAdvance; +def : ReadAdvance; +def : ReadAdvance; +def : ReadAdvance; +def : ReadAdvance; +def : ReadAdvance; +def : ReadAdvance; +def : ReadAdvance; +def : ReadAdvance; +def : ReadAdvance; +def : ReadAdvance; +def : ReadAdvance; +def : ReadAdvance; +def : ReadAdvance; +def : ReadAdvance; +} // Unsupported = true +} + multiclass UnsupportedSchedSFB { let Unsupported = true in { def : WriteRes;