Index: llvm/lib/Support/RISCVISAInfo.cpp =================================================================== --- llvm/lib/Support/RISCVISAInfo.cpp +++ llvm/lib/Support/RISCVISAInfo.cpp @@ -286,16 +286,17 @@ // We rank extensions in the following order: // -Single letter extensions in canonical order. // -Unknown single letter extensions in alphabetical order. -// -Multi-letter extensions starting with 's' in alphabetical order. // -Multi-letter extensions starting with 'z' sorted by canonical order of // the second letter then sorted alphabetically. +// -Multi-letter extensions starting with 's' in alphabetical order. +// -(TODO) Multi-letter extensions starting with 'zxm' in alphabetical order. // -X extensions in alphabetical order. // These flags are used to indicate the category. The first 6 bits store the // single letter extension rank for single letter and multi-letter extensions // starting with 'z'. enum RankFlags { - RF_S_EXTENSION = 1 << 6, - RF_Z_EXTENSION = 1 << 7, + RF_Z_EXTENSION = 1 << 6, + RF_S_EXTENSION = 1 << 7, RF_X_EXTENSION = 1 << 8, }; Index: llvm/unittests/Support/RISCVISAInfoTest.cpp =================================================================== --- llvm/unittests/Support/RISCVISAInfoTest.cpp +++ llvm/unittests/Support/RISCVISAInfoTest.cpp @@ -484,11 +484,8 @@ for (const auto &Ext : Exts) ExtNames.push_back(Ext.first); - // FIXME: z* extensions should be ordered before s* extensions. The current - // ordering matches what is documented in RISCVISAInfo, but this doesn't - // match the ISA manual. // FIXME: 'l' and 'y' should be ordered after 'i', 'm', 'c'. EXPECT_THAT(ExtNames, - ElementsAre("i", "m", "l", "c", "y", "sbar", "sfoo", "zicsr", - "zmfoo", "zfinx", "zzfoo", "xbar", "xfoo")); + ElementsAre("i", "m", "l", "c", "y", "zicsr", "zmfoo", "zfinx", + "zzfoo", "sbar", "sfoo", "xbar", "xfoo")); }