Skip to content

Commit 24c3926

Browse files
committed
[RISCV][test] Add tests for parsing profiles using RISCVISAInfo::parseArchString
1 parent 2fb9252 commit 24c3926

File tree

1 file changed

+61
-2
lines changed

1 file changed

+61
-2
lines changed

llvm/unittests/TargetParser/RISCVISAInfoTest.cpp

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ bool operator==(const RISCVISAUtils::ExtensionVersion &A,
2121
}
2222

2323
TEST(ParseNormalizedArchString, RejectsInvalidChars) {
24-
for (StringRef Input :
25-
{"RV32", "rV64", "rv32i2P0", "rv64i2p0_A2p0", "rv32e2.0"}) {
24+
for (StringRef Input : {"RV32", "rV64", "rv32i2P0", "rv64i2p0_A2p0",
25+
"rv32e2.0", "rva20u64+zbc"}) {
2626
EXPECT_EQ(
2727
toString(RISCVISAInfo::parseNormalizedArchString(Input).takeError()),
2828
"string may only contain [a-z0-9_]");
@@ -667,6 +667,65 @@ TEST(ParseArchString, RejectsConflictingExtensions) {
667667
}
668668
}
669669

670+
TEST(ParseArchString, RejectsUnrecognizedProfileNames) {
671+
for (StringRef Input : {"rvi23u99", "rvz23u64", "rva99u32"}) {
672+
EXPECT_EQ(toString(RISCVISAInfo::parseArchString(Input, true).takeError()),
673+
"string must begin with rv32{i,e,g}, rv64{i,e,g}, or a supported "
674+
"profile name");
675+
}
676+
}
677+
678+
TEST(ParseArchString, RejectsProfilesWithUnseparatedExtraExtensions) {
679+
for (StringRef Input : {"rvi20u32m", "rvi20u64c"}) {
680+
EXPECT_EQ(toString(RISCVISAInfo::parseArchString(Input, true).takeError()),
681+
"additional extensions must be after separator '_'");
682+
}
683+
}
684+
685+
TEST(ParseArchString, AcceptsBareProfileNames) {
686+
auto MaybeRVA20U64 = RISCVISAInfo::parseArchString("rva20u64", true);
687+
ASSERT_THAT_EXPECTED(MaybeRVA20U64, Succeeded());
688+
const auto &Exts = (*MaybeRVA20U64)->getExtensions();
689+
EXPECT_EQ(Exts.size(), 13UL);
690+
EXPECT_EQ(Exts.count("i"), 1U);
691+
EXPECT_EQ(Exts.count("m"), 1U);
692+
EXPECT_EQ(Exts.count("f"), 1U);
693+
EXPECT_EQ(Exts.count("a"), 1U);
694+
EXPECT_EQ(Exts.count("d"), 1U);
695+
EXPECT_EQ(Exts.count("c"), 1U);
696+
EXPECT_EQ(Exts.count("za128rs"), 1U);
697+
EXPECT_EQ(Exts.count("zicntr"), 1U);
698+
EXPECT_EQ(Exts.count("ziccif"), 1U);
699+
EXPECT_EQ(Exts.count("zicsr"), 1U);
700+
EXPECT_EQ(Exts.count("ziccrse"), 1U);
701+
EXPECT_EQ(Exts.count("ziccamoa"), 1U);
702+
EXPECT_EQ(Exts.count("zicclsm"), 1U);
703+
704+
auto MaybeRVA23U64 = RISCVISAInfo::parseArchString("rva23u64", true);
705+
ASSERT_THAT_EXPECTED(MaybeRVA23U64, Succeeded());
706+
EXPECT_GT((*MaybeRVA23U64)->getExtensions().size(), 13UL);
707+
}
708+
709+
TEST(ParseArchSTring, AcceptsProfileNamesWithSeparatedAdditionalExtensions) {
710+
auto MaybeRVI20U64 = RISCVISAInfo::parseArchString("rvi20u64_m_zba", true);
711+
ASSERT_THAT_EXPECTED(MaybeRVI20U64, Succeeded());
712+
const auto &Exts = (*MaybeRVI20U64)->getExtensions();
713+
EXPECT_EQ(Exts.size(), 3UL);
714+
EXPECT_EQ(Exts.count("i"), 1U);
715+
EXPECT_EQ(Exts.count("m"), 1U);
716+
EXPECT_EQ(Exts.count("zba"), 1U);
717+
}
718+
719+
TEST(ParseArchString,
720+
RejectsProfilesWithAdditionalExtensionsGivenAlreadyInProfile) {
721+
// This test was added to document the current behaviour. Discussion isn't
722+
// believed to have taken place about if this is desirable or not.
723+
EXPECT_EQ(
724+
toString(
725+
RISCVISAInfo::parseArchString("rva20u64_zicntr", true).takeError()),
726+
"duplicated standard user-level extension 'zicntr'");
727+
}
728+
670729
TEST(ToFeatures, IIsDroppedAndExperimentalExtensionsArePrefixed) {
671730
auto MaybeISAInfo1 =
672731
RISCVISAInfo::parseArchString("rv64im_ztso", true, false);

0 commit comments

Comments
 (0)