aboutsummaryrefslogtreecommitdiff
path: root/mlir/lib/Dialect/Transform/Transforms/PreloadLibraryPass.cpp
blob: 4ade414dba833a8e45e8d23231ec53f870228289 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//===- PreloadLibraryPass.cpp - Pass to preload a transform library -------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#include "mlir/Dialect/Transform/IR/TransformDialect.h"
#include "mlir/Dialect/Transform/Transforms/Passes.h"
#include "mlir/Dialect/Transform/Transforms/TransformInterpreterUtils.h"

using namespace mlir;

namespace mlir {
namespace transform {
#define GEN_PASS_DEF_PRELOADLIBRARYPASS
#include "mlir/Dialect/Transform/Transforms/Passes.h.inc"
} // namespace transform
} // namespace mlir

namespace {
class PreloadLibraryPass
    : public transform::impl::PreloadLibraryPassBase<PreloadLibraryPass> {
public:
  using Base::Base;

  void runOnOperation() override {
    OwningOpRef<ModuleOp> mergedParsedLibraries;
    if (failed(transform::detail::assembleTransformLibraryFromPaths(
            &getContext(), transformLibraryPaths, mergedParsedLibraries)))
      return signalPassFailure();
    // TODO: investigate using a resource blob if some ownership mode allows it.
    auto *dialect =
        getContext().getOrLoadDialect<transform::TransformDialect>();
    if (failed(
            dialect->loadIntoLibraryModule(std::move(mergedParsedLibraries))))
      signalPassFailure();
  }
};
} // namespace