[llvm] 8d61b16 - [RISC-V] Add support for cheriot ABI in DataLayout (#190806)
via llvm-commits
llvm-commits at lists.llvm.org
Wed May 6 02:09:10 PDT 2026
Author: Owen Anderson
Date: 2026-05-06T11:09:06+02:00
New Revision: 8d61b16c650b106a829ead7706b7c1b78bf0320c
URL: https://github.com/llvm/llvm-project/commit/8d61b16c650b106a829ead7706b7c1b78bf0320c
DIFF: https://github.com/llvm/llvm-project/commit/8d61b16c650b106a829ead7706b7c1b78bf0320c.diff
LOG: [RISC-V] Add support for cheriot ABI in DataLayout (#190806)
CHERIoT uses the same DataLayout setup as RISC-V Y base, but does not share instruction encodings with it.
Added:
Modified:
llvm/lib/TargetParser/TargetDataLayout.cpp
llvm/unittests/TargetParser/TripleTest.cpp
Removed:
################################################################################
diff --git a/llvm/lib/TargetParser/TargetDataLayout.cpp b/llvm/lib/TargetParser/TargetDataLayout.cpp
index ed04ccb53d8e6..0d33d44e11cc4 100644
--- a/llvm/lib/TargetParser/TargetDataLayout.cpp
+++ b/llvm/lib/TargetParser/TargetDataLayout.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "llvm/ADT/StringRef.h"
+#include "llvm/ADT/StringSwitch.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/TargetParser/ARMTargetParser.h"
#include "llvm/TargetParser/Triple.h"
@@ -298,19 +299,19 @@ static std::string computeRISCVDataLayout(const Triple &TT, StringRef ABIName) {
// TODO: Maybe we should move RISCVABI to TargetParser, so we can reuse that
// logic here instead of duplicating the string handling?
- bool IsRVYPurecapABI =
- ABIName.starts_with("il32pc64") || ABIName.starts_with("l64pc128");
+ bool IsPureCapABI = ABIName.starts_with("il32pc64") ||
+ ABIName.starts_with("l64pc128") ||
+ ABIName.starts_with("cheriot");
- // Pointer and integer sizes.
if (TT.isRISCV64()) {
Ret += "-p:64:64";
- if (IsRVYPurecapABI)
+ if (IsPureCapABI)
Ret += "-pe200:128:128:128:64";
Ret += "-i64:64-i128:128-n32:64";
} else {
assert(TT.isRISCV32() && "only RV32 and RV64 are currently supported");
Ret += "-p:32:32";
- if (IsRVYPurecapABI)
+ if (IsPureCapABI)
Ret += "-pe200:64:64:64:32";
Ret += "-i64:64-n32";
}
@@ -323,7 +324,8 @@ static std::string computeRISCVDataLayout(const Triple &TT, StringRef ABIName) {
else
Ret += "-S128";
- if (IsRVYPurecapABI)
+ // TODO: Support non-purecap CHERI ABIs.
+ if (IsPureCapABI)
Ret += "-A200-P200-G200";
return Ret;
diff --git a/llvm/unittests/TargetParser/TripleTest.cpp b/llvm/unittests/TargetParser/TripleTest.cpp
index d65e7855881e6..9ce222b6c9c39 100644
--- a/llvm/unittests/TargetParser/TripleTest.cpp
+++ b/llvm/unittests/TargetParser/TripleTest.cpp
@@ -3529,4 +3529,17 @@ TEST(TripleTest, DefaultWCharSize) {
EXPECT_EQ(1u, Triple("xcore-unknown-unknown").getDefaultWCharSize());
}
+TEST(DataLayoutTest, CheriRISCV32) {
+ Triple TT = Triple("riscv32-unknown-unknown");
+
+ EXPECT_THAT(TT.computeDataLayout(""),
+ testing::Not(testing::HasSubstr("pe200")));
+ EXPECT_THAT(TT.computeDataLayout(""),
+ testing::Not(testing::HasSubstr("A200-P200-G200")));
+ EXPECT_THAT(TT.computeDataLayout("cheriot"),
+ testing::HasSubstr("pe200:64:64:64:32"));
+ EXPECT_THAT(TT.computeDataLayout("cheriot"),
+ testing::HasSubstr("A200-P200-G200"));
+}
+
} // end anonymous namespace
More information about the llvm-commits
mailing list