My Project
PassInstrumentation.h
Go to the documentation of this file.
1 //===- PassInstrumentation.h ------------------------------------*- C++ -*-===//
2 //
3 // Part of the MLIR Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef MLIR_PASS_PASSINSTRUMENTATION_H_
10 #define MLIR_PASS_PASSINSTRUMENTATION_H_
11 
12 #include "mlir/Support/LLVM.h"
13 #include "mlir/Support/STLExtras.h"
14 #include "llvm/ADT/DenseMapInfo.h"
15 #include "llvm/ADT/StringRef.h"
16 
17 namespace mlir {
18 using AnalysisID = ClassID;
19 class Operation;
20 class OperationName;
21 class Pass;
22 
23 namespace detail {
24 struct PassInstrumentorImpl;
25 } // end namespace detail
26 
31 public:
38  uint64_t parentThreadID;
39 
42  };
43 
44  virtual ~PassInstrumentation() = 0;
45 
49  virtual void runBeforePipeline(const OperationName &name,
50  const PipelineParentInfo &parentInfo) {}
51 
55  virtual void runAfterPipeline(const OperationName &name,
56  const PipelineParentInfo &parentInfo) {}
57 
61  virtual void runBeforePass(Pass *pass, Operation *op) {}
62 
66  virtual void runAfterPass(Pass *pass, Operation *op) {}
67 
72  virtual void runAfterPassFailed(Pass *pass, Operation *op) {}
73 
77  virtual void runBeforeAnalysis(StringRef name, AnalysisID *id,
78  Operation *op) {}
79 
83  virtual void runAfterAnalysis(StringRef name, AnalysisID *id, Operation *op) {
84  }
85 };
86 
90 public:
93  PassInstrumentor(const PassInstrumentor &) = delete;
95 
97  void
98  runBeforePipeline(const OperationName &name,
99  const PassInstrumentation::PipelineParentInfo &parentInfo);
100 
102  void
103  runAfterPipeline(const OperationName &name,
104  const PassInstrumentation::PipelineParentInfo &parentInfo);
105 
107  void runBeforePass(Pass *pass, Operation *op);
108 
110  void runAfterPass(Pass *pass, Operation *op);
111 
113  void runAfterPassFailed(Pass *pass, Operation *op);
114 
116  void runBeforeAnalysis(StringRef name, AnalysisID *id, Operation *op);
117 
119  void runAfterAnalysis(StringRef name, AnalysisID *id, Operation *op);
120 
122  void addInstrumentation(std::unique_ptr<PassInstrumentation> pi);
123 
124 private:
125  std::unique_ptr<detail::PassInstrumentorImpl> impl;
126 };
127 
128 } // end namespace mlir
129 
130 namespace llvm {
131 template <> struct DenseMapInfo<mlir::PassInstrumentation::PipelineParentInfo> {
134 
135  static T getEmptyKey() {
136  auto pair = PairInfo::getEmptyKey();
137  return {pair.first, reinterpret_cast<mlir::Pass *>(pair.second)};
138  }
139  static T getTombstoneKey() {
140  auto pair = PairInfo::getTombstoneKey();
141  return {pair.first, reinterpret_cast<mlir::Pass *>(pair.second)};
142  }
143  static unsigned getHashValue(T val) {
144  return PairInfo::getHashValue({val.parentThreadID, val.parentPass});
145  }
146  static bool isEqual(T lhs, T rhs) {
147  return lhs.parentThreadID == rhs.parentThreadID &&
148  lhs.parentPass == rhs.parentPass;
149  }
150 };
151 } // end namespace llvm
152 
153 #endif // MLIR_PASS_PASSINSTRUMENTATION_H_
Definition: InferTypeOpInterface.cpp:20
virtual void runAfterPassFailed(Pass *pass, Operation *op)
Definition: PassInstrumentation.h:72
Definition: STLExtras.h:95
Definition: PassRegistry.cpp:413
Definition: Operation.h:27
Definition: PassInstrumentation.h:35
Pass * parentPass
The pass that spawned this pipeline.
Definition: PassInstrumentation.h:41
virtual void runBeforeAnalysis(StringRef name, AnalysisID *id, Operation *op)
Definition: PassInstrumentation.h:77
Definition: LLVM.h:45
virtual void runAfterAnalysis(StringRef name, AnalysisID *id, Operation *op)
Definition: PassInstrumentation.h:83
static unsigned getHashValue(T val)
Definition: PassInstrumentation.h:143
static T getEmptyKey()
Definition: PassInstrumentation.h:135
ClassID AnalysisID
Definition: AnalysisManager.h:22
virtual void runBeforePipeline(const OperationName &name, const PipelineParentInfo &parentInfo)
Definition: PassInstrumentation.h:49
uint64_t parentThreadID
Definition: PassInstrumentation.h:38
virtual void runAfterPass(Pass *pass, Operation *op)
Definition: PassInstrumentation.h:66
Definition: PassInstrumentation.h:89
static T getTombstoneKey()
Definition: PassInstrumentation.h:139
Definition: Pass.h:41
Definition: PassInstrumentation.h:30
virtual void runAfterPipeline(const OperationName &name, const PipelineParentInfo &parentInfo)
Definition: PassInstrumentation.h:55
virtual void runBeforePass(Pass *pass, Operation *op)
Definition: PassInstrumentation.h:61
Definition: OperationSupport.h:203
static bool isEqual(T lhs, T rhs)
Definition: PassInstrumentation.h:146