diff --git a/llvm/lib/Target/X86/X86PfmCounters.td b/llvm/lib/Target/X86/X86PfmCounters.td index c30e989cdc2af..38d8d19091e0f 100644 --- a/llvm/lib/Target/X86/X86PfmCounters.td +++ b/llvm/lib/Target/X86/X86PfmCounters.td @@ -220,6 +220,22 @@ def AlderLakePfmCounters : ProcPfmCounters { } def : PfmCountersBinding<"alderlake", AlderLakePfmCounters>; +def SapphireRapidsPfmCounters : ProcPfmCounters { + let CycleCounter = UnhaltedCoreCyclesPfmCounter; + let UopsCounter = UopsIssuedPfmCounter; + let IssueCounters = [ + PfmIssueCounter<"SPRPort00", "uops_dispatched_port:port_0">, + PfmIssueCounter<"SPRPort01", "uops_dispatched_port:port_1">, + PfmIssueCounter<"SPRPort02_03_10", "uops_dispatched_port:port_2_3_10">, + PfmIssueCounter<"SPRPort04_09", "uops_dispatched_port:port_4_9">, + PfmIssueCounter<"SPRPort05_11", "uops_dispatched_port:port_5_11">, + PfmIssueCounter<"SPRPort06", "uops_dispatched_port:port_6">, + PfmIssueCounter<"SPRPort07_08", "uops_dispatched_port:port_7_8">, + ]; + let ValidationCounters = DefaultIntelPfmValidationCounters; +} +def : PfmCountersBinding<"sapphirerapids", SapphireRapidsPfmCounters>; + // AMD X86 Counters. defvar DefaultAMDPfmValidationCounters = [ PfmValidationCounter, diff --git a/llvm/lib/Target/X86/X86SchedSapphireRapids.td b/llvm/lib/Target/X86/X86SchedSapphireRapids.td index 6e292da4e293d..b0ebe70c31fd4 100644 --- a/llvm/lib/Target/X86/X86SchedSapphireRapids.td +++ b/llvm/lib/Target/X86/X86SchedSapphireRapids.td @@ -59,6 +59,8 @@ def SPRPort01_05 : ProcResGroup<[SPRPort01, SPRPort05]>; def SPRPort01_05_10 : ProcResGroup<[SPRPort01, SPRPort05, SPRPort10]>; def SPRPort02_03 : ProcResGroup<[SPRPort02, SPRPort03]>; def SPRPort02_03_11 : ProcResGroup<[SPRPort02, SPRPort03, SPRPort11]>; +def SPRPort02_03_10 : ProcResGroup<[SPRPort02, SPRPort03, SPRPort10]>; +def SPRPort05_11 : ProcResGroup<[SPRPort05, SPRPort11]>; def SPRPort07_08 : ProcResGroup<[SPRPort07, SPRPort08]>; // EU has 112 reservation stations. @@ -78,6 +80,10 @@ def SPRPort02_03_07_08_11 : ProcResGroup<[SPRPort02, SPRPort03, SPRPort07, let BufferSize = 72; } +def SPRPortAny : ProcResGroup<[SPRPort00, SPRPort01, SPRPort02, SPRPort03, + SPRPort04, SPRPort05, SPRPort06, SPRPort07, + SPRPort08, SPRPort09, SPRPort10, SPRPort11]>; + // Integer loads are 5 cycles, so ReadAfterLd registers needn't be available // until 5 cycles after the memory operand. def : ReadAdvance;