diff mlir/unittests/Parser/ResourceTest.cpp @ 236:c4bab56944e8 llvm-original

LLVM 16
author kono
date Wed, 09 Nov 2022 17:45:10 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mlir/unittests/Parser/ResourceTest.cpp	Wed Nov 09 17:45:10 2022 +0900
@@ -0,0 +1,75 @@
+//===- ResourceTest.cpp -----------------------------------------*- C++ -*-===//
+//
+// This file is licensed 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 "../../test/lib/Dialect/Test/TestAttributes.h"
+#include "../../test/lib/Dialect/Test/TestDialect.h"
+#include "mlir/Parser/Parser.h"
+
+#include "gmock/gmock.h"
+
+using namespace mlir;
+
+namespace {
+TEST(MLIRParser, ResourceKeyConflict) {
+  std::string moduleStr = R"mlir(
+    "test.use1"() {attr = #test.e1di64_elements<blob1> : tensor<3xi64> } : () -> ()
+
+    {-#
+      dialect_resources: {
+        test: {
+          blob1: "0x08000000010000000000000002000000000000000300000000000000"
+        }
+      }
+    #-}
+  )mlir";
+  std::string moduleStr2 = R"mlir(
+    "test.use2"() {attr = #test.e1di64_elements<blob1> : tensor<3xi64> } : () -> ()
+
+    {-#
+      dialect_resources: {
+        test: {
+          blob1: "0x08000000040000000000000005000000000000000600000000000000"
+        }
+      }
+    #-}
+  )mlir";
+
+  MLIRContext context;
+  context.loadDialect<test::TestDialect>();
+
+  // Parse both modules into the same context so that we ensure the conflicting
+  // resources have been loaded.
+  OwningOpRef<ModuleOp> module1 =
+      parseSourceString<ModuleOp>(moduleStr, &context);
+  OwningOpRef<ModuleOp> module2 =
+      parseSourceString<ModuleOp>(moduleStr2, &context);
+  ASSERT_TRUE(module1 && module2);
+
+  // Merge the two modules so that we can test printing the remapped resources.
+  Block *block = module1->getBody();
+  block->getOperations().splice(block->end(),
+                                module2->getBody()->getOperations());
+
+  // Check that conflicting resources were remapped.
+  std::string outputStr;
+  {
+    llvm::raw_string_ostream os(outputStr);
+    module1->print(os);
+  }
+  StringRef output(outputStr);
+  EXPECT_TRUE(
+      output.contains("\"test.use1\"() {attr = #test.e1di64_elements<blob1>"));
+  EXPECT_TRUE(output.contains(
+      "blob1: \"0x08000000010000000000000002000000000000000300000000000000\""));
+  EXPECT_TRUE(output.contains(
+      "\"test.use2\"() {attr = #test.e1di64_elements<blob1_1>"));
+  EXPECT_TRUE(output.contains(
+      "blob1_1: "
+      "\"0x08000000040000000000000005000000000000000600000000000000\""));
+}
+} // namespace