@@ -306,19 +306,11 @@ StringRef riscv::getRISCVABI(const ArgList &Args, const llvm::Triple &Triple) {
306306 // rv64e -> lp64e
307307 // rv64* -> lp64
308308 std::string Arch = getRISCVArch (Args, Triple);
309- if (Triple.getSubArch () == llvm::Triple::RISCV32SubArch_cheriot_v1) {
310- llvm::Triple::OSType OS = Triple.getOS ();
311- if (OS == llvm::Triple::CheriotRTOS)
312- return " cheriot" ;
313- else if (OS == llvm::Triple::UnknownOS)
314- return " cheriot-baremetal" ;
315- }
316-
317309 auto ParseResult = llvm::RISCVISAInfo::parseArchString (
318310 Arch, /* EnableExperimentalExtension */ true );
319311 // Ignore parsing error, just go 3rd step.
320312 if (!llvm::errorToBool (ParseResult.takeError ()))
321- return (*ParseResult)->computeDefaultABI ();
313+ return (*ParseResult)->computeDefaultABI (Triple );
322314
323315 // 3. Choose a default based on the triple
324316 //
@@ -429,8 +421,7 @@ std::string riscv::getRISCVArch(const llvm::opt::ArgList &Args,
429421 // We deviate from GCC's defaults here:
430422 // - On `riscv{XLEN}-unknown-elf` we default to `rv{XLEN}imac`
431423 // - On all other OSs we use `rv{XLEN}imafdc` (equivalent to `rv{XLEN}gc`)
432- if (Triple.getSubArch () == llvm::Triple::RISCV32SubArch_cheriot_v1 ||
433- Triple.getOS () == llvm::Triple::CheriotRTOS)
424+ if (Triple.getOS () == llvm::Triple::CheriotRTOS)
434425 return " rv32emc_xcheriot" ;
435426 if (Triple.isRISCV32 ()) {
436427 if (Triple.getOS () == llvm::Triple::UnknownOS)
@@ -461,9 +452,13 @@ std::string riscv::getRISCVTargetCPU(const llvm::opt::ArgList &Args,
461452 if (!CPU.empty ())
462453 return CPU;
463454
464- if (Triple.getOS () == llvm::Triple::CheriotRTOS ||
465- Triple.getSubArch () == llvm::Triple::RISCV32SubArch_cheriot_v1)
455+ if (Triple.getOS () == llvm::Triple::CheriotRTOS)
466456 return " cheriot" ;
457+ if (const Arg *A = Args.getLastArg (options::OPT_mabi_EQ)) {
458+ StringRef ABI = A->getValue ();
459+ if (ABI == " cheriot" || ABI == " cheriot-baremetal" )
460+ return " cheriot" ;
461+ }
467462
468463 return Triple.isRISCV64 () ? " generic-rv64" : " generic-rv32" ;
469464}
0 commit comments