[MCSched] Bind PFM Counters to the CPUs instead of the SchedModel.
Summary:
The pfm counters are now in the ExegesisTarget rather than the
MCSchedModel (PR39165).
This also compresses the pfm counter tables (PR37068).
Reviewers: RKSimon, gchatelet
Subscribers: mgrang, llvm-commits
Differential Revision: https://reviews.llvm.org/D52932
llvm-svn: 345243
diff --git a/llvm/tools/llvm-exegesis/lib/Target.h b/llvm/tools/llvm-exegesis/lib/Target.h
index 2e94727..a6ec36b 100644
--- a/llvm/tools/llvm-exegesis/lib/Target.h
+++ b/llvm/tools/llvm-exegesis/lib/Target.h
@@ -31,8 +31,42 @@
namespace llvm {
namespace exegesis {
+struct PfmCountersInfo {
+ // An optional name of a performance counter that can be used to measure
+ // cycles.
+ const char *const CycleCounter;
+
+ // An optional name of a performance counter that can be used to measure
+ // uops.
+ const char *const UopsCounter;
+
+ // An IssueCounter specifies how to measure uops issued to specific proc
+ // resources.
+ struct IssueCounter {
+ const char *const Counter;
+ // The name of the ProcResource that this counter measures.
+ const char *const ProcResName;
+ };
+ // An optional list of IssueCounters.
+ const IssueCounter *const IssueCounters;
+ const unsigned NumIssueCounters;
+
+ static const PfmCountersInfo Default;
+};
+
+struct CpuAndPfmCounters {
+ const char *const CpuName;
+ const PfmCountersInfo *const PCI;
+ bool operator<(llvm::StringRef S) const {
+ return llvm::StringRef(CpuName) < S;
+ }
+};
+
class ExegesisTarget {
public:
+ explicit ExegesisTarget(llvm::ArrayRef<CpuAndPfmCounters> CpuPfmCounters)
+ : CpuPfmCounters(CpuPfmCounters) {}
+
// Targets can use this to add target-specific passes in assembleToStream();
virtual void addTargetSpecificPasses(llvm::PassManagerBase &PM) const {}
@@ -83,6 +117,10 @@
virtual ~ExegesisTarget();
+ // Returns the Pfm counters for the given CPU (or the default if no pfm
+ // counters are defined for this CPU).
+ const PfmCountersInfo &getPfmCounters(llvm::StringRef CpuName) const;
+
private:
virtual bool matchesArch(llvm::Triple::ArchType Arch) const = 0;
@@ -98,6 +136,7 @@
const LLVMState &State) const;
const ExegesisTarget *Next = nullptr;
+ const llvm::ArrayRef<CpuAndPfmCounters> CpuPfmCounters;
};
} // namespace exegesis