brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.6 KiB · 8504928 Raw
96 lines · cpp
1//===- Preload.cpp - Test MlirOptMain parameterization ------===//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/DebugExtension/DebugExtension.h"10#include "mlir/Dialect/Transform/IR/TransformDialect.h"11#include "mlir/Dialect/Transform/IR/Utils.h"12#include "mlir/Dialect/Transform/Transforms/TransformInterpreterUtils.h"13#include "mlir/IR/AsmState.h"14#include "mlir/IR/DialectRegistry.h"15#include "mlir/IR/Verifier.h"16#include "mlir/Parser/Parser.h"17#include "mlir/Pass/Pass.h"18#include "mlir/Pass/PassManager.h"19#include "mlir/Support/FileUtilities.h"20#include "mlir/Support/TypeID.h"21#include "mlir/Tools/mlir-opt/MlirOptMain.h"22#include "llvm/Support/MemoryBuffer.h"23#include "llvm/Support/raw_ostream.h"24#include "gtest/gtest.h"25 26using namespace mlir;27 28namespace mlir {29namespace test {30std::unique_ptr<Pass> createTestTransformDialectInterpreterPass();31} // namespace test32} // namespace mlir33 34const static llvm::StringLiteral library = R"MLIR(35module attributes {transform.with_named_sequence} {36  transform.named_sequence private @__transform_main(%arg0: !transform.any_op {transform.readonly}) {37    transform.debug.emit_remark_at %arg0, "from external symbol" : !transform.any_op38    transform.yield39  }40})MLIR";41 42const static llvm::StringLiteral input = R"MLIR(43module attributes {transform.with_named_sequence} {44  transform.named_sequence private @__transform_main(%arg0: !transform.any_op {transform.readonly})45 46  transform.sequence failures(propagate) {47  ^bb0(%arg0: !transform.any_op):48    include @__transform_main failures(propagate) (%arg0) : (!transform.any_op) -> ()49  }50})MLIR";51 52TEST(Preload, ContextPreloadConstructedLibrary) {53  registerPassManagerCLOptions();54 55  MLIRContext context;56  auto *dialect = context.getOrLoadDialect<transform::TransformDialect>();57  DialectRegistry registry;58  mlir::transform::registerDebugExtension(registry);59  registry.applyExtensions(&context);60  ParserConfig parserConfig(&context);61 62  OwningOpRef<ModuleOp> inputModule =63      parseSourceString<ModuleOp>(input, parserConfig, "<input>");64  EXPECT_TRUE(inputModule) << "failed to parse input module";65 66  OwningOpRef<ModuleOp> transformLibrary =67      parseSourceString<ModuleOp>(library, parserConfig, "<transform-library>");68  EXPECT_TRUE(transformLibrary) << "failed to parse transform module";69  LogicalResult diag =70      dialect->loadIntoLibraryModule(std::move(transformLibrary));71  EXPECT_TRUE(succeeded(diag));72 73  ModuleOp retrievedTransformLibrary =74      transform::detail::getPreloadedTransformModule(&context);75  EXPECT_TRUE(retrievedTransformLibrary)76      << "failed to retrieve transform module";77 78  OwningOpRef<Operation *> clonedTransformModule(79      retrievedTransformLibrary->clone());80 81  LogicalResult res = transform::detail::mergeSymbolsInto(82      inputModule->getOperation(), std::move(clonedTransformModule));83  EXPECT_TRUE(succeeded(res)) << "failed to define declared symbols";84 85  transform::TransformOpInterface entryPoint =86      transform::detail::findTransformEntryPoint(inputModule->getOperation(),87                                                 retrievedTransformLibrary);88  EXPECT_TRUE(entryPoint) << "failed to find entry point";89 90  transform::TransformOptions options;91  res = transform::applyTransformNamedSequence(92      inputModule->getOperation(), entryPoint, retrievedTransformLibrary,93      options);94  EXPECT_TRUE(succeeded(res)) << "failed to apply named sequence";95}96