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