xref: /llvm-project/mlir/include/mlir/Debug/Observers/ActionLogging.h (revision 7f069f5ef4fee00520ed0c350dca42c3c4b72b61)
1 //===- ActionLogging.h -  Logging Actions *- 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_OBSERVERS_ACTIONLOGGING_H
10 #define MLIR_TRACING_OBSERVERS_ACTIONLOGGING_H
11 
12 #include "mlir/Debug/BreakpointManager.h"
13 #include "mlir/Debug/ExecutionContext.h"
14 #include "mlir/IR/Action.h"
15 #include "llvm/ADT/SmallVector.h"
16 #include "llvm/Support/raw_ostream.h"
17 
18 namespace mlir {
19 namespace tracing {
20 
21 /// This class defines an observer that print Actions before and after execution
22 /// on the provided stream.
23 struct ActionLogger : public ExecutionContext::Observer {
24   ActionLogger(raw_ostream &os, bool printActions = true,
25                bool printBreakpoints = true, bool printIRUnits = true)
osActionLogger26       : os(os), printActions(printActions), printBreakpoints(printBreakpoints),
27         printIRUnits(printIRUnits) {}
28 
29   void beforeExecute(const ActionActiveStack *action, Breakpoint *breakpoint,
30                      bool willExecute) override;
31   void afterExecute(const ActionActiveStack *action) override;
32 
33   /// If one of multiple breakpoint managers are set, only actions that are
34   /// matching a breakpoint will be logged.
addBreakpointManagerActionLogger35   void addBreakpointManager(const BreakpointManager *manager) {
36     breakpointManagers.push_back(manager);
37   }
38 
39 private:
40   /// Check if we should log this action or not.
41   bool shouldLog(const ActionActiveStack *action);
42 
43   raw_ostream &os;
44   bool printActions;
45   bool printBreakpoints;
46   bool printIRUnits;
47   std::vector<const BreakpointManager *> breakpointManagers;
48 };
49 
50 } // namespace tracing
51 } // namespace mlir
52 
53 #endif // MLIR_TRACING_OBSERVERS_ACTIONLOGGING_H
54