Skip to content

Commit 09a147c

Browse files
committed
[AArch64][TargetParser] Add ProcessorAlias unit test machinery. NFC. (llvm#127131)
The patch itself is mainly the expected unittest boilerplate. This adds tests for the aliases we have today. We could alternatively test these via the driver with additional run-lines in print-enable-extensions tests, and eventually should consider that instead. (cherry picked from commit 87ce117)
1 parent 1a94c98 commit 09a147c

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed

llvm/unittests/TargetParser/TargetParserTest.cpp

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1833,6 +1833,92 @@ INSTANTIATE_TEST_SUITE_P(
18331833

18341834
AArch64CPUTestParams::PrintToStringParamName);
18351835

1836+
struct AArch64CPUAliasTestParams {
1837+
AArch64CPUAliasTestParams(std::vector<StringRef> Aliases)
1838+
: Aliases(Aliases) {}
1839+
1840+
friend std::ostream &operator<<(std::ostream &os,
1841+
const AArch64CPUAliasTestParams &params) {
1842+
raw_os_ostream oss(os);
1843+
interleave(params.Aliases, oss, ", ");
1844+
return os;
1845+
}
1846+
1847+
/// Print a gtest-compatible facsimile of the first cpu (the aliasee), to make
1848+
/// the test's name human-readable.
1849+
static std::string PrintToStringParamName(
1850+
const testing::TestParamInfo<AArch64CPUAliasTestParams> &Info) {
1851+
std::string Name = Info.param.Aliases.front().str();
1852+
for (char &C : Name)
1853+
if (!std::isalnum(C))
1854+
C = '_';
1855+
return Name;
1856+
}
1857+
1858+
std::vector<StringRef> Aliases;
1859+
};
1860+
1861+
class AArch64CPUAliasTestFixture
1862+
: public ::testing::TestWithParam<AArch64CPUAliasTestParams> {};
1863+
1864+
static std::string aarch64FeaturesFromBits(AArch64::ExtensionBitset BitFlags) {
1865+
std::vector<StringRef> Flags;
1866+
bool OK = AArch64::getExtensionFeatures(BitFlags, Flags);
1867+
assert(OK);
1868+
(void)OK;
1869+
std::string S;
1870+
raw_string_ostream OS(S);
1871+
interleave(Flags, OS, ", ");
1872+
return OS.str();
1873+
}
1874+
1875+
TEST_P(AArch64CPUAliasTestFixture, testCPUAlias) {
1876+
AArch64CPUAliasTestParams params = GetParam();
1877+
1878+
StringRef MainName = params.Aliases[0];
1879+
const std::optional<AArch64::CpuInfo> Cpu = AArch64::parseCpu(MainName);
1880+
const AArch64::ArchInfo &MainAI = Cpu->Arch;
1881+
AArch64::ExtensionBitset MainFlags = Cpu->getImpliedExtensions();
1882+
1883+
for (size_t I = 1, E = params.Aliases.size(); I != E; ++I) {
1884+
StringRef OtherName = params.Aliases[I];
1885+
const std::optional<AArch64::CpuInfo> OtherCpu =
1886+
AArch64::parseCpu(OtherName);
1887+
const AArch64::ArchInfo &OtherAI = OtherCpu->Arch;
1888+
1889+
EXPECT_EQ(MainAI.Version, OtherAI.Version)
1890+
<< MainName << " vs " << OtherName;
1891+
EXPECT_EQ(MainAI.Name, OtherAI.Name) << MainName << " vs " << OtherName;
1892+
EXPECT_EQ(MainAI.Profile, OtherAI.Profile)
1893+
<< MainName << " vs " << OtherName;
1894+
EXPECT_EQ(MainAI.DefaultExts, OtherAI.DefaultExts)
1895+
<< MainName << " vs " << OtherName;
1896+
EXPECT_EQ(MainAI, OtherAI) << MainName << " vs " << OtherName;
1897+
1898+
AArch64::ExtensionBitset OtherFlags = OtherCpu->getImpliedExtensions();
1899+
1900+
EXPECT_EQ(MainFlags, OtherFlags) << MainName << " vs " << OtherName;
1901+
1902+
EXPECT_EQ(aarch64FeaturesFromBits(MainFlags),
1903+
aarch64FeaturesFromBits(OtherFlags))
1904+
<< MainName << " vs " << OtherName << "\n Diff: "
1905+
<< (aarch64FeaturesFromBits(MainFlags ^ OtherFlags));
1906+
}
1907+
}
1908+
1909+
INSTANTIATE_TEST_SUITE_P(
1910+
AArch64CPUAliasTests, AArch64CPUAliasTestFixture,
1911+
::testing::Values(AArch64CPUAliasTestParams({"neoverse-n2", "cobalt-100"}),
1912+
AArch64CPUAliasTestParams({"neoverse-v2", "grace"}),
1913+
AArch64CPUAliasTestParams({"apple-a7", "cyclone",
1914+
"apple-a8", "apple-a9"}),
1915+
AArch64CPUAliasTestParams({"apple-a12", "apple-s4",
1916+
"apple-s5"}),
1917+
AArch64CPUAliasTestParams({"apple-a14", "apple-m1"}),
1918+
AArch64CPUAliasTestParams({"apple-a15", "apple-m2"}),
1919+
AArch64CPUAliasTestParams({"apple-a16", "apple-m3"})),
1920+
AArch64CPUAliasTestParams::PrintToStringParamName);
1921+
18361922
// Note: number of CPUs includes aliases.
18371923
static constexpr unsigned NumAArch64CPUArchs = 81;
18381924

0 commit comments

Comments
 (0)