diff options
| author | Ross Brunton <ross@codeplay.com> | 2025-05-27 19:42:56 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-27 13:42:56 -0500 |
| commit | 7e9d708be02e58ce2deae3ccc9ec33b32674a0a6 (patch) | |
| tree | 317db677d430580fef2b88e6ea8a1a6012e020a1 /offload/tools | |
| parent | 909212feecc197e469384924554087125ef1b7ea (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.cpp | 11 | ||||
| -rw-r--r-- | offload/tools/offload-tblgen/MiscGen.cpp | 2 | ||||
| -rw-r--r-- | offload/tools/offload-tblgen/RecordTypes.hpp | 7 |
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"); } |
