diff --git a/llvm/test/CodeGen/WebAssembly/lower-em-sjlj-longjmp-only.ll b/llvm/test/CodeGen/WebAssembly/lower-em-sjlj-longjmp-only.ll deleted file mode 100644 --- a/llvm/test/CodeGen/WebAssembly/lower-em-sjlj-longjmp-only.ll +++ /dev/null @@ -1,24 +0,0 @@ -; RUN: opt < %s -wasm-lower-em-ehsjlj -S | FileCheck %s - -target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" -target triple = "wasm32-unknown-unknown" - -%struct.__jmp_buf_tag = type { [6 x i32], i32, %struct.__sigset_t } -%struct.__sigset_t = type { [32 x i32] } - -@buffer = global [1 x %struct.__jmp_buf_tag] zeroinitializer, align 16 - -; Tests if program does not crash when there's no setjmp function calls in the -; module. - -; CHECK: call void @emscripten_longjmp_jmpbuf -define void @longjmp_only() { -entry: - call void @longjmp(%struct.__jmp_buf_tag* getelementptr inbounds ([1 x %struct.__jmp_buf_tag], [1 x %struct.__jmp_buf_tag]* @buffer, i32 0, i32 0), i32 1) #1 - unreachable -} - -; Function Attrs: noreturn nounwind -declare void @longjmp(%struct.__jmp_buf_tag*, i32) #1 - -attributes #1 = { noreturn nounwind } diff --git a/llvm/test/CodeGen/WebAssembly/lower-em-sjlj-sret.ll b/llvm/test/CodeGen/WebAssembly/lower-em-sjlj-sret.ll --- a/llvm/test/CodeGen/WebAssembly/lower-em-sjlj-sret.ll +++ b/llvm/test/CodeGen/WebAssembly/lower-em-sjlj-sret.ll @@ -15,11 +15,11 @@ %env = alloca [1 x %struct.__jmp_buf_tag], align 16 %arraydecay = getelementptr inbounds [1 x %struct.__jmp_buf_tag], [1 x %struct.__jmp_buf_tag]* %env, i32 0, i32 0 %call = call i32 @setjmp(%struct.__jmp_buf_tag* %arraydecay) #0 -; This is the function pointer to pass to invoke. -; It needs to be the first argument (that's what we're testing here) -; CHECK: i32.const $push[[FPTR:[0-9]+]]=, returns_struct -; This is the sret stack region (as an offset from the stack pointer local) -; CHECK: call "__invoke_{i32.i32}", $pop[[FPTR]] + ; This is the function pointer to pass to invoke. + ; It needs to be the first argument (that's what we're testing here) + ; CHECK: i32.const $push[[FPTR:[0-9]+]]=, returns_struct + ; This is the sret stack region (as an offset from the stack pointer local) + ; CHECK: call "__invoke_{i32.i32}", $pop[[FPTR]] %ret = call {i32, i32} @returns_struct() ret {i32, i32} %ret } diff --git a/llvm/test/CodeGen/WebAssembly/lower-em-sjlj.ll b/llvm/test/CodeGen/WebAssembly/lower-em-sjlj.ll --- a/llvm/test/CodeGen/WebAssembly/lower-em-sjlj.ll +++ b/llvm/test/CodeGen/WebAssembly/lower-em-sjlj.ll @@ -216,6 +216,16 @@ ret i8 *%alloc } +; Tests if program does not crash when there's no setjmp function calls in the +; module. +@buffer = global [1 x %struct.__jmp_buf_tag] zeroinitializer, align 16 +define void @longjmp_only() { +entry: + ; CHECK: call void @emscripten_longjmp_jmpbuf + call void @longjmp(%struct.__jmp_buf_tag* getelementptr inbounds ([1 x %struct.__jmp_buf_tag], [1 x %struct.__jmp_buf_tag]* @buffer, i32 0, i32 0), i32 1) #1 + unreachable +} + declare void @foo() ; Function Attrs: returns_twice declare i32 @setjmp(%struct.__jmp_buf_tag*) #0