diff options
author | Derek Schuff <dschuff@chromium.org> | 2025-03-06 15:48:39 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-06 15:48:39 -0800 |
commit | 6916438b65ee26ac75684dfceb4bdb7e87841ff7 (patch) | |
tree | e70b5f7a24f269ad40dc0652386babbc41f591e3 /llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp | |
parent | bf129547153433ae66dd526032c734238ca5168d (diff) | |
download | llvm-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.cpp | 27 |
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); |