
This PR implements structured, tooling-friendly optimization remarks with zero cost unless enabled. It implements: - `RemarkEngine` collects finalized remarks within `MLIRContext`. - `MLIRRemarkStreamerBase` abstract class streams them to a backend. - Backends: `MLIRLLVMRemarkStreamer` (bridges to llvm::remarks → YAML/Bitstream) or your own custom streamer. - Optional mirroring to DiagnosticEngine (printAsEmitRemarks + categories). - Off by default; no behavior change unless enabled. Thread-safe; ordering best-effort. ## Overview ``` Passes (reportOptimization*) │ ▼ +-------------------+ | RemarkEngine | collects +-------------------+ │ │ │ mirror │ stream ▼ ▼ emitRemark MLIRRemarkStreamerBase (abstract) │ ├── MLIRLLVMRemarkStreamer → llvm::remarks → YAML | Bitstream └── CustomStreamer → your sink ``` ## Enable Remark engine and Plug LLVM's Remark streamer ``` // Enable once per MLIRContext. This uses `MLIRLLVMRemarkStreamer` mlir::remark::enableOptimizationRemarksToFile( ctx, path, llvm::remarks::Format::YAML, cats); ``` ## API to emit remark ``` // Emit from a pass remark::passed(loc, categoryVectorizer, myPassname1) << "vectorized loop"; remark::missed(loc, categoryUnroll, "MyPass") << remark::reason("not profitable at this size") // Creates structured reason arg << remark::suggest("increase unroll factor to >=4"); // Creates structured suggestion arg remark::passed(loc, categoryVectorizer, myPassname1) << "vectorized loop" << remark::metric("tripCount", 128); // Create structured metric on-the-fly ```
58 lines
1.3 KiB
CMake
58 lines
1.3 KiB
CMake
# Enable errors for any global constructors.
|
|
add_flag_if_supported("-Werror=global-constructors" WERROR_GLOBAL_CONSTRUCTOR)
|
|
|
|
add_subdirectory(Analysis)
|
|
add_subdirectory(AsmParser)
|
|
add_subdirectory(Bytecode)
|
|
add_subdirectory(Conversion)
|
|
add_subdirectory(Debug)
|
|
add_subdirectory(Dialect)
|
|
add_subdirectory(IR)
|
|
add_subdirectory(Interfaces)
|
|
add_subdirectory(Parser)
|
|
add_subdirectory(Pass)
|
|
add_subdirectory(Query)
|
|
add_subdirectory(Reducer)
|
|
add_subdirectory(Remark)
|
|
add_subdirectory(Rewrite)
|
|
add_subdirectory(Support)
|
|
add_subdirectory(TableGen)
|
|
add_subdirectory(Target)
|
|
add_subdirectory(Tools)
|
|
add_subdirectory(Transforms)
|
|
add_subdirectory(ExecutionEngine)
|
|
|
|
get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
|
|
get_property(conversion_libs GLOBAL PROPERTY MLIR_CONVERSION_LIBS)
|
|
get_property(extension_libs GLOBAL PROPERTY MLIR_EXTENSION_LIBS)
|
|
|
|
add_mlir_library(MLIRRegisterAllDialects
|
|
RegisterAllDialects.cpp
|
|
|
|
PARTIAL_SOURCES_INTENDED
|
|
|
|
LINK_LIBS PUBLIC
|
|
${dialect_libs}
|
|
)
|
|
|
|
add_mlir_library(MLIRRegisterAllPasses
|
|
RegisterAllPasses.cpp
|
|
|
|
PARTIAL_SOURCES_INTENDED
|
|
|
|
LINK_LIBS PUBLIC
|
|
${dialect_libs} # Some passes are part of the dialect libs
|
|
${conversion_libs}
|
|
)
|
|
|
|
add_mlir_library(MLIRRegisterAllExtensions
|
|
RegisterAllExtensions.cpp
|
|
|
|
PARTIAL_SOURCES_INTENDED
|
|
|
|
LINK_LIBS PUBLIC
|
|
${dialect_libs}
|
|
${conversion_libs}
|
|
${extension_libs}
|
|
)
|