Author: Mehdi Amini Date: 2025-09-25T12:12:10+02:00 New Revision: 660afe41d8f835058cba0b02d2856b12ed9fb0ba
URL: https://github.com/llvm/llvm-project/commit/660afe41d8f835058cba0b02d2856b12ed9fb0ba DIFF: https://github.com/llvm/llvm-project/commit/660afe41d8f835058cba0b02d2856b12ed9fb0ba.diff LOG: Revert "[MLIR] Implement remark emitting policies in MLIR (#160526)" This reverts commit 020b9286413c151d33e2d72c29abc8b56c7080d3. Added: Modified: mlir/include/mlir/IR/Remarks.h mlir/include/mlir/Remark/RemarkStreamer.h mlir/include/mlir/Tools/mlir-opt/MlirOptMain.h mlir/lib/IR/MLIRContext.cpp mlir/lib/IR/Remarks.cpp mlir/lib/Remark/RemarkStreamer.cpp mlir/lib/Tools/mlir-opt/MlirOptMain.cpp mlir/test/lib/Pass/TestRemarksPass.cpp mlir/unittests/IR/RemarkTest.cpp Removed: mlir/test/Pass/remark-final.mlir ################################################################################ diff --git a/mlir/include/mlir/IR/Remarks.h b/mlir/include/mlir/IR/Remarks.h index 5e2bd828bd00e..20e84ec83cd01 100644 --- a/mlir/include/mlir/IR/Remarks.h +++ b/mlir/include/mlir/IR/Remarks.h @@ -24,8 +24,6 @@ #include "mlir/IR/MLIRContext.h" #include "mlir/IR/Value.h" -#include <functional> - namespace mlir::remark { /// Define an the set of categories to accept. By default none are, the provided @@ -146,7 +144,7 @@ class Remark { llvm::StringRef getCategoryName() const { return categoryName; } - llvm::StringRef getCombinedCategoryName() const { + llvm::StringRef getFullCategoryName() const { if (categoryName.empty() && subCategoryName.empty()) return {}; if (subCategoryName.empty()) @@ -320,7 +318,7 @@ class InFlightRemark { }; //===----------------------------------------------------------------------===// -// Pluggable Remark Utilities +// MLIR Remark Streamer //===----------------------------------------------------------------------===// /// Base class for MLIR remark streamers that is used to stream @@ -340,26 +338,6 @@ class MLIRRemarkStreamerBase { virtual void finalize() {} // optional }; -using ReportFn = llvm::unique_function<void(const Remark &)>; - -/// Base class for MLIR remark emitting policies that is used to emit -/// optimization remarks to the underlying remark streamer. The derived classes -/// should implement the `reportRemark` method to provide the actual emitting -/// implementation. -class RemarkEmittingPolicyBase { -protected: - ReportFn reportImpl; - -public: - RemarkEmittingPolicyBase() = default; - virtual ~RemarkEmittingPolicyBase() = default; - - void initialize(ReportFn fn) { reportImpl = std::move(fn); } - - virtual void reportRemark(const Remark &remark) = 0; - virtual void finalize() = 0; -}; - //===----------------------------------------------------------------------===// // Remark Engine (MLIR Context will own this class) //===----------------------------------------------------------------------===// @@ -377,8 +355,6 @@ class RemarkEngine { std::optional<llvm::Regex> failedFilter; /// The MLIR remark streamer that will be used to emit the remarks. std::unique_ptr<MLIRRemarkStreamerBase> remarkStreamer; - /// The MLIR remark policy that will be used to emit the remarks. - std::unique_ptr<RemarkEmittingPolicyBase> remarkEmittingPolicy; /// When is enabled, engine also prints remarks as mlir::emitRemarks. bool printAsEmitRemarks = false; @@ -416,8 +392,6 @@ class RemarkEngine { InFlightRemark emitIfEnabled(Location loc, RemarkOpts opts, bool (RemarkEngine::*isEnabled)(StringRef) const); - /// Report a remark. - void reportImpl(const Remark &remark); public: /// Default constructor is deleted, use the other constructor. @@ -433,10 +407,8 @@ class RemarkEngine { ~RemarkEngine(); /// Setup the remark engine with the given output path and format. - LogicalResult - initialize(std::unique_ptr<MLIRRemarkStreamerBase> streamer, - std::unique_ptr<RemarkEmittingPolicyBase> remarkEmittingPolicy, - std::string *errMsg); + LogicalResult initialize(std::unique_ptr<MLIRRemarkStreamerBase> streamer, + std::string *errMsg); /// Report a remark. void report(const Remark &&remark); @@ -474,54 +446,6 @@ inline InFlightRemark withEngine(Fn fn, Location loc, Args &&...args) { namespace mlir::remark { -//===----------------------------------------------------------------------===// -// Remark Emitting Policies -//===----------------------------------------------------------------------===// - -/// Policy that emits all remarks. -class RemarkEmittingPolicyAll : public detail::RemarkEmittingPolicyBase { -public: - RemarkEmittingPolicyAll(); - - void reportRemark(const detail::Remark &remark) override { - reportImpl(remark); - } - void finalize() override {} -}; - -/// Policy that emits final remarks. -class RemarkEmittingPolicyFinal : public detail::RemarkEmittingPolicyBase { -private: - /// user can intercept them for custom processing via a registered callback, - /// otherwise they will be reported on engine destruction. - llvm::DenseSet<detail::Remark> postponedRemarks; - /// Optional user callback for intercepting postponed remarks. - std::function<void(const detail::Remark &)> postponedRemarkCallback; - -public: - RemarkEmittingPolicyFinal(); - - /// Register a callback to intercept postponed remarks before they are - /// reported. The callback will be invoked for each postponed remark in - /// finalize(). - void - setPostponedRemarkCallback(std::function<void(const detail::Remark &)> cb) { - postponedRemarkCallback = std::move(cb); - } - - void reportRemark(const detail::Remark &remark) override { - postponedRemarks.erase(remark); - postponedRemarks.insert(remark); - } - void finalize() override { - for (auto &remark : postponedRemarks) { - if (postponedRemarkCallback) - postponedRemarkCallback(remark); - reportImpl(remark); - } - } -}; - /// Create a Reason with llvm::formatv formatting. template <class... Ts> inline detail::LazyTextBuild reason(const char *fmt, Ts &&...ts) { @@ -581,72 +505,16 @@ inline detail::InFlightRemark analysis(Location loc, RemarkOpts opts) { /// Setup remarks for the context. This function will enable the remark engine /// and set the streamer to be used for optimization remarks. The remark -/// categories are used to filter the remarks that will be emitted by the -/// remark engine. If a category is not specified, it will not be emitted. If +/// categories are used to filter the remarks that will be emitted by the remark +/// engine. If a category is not specified, it will not be emitted. If /// `printAsEmitRemarks` is true, the remarks will be printed as /// mlir::emitRemarks. 'streamer' must inherit from MLIRRemarkStreamerBase and /// will be used to stream the remarks. LogicalResult enableOptimizationRemarks( MLIRContext &ctx, std::unique_ptr<remark::detail::MLIRRemarkStreamerBase> streamer, - std::unique_ptr<remark::detail::RemarkEmittingPolicyBase> - remarkEmittingPolicy, const remark::RemarkCategories &cats, bool printAsEmitRemarks = false); } // namespace mlir::remark -// DenseMapInfo specialization for Remark -namespace llvm { -template <> -struct DenseMapInfo<mlir::remark::detail::Remark> { - static constexpr StringRef kEmptyKey = "<EMPTY_KEY>"; - static constexpr StringRef kTombstoneKey = "<TOMBSTONE_KEY>"; - - /// Helper to provide a static dummy context for sentinel keys. - static mlir::MLIRContext *getStaticDummyContext() { - static mlir::MLIRContext dummyContext; - return &dummyContext; - } - - /// Create an empty remark - static inline mlir::remark::detail::Remark getEmptyKey() { - return mlir::remark::detail::Remark( - mlir::remark::RemarkKind::RemarkUnknown, mlir::DiagnosticSeverity::Note, - mlir::UnknownLoc::get(getStaticDummyContext()), - mlir::remark::RemarkOpts::name(kEmptyKey)); - } - - /// Create a dead remark - static inline mlir::remark::detail::Remark getTombstoneKey() { - return mlir::remark::detail::Remark( - mlir::remark::RemarkKind::RemarkUnknown, mlir::DiagnosticSeverity::Note, - mlir::UnknownLoc::get(getStaticDummyContext()), - mlir::remark::RemarkOpts::name(kTombstoneKey)); - } - - /// Compute the hash value of the remark - static unsigned getHashValue(const mlir::remark::detail::Remark &remark) { - return llvm::hash_combine( - remark.getLocation().getAsOpaquePointer(), - llvm::hash_value(remark.getRemarkName()), - llvm::hash_value(remark.getCombinedCategoryName())); - } - - static bool isEqual(const mlir::remark::detail::Remark &lhs, - const mlir::remark::detail::Remark &rhs) { - // Check for empty/tombstone keys first - if (lhs.getRemarkName() == kEmptyKey || - lhs.getRemarkName() == kTombstoneKey || - rhs.getRemarkName() == kEmptyKey || - rhs.getRemarkName() == kTombstoneKey) { - return lhs.getRemarkName() == rhs.getRemarkName(); - } - - // For regular remarks, compare key identifying fields - return lhs.getLocation() == rhs.getLocation() && - lhs.getRemarkName() == rhs.getRemarkName() && - lhs.getCombinedCategoryName() == rhs.getCombinedCategoryName(); - } -}; -} // namespace llvm #endif // MLIR_IR_REMARKS_H diff --git a/mlir/include/mlir/Remark/RemarkStreamer.h b/mlir/include/mlir/Remark/RemarkStreamer.h index 19a70fa4c4daa..170d6b439a442 100644 --- a/mlir/include/mlir/Remark/RemarkStreamer.h +++ b/mlir/include/mlir/Remark/RemarkStreamer.h @@ -45,7 +45,6 @@ namespace mlir::remark { /// mlir::emitRemarks. LogicalResult enableOptimizationRemarksWithLLVMStreamer( MLIRContext &ctx, StringRef filePath, llvm::remarks::Format fmt, - std::unique_ptr<detail::RemarkEmittingPolicyBase> remarkEmittingPolicy, const RemarkCategories &cat, bool printAsEmitRemarks = false); } // namespace mlir::remark diff --git a/mlir/include/mlir/Tools/mlir-opt/MlirOptMain.h b/mlir/include/mlir/Tools/mlir-opt/MlirOptMain.h index b7394387b0f9a..0fbe15fa2e0db 100644 --- a/mlir/include/mlir/Tools/mlir-opt/MlirOptMain.h +++ b/mlir/include/mlir/Tools/mlir-opt/MlirOptMain.h @@ -44,11 +44,6 @@ enum class RemarkFormat { REMARK_FORMAT_BITSTREAM, }; -enum class RemarkPolicy { - REMARK_POLICY_ALL, - REMARK_POLICY_FINAL, -}; - /// Configuration options for the mlir-opt tool. /// This is intended to help building tools like mlir-opt by collecting the /// supported options. @@ -247,8 +242,6 @@ class MlirOptMainConfig { /// Set the reproducer output filename RemarkFormat getRemarkFormat() const { return remarkFormatFlag; } - /// Set the remark policy to use. - RemarkPolicy getRemarkPolicy() const { return remarkPolicyFlag; } /// Set the remark format to use. std::string getRemarksAllFilter() const { return remarksAllFilterFlag; } /// Set the remark output file. @@ -272,8 +265,6 @@ class MlirOptMainConfig { /// Remark format RemarkFormat remarkFormatFlag = RemarkFormat::REMARK_FORMAT_STDOUT; - /// Remark policy - RemarkPolicy remarkPolicyFlag = RemarkPolicy::REMARK_POLICY_ALL; /// Remark file to output to std::string remarksOutputFileFlag = ""; /// Remark filters diff --git a/mlir/lib/IR/MLIRContext.cpp b/mlir/lib/IR/MLIRContext.cpp index 358f0fc39b19d..1fa04ed8e738f 100644 --- a/mlir/lib/IR/MLIRContext.cpp +++ b/mlir/lib/IR/MLIRContext.cpp @@ -278,8 +278,6 @@ class MLIRContextImpl { } } ~MLIRContextImpl() { - // finalize remark engine before destroying anything else. - remarkEngine.reset(); for (auto typeMapping : registeredTypes) typeMapping.second->~AbstractType(); for (auto attrMapping : registeredAttributes) diff --git a/mlir/lib/IR/Remarks.cpp b/mlir/lib/IR/Remarks.cpp index dca2da67d8a98..a55f61aff77bb 100644 --- a/mlir/lib/IR/Remarks.cpp +++ b/mlir/lib/IR/Remarks.cpp @@ -16,7 +16,7 @@ #include "llvm/ADT/StringRef.h" using namespace mlir::remark::detail; -using namespace mlir::remark; + //------------------------------------------------------------------------------ // Remark //------------------------------------------------------------------------------ @@ -70,7 +70,7 @@ static void printArgs(llvm::raw_ostream &os, llvm::ArrayRef<Remark::Arg> args) { void Remark::print(llvm::raw_ostream &os, bool printLocation) const { // Header: [Type] pass:remarkName StringRef type = getRemarkTypeString(); - StringRef categoryName = getCombinedCategoryName(); + StringRef categoryName = getFullCategoryName(); StringRef name = remarkName; os << '[' << type << "] "; @@ -140,7 +140,7 @@ llvm::remarks::Remark Remark::generateRemark() const { r.RemarkType = getRemarkType(); r.RemarkName = getRemarkName(); // MLIR does not use passes; instead, it has categories and sub-categories. - r.PassName = getCombinedCategoryName(); + r.PassName = getFullCategoryName(); r.FunctionName = getFunction(); r.Loc = locLambda(); for (const Remark::Arg &arg : getArgs()) { @@ -225,7 +225,7 @@ InFlightRemark RemarkEngine::emitOptimizationRemarkAnalysis(Location loc, // RemarkEngine //===----------------------------------------------------------------------===// -void RemarkEngine::reportImpl(const Remark &remark) { +void RemarkEngine::report(const Remark &&remark) { // Stream the remark if (remarkStreamer) remarkStreamer->streamOptimizationRemark(remark); @@ -235,19 +235,19 @@ void RemarkEngine::reportImpl(const Remark &remark) { emitRemark(remark.getLocation(), remark.getMsg()); } -void RemarkEngine::report(const Remark &&remark) { - if (remarkEmittingPolicy) - remarkEmittingPolicy->reportRemark(remark); -} - RemarkEngine::~RemarkEngine() { - if (remarkEmittingPolicy) - remarkEmittingPolicy->finalize(); - if (remarkStreamer) remarkStreamer->finalize(); } +llvm::LogicalResult +RemarkEngine::initialize(std::unique_ptr<MLIRRemarkStreamerBase> streamer, + std::string *errMsg) { + // If you need to validate categories/filters, do so here and set errMsg. + remarkStreamer = std::move(streamer); + return success(); +} + /// Returns true if filter is already anchored like ^...$ static bool isAnchored(llvm::StringRef s) { s = s.trim(); @@ -300,31 +300,15 @@ RemarkEngine::RemarkEngine(bool printAsEmitRemarks, failedFilter = buildFilter(cats, cats.failed); } -llvm::LogicalResult RemarkEngine::initialize( - std::unique_ptr<MLIRRemarkStreamerBase> streamer, - std::unique_ptr<RemarkEmittingPolicyBase> remarkEmittingPolicy, - std::string *errMsg) { - - remarkStreamer = std::move(streamer); - - // Capture `this`. Ensure RemarkEngine is not moved after this. - auto reportFunc = [this](const Remark &r) { this->reportImpl(r); }; - remarkEmittingPolicy->initialize(ReportFn(std::move(reportFunc))); - - this->remarkEmittingPolicy = std::move(remarkEmittingPolicy); - return success(); -} - llvm::LogicalResult mlir::remark::enableOptimizationRemarks( - MLIRContext &ctx, std::unique_ptr<detail::MLIRRemarkStreamerBase> streamer, - std::unique_ptr<detail::RemarkEmittingPolicyBase> remarkEmittingPolicy, - const RemarkCategories &cats, bool printAsEmitRemarks) { + MLIRContext &ctx, + std::unique_ptr<remark::detail::MLIRRemarkStreamerBase> streamer, + const remark::RemarkCategories &cats, bool printAsEmitRemarks) { auto engine = - std::make_unique<detail::RemarkEngine>(printAsEmitRemarks, cats); + std::make_unique<remark::detail::RemarkEngine>(printAsEmitRemarks, cats); std::string errMsg; - if (failed(engine->initialize(std::move(streamer), - std::move(remarkEmittingPolicy), &errMsg))) { + if (failed(engine->initialize(std::move(streamer), &errMsg))) { llvm::report_fatal_error( llvm::Twine("Failed to initialize remark engine. Error: ") + errMsg); } @@ -332,12 +316,3 @@ llvm::LogicalResult mlir::remark::enableOptimizationRemarks( return success(); } - -//===----------------------------------------------------------------------===// -// Remark emitting policies -//===----------------------------------------------------------------------===// - -namespace mlir::remark { -RemarkEmittingPolicyAll::RemarkEmittingPolicyAll() = default; -RemarkEmittingPolicyFinal::RemarkEmittingPolicyFinal() = default; -} // namespace mlir::remark diff --git a/mlir/lib/Remark/RemarkStreamer.cpp b/mlir/lib/Remark/RemarkStreamer.cpp index bf362862d24f6..d213a1a2068d6 100644 --- a/mlir/lib/Remark/RemarkStreamer.cpp +++ b/mlir/lib/Remark/RemarkStreamer.cpp @@ -60,7 +60,6 @@ void LLVMRemarkStreamer::finalize() { namespace mlir::remark { LogicalResult enableOptimizationRemarksWithLLVMStreamer( MLIRContext &ctx, StringRef path, llvm::remarks::Format fmt, - std::unique_ptr<detail::RemarkEmittingPolicyBase> remarkEmittingPolicy, const RemarkCategories &cat, bool printAsEmitRemarks) { FailureOr<std::unique_ptr<detail::MLIRRemarkStreamerBase>> sOr = @@ -68,8 +67,7 @@ LogicalResult enableOptimizationRemarksWithLLVMStreamer( if (failed(sOr)) return failure(); - return remark::enableOptimizationRemarks(ctx, std::move(*sOr), - std::move(remarkEmittingPolicy), cat, + return remark::enableOptimizationRemarks(ctx, std::move(*sOr), cat, printAsEmitRemarks); } diff --git a/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp b/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp index 212793c22d152..30fd384f3977c 100644 --- a/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp +++ b/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp @@ -37,7 +37,6 @@ #include "llvm/ADT/StringRef.h" #include "llvm/Remarks/RemarkFormat.h" #include "llvm/Support/CommandLine.h" -#include "llvm/Support/ErrorHandling.h" #include "llvm/Support/InitLLVM.h" #include "llvm/Support/LogicalResult.h" #include "llvm/Support/ManagedStatic.h" @@ -46,7 +45,6 @@ #include "llvm/Support/SourceMgr.h" #include "llvm/Support/ThreadPool.h" #include "llvm/Support/ToolOutputFile.h" -#include <memory> using namespace mlir; using namespace llvm; @@ -228,18 +226,6 @@ struct MlirOptMainConfigCLOptions : public MlirOptMainConfig { "bitstream", "Print bitstream file")), llvm::cl::cat(remarkCategory)}; - static llvm::cl::opt<RemarkPolicy, /*ExternalStorage=*/true> remarkPolicy{ - "remark-policy", - llvm::cl::desc("Specify the policy for remark output."), - cl::location(remarkPolicyFlag), - llvm::cl::value_desc("format"), - llvm::cl::init(RemarkPolicy::REMARK_POLICY_ALL), - llvm::cl::values(clEnumValN(RemarkPolicy::REMARK_POLICY_ALL, "all", - "Print all remarks"), - clEnumValN(RemarkPolicy::REMARK_POLICY_FINAL, "final", - "Print final remarks")), - llvm::cl::cat(remarkCategory)}; - static cl::opt<std::string, /*ExternalStorage=*/true> remarksAll( "remarks-filter", cl::desc("Show all remarks: passed, missed, failed, analysis"), @@ -531,28 +517,18 @@ performActions(raw_ostream &os, return failure(); context->enableMultithreading(wasThreadingEnabled); - // Set the remark categories and policy. + remark::RemarkCategories cats{ config.getRemarksAllFilter(), config.getRemarksPassedFilter(), config.getRemarksMissedFilter(), config.getRemarksAnalyseFilter(), config.getRemarksFailedFilter()}; mlir::MLIRContext &ctx = *context; - // Helper to create the appropriate policy based on configuration - auto createPolicy = [&config]() - -> std::unique_ptr<mlir::remark::detail::RemarkEmittingPolicyBase> { - if (config.getRemarkPolicy() == RemarkPolicy::REMARK_POLICY_ALL) - return std::make_unique<mlir::remark::RemarkEmittingPolicyAll>(); - if (config.getRemarkPolicy() == RemarkPolicy::REMARK_POLICY_FINAL) - return std::make_unique<mlir::remark::RemarkEmittingPolicyFinal>(); - - llvm_unreachable("Invalid remark policy"); - }; switch (config.getRemarkFormat()) { case RemarkFormat::REMARK_FORMAT_STDOUT: if (failed(mlir::remark::enableOptimizationRemarks( - ctx, nullptr, createPolicy(), cats, true /*printAsEmitRemarks*/))) + ctx, nullptr, cats, true /*printAsEmitRemarks*/))) return failure(); break; @@ -561,7 +537,7 @@ performActions(raw_ostream &os, ? "mlir-remarks.yaml" : config.getRemarksOutputFile(); if (failed(mlir::remark::enableOptimizationRemarksWithLLVMStreamer( - ctx, file, llvm::remarks::Format::YAML, createPolicy(), cats))) + ctx, file, llvm::remarks::Format::YAML, cats))) return failure(); break; } @@ -571,7 +547,7 @@ performActions(raw_ostream &os, ? "mlir-remarks.bitstream" : config.getRemarksOutputFile(); if (failed(mlir::remark::enableOptimizationRemarksWithLLVMStreamer( - ctx, file, llvm::remarks::Format::Bitstream, createPolicy(), cats))) + ctx, file, llvm::remarks::Format::Bitstream, cats))) return failure(); break; } diff --git a/mlir/test/Pass/remark-final.mlir b/mlir/test/Pass/remark-final.mlir deleted file mode 100644 index 38af8a4bc245d..0000000000000 --- a/mlir/test/Pass/remark-final.mlir +++ /dev/null @@ -1,12 +0,0 @@ -// RUN: mlir-opt %s --test-remark --remarks-filter="category.*" --remark-policy=final --remark-format=yaml --remarks-output-file=%t.yaml -// RUN: FileCheck %s < %t.yaml -module @foo { - "test.op"() : () -> () - -} - -// CHECK-NOT: This is a test passed remark (should be dropped) - -// CHECK-DAG: !Analysis -// CHECK-DAG: !Failure -// CHECK-DAG: !Passed diff --git a/mlir/test/lib/Pass/TestRemarksPass.cpp b/mlir/test/lib/Pass/TestRemarksPass.cpp index 5ca2d1a8550aa..3b25686b3dc14 100644 --- a/mlir/test/lib/Pass/TestRemarksPass.cpp +++ b/mlir/test/lib/Pass/TestRemarksPass.cpp @@ -43,12 +43,7 @@ class TestRemarkPass : public PassWrapper<TestRemarkPass, OperationPass<>> { << remark::add("This is a test missed remark") << remark::reason("because we are testing the remark pipeline") << remark::suggest("try using the remark pipeline feature"); - mlir::remark::passed( - loc, - remark::RemarkOpts::name("test-remark").category("category-1-passed")) - << remark::add("This is a test passed remark (should be dropped)") - << remark::reason("because we are testing the remark pipeline") - << remark::suggest("try using the remark pipeline feature"); + mlir::remark::passed( loc, remark::RemarkOpts::name("test-remark").category("category-1-passed")) diff --git a/mlir/unittests/IR/RemarkTest.cpp b/mlir/unittests/IR/RemarkTest.cpp index 91825387282a3..5bfca255c22ca 100644 --- a/mlir/unittests/IR/RemarkTest.cpp +++ b/mlir/unittests/IR/RemarkTest.cpp @@ -53,12 +53,10 @@ TEST(Remark, TestOutputOptimizationRemark) { /*missed=*/categoryUnroll, /*analysis=*/categoryRegister, /*failed=*/categoryInliner}; - std::unique_ptr<remark::RemarkEmittingPolicyAll> policy = - std::make_unique<remark::RemarkEmittingPolicyAll>(); + LogicalResult isEnabled = mlir::remark::enableOptimizationRemarksWithLLVMStreamer( - context, yamlFile, llvm::remarks::Format::YAML, std::move(policy), - cats); + context, yamlFile, llvm::remarks::Format::YAML, cats); ASSERT_TRUE(succeeded(isEnabled)) << "Failed to enable remark engine"; // PASS: something succeeded @@ -205,10 +203,9 @@ TEST(Remark, TestOutputOptimizationRemarkDiagnostic) { /*missed=*/categoryUnroll, /*analysis=*/categoryRegister, /*failed=*/categoryUnroll}; - std::unique_ptr<remark::RemarkEmittingPolicyAll> policy = - std::make_unique<remark::RemarkEmittingPolicyAll>(); - LogicalResult isEnabled = remark::enableOptimizationRemarks( - context, nullptr, std::move(policy), cats, true); + + LogicalResult isEnabled = + remark::enableOptimizationRemarks(context, nullptr, cats, true); ASSERT_TRUE(succeeded(isEnabled)) << "Failed to enable remark engine"; @@ -289,11 +286,8 @@ TEST(Remark, TestCustomOptimizationRemarkDiagnostic) { /*analysis=*/std::nullopt, /*failed=*/categoryLoopunroll}; - std::unique_ptr<remark::RemarkEmittingPolicyAll> policy = - std::make_unique<remark::RemarkEmittingPolicyAll>(); LogicalResult isEnabled = remark::enableOptimizationRemarks( - context, std::make_unique<MyCustomStreamer>(), std::move(policy), cats, - true); + context, std::make_unique<MyCustomStreamer>(), cats, true); ASSERT_TRUE(succeeded(isEnabled)) << "Failed to enable remark engine"; // Remark 1: pass, category LoopUnroll @@ -321,66 +315,4 @@ TEST(Remark, TestCustomOptimizationRemarkDiagnostic) { EXPECT_NE(errOut.find(pass2Msg), std::string::npos); // printed EXPECT_EQ(errOut.find(pass3Msg), std::string::npos); // filtered out } - -TEST(Remark, TestRemarkFinal) { - testing::internal::CaptureStderr(); - const auto *pass1Msg = "I failed"; - const auto *pass2Msg = "I failed too"; - const auto *pass3Msg = "I succeeded"; - const auto *pass4Msg = "I succeeded too"; - - std::string categoryLoopunroll("LoopUnroll"); - - std::string seenMsg = ""; - - { - MLIRContext context; - Location loc = FileLineColLoc::get(&context, "test.cpp", 1, 5); - Location locOther = FileLineColLoc::get(&context, "test.cpp", 55, 5); - - // Setup the remark engine - mlir::remark::RemarkCategories cats{/*all=*/"", - /*passed=*/categoryLoopunroll, - /*missed=*/categoryLoopunroll, - /*analysis=*/categoryLoopunroll, - /*failed=*/categoryLoopunroll}; - - std::unique_ptr<remark::RemarkEmittingPolicyFinal> policy = - std::make_unique<remark::RemarkEmittingPolicyFinal>(); - LogicalResult isEnabled = remark::enableOptimizationRemarks( - context, std::make_unique<MyCustomStreamer>(), std::move(policy), cats, - true); - ASSERT_TRUE(succeeded(isEnabled)) << "Failed to enable remark engine"; - - // Remark 1: failure - remark::failed( - loc, remark::RemarkOpts::name("Unroller").category(categoryLoopunroll)) - << pass1Msg; - - // Remark 2: failure - remark::missed( - loc, remark::RemarkOpts::name("Unroller").category(categoryLoopunroll)) - << remark::reason(pass2Msg); - - // Remark 3: pass - remark::passed( - loc, remark::RemarkOpts::name("Unroller").category(categoryLoopunroll)) - << pass3Msg; - - // Remark 4: pass - remark::passed( - locOther, - remark::RemarkOpts::name("Unroller").category(categoryLoopunroll)) - << pass4Msg; - } - - llvm::errs().flush(); - std::string errOut = ::testing::internal::GetCapturedStderr(); - - // Containment checks for messages. - EXPECT_EQ(errOut.find(pass1Msg), std::string::npos); // dropped - EXPECT_EQ(errOut.find(pass2Msg), std::string::npos); // dropped - EXPECT_NE(errOut.find(pass3Msg), std::string::npos); // shown - EXPECT_NE(errOut.find(pass4Msg), std::string::npos); // shown -} } // namespace _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits