Mercurial > hg > CbC > CbC_llvm
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