xref: /llvm-project/mlir/lib/Dialect/Transform/Transforms/PreloadLibraryPass.cpp (revision 99c15eb49ba0b607314b3bd221f0760049130d97)
1 //===- PreloadLibraryPass.cpp - Pass to preload a transform library -------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "mlir/Dialect/Transform/IR/TransformDialect.h"
10 #include "mlir/Dialect/Transform/Transforms/Passes.h"
11 #include "mlir/Dialect/Transform/Transforms/TransformInterpreterUtils.h"
12 
13 using namespace mlir;
14 
15 namespace mlir {
16 namespace transform {
17 #define GEN_PASS_DEF_PRELOADLIBRARYPASS
18 #include "mlir/Dialect/Transform/Transforms/Passes.h.inc"
19 } // namespace transform
20 } // namespace mlir
21 
22 namespace {
23 class PreloadLibraryPass
24     : public transform::impl::PreloadLibraryPassBase<PreloadLibraryPass> {
25 public:
26   using Base::Base;
27 
runOnOperation()28   void runOnOperation() override {
29     OwningOpRef<ModuleOp> mergedParsedLibraries;
30     if (failed(transform::detail::assembleTransformLibraryFromPaths(
31             &getContext(), transformLibraryPaths, mergedParsedLibraries)))
32       return signalPassFailure();
33     // TODO: investigate using a resource blob if some ownership mode allows it.
34     auto *dialect =
35         getContext().getOrLoadDialect<transform::TransformDialect>();
36     if (failed(
37             dialect->loadIntoLibraryModule(std::move(mergedParsedLibraries))))
38       signalPassFailure();
39   }
40 };
41 } // namespace
42