MLIR  20.0.0git
BreakpointManager.h
Go to the documentation of this file.
1 //===- BreakpointManager.h - Breakpoint Manager Support ----*- C++ -*-===//
2 //
3 // Part of the LLVM 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_TRACING_BREAKPOINTMANAGER_H
10 #define MLIR_TRACING_BREAKPOINTMANAGER_H
11 
12 #include "mlir/IR/Action.h"
13 #include "llvm/ADT/MapVector.h"
14 
15 namespace mlir {
16 namespace tracing {
17 
18 /// This abstract class represents a breakpoint.
19 class Breakpoint {
20 public:
21  virtual ~Breakpoint() = default;
22 
23  /// TypeID for the subclass, used for casting purpose.
24  TypeID getTypeID() const { return typeID; }
25 
26  bool isEnabled() const { return enableStatus; }
27  void enable() { enableStatus = true; }
28  void disable() { enableStatus = false; }
29  virtual void print(raw_ostream &os) const = 0;
30 
31 protected:
32  Breakpoint(TypeID typeID) : enableStatus(true), typeID(typeID) {}
33 
34 private:
35  /// The current state of the breakpoint. A breakpoint can be either enabled
36  /// or disabled.
37  bool enableStatus;
38  TypeID typeID;
39 };
40 
41 inline raw_ostream &operator<<(raw_ostream &os, const Breakpoint &breakpoint) {
42  breakpoint.print(os);
43  return os;
44 }
45 
46 /// This class provides a CRTP wrapper around a base breakpoint class to define
47 /// a few necessary utility methods.
48 template <typename Derived>
49 class BreakpointBase : public Breakpoint {
50 public:
51  /// Support isa/dyn_cast functionality for the derived pass class.
52  static bool classof(const Breakpoint *breakpoint) {
53  return breakpoint->getTypeID() == TypeID::get<Derived>();
54  }
55 
56 protected:
57  BreakpointBase() : Breakpoint(TypeID::get<Derived>()) {}
58 };
59 
60 /// A breakpoint manager is responsible for managing a set of breakpoints and
61 /// matching them to a given action.
63 public:
64  virtual ~BreakpointManager() = default;
65 
66  /// TypeID for the subclass, used for casting purpose.
67  TypeID getTypeID() const { return typeID; }
68 
69  /// Try to match a Breakpoint to a given Action. If there is a match and
70  /// the breakpoint is enabled, return the breakpoint. Otherwise, return
71  /// nullptr.
72  virtual Breakpoint *match(const Action &action) const = 0;
73 
74 protected:
76 
78 };
79 
80 /// CRTP base class for BreakpointManager implementations.
81 template <typename Derived>
83 public:
85 
86  /// Provide classof to allow casting between breakpoint manager types.
87  static bool classof(const BreakpointManager *breakpointManager) {
88  return breakpointManager->getTypeID() == TypeID::get<Derived>();
89  }
90 };
91 
92 } // namespace tracing
93 } // namespace mlir
94 
95 #endif // MLIR_TRACING_BREAKPOINTMANAGER_H
This class provides an efficient unique identifier for a specific C++ type.
Definition: TypeID.h:104
An action is a specific action that is to be taken by the compiler, that can be toggled and controlle...
Definition: Action.h:38
This class provides a CRTP wrapper around a base breakpoint class to define a few necessary utility m...
static bool classof(const Breakpoint *breakpoint)
Support isa/dyn_cast functionality for the derived pass class.
CRTP base class for BreakpointManager implementations.
static bool classof(const BreakpointManager *breakpointManager)
Provide classof to allow casting between breakpoint manager types.
A breakpoint manager is responsible for managing a set of breakpoints and matching them to a given ac...
virtual ~BreakpointManager()=default
TypeID getTypeID() const
TypeID for the subclass, used for casting purpose.
virtual Breakpoint * match(const Action &action) const =0
Try to match a Breakpoint to a given Action.
This abstract class represents a breakpoint.
TypeID getTypeID() const
TypeID for the subclass, used for casting purpose.
virtual ~Breakpoint()=default
virtual void print(raw_ostream &os) const =0
raw_ostream & operator<<(raw_ostream &os, const Breakpoint &breakpoint)
Include the generated interface declarations.
auto get(MLIRContext *context, Ts &&...params)
Helper method that injects context only if needed, this helps unify some of the attribute constructio...