42 lines · cpp
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-exception6//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 13using namespace mlir;14 15namespace mlir {16namespace transform {17#define GEN_PASS_DEF_PRELOADLIBRARYPASS18#include "mlir/Dialect/Transform/Transforms/Passes.h.inc"19} // namespace transform20} // namespace mlir21 22namespace {23class PreloadLibraryPass24 : public transform::impl::PreloadLibraryPassBase<PreloadLibraryPass> {25public:26 using Base::Base;27 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} // namespace42