[RISCV] Make RISCVISAInfo::toFeatureVector ignore unsupported extensions

parseNormalizedArchString adds a code path that creates a RISCVISAInfo
including extensions that may not be supported by LLVM (rather than
erroring or just ignoring them). Therefore, toFeatureVector needs to
check the extension is supported in order to avoid creating unrecognised
feature strings.

This change shouldn't impact any code paths used outside of test code,
but this will be relied upon by the next patch which moves llvm-objdump
and related tools over to using parseNormalizedArchString.

Differential Revision: https://reviews.llvm.org/D146113
This commit is contained in:
Alex Bradbury 2023-03-26 15:50:13 +01:00
parent f5b6e9b6d3
commit af602edf0e
2 changed files with 9 additions and 0 deletions

View File

@ -1101,6 +1101,8 @@ std::vector<std::string> RISCVISAInfo::toFeatureVector() const {
std::string ExtName = Ext.first;
if (ExtName == "i") // i is not recognized in clang -cc1
continue;
if (!isSupportedExtension(ExtName))
continue;
std::string Feature = isExperimentalExtension(ExtName)
? "+experimental-" + ExtName
: "+" + ExtName;

View File

@ -446,3 +446,10 @@ TEST(ToFeatureVector, IIsDroppedAndExperimentalExtensionsArePrefixed) {
EXPECT_THAT((*MaybeISAInfo2)->toFeatureVector(),
ElementsAre("+e", "+experimental-zihintntl", "+xventanacondops"));
}
TEST(ToFeatureVector, UnsupportedExtensionsAreDropped) {
auto MaybeISAInfo =
RISCVISAInfo::parseNormalizedArchString("rv64i2p0_m2p0_xmadeup1p0");
ASSERT_THAT_EXPECTED(MaybeISAInfo, Succeeded());
EXPECT_THAT((*MaybeISAInfo)->toFeatureVector(), ElementsAre("+m"));
}