[clang] [llvm] [RISCV] Support RISC-V Profiles in -march option (PR #76357)

Craig Topper via cfe-commits cfe-commits at lists.llvm.org
Thu Mar 14 11:46:26 PDT 2024


================
@@ -854,6 +854,81 @@ RISCVISAInfo::parseArchString(StringRef Arch, bool EnableExperimentalExtension,
                              "string must be lowercase");
   }
 
+  bool IsProfile = Arch.starts_with("rvi") || Arch.starts_with("rva") ||
+                   Arch.starts_with("rvb") || Arch.starts_with("rvm");
+  std::string NewArch;
+  if (IsProfile) {
+    // A mapping from profile name to march string with all mandatory
+    // extensions.
+    static const std::map<StringLiteral, StringLiteral> SupportedProfiles = {
+        {"rvi20u32", "rv32i"},
+        {"rvi20u64", "rv64i"},
+        {"rva20u64",
+         "rv64imafdc_ziccamoa_ziccif_zicclsm_ziccrse_zicntr_za128rs"},
+        {"rva20s64",
+         "rv64imafdc_ziccamoa_ziccif_zicclsm_ziccrse_zicntr_zifencei_"
+         "za128rs_ssccptr_sstvala_sstvecd_svade_svbare"},
+        {"rva22u64", "rv64imafdc_zic64b_zicbom_zicbop_zicboz_ziccamoa_ziccif_"
+                     "zicclsm_ziccrse_"
+                     "zicntr_zihintpause_zihpm_za64rs_zfhmin_zba_zbb_zbs_zkt"},
+        {"rva22s64",
+         "rv64imafdc_zic64b_zicbom_zicbop_zicboz_ziccamoa_ziccif_zicclsm_"
+         "ziccrse_"
+         "zicntr_zifencei_zihintpause_zihpm_za64rs_zfhmin_zba_zbb_zbs_zkt_"
+         "ssccptr_"
+         "sscounterenw_sstvala_sstvecd_svade_svbare_svinval_svpbmt"},
+        {"rva23u64",
+         "rv64imafdcv_zic64b_zicbom_zicbop_zicboz_ziccamoa_ziccif_zicclsm_"
+         "ziccrse_"
+         "zicntr_zicond_zihintntl_zihintpause_zihpm_zimop0p1_za64rs_zawrs_zfa_"
+         "zfhmin_zcb_zcmop0p2_zba_zbb_zbs_zkt_zvbb_zvfhmin_zvkt"},
+        {"rva23s64",
+         "rv64imafdcvh_zic64b_zicbom_zicbop_zicboz_ziccamoa_ziccif_zicclsm_"
+         "ziccrse_"
+         "zicntr_zicond_zifencei_zihintntl_zihintpause_zihpm_zimop0p1_za64rs_"
+         "zawrs_"
+         "zfa_zfhmin_zcb_zcmop0p2_zba_zbb_zbs_zkt_zvbb_zvfhmin_zvkt_"
+         "shcounterenw_"
+         "shgatpa_shtvala_shvsatpa_shvstvala_shvstvecd_ssccptr_sscofpmf_"
+         "sscounterenw_ssnpm0p8_ssstateen_sstc_sstvala_sstvecd_ssu64xl_svade_"
+         "svbare_svinval_svnapot_svpbmt"},
+        {"rvb23u64",
+         "rv64imafdc_zic64b_zicbom_zicbop_zicboz_ziccamoa_ziccif_"
+         "zicclsm_ziccrse_zicntr_zicond_zihintntl_zihintpause_zihpm_"
+         "zimop0p1_za64rs_zawrs_zfa_zcb_zcmop0p2_zba_zbb_zbs_zkt"},
+        {"rvb23s64",
+         "rv64imafdc_zic64b_zicbom_zicbop_zicboz_ziccamoa_ziccif_zicclsm_"
+         "ziccrse_"
+         "zicntr_zicond_zifencei_zihintntl_zihintpause_zihpm_zimop0p1_za64rs_"
+         "zawrs_"
+         "zfa_zcb_zcmop0p2_zba_zbb_zbs_zkt_ssccptr_sscofpmf_sscounterenw_sstc_"
+         "sstvala_sstvecd_ssu64xl_svade_svbare_svinval_svnapot_svpbmt"},
+        {"rvm23u32",
+         "rv32im_zicbop_zicond_zicsr_zihintntl_zihintpause_zimop0p1_"
+         "zca_zcb_zce_zcmop0p2_zcmp_zcmt_zba_zbb_zbs"},
+    };
+
+    auto FoundProfile = llvm::find_if(
----------------
topperc wrote:

This doesn't treat SupportedProfiles as a map. Its searching it as if it were an array.

https://github.com/llvm/llvm-project/pull/76357


More information about the cfe-commits mailing list