158 (llvm::Twine(categoryName) +
":" + subCategoryName)
159 .toVector(fullCategoryName);
177 Arg(llvm::StringRef k, llvm::StringRef v) :
key(k),
val(v) {}
178 Arg(llvm::StringRef k, std::string v) :
key(k),
val(std::move(v)) {}
179 Arg(llvm::StringRef k,
const char *v) :
Arg(k,
llvm::StringRef(v)) {}
181 Arg(llvm::StringRef k,
Type t);
183 Arg(llvm::StringRef k,
bool b) :
key(k),
val(
b ?
"true" :
"false") {}
192 template <
typename T,
typename = std::enable_if_t<std::is_arithmetic_v<T> &&
193 !std::is_same_v<T,
bool>>>
195 if constexpr (std::is_floating_point_v<T>) {
196 llvm::raw_string_ostream os(
val);
198 }
else if constexpr (std::is_signed_v<T>) {
199 val = llvm::itostr(
static_cast<long long>(v));
201 val = llvm::utostr(
static_cast<unsigned long long>(v));
206 void insert(llvm::StringRef s);
209 void print(llvm::raw_ostream &os,
bool printLocation =
false)
const;
218 return "<unknown function>";
235 return "<unknown remark name>";
239 std::string
getMsg()
const;
256 args.emplace_back(
"RemarkId", llvm::utostr(
id.getValue()));
267 args.emplace_back(
"RelatedTo", llvm::utostr(relatedId.
getValue()));
314 static llvm::DiagnosticSeverity
318 return llvm::DiagnosticSeverity::DS_Note;
320 return llvm::DiagnosticSeverity::DS_Warning;
322 return llvm::DiagnosticSeverity::DS_Error;
324 return llvm::DiagnosticSeverity::DS_Remark;
326 llvm_unreachable(
"Unknown diagnostic severity");
332 return llvm::DiagnosticKind::DK_Generic;
334 return llvm::DiagnosticKind::DK_OptimizationRemark;
336 return llvm::DiagnosticKind::DK_OptimizationRemarkMissed;
338 return llvm::DiagnosticKind::DK_OptimizationFailure;
340 return llvm::DiagnosticKind::DK_OptimizationRemarkAnalysis;
342 llvm_unreachable(
"Unknown diagnostic kind");
502 std::optional<llvm::Regex> missFilter;
504 std::optional<llvm::Regex> passedFilter;
506 std::optional<llvm::Regex> analysisFilter;
508 std::optional<llvm::Regex> failedFilter;
510 std::unique_ptr<MLIRRemarkStreamerBase> remarkStreamer;
512 std::unique_ptr<RemarkEmittingPolicyBase> remarkEmittingPolicy;
514 bool printAsEmitRemarks =
false;
516 std::atomic<uint64_t> nextRemarkId{1};
520 bool isMissedOptRemarkEnabled(StringRef categoryName)
const;
524 bool isPassedOptRemarkEnabled(StringRef categoryName)
const;
528 bool isAnalysisOptRemarkEnabled(StringRef categoryName)
const;
532 bool isFailedOptRemarkEnabled(StringRef categoryName)
const;
535 bool isAnyRemarkEnabled(StringRef categoryName)
const {
536 return isMissedOptRemarkEnabled(categoryName) ||
537 isPassedOptRemarkEnabled(categoryName) ||
538 isFailedOptRemarkEnabled(categoryName) ||
539 isAnalysisOptRemarkEnabled(categoryName);
545 template <
typename RemarkT>
548 template <
typename RemarkT>
570 initialize(std::unique_ptr<MLIRRemarkStreamerBase> streamer,
571 std::unique_ptr<RemarkEmittingPolicyBase> remarkEmittingPolicy,
572 std::string *errMsg);
576 return remarkEmittingPolicy.get();
581 return RemarkId(nextRemarkId.fetch_add(1, std::memory_order_relaxed));
593 std::optional<RemarkKind> kind = std::nullopt)
const;
static void copy(Location loc, Value dst, Value src, Value size, OpBuilder &builder)
Copies the given number of bytes from src to dst pointers.
MLIRContext is the top-level object for a collection of MLIR operations.
remark::detail::RemarkEngine * getRemarkEngine()
Returns the remark engine for this context, or nullptr if none has been set.