//===- TargetPfmCounters.td - Target Pfm Counters -*- tablegen ----------*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file defines the target-independent interfaces for performance counters. // //===----------------------------------------------------------------------===// // Definition of a hardware counters from libpfm identifiers. class PfmCounter { // The name of the counter that measures events. // The name can be "some_counter + some_other_counter", in which case the // measured value is the sum of events on these counters. string Counter = counter; } // Issue counters can be tied to a ProcResource class PfmIssueCounter : PfmCounter { // The name of the ProcResource on which uops are issued. This is used by // llvm-exegesis to compare measurements with values in the SchedModels. // If the CPU has a sched model, this should correspond to the name of a // ProcResource. string ResourceName = resource_name; } def NoPfmCounter : PfmCounter <""> {} // Set of PfmCounters for measuring sched model characteristics. class ProcPfmCounters { // Processors can define how to measure cycles by defining a CycleCounter. PfmCounter CycleCounter = NoPfmCounter; // Processors can define how to measure uops by defining a UopsCounter. PfmCounter UopsCounter = NoPfmCounter; // Processors can define how to measure issued uops by defining IssueCounters. list IssueCounters = []; } // A binding of a set of counters to a CPU. class PfmCountersBinding { string CpuName = cpu_name; ProcPfmCounters Counters = counters; } // Declares the default binding for unbound CPUs for the target. class PfmCountersDefaultBinding : PfmCountersBinding<"", counters> {}