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