diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index e81e38e4f3866..1a3fa40a317be 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -791,8 +791,9 @@ static llvm::Triple computeTargetTriple(const Driver &D, ArchName, /*EnableExperimentalExtensions=*/true); if (!llvm::errorToBool(ISAInfo.takeError())) { unsigned XLen = (*ISAInfo)->getXLen(); + // CHERIOT: Preserve the subarch if it was set. if (XLen == 32) - Target.setArch(llvm::Triple::riscv32); + Target.setArch(llvm::Triple::riscv32, Target.getSubArch()); else if (XLen == 64) Target.setArch(llvm::Triple::riscv64); } diff --git a/llvm/lib/TargetParser/Triple.cpp b/llvm/lib/TargetParser/Triple.cpp index f30ea01a97cdc..c48af161fd531 100644 --- a/llvm/lib/TargetParser/Triple.cpp +++ b/llvm/lib/TargetParser/Triple.cpp @@ -159,6 +159,15 @@ StringRef Triple::getArchName(ArchType Kind, SubArchType SubArch) { break; } break; + case Triple::riscv32: { + switch (SubArch) { + case Triple::RISCV32SubArch_cheriot_v1: + return "riscv32cheriotv1"; + default: + break; + } + break; + } default: break; }