diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp --- a/llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp @@ -178,6 +178,9 @@ Table[RTLIB::SQRT_F32] = f32_func_f32; Table[RTLIB::SQRT_F64] = f64_func_f64; Table[RTLIB::SQRT_F128] = func_iPTR_i64_i64; + Table[RTLIB::CBRT_F32] = f32_func_f32; + Table[RTLIB::CBRT_F64] = f64_func_f64; + Table[RTLIB::CBRT_F128] = func_iPTR_i64_i64; Table[RTLIB::LOG_F32] = f32_func_f32; Table[RTLIB::LOG_F64] = f64_func_f64; Table[RTLIB::LOG_F128] = func_iPTR_i64_i64; diff --git a/llvm/test/CodeGen/WebAssembly/libcalls.ll b/llvm/test/CodeGen/WebAssembly/libcalls.ll --- a/llvm/test/CodeGen/WebAssembly/libcalls.ll +++ b/llvm/test/CodeGen/WebAssembly/libcalls.ll @@ -73,9 +73,11 @@ %e = call double @llvm.log.f64(double %d) ; CHECK: f64.call $push{{[0-9]}}=, exp %f = call double @llvm.exp.f64(double %e) + ; CHECK: f64.call $push{{[0-9]}}=, cbrt + %g = call fast double @llvm.pow.f64(double %f, double 0x3FD5555555555555) ; CHECK: i32.call $push{{[0-9]}}=, lround - %g = call i32 @llvm.lround(double %f) - ret i32 %g + %h = call i32 @llvm.lround(double %g) + ret i32 %h } ; fcmp ord and unord (RTLIB::O_F32 / RTLIB::UO_F32 etc) are a special case (see