brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · b93e7a6 Raw
76 lines · cpp
1//===- ResourceTest.cpp -----------------------------------------*- C++ -*-===//2//3// This file is licensed 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 "../../test/lib/Dialect/Test/TestAttributes.h"10#include "../../test/lib/Dialect/Test/TestDialect.h"11#include "mlir/Parser/Parser.h"12 13#include "gmock/gmock.h"14 15using namespace mlir;16 17namespace {18TEST(MLIRParser, ResourceKeyConflict) {19  std::string moduleStr = R"mlir(20    "test.use1"() {attr = #test.e1di64_elements<blob1> : tensor<3xi64> } : () -> ()21 22    {-#23      dialect_resources: {24        test: {25          blob1: "0x08000000010000000000000002000000000000000300000000000000"26        }27      }28    #-}29  )mlir";30  std::string moduleStr2 = R"mlir(31    "test.use2"() {attr = #test.e1di64_elements<blob1> : tensor<3xi64> } : () -> ()32 33    {-#34      dialect_resources: {35        test: {36          blob1: "0x08000000040000000000000005000000000000000600000000000000"37        }38      }39    #-}40  )mlir";41 42  MLIRContext context;43  context.loadDialect<test::TestDialect>();44 45  // Parse both modules into the same context so that we ensure the conflicting46  // resources have been loaded.47  OwningOpRef<ModuleOp> module1 =48      parseSourceString<ModuleOp>(moduleStr, &context);49  OwningOpRef<ModuleOp> module2 =50      parseSourceString<ModuleOp>(moduleStr2, &context);51  ASSERT_TRUE(module1 && module2);52 53  // Merge the two modules so that we can test printing the remapped resources.54  Block *block = module1->getBody();55  block->getOperations().splice(block->end(),56                                module2->getBody()->getOperations());57 58  // Check that conflicting resources were remapped.59  std::string outputStr;60  {61    llvm::raw_string_ostream os(outputStr);62    module1->print(os);63  }64  StringRef output(outputStr);65  EXPECT_TRUE(66      output.contains("\"test.use1\"() {attr = #test.e1di64_elements<blob1>"));67  EXPECT_TRUE(output.contains(68      "blob1: \"0x08000000010000000000000002000000000000000300000000000000\""));69  EXPECT_TRUE(output.contains(70      "\"test.use2\"() {attr = #test.e1di64_elements<blob1_1>"));71  EXPECT_TRUE(output.contains(72      "blob1_1: "73      "\"0x08000000040000000000000005000000000000000600000000000000\""));74}75} // namespace76