summaryrefslogtreecommitdiff
path: root/offload/tools
diff options
context:
space:
mode:
authorRoss Brunton <ross@codeplay.com>2025-05-27 19:42:56 +0100
committerGitHub <noreply@github.com>2025-05-27 13:42:56 -0500
commit7e9d708be02e58ce2deae3ccc9ec33b32674a0a6 (patch)
tree317db677d430580fef2b88e6ea8a1a6012e020a1 /offload/tools
parent909212feecc197e469384924554087125ef1b7ea (diff)
[Offload] Use llvm::Error throughout liboffload internals (#140879)
This removes the `ol_impl_result_t` helper class, replacing it with `llvm::Error`. In addition, some internal functions that returned `ol_errc_t` now return `llvm::Error` (with a fancy message).
Diffstat (limited to 'offload/tools')
-rw-r--r--offload/tools/offload-tblgen/EntryPointGen.cpp11
-rw-r--r--offload/tools/offload-tblgen/MiscGen.cpp2
-rw-r--r--offload/tools/offload-tblgen/RecordTypes.hpp7
3 files changed, 15 insertions, 5 deletions
diff --git a/offload/tools/offload-tblgen/EntryPointGen.cpp b/offload/tools/offload-tblgen/EntryPointGen.cpp
index 66b9665292e1..85c5c50bf2f2 100644
--- a/offload/tools/offload-tblgen/EntryPointGen.cpp
+++ b/offload/tools/offload-tblgen/EntryPointGen.cpp
@@ -23,7 +23,7 @@ using namespace offload::tblgen;
static void EmitValidationFunc(const FunctionRec &F, raw_ostream &OS) {
OS << CommentsHeader;
// Emit preamble
- OS << formatv("{0}_impl_result_t {1}_val(\n ", PrefixLower, F.getName());
+ OS << formatv("llvm::Error {0}_val(\n ", F.getName());
// Emit arguments
std::string ParamNameList = "";
for (auto &Param : F.getParams()) {
@@ -42,7 +42,9 @@ static void EmitValidationFunc(const FunctionRec &F, raw_ostream &OS) {
if (Condition.starts_with("`") && Condition.ends_with("`")) {
auto ConditionString = Condition.substr(1, Condition.size() - 2);
OS << formatv(TAB_2 "if ({0}) {{\n", ConditionString);
- OS << formatv(TAB_3 "return {0};\n", Return.getValue());
+ OS << formatv(TAB_3 "return createOffloadError(error::ErrorCode::{0}, "
+ "\"validation failure: {1}\");\n",
+ Return.getUnprefixedValue(), ConditionString);
OS << TAB_2 "}\n\n";
}
}
@@ -78,8 +80,9 @@ static void EmitEntryPointFunc(const FunctionRec &F, raw_ostream &OS) {
// Perform actual function call to the validation wrapper
ParamNameList = ParamNameList.substr(0, ParamNameList.size() - 2);
- OS << formatv(TAB_1 "{0}_result_t Result = {1}_val({2});\n\n", PrefixLower,
- F.getName(), ParamNameList);
+ OS << formatv(
+ TAB_1 "{0}_result_t Result = llvmErrorToOffloadError({1}_val({2}));\n\n",
+ PrefixLower, F.getName(), ParamNameList);
// Emit post-call prints
OS << TAB_1 "if (offloadConfig().TracingEnabled) {\n";
diff --git a/offload/tools/offload-tblgen/MiscGen.cpp b/offload/tools/offload-tblgen/MiscGen.cpp
index b73d70d58c23..bc3d204f78d8 100644
--- a/offload/tools/offload-tblgen/MiscGen.cpp
+++ b/offload/tools/offload-tblgen/MiscGen.cpp
@@ -61,7 +61,7 @@ void EmitOffloadImplFuncDecls(const RecordKeeper &Records, raw_ostream &OS) {
OS << GenericHeader;
for (auto *R : Records.getAllDerivedDefinitions("Function")) {
FunctionRec F{R};
- OS << formatv("{0}_impl_result_t {1}_impl(", PrefixLower, F.getName());
+ OS << formatv("Error {0}_impl(", F.getName());
auto Params = F.getParams();
for (auto &Param : Params) {
OS << Param.getType() << " " << Param.getName();
diff --git a/offload/tools/offload-tblgen/RecordTypes.hpp b/offload/tools/offload-tblgen/RecordTypes.hpp
index 686634ed778a..bb7c06c643da 100644
--- a/offload/tools/offload-tblgen/RecordTypes.hpp
+++ b/offload/tools/offload-tblgen/RecordTypes.hpp
@@ -184,6 +184,13 @@ class ReturnRec {
public:
ReturnRec(const Record *rec) : rec(rec) {}
StringRef getValue() const { return rec->getValueAsString("value"); }
+ // Strip the "OL_ERRC_" from the value, resulting in just "FOO" from
+ // "OL_ERRC_FOO"
+ StringRef getUnprefixedValue() const {
+ constexpr const char *ERRC = "ERRC_";
+ auto Start = getValue().find(ERRC) + strlen(ERRC);
+ return getValue().substr(Start);
+ }
std::vector<StringRef> getConditions() const {
return rec->getValueAsListOfStrings("conditions");
}