aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp
diff options
context:
space:
mode:
authorDerek Schuff <dschuff@chromium.org>2025-03-06 15:48:39 -0800
committerGitHub <noreply@github.com>2025-03-06 15:48:39 -0800
commit6916438b65ee26ac75684dfceb4bdb7e87841ff7 (patch)
treee70b5f7a24f269ad40dc0652386babbc41f591e3 /llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp
parentbf129547153433ae66dd526032c734238ca5168d (diff)
downloadllvm-6916438b65ee26ac75684dfceb4bdb7e87841ff7.zip
llvm-6916438b65ee26ac75684dfceb4bdb7e87841ff7.tar.gz
llvm-6916438b65ee26ac75684dfceb4bdb7e87841ff7.tar.bz2
[WebAssembly] Add Libcall signatures for modf and variants (#130201)
Clang now lowers modf/modff/modfl as builtins using the llvm.modf intrinsic.
Diffstat (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp')
-rw-r--r--llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp
index 1fe0b1f..94d80f1 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp
@@ -45,9 +45,11 @@ enum RuntimeLibcallSignature {
i64_func_i64,
f32_func_f32_f32,
f32_func_f32_i32,
+ f32_func_f32_iPTR,
f32_func_i64_i64,
f64_func_f64_f64,
f64_func_f64_i32,
+ f64_func_f64_iPTR,
f64_func_i64_i64,
i16_func_f32,
i16_func_f64,
@@ -69,6 +71,7 @@ enum RuntimeLibcallSignature {
i16_i16_func_i16_i16,
i32_i32_func_i32_i32,
i64_i64_func_i64_i64,
+ i64_i64_func_i64_i64_iPTR,
i64_i64_func_i64_i64_i64_i64,
i64_i64_func_i64_i64_i64_i64_iPTR,
i64_i64_i64_i64_func_i64_i64_i64_i64,
@@ -278,6 +281,9 @@ struct RuntimeLibcallSignatureTable {
Table[RTLIB::FREXP_F32] = f32_func_f32_i32;
Table[RTLIB::FREXP_F64] = f64_func_f64_i32;
Table[RTLIB::FREXP_F128] = i64_i64_func_i64_i64_i32;
+ Table[RTLIB::MODF_F32] = f32_func_f32_iPTR;
+ Table[RTLIB::MODF_F64] = f64_func_f64_iPTR;
+ Table[RTLIB::MODF_F128] = i64_i64_func_i64_i64_iPTR;
// Conversion
// All F80 and PPCF128 routines are unsupported.
@@ -628,6 +634,11 @@ void WebAssembly::getLibcallSignature(const WebAssemblySubtarget &Subtarget,
Params.push_back(wasm::ValType::F32);
Params.push_back(wasm::ValType::I32);
break;
+ case f32_func_f32_iPTR:
+ Rets.push_back(wasm::ValType::F32);
+ Params.push_back(wasm::ValType::F32);
+ Params.push_back(PtrTy);
+ break;
case f32_func_i64_i64:
Rets.push_back(wasm::ValType::F32);
Params.push_back(wasm::ValType::I64);
@@ -648,6 +659,11 @@ void WebAssembly::getLibcallSignature(const WebAssemblySubtarget &Subtarget,
Params.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I64);
break;
+ case f64_func_f64_iPTR:
+ Rets.push_back(wasm::ValType::F64);
+ Params.push_back(wasm::ValType::F64);
+ Params.push_back(PtrTy);
+ break;
case i16_func_f32:
Rets.push_back(wasm::ValType::I32);
Params.push_back(wasm::ValType::F32);
@@ -761,6 +777,17 @@ void WebAssembly::getLibcallSignature(const WebAssemblySubtarget &Subtarget,
Params.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I64);
break;
+ case i64_i64_func_i64_i64_iPTR:
+ if (WebAssembly::canLowerMultivalueReturn(&Subtarget)) {
+ Rets.push_back(wasm::ValType::I64);
+ Rets.push_back(wasm::ValType::I64);
+ } else {
+ Params.push_back(PtrTy);
+ }
+ Params.push_back(wasm::ValType::I64);
+ Params.push_back(wasm::ValType::I64);
+ Params.push_back(PtrTy);
+ break;
case i64_i64_func_i64_i64_i64_i64:
if (WebAssembly::canLowerMultivalueReturn(&Subtarget)) {
Rets.push_back(wasm::ValType::I64);