1*bd6531b9SKazu Hirata //===- ImportIDTableTests.cpp - Unit tests for ImportIDTable --------------===// 2*bd6531b9SKazu Hirata // 3*bd6531b9SKazu Hirata // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*bd6531b9SKazu Hirata // See https://llvm.org/LICENSE.txt for license information. 5*bd6531b9SKazu Hirata // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*bd6531b9SKazu Hirata // 7*bd6531b9SKazu Hirata //===----------------------------------------------------------------------===// 8*bd6531b9SKazu Hirata 9*bd6531b9SKazu Hirata #include "llvm/Transforms/IPO/FunctionImport.h" 10*bd6531b9SKazu Hirata #include "gmock/gmock.h" 11*bd6531b9SKazu Hirata #include "gtest/gtest.h" 12*bd6531b9SKazu Hirata #include <set> 13*bd6531b9SKazu Hirata #include <type_traits> 14*bd6531b9SKazu Hirata 15*bd6531b9SKazu Hirata using namespace llvm; 16*bd6531b9SKazu Hirata 17*bd6531b9SKazu Hirata TEST(ImportIDTableTests, Basic) { 18*bd6531b9SKazu Hirata FunctionImporter::ImportIDTable Table; 19*bd6531b9SKazu Hirata 20*bd6531b9SKazu Hirata auto [Def, Decl] = Table.createImportIDs("mod", 123U); 21*bd6531b9SKazu Hirata auto [Def2, Decl2] = Table.createImportIDs("stuff", 456U); 22*bd6531b9SKazu Hirata 23*bd6531b9SKazu Hirata // Def and Decl must be of the same unsigned integer type. 24*bd6531b9SKazu Hirata static_assert( 25*bd6531b9SKazu Hirata std::is_unsigned_v<FunctionImporter::ImportIDTable::ImportIDTy>); 26*bd6531b9SKazu Hirata static_assert(std::is_same_v<FunctionImporter::ImportIDTable::ImportIDTy, 27*bd6531b9SKazu Hirata decltype(Def)>); 28*bd6531b9SKazu Hirata static_assert(std::is_same_v<FunctionImporter::ImportIDTable::ImportIDTy, 29*bd6531b9SKazu Hirata decltype(Decl)>); 30*bd6531b9SKazu Hirata 31*bd6531b9SKazu Hirata // Check that all IDs are unique. 32*bd6531b9SKazu Hirata std::set<FunctionImporter::ImportIDTable::ImportIDTy> IDs = {Def, Decl, Def2, 33*bd6531b9SKazu Hirata Decl2}; 34*bd6531b9SKazu Hirata EXPECT_THAT(IDs, ::testing::SizeIs(4)); 35*bd6531b9SKazu Hirata 36*bd6531b9SKazu Hirata // Verify what Def maps to. 37*bd6531b9SKazu Hirata auto DefTuple = Table.lookup(Def); 38*bd6531b9SKazu Hirata EXPECT_EQ(std::get<0>(DefTuple), StringRef("mod")); 39*bd6531b9SKazu Hirata EXPECT_EQ(std::get<1>(DefTuple), 123U); 40*bd6531b9SKazu Hirata EXPECT_EQ(std::get<2>(DefTuple), GlobalValueSummary::Definition); 41*bd6531b9SKazu Hirata 42*bd6531b9SKazu Hirata // Verify what Decl maps to. 43*bd6531b9SKazu Hirata auto DeclTuple = Table.lookup(Decl); 44*bd6531b9SKazu Hirata EXPECT_EQ(std::get<0>(DeclTuple), StringRef("mod")); 45*bd6531b9SKazu Hirata EXPECT_EQ(std::get<1>(DeclTuple), 123U); 46*bd6531b9SKazu Hirata EXPECT_EQ(std::get<2>(DeclTuple), GlobalValueSummary::Declaration); 47*bd6531b9SKazu Hirata 48*bd6531b9SKazu Hirata // Verify what Def2 maps to. 49*bd6531b9SKazu Hirata auto Def2Tuple = Table.lookup(Def2); 50*bd6531b9SKazu Hirata EXPECT_EQ(std::get<0>(Def2Tuple), StringRef("stuff")); 51*bd6531b9SKazu Hirata EXPECT_EQ(std::get<1>(Def2Tuple), 456U); 52*bd6531b9SKazu Hirata EXPECT_EQ(std::get<2>(Def2Tuple), GlobalValueSummary::Definition); 53*bd6531b9SKazu Hirata 54*bd6531b9SKazu Hirata // Verify what Decl2 maps to. 55*bd6531b9SKazu Hirata auto Decl2Tuple = Table.lookup(Decl2); 56*bd6531b9SKazu Hirata EXPECT_EQ(std::get<0>(Decl2Tuple), StringRef("stuff")); 57*bd6531b9SKazu Hirata EXPECT_EQ(std::get<1>(Decl2Tuple), 456U); 58*bd6531b9SKazu Hirata EXPECT_EQ(std::get<2>(Decl2Tuple), GlobalValueSummary::Declaration); 59*bd6531b9SKazu Hirata } 60*bd6531b9SKazu Hirata 61*bd6531b9SKazu Hirata TEST(ImportIDTableTests, Duplicates) { 62*bd6531b9SKazu Hirata FunctionImporter::ImportIDTable Table; 63*bd6531b9SKazu Hirata 64*bd6531b9SKazu Hirata auto [Def1, Decl1] = Table.createImportIDs("mod", 123U); 65*bd6531b9SKazu Hirata auto [Def2, Decl2] = Table.createImportIDs("mod", 123U); 66*bd6531b9SKazu Hirata 67*bd6531b9SKazu Hirata // Verify we get the same IDs back. 68*bd6531b9SKazu Hirata EXPECT_EQ(Def1, Def2); 69*bd6531b9SKazu Hirata EXPECT_EQ(Decl1, Decl2); 70*bd6531b9SKazu Hirata } 71*bd6531b9SKazu Hirata 72*bd6531b9SKazu Hirata TEST(ImportIDTableTests, Present) { 73*bd6531b9SKazu Hirata FunctionImporter::ImportIDTable Table; 74*bd6531b9SKazu Hirata 75*bd6531b9SKazu Hirata auto [Def, Decl] = Table.createImportIDs("mod", 123U); 76*bd6531b9SKazu Hirata auto Result = Table.getImportIDs("mod", 123U); 77*bd6531b9SKazu Hirata 78*bd6531b9SKazu Hirata // Verify that we get the same IDs back. 79*bd6531b9SKazu Hirata ASSERT_NE(Result, std::nullopt); 80*bd6531b9SKazu Hirata EXPECT_EQ(Result->first, Def); 81*bd6531b9SKazu Hirata EXPECT_EQ(Result->second, Decl); 82*bd6531b9SKazu Hirata } 83*bd6531b9SKazu Hirata 84*bd6531b9SKazu Hirata TEST(ImportIDTableTests, Missing) { 85*bd6531b9SKazu Hirata FunctionImporter::ImportIDTable Table; 86*bd6531b9SKazu Hirata 87*bd6531b9SKazu Hirata auto Result = Table.getImportIDs("mod", 123U); 88*bd6531b9SKazu Hirata 89*bd6531b9SKazu Hirata // Verify that we get std::nullopt for a non-existent pair. 90*bd6531b9SKazu Hirata EXPECT_EQ(Result, std::nullopt); 91*bd6531b9SKazu Hirata } 92