Then you can `#include` the generated file in any C++ implementation file you
like. (You will also need to make sure the library depends on the CMake target
defined in the above.) The generated file will have a `populateWithGenerated(
-MLIRContext *context, OwningRewritePatternList &patterns)` function that you can
+OwningRewritePatternList &patterns)` function that you can
use to collect all the generated patterns inside `patterns` and then use
`patterns` in any pass you would like.
void mlir::populateGpuToNVVMConversionPatterns(
LLVMTypeConverter &converter, OwningRewritePatternList &patterns) {
- populateWithGenerated(converter.getDialect()->getContext(), patterns);
+ populateWithGenerated(patterns);
patterns
.insert<GPUIndexIntrinsicOpLowering<gpu::ThreadIdOp, NVVM::ThreadIdXOp,
NVVM::ThreadIdYOp, NVVM::ThreadIdZOp>,
void mlir::populateGpuToROCDLConversionPatterns(
LLVMTypeConverter &converter, OwningRewritePatternList &patterns) {
- populateWithGenerated(converter.getDialect()->getContext(), patterns);
+ populateWithGenerated(patterns);
patterns.insert<
GPUIndexIntrinsicOpLowering<gpu::ThreadIdOp, ROCDL::ThreadIdXOp,
ROCDL::ThreadIdYOp, ROCDL::ThreadIdZOp>,
void mlir::populateGPUToSPIRVPatterns(SPIRVTypeConverter &typeConverter,
OwningRewritePatternList &patterns) {
- auto *context = patterns.getContext();
- populateWithGenerated(context, patterns);
+ populateWithGenerated(patterns);
patterns.insert<
GPUFuncOpConversion, GPUModuleConversion, GPUReturnOpConversion,
LaunchConfigConversion<gpu::BlockIdOp, spirv::BuiltIn::WorkgroupId>,
spirv::BuiltIn::NumSubgroups>,
SingleDimLaunchConfigConversion<gpu::SubgroupSizeOp,
spirv::BuiltIn::SubgroupSize>,
- WorkGroupSizeConversion>(typeConverter, context);
+ WorkGroupSizeConversion>(typeConverter, patterns.getContext());
}
void mlir::populateShapeToStandardConversionPatterns(
OwningRewritePatternList &patterns) {
// clang-format off
- populateWithGenerated(patterns.getContext(), patterns);
+ populateWithGenerated(patterns);
patterns.insert<
AnyOpConversion,
BinaryOpConversion<AddOp, AddIOp>,
struct TestPatternDriver : public PassWrapper<TestPatternDriver, FunctionPass> {
void runOnFunction() override {
mlir::OwningRewritePatternList patterns(&getContext());
- populateWithGenerated(&getContext(), patterns);
+ populateWithGenerated(patterns);
// Verify named pattern is generated with expected name.
patterns.insert<FoldingPattern, TestNamedPatternRule>(&getContext());
void runOnOperation() override {
TestTypeConverter converter;
mlir::OwningRewritePatternList patterns(&getContext());
- populateWithGenerated(&getContext(), patterns);
+ populateWithGenerated(patterns);
patterns.insert<
TestRegionRewriteBlockMovement, TestRegionRewriteUndo, TestCreateBlock,
TestCreateIllegalBlock, TestUndoBlockArgReplace, TestUndoBlockErase,
}
// Emit function to add the generated matchers to the pattern list.
- os << "void LLVM_ATTRIBUTE_UNUSED populateWithGenerated(::mlir::MLIRContext "
- "*context, ::mlir::OwningRewritePatternList &patterns) {\n";
+ os << "void LLVM_ATTRIBUTE_UNUSED populateWithGenerated("
+ "::mlir::OwningRewritePatternList &patterns) {\n";
for (const auto &name : rewriterNames) {
- os << " patterns.insert<" << name << ">(context);\n";
+ os << " patterns.insert<" << name << ">(patterns.getContext());\n";
}
os << "}\n";
}