eopXD created this revision. eopXD added reviewers: junparser, craig.topper, asb, frasercrmck. Herald added subscribers: VincentWu, luke957, achieveartificialintelligence, vkmr, evandro, luismarques, apazos, sameer.abuasal, s.egerton, Jim, benna, psnobl, jocewei, PkmX, the_o, brucehoult, MartinMosbeck, rogfer01, edward-jones, zzheng, jrtc27, kito-cheng, niosHD, sabuasal, simoncook, johnrusso, rbar. eopXD requested review of this revision. Herald added subscribers: cfe-commits, pcwang-thead, MaskRay. Herald added a project: clang.
Previously D113336 <https://reviews.llvm.org/D113336> makes RISCVTargetInfo::initFeatureMap return the results processed by RISCVISAInfo, which only consists of ISA features and misses non-ISA features like `relax` and `save-restore`. This patch fixes the problem. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D119541 Files: clang/lib/Basic/Targets/RISCV.cpp Index: clang/lib/Basic/Targets/RISCV.cpp =================================================================== --- clang/lib/Basic/Targets/RISCV.cpp +++ clang/lib/Basic/Targets/RISCV.cpp @@ -232,8 +232,16 @@ return false; } - return TargetInfo::initFeatureMap(Features, Diags, CPU, - (*ParseResult)->toFeatureVector()); + // RISCVISAInfo makes implications for ISA features + std::vector<std::string> ImpliedFeatures = (*ParseResult)->toFeatureVector(); + // Add non-ISA features like `relax` and `save-restore` back + for (std::string Feature : FeaturesVec) { + if (std::find(begin(ImpliedFeatures), end(ImpliedFeatures), Feature) == + end(ImpliedFeatures)) + ImpliedFeatures.push_back(Feature); + } + + return TargetInfo::initFeatureMap(Features, Diags, CPU, ImpliedFeatures); } /// Return true if has this feature, need to sync with handleTargetFeatures.
Index: clang/lib/Basic/Targets/RISCV.cpp =================================================================== --- clang/lib/Basic/Targets/RISCV.cpp +++ clang/lib/Basic/Targets/RISCV.cpp @@ -232,8 +232,16 @@ return false; } - return TargetInfo::initFeatureMap(Features, Diags, CPU, - (*ParseResult)->toFeatureVector()); + // RISCVISAInfo makes implications for ISA features + std::vector<std::string> ImpliedFeatures = (*ParseResult)->toFeatureVector(); + // Add non-ISA features like `relax` and `save-restore` back + for (std::string Feature : FeaturesVec) { + if (std::find(begin(ImpliedFeatures), end(ImpliedFeatures), Feature) == + end(ImpliedFeatures)) + ImpliedFeatures.push_back(Feature); + } + + return TargetInfo::initFeatureMap(Features, Diags, CPU, ImpliedFeatures); } /// Return true if has this feature, need to sync with handleTargetFeatures.
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits