bolt/deps/llvm-18.1.8/mlir/lib/Debug/Observers/ActionLogging.cpp
2025-02-14 19:21:04 +01:00

77 lines
2.3 KiB
C++

//===- ActionLogging.cpp - Logging Actions *- C++ -*-========================//
//
// 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
//
//===----------------------------------------------------------------------===//
#include "mlir/Debug/Observers/ActionLogging.h"
#include "mlir/Debug/BreakpointManager.h"
#include "mlir/IR/Action.h"
#include "llvm/Support/Threading.h"
#include "llvm/Support/raw_ostream.h"
using namespace mlir;
using namespace mlir::tracing;
//===----------------------------------------------------------------------===//
// ActionLogger
//===----------------------------------------------------------------------===//
bool ActionLogger::shouldLog(const ActionActiveStack *action) {
// If some condition was set, we ensured it is met before logging.
if (breakpointManagers.empty())
return true;
return llvm::any_of(breakpointManagers,
[&](const BreakpointManager *manager) {
return manager->match(action->getAction());
});
}
void ActionLogger::beforeExecute(const ActionActiveStack *action,
Breakpoint *breakpoint, bool willExecute) {
if (!shouldLog(action))
return;
SmallVector<char> name;
llvm::get_thread_name(name);
if (name.empty()) {
llvm::raw_svector_ostream os(name);
os << llvm::get_threadid();
}
os << "[thread " << name << "] ";
if (willExecute)
os << "begins ";
else
os << "skipping ";
if (printBreakpoints) {
if (breakpoint)
os << "(on breakpoint: " << *breakpoint << ") ";
else
os << "(no breakpoint) ";
}
os << "Action ";
if (printActions)
action->getAction().print(os);
else
os << action->getAction().getTag();
if (printIRUnits) {
os << " (";
interleaveComma(action->getAction().getContextIRUnits(), os);
os << ")";
}
os << "`\n";
}
void ActionLogger::afterExecute(const ActionActiveStack *action) {
if (!shouldLog(action))
return;
SmallVector<char> name;
llvm::get_thread_name(name);
if (name.empty()) {
llvm::raw_svector_ostream os(name);
os << llvm::get_threadid();
}
os << "[thread " << name << "] completed `" << action->getAction().getTag()
<< "`\n";
}