Skip to content

Commit b96884f

Browse files
authored
Revert "[MLIR] Implement remark emitting policies in MLIR" (#160681)
Reverts #160526 This fails with Sanitizers.
1 parent a7f5abb commit b96884f

File tree

10 files changed

+35
-315
lines changed

10 files changed

+35
-315
lines changed

mlir/include/mlir/IR/Remarks.h

Lines changed: 6 additions & 138 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@
2424
#include "mlir/IR/MLIRContext.h"
2525
#include "mlir/IR/Value.h"
2626

27-
#include <functional>
28-
2927
namespace mlir::remark {
3028

3129
/// Define an the set of categories to accept. By default none are, the provided
@@ -146,7 +144,7 @@ class Remark {
146144

147145
llvm::StringRef getCategoryName() const { return categoryName; }
148146

149-
llvm::StringRef getCombinedCategoryName() const {
147+
llvm::StringRef getFullCategoryName() const {
150148
if (categoryName.empty() && subCategoryName.empty())
151149
return {};
152150
if (subCategoryName.empty())
@@ -320,7 +318,7 @@ class InFlightRemark {
320318
};
321319

322320
//===----------------------------------------------------------------------===//
323-
// Pluggable Remark Utilities
321+
// MLIR Remark Streamer
324322
//===----------------------------------------------------------------------===//
325323

326324
/// Base class for MLIR remark streamers that is used to stream
@@ -340,26 +338,6 @@ class MLIRRemarkStreamerBase {
340338
virtual void finalize() {} // optional
341339
};
342340

343-
using ReportFn = llvm::unique_function<void(const Remark &)>;
344-
345-
/// Base class for MLIR remark emitting policies that is used to emit
346-
/// optimization remarks to the underlying remark streamer. The derived classes
347-
/// should implement the `reportRemark` method to provide the actual emitting
348-
/// implementation.
349-
class RemarkEmittingPolicyBase {
350-
protected:
351-
ReportFn reportImpl;
352-
353-
public:
354-
RemarkEmittingPolicyBase() = default;
355-
virtual ~RemarkEmittingPolicyBase() = default;
356-
357-
void initialize(ReportFn fn) { reportImpl = std::move(fn); }
358-
359-
virtual void reportRemark(const Remark &remark) = 0;
360-
virtual void finalize() = 0;
361-
};
362-
363341
//===----------------------------------------------------------------------===//
364342
// Remark Engine (MLIR Context will own this class)
365343
//===----------------------------------------------------------------------===//
@@ -377,8 +355,6 @@ class RemarkEngine {
377355
std::optional<llvm::Regex> failedFilter;
378356
/// The MLIR remark streamer that will be used to emit the remarks.
379357
std::unique_ptr<MLIRRemarkStreamerBase> remarkStreamer;
380-
/// The MLIR remark policy that will be used to emit the remarks.
381-
std::unique_ptr<RemarkEmittingPolicyBase> remarkEmittingPolicy;
382358
/// When is enabled, engine also prints remarks as mlir::emitRemarks.
383359
bool printAsEmitRemarks = false;
384360

@@ -416,8 +392,6 @@ class RemarkEngine {
416392
InFlightRemark emitIfEnabled(Location loc, RemarkOpts opts,
417393
bool (RemarkEngine::*isEnabled)(StringRef)
418394
const);
419-
/// Report a remark.
420-
void reportImpl(const Remark &remark);
421395

422396
public:
423397
/// Default constructor is deleted, use the other constructor.
@@ -433,10 +407,8 @@ class RemarkEngine {
433407
~RemarkEngine();
434408

435409
/// Setup the remark engine with the given output path and format.
436-
LogicalResult
437-
initialize(std::unique_ptr<MLIRRemarkStreamerBase> streamer,
438-
std::unique_ptr<RemarkEmittingPolicyBase> remarkEmittingPolicy,
439-
std::string *errMsg);
410+
LogicalResult initialize(std::unique_ptr<MLIRRemarkStreamerBase> streamer,
411+
std::string *errMsg);
440412

441413
/// Report a remark.
442414
void report(const Remark &&remark);
@@ -474,54 +446,6 @@ inline InFlightRemark withEngine(Fn fn, Location loc, Args &&...args) {
474446

475447
namespace mlir::remark {
476448

477-
//===----------------------------------------------------------------------===//
478-
// Remark Emitting Policies
479-
//===----------------------------------------------------------------------===//
480-
481-
/// Policy that emits all remarks.
482-
class RemarkEmittingPolicyAll : public detail::RemarkEmittingPolicyBase {
483-
public:
484-
RemarkEmittingPolicyAll();
485-
486-
void reportRemark(const detail::Remark &remark) override {
487-
reportImpl(remark);
488-
}
489-
void finalize() override {}
490-
};
491-
492-
/// Policy that emits final remarks.
493-
class RemarkEmittingPolicyFinal : public detail::RemarkEmittingPolicyBase {
494-
private:
495-
/// user can intercept them for custom processing via a registered callback,
496-
/// otherwise they will be reported on engine destruction.
497-
llvm::DenseSet<detail::Remark> postponedRemarks;
498-
/// Optional user callback for intercepting postponed remarks.
499-
std::function<void(const detail::Remark &)> postponedRemarkCallback;
500-
501-
public:
502-
RemarkEmittingPolicyFinal();
503-
504-
/// Register a callback to intercept postponed remarks before they are
505-
/// reported. The callback will be invoked for each postponed remark in
506-
/// finalize().
507-
void
508-
setPostponedRemarkCallback(std::function<void(const detail::Remark &)> cb) {
509-
postponedRemarkCallback = std::move(cb);
510-
}
511-
512-
void reportRemark(const detail::Remark &remark) override {
513-
postponedRemarks.erase(remark);
514-
postponedRemarks.insert(remark);
515-
}
516-
void finalize() override {
517-
for (auto &remark : postponedRemarks) {
518-
if (postponedRemarkCallback)
519-
postponedRemarkCallback(remark);
520-
reportImpl(remark);
521-
}
522-
}
523-
};
524-
525449
/// Create a Reason with llvm::formatv formatting.
526450
template <class... Ts>
527451
inline detail::LazyTextBuild reason(const char *fmt, Ts &&...ts) {
@@ -581,72 +505,16 @@ inline detail::InFlightRemark analysis(Location loc, RemarkOpts opts) {
581505

582506
/// Setup remarks for the context. This function will enable the remark engine
583507
/// and set the streamer to be used for optimization remarks. The remark
584-
/// categories are used to filter the remarks that will be emitted by the
585-
/// remark engine. If a category is not specified, it will not be emitted. If
508+
/// categories are used to filter the remarks that will be emitted by the remark
509+
/// engine. If a category is not specified, it will not be emitted. If
586510
/// `printAsEmitRemarks` is true, the remarks will be printed as
587511
/// mlir::emitRemarks. 'streamer' must inherit from MLIRRemarkStreamerBase and
588512
/// will be used to stream the remarks.
589513
LogicalResult enableOptimizationRemarks(
590514
MLIRContext &ctx,
591515
std::unique_ptr<remark::detail::MLIRRemarkStreamerBase> streamer,
592-
std::unique_ptr<remark::detail::RemarkEmittingPolicyBase>
593-
remarkEmittingPolicy,
594516
const remark::RemarkCategories &cats, bool printAsEmitRemarks = false);
595517

596518
} // namespace mlir::remark
597519

598-
// DenseMapInfo specialization for Remark
599-
namespace llvm {
600-
template <>
601-
struct DenseMapInfo<mlir::remark::detail::Remark> {
602-
static constexpr StringRef kEmptyKey = "<EMPTY_KEY>";
603-
static constexpr StringRef kTombstoneKey = "<TOMBSTONE_KEY>";
604-
605-
/// Helper to provide a static dummy context for sentinel keys.
606-
static mlir::MLIRContext *getStaticDummyContext() {
607-
static mlir::MLIRContext dummyContext;
608-
return &dummyContext;
609-
}
610-
611-
/// Create an empty remark
612-
static inline mlir::remark::detail::Remark getEmptyKey() {
613-
return mlir::remark::detail::Remark(
614-
mlir::remark::RemarkKind::RemarkUnknown, mlir::DiagnosticSeverity::Note,
615-
mlir::UnknownLoc::get(getStaticDummyContext()),
616-
mlir::remark::RemarkOpts::name(kEmptyKey));
617-
}
618-
619-
/// Create a dead remark
620-
static inline mlir::remark::detail::Remark getTombstoneKey() {
621-
return mlir::remark::detail::Remark(
622-
mlir::remark::RemarkKind::RemarkUnknown, mlir::DiagnosticSeverity::Note,
623-
mlir::UnknownLoc::get(getStaticDummyContext()),
624-
mlir::remark::RemarkOpts::name(kTombstoneKey));
625-
}
626-
627-
/// Compute the hash value of the remark
628-
static unsigned getHashValue(const mlir::remark::detail::Remark &remark) {
629-
return llvm::hash_combine(
630-
remark.getLocation().getAsOpaquePointer(),
631-
llvm::hash_value(remark.getRemarkName()),
632-
llvm::hash_value(remark.getCombinedCategoryName()));
633-
}
634-
635-
static bool isEqual(const mlir::remark::detail::Remark &lhs,
636-
const mlir::remark::detail::Remark &rhs) {
637-
// Check for empty/tombstone keys first
638-
if (lhs.getRemarkName() == kEmptyKey ||
639-
lhs.getRemarkName() == kTombstoneKey ||
640-
rhs.getRemarkName() == kEmptyKey ||
641-
rhs.getRemarkName() == kTombstoneKey) {
642-
return lhs.getRemarkName() == rhs.getRemarkName();
643-
}
644-
645-
// For regular remarks, compare key identifying fields
646-
return lhs.getLocation() == rhs.getLocation() &&
647-
lhs.getRemarkName() == rhs.getRemarkName() &&
648-
lhs.getCombinedCategoryName() == rhs.getCombinedCategoryName();
649-
}
650-
};
651-
} // namespace llvm
652520
#endif // MLIR_IR_REMARKS_H

mlir/include/mlir/Remark/RemarkStreamer.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ namespace mlir::remark {
4545
/// mlir::emitRemarks.
4646
LogicalResult enableOptimizationRemarksWithLLVMStreamer(
4747
MLIRContext &ctx, StringRef filePath, llvm::remarks::Format fmt,
48-
std::unique_ptr<detail::RemarkEmittingPolicyBase> remarkEmittingPolicy,
4948
const RemarkCategories &cat, bool printAsEmitRemarks = false);
5049

5150
} // namespace mlir::remark

mlir/include/mlir/Tools/mlir-opt/MlirOptMain.h

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,6 @@ enum class RemarkFormat {
4444
REMARK_FORMAT_BITSTREAM,
4545
};
4646

47-
enum class RemarkPolicy {
48-
REMARK_POLICY_ALL,
49-
REMARK_POLICY_FINAL,
50-
};
51-
5247
/// Configuration options for the mlir-opt tool.
5348
/// This is intended to help building tools like mlir-opt by collecting the
5449
/// supported options.
@@ -247,8 +242,6 @@ class MlirOptMainConfig {
247242

248243
/// Set the reproducer output filename
249244
RemarkFormat getRemarkFormat() const { return remarkFormatFlag; }
250-
/// Set the remark policy to use.
251-
RemarkPolicy getRemarkPolicy() const { return remarkPolicyFlag; }
252245
/// Set the remark format to use.
253246
std::string getRemarksAllFilter() const { return remarksAllFilterFlag; }
254247
/// Set the remark output file.
@@ -272,8 +265,6 @@ class MlirOptMainConfig {
272265

273266
/// Remark format
274267
RemarkFormat remarkFormatFlag = RemarkFormat::REMARK_FORMAT_STDOUT;
275-
/// Remark policy
276-
RemarkPolicy remarkPolicyFlag = RemarkPolicy::REMARK_POLICY_ALL;
277268
/// Remark file to output to
278269
std::string remarksOutputFileFlag = "";
279270
/// Remark filters

mlir/lib/IR/MLIRContext.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -278,8 +278,6 @@ class MLIRContextImpl {
278278
}
279279
}
280280
~MLIRContextImpl() {
281-
// finalize remark engine before destroying anything else.
282-
remarkEngine.reset();
283281
for (auto typeMapping : registeredTypes)
284282
typeMapping.second->~AbstractType();
285283
for (auto attrMapping : registeredAttributes)

mlir/lib/IR/Remarks.cpp

Lines changed: 17 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
#include "llvm/ADT/StringRef.h"
1717

1818
using namespace mlir::remark::detail;
19-
using namespace mlir::remark;
19+
2020
//------------------------------------------------------------------------------
2121
// Remark
2222
//------------------------------------------------------------------------------
@@ -70,7 +70,7 @@ static void printArgs(llvm::raw_ostream &os, llvm::ArrayRef<Remark::Arg> args) {
7070
void Remark::print(llvm::raw_ostream &os, bool printLocation) const {
7171
// Header: [Type] pass:remarkName
7272
StringRef type = getRemarkTypeString();
73-
StringRef categoryName = getCombinedCategoryName();
73+
StringRef categoryName = getFullCategoryName();
7474
StringRef name = remarkName;
7575

7676
os << '[' << type << "] ";
@@ -140,7 +140,7 @@ llvm::remarks::Remark Remark::generateRemark() const {
140140
r.RemarkType = getRemarkType();
141141
r.RemarkName = getRemarkName();
142142
// MLIR does not use passes; instead, it has categories and sub-categories.
143-
r.PassName = getCombinedCategoryName();
143+
r.PassName = getFullCategoryName();
144144
r.FunctionName = getFunction();
145145
r.Loc = locLambda();
146146
for (const Remark::Arg &arg : getArgs()) {
@@ -225,7 +225,7 @@ InFlightRemark RemarkEngine::emitOptimizationRemarkAnalysis(Location loc,
225225
// RemarkEngine
226226
//===----------------------------------------------------------------------===//
227227

228-
void RemarkEngine::reportImpl(const Remark &remark) {
228+
void RemarkEngine::report(const Remark &&remark) {
229229
// Stream the remark
230230
if (remarkStreamer)
231231
remarkStreamer->streamOptimizationRemark(remark);
@@ -235,19 +235,19 @@ void RemarkEngine::reportImpl(const Remark &remark) {
235235
emitRemark(remark.getLocation(), remark.getMsg());
236236
}
237237

238-
void RemarkEngine::report(const Remark &&remark) {
239-
if (remarkEmittingPolicy)
240-
remarkEmittingPolicy->reportRemark(remark);
241-
}
242-
243238
RemarkEngine::~RemarkEngine() {
244-
if (remarkEmittingPolicy)
245-
remarkEmittingPolicy->finalize();
246-
247239
if (remarkStreamer)
248240
remarkStreamer->finalize();
249241
}
250242

243+
llvm::LogicalResult
244+
RemarkEngine::initialize(std::unique_ptr<MLIRRemarkStreamerBase> streamer,
245+
std::string *errMsg) {
246+
// If you need to validate categories/filters, do so here and set errMsg.
247+
remarkStreamer = std::move(streamer);
248+
return success();
249+
}
250+
251251
/// Returns true if filter is already anchored like ^...$
252252
static bool isAnchored(llvm::StringRef s) {
253253
s = s.trim();
@@ -300,44 +300,19 @@ RemarkEngine::RemarkEngine(bool printAsEmitRemarks,
300300
failedFilter = buildFilter(cats, cats.failed);
301301
}
302302

303-
llvm::LogicalResult RemarkEngine::initialize(
304-
std::unique_ptr<MLIRRemarkStreamerBase> streamer,
305-
std::unique_ptr<RemarkEmittingPolicyBase> remarkEmittingPolicy,
306-
std::string *errMsg) {
307-
308-
remarkStreamer = std::move(streamer);
309-
310-
// Capture `this`. Ensure RemarkEngine is not moved after this.
311-
auto reportFunc = [this](const Remark &r) { this->reportImpl(r); };
312-
remarkEmittingPolicy->initialize(ReportFn(std::move(reportFunc)));
313-
314-
this->remarkEmittingPolicy = std::move(remarkEmittingPolicy);
315-
return success();
316-
}
317-
318303
llvm::LogicalResult mlir::remark::enableOptimizationRemarks(
319-
MLIRContext &ctx, std::unique_ptr<detail::MLIRRemarkStreamerBase> streamer,
320-
std::unique_ptr<detail::RemarkEmittingPolicyBase> remarkEmittingPolicy,
321-
const RemarkCategories &cats, bool printAsEmitRemarks) {
304+
MLIRContext &ctx,
305+
std::unique_ptr<remark::detail::MLIRRemarkStreamerBase> streamer,
306+
const remark::RemarkCategories &cats, bool printAsEmitRemarks) {
322307
auto engine =
323-
std::make_unique<detail::RemarkEngine>(printAsEmitRemarks, cats);
308+
std::make_unique<remark::detail::RemarkEngine>(printAsEmitRemarks, cats);
324309

325310
std::string errMsg;
326-
if (failed(engine->initialize(std::move(streamer),
327-
std::move(remarkEmittingPolicy), &errMsg))) {
311+
if (failed(engine->initialize(std::move(streamer), &errMsg))) {
328312
llvm::report_fatal_error(
329313
llvm::Twine("Failed to initialize remark engine. Error: ") + errMsg);
330314
}
331315
ctx.setRemarkEngine(std::move(engine));
332316

333317
return success();
334318
}
335-
336-
//===----------------------------------------------------------------------===//
337-
// Remark emitting policies
338-
//===----------------------------------------------------------------------===//
339-
340-
namespace mlir::remark {
341-
RemarkEmittingPolicyAll::RemarkEmittingPolicyAll() = default;
342-
RemarkEmittingPolicyFinal::RemarkEmittingPolicyFinal() = default;
343-
} // namespace mlir::remark

mlir/lib/Remark/RemarkStreamer.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,16 +60,14 @@ void LLVMRemarkStreamer::finalize() {
6060
namespace mlir::remark {
6161
LogicalResult enableOptimizationRemarksWithLLVMStreamer(
6262
MLIRContext &ctx, StringRef path, llvm::remarks::Format fmt,
63-
std::unique_ptr<detail::RemarkEmittingPolicyBase> remarkEmittingPolicy,
6463
const RemarkCategories &cat, bool printAsEmitRemarks) {
6564

6665
FailureOr<std::unique_ptr<detail::MLIRRemarkStreamerBase>> sOr =
6766
detail::LLVMRemarkStreamer::createToFile(path, fmt);
6867
if (failed(sOr))
6968
return failure();
7069

71-
return remark::enableOptimizationRemarks(ctx, std::move(*sOr),
72-
std::move(remarkEmittingPolicy), cat,
70+
return remark::enableOptimizationRemarks(ctx, std::move(*sOr), cat,
7371
printAsEmitRemarks);
7472
}
7573

0 commit comments

Comments
 (0)