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 @@ -71,6 +71,7 @@ i64_i64_func_i64_i64_i64_i64_iPTR, i64_i64_i64_i64_func_i64_i64_i64_i64, i64_i64_func_i64_i64_i32, + iPTR_func_i32, iPTR_func_iPTR_i32_iPTR, iPTR_func_iPTR_iPTR_iPTR, f32_func_f32_f32_f32, @@ -329,7 +330,7 @@ Table[RTLIB::STACKPROTECTOR_CHECK_FAIL] = func; // Return address handling - Table[RTLIB::RETURN_ADDRESS] = i32_func_i32; + Table[RTLIB::RETURN_ADDRESS] = iPTR_func_i32; // Element-wise Atomic memory // TODO: Fix these when we implement atomic support @@ -785,6 +786,10 @@ Params.push_back(wasm::ValType::I64); Params.push_back(wasm::ValType::I32); break; + case iPTR_func_i32: + Rets.push_back(PtrTy); + Params.push_back(wasm::ValType::I32); + break; case iPTR_func_iPTR_i32_iPTR: Rets.push_back(PtrTy); Params.push_back(PtrTy); diff --git a/llvm/test/CodeGen/WebAssembly/return-address-emscripten.ll b/llvm/test/CodeGen/WebAssembly/return-address-emscripten.ll --- a/llvm/test/CodeGen/WebAssembly/return-address-emscripten.ll +++ b/llvm/test/CodeGen/WebAssembly/return-address-emscripten.ll @@ -1,11 +1,10 @@ -; RUN: llc < %s -asm-verbose=false | FileCheck %s - -target triple = "wasm32-unknown-emscripten" +; RUN: llc -mtriple=wasm32-unknown-emscripten < %s -asm-verbose=false | FileCheck -DPTR=32 %s +; RUN: llc -mtriple=wasm64-unknown-emscripten < %s -asm-verbose=false | FileCheck -DPTR=64 %s ; This tests the implementation of __builtin_return_address on emscripten ; CHECK-LABEL: test_returnaddress: -; CHECK-NEXT: .functype test_returnaddress () -> (i32){{$}} +; CHECK-NEXT: .functype test_returnaddress () -> (i[[PTR]]){{$}} ; CHECK-NEXT: {{^}} i32.const 0{{$}} ; CHECK-NEXT: {{^}} call emscripten_return_address{{$}} ; CHECK-NEXT: {{^}} end_function{{$}}