diff options
Diffstat (limited to 'llvm/test/CodeGen/WebAssembly')
-rw-r--r-- | llvm/test/CodeGen/WebAssembly/cfg-stackify-eh.ll | 89 | ||||
-rw-r--r-- | llvm/test/CodeGen/WebAssembly/exception.ll | 168 |
2 files changed, 113 insertions, 144 deletions
diff --git a/llvm/test/CodeGen/WebAssembly/cfg-stackify-eh.ll b/llvm/test/CodeGen/WebAssembly/cfg-stackify-eh.ll index 663fff325d4..8e9933471b7 100644 --- a/llvm/test/CodeGen/WebAssembly/cfg-stackify-eh.ll +++ b/llvm/test/CodeGen/WebAssembly/cfg-stackify-eh.ll @@ -18,26 +18,23 @@ target triple = "wasm32-unknown-unknown" ; } ; CHECK-LABEL: test0 -; CHECK: block -; CHECK: try -; CHECK: call foo -; CHECK: br 0 # 0: down to label1 -; CHECK: catch -; CHECK: block -; CHECK: br_if 0, {{.*}} # 0: down to label3 -; CHECK: i32.call $drop=, __cxa_begin_catch -; CHECK: call __cxa_end_catch -; CHECK: br 1 # 1: down to label1 -; CHECK: end_block # label3: -; CHECK: block -; CHECK: br_if 0, {{.*}} # 0: down to label4 -; CHECK: i32.call $drop=, __cxa_begin_catch -; CHECK: call __cxa_end_catch -; CHECK: br 1 # 1: down to label1 -; CHECK: end_block # label4: -; CHECK: call __cxa_rethrow -; CHECK: end_try # label1: -; CHECK: end_block +; CHECK: try +; CHECK: call foo +; CHECK: catch +; CHECK: block +; CHECK: br_if 0, {{.*}} # 0: down to label2 +; CHECK: i32.call $drop=, __cxa_begin_catch +; CHECK: call __cxa_end_catch +; CHECK: br 1 # 1: down to label0 +; CHECK: end_block # label2: +; CHECK: block +; CHECK: br_if 0, {{.*}} # 0: down to label3 +; CHECK: i32.call $drop=, __cxa_begin_catch +; CHECK: call __cxa_end_catch +; CHECK: br 1 # 1: down to label0 +; CHECK: end_block # label3: +; CHECK: call __cxa_rethrow +; CHECK: end_try # label0: define void @test0() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) { entry: invoke void @foo() @@ -177,39 +174,33 @@ unreachable: ; preds = %rethrow5 ; } ; CHECK-LABEL: test2 -; CHECK: block -; CHECK: try -; CHECK: call foo -; CHECK: br 0 # 0: down to label17 -; CHECK: catch -; CHECK: i32.call $drop=, __cxa_begin_catch -; CHECK: loop # label19: +; CHECK: try +; CHECK: call foo +; CHECK: catch +; CHECK: i32.call $drop=, __cxa_begin_catch +; CHECK: loop # label15: +; CHECK: block ; CHECK: block -; CHECK: block -; CHECK: br_if 0, {{.*}} # 0: down to label21 +; CHECK: br_if 0, {{.*}} # 0: down to label17 +; CHECK: try +; CHECK: call foo +; CHECK: br 2 # 2: down to label16 +; CHECK: catch ; CHECK: try -; CHECK: call foo -; CHECK: br 2 # 2: down to label20 +; CHECK: call __cxa_end_catch ; CHECK: catch -; CHECK: block -; CHECK: try -; CHECK: call __cxa_end_catch -; CHECK: br 0 # 0: down to label24 -; CHECK: catch -; CHECK: call __clang_call_terminate -; CHECK: unreachable -; CHECK: end_try # label24: -; CHECK: end_block -; CHECK: rethrow # to caller +; CHECK: call __clang_call_terminate +; CHECK: unreachable ; CHECK: end_try -; CHECK: end_block # label21: -; CHECK: call __cxa_end_catch -; CHECK: br 2 # 2: down to label17 -; CHECK: end_block # label20: -; CHECK: br 0 # 0: up to label19 -; CHECK: end_loop -; CHECK: end_try # label17: -; CHECK: end_block +; CHECK: rethrow # to caller +; CHECK: end_try +; CHECK: end_block # label17: +; CHECK: call __cxa_end_catch +; CHECK: br 2 # 2: down to label13 +; CHECK: end_block # label16: +; CHECK: br 0 # 0: up to label15 +; CHECK: end_loop +; CHECK: end_try # label13: define void @test2() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) { entry: invoke void @foo() diff --git a/llvm/test/CodeGen/WebAssembly/exception.ll b/llvm/test/CodeGen/WebAssembly/exception.ll index 13f9c18dade..f41588faa61 100644 --- a/llvm/test/CodeGen/WebAssembly/exception.ll +++ b/llvm/test/CodeGen/WebAssembly/exception.ll @@ -37,29 +37,26 @@ define void @test_rethrow(i8* %p) { ; CHECK-LABEL: test_catch: ; CHECK: global.get ${{.+}}=, __stack_pointer -; CHECK: block -; CHECK: try -; CHECK: call foo -; CHECK: br 0 -; CHECK: catch $[[EXCEPT_REF:[0-9]+]]= -; CHECK: global.set __stack_pointer -; CHECK: block i32 -; CHECK: br_on_exn 0, __cpp_exception, $[[EXCEPT_REF]] -; CHECK: rethrow -; CHECK: end_block -; CHECK: extract_exception $[[EXN:[0-9]+]]= -; CHECK-DAG: i32.store __wasm_lpad_context -; CHECK-DAG: i32.store __wasm_lpad_context+4 -; CHECK: i32.call $drop=, _Unwind_CallPersonality, $[[EXN]] -; CHECK: block -; CHECK: br_if 0 -; CHECK: i32.call $drop=, __cxa_begin_catch -; CHECK: call __cxa_end_catch -; CHECK: br 1 -; CHECK: end_block -; CHECK: call __cxa_rethrow -; CHECK: end_try -; CHECK: end_block +; CHECK: try +; CHECK: call foo +; CHECK: catch $[[EXCEPT_REF:[0-9]+]]= +; CHECK: global.set __stack_pointer +; CHECK: block i32 +; CHECK: br_on_exn 0, __cpp_exception, $[[EXCEPT_REF]] +; CHECK: rethrow +; CHECK: end_block +; CHECK: extract_exception $[[EXN:[0-9]+]]= +; CHECK-DAG: i32.store __wasm_lpad_context +; CHECK-DAG: i32.store __wasm_lpad_context+4 +; CHECK: i32.call $drop=, _Unwind_CallPersonality, $[[EXN]] +; CHECK: block +; CHECK: br_if 0 +; CHECK: i32.call $drop=, __cxa_begin_catch +; CHECK: call __cxa_end_catch +; CHECK: br 1 +; CHECK: end_block +; CHECK: call __cxa_rethrow +; CHECK: end_try define void @test_catch() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) { entry: invoke void @foo() @@ -101,16 +98,13 @@ try.cont: ; preds = %entry, %catch ; } ; CHECK-LABEL: test_cleanup: -; CHECK: block -; CHECK: try -; CHECK: call foo -; CHECK: br 0 -; CHECK: catch -; CHECK: global.set __stack_pointer -; CHECK: i32.call $drop=, _ZN4TempD2Ev -; CHECK: rethrow -; CHECK: end_try -; CHECK: end_block +; CHECK: try +; CHECK: call foo +; CHECK: catch +; CHECK: global.set __stack_pointer +; CHECK: i32.call $drop=, _ZN4TempD2Ev +; CHECK: rethrow +; CHECK: end_try define void @test_cleanup() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) { entry: %t = alloca %struct.Temp, align 1 @@ -140,37 +134,28 @@ ehcleanup: ; preds = %entry ; } ; CHECK-LABEL: test_terminatepad -; CHECK: block +; CHECK: try +; CHECK: call foo +; CHECK: catch +; CHECK: i32.call $drop=, __cxa_begin_catch ; CHECK: try ; CHECK: call foo -; CHECK: br 0 ; CHECK: catch -; CHECK: i32.call $drop=, __cxa_begin_catch -; CHECK: block -; CHECK: try -; CHECK: call foo -; CHECK: br 0 -; CHECK: catch -; CHECK: block -; CHECK: try -; CHECK: call __cxa_end_catch -; CHECK: br 0 -; CHECK: catch -; CHECK: block i32 -; CHECK: br_on_exn 0, __cpp_exception -; CHECK: call __clang_call_terminate, 0 -; CHECK: unreachable -; CHECK: end_block -; CHECK: call __clang_call_terminate -; CHECK: unreachable -; CHECK: end_try -; CHECK: end_block -; CHECK: rethrow -; CHECK: end_try -; CHECK: end_block -; CHECK: call __cxa_end_catch +; CHECK: try +; CHECK: call __cxa_end_catch +; CHECK: catch +; CHECK: block i32 +; CHECK: br_on_exn 0, __cpp_exception +; CHECK: call __clang_call_terminate, 0 +; CHECK: unreachable +; CHECK: end_block +; CHECK: call __clang_call_terminate +; CHECK: unreachable +; CHECK: end_try +; CHECK: rethrow ; CHECK: end_try -; CHECK: end_block +; CHECK: call __cxa_end_catch +; CHECK: end_try define void @test_terminatepad() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) { entry: invoke void @foo() @@ -227,34 +212,30 @@ terminate: ; preds = %ehcleanup ; } ; CHECK-LABEL: test_no_prolog_epilog_in_ehpad -; CHECK: block -; CHECK: try -; CHECK: call foo -; CHECK: br 0 -; CHECK: catch -; CHECK-NOT: global.get $push{{.+}}=, __stack_pointer -; CHECK: global.set __stack_pointer +; CHECK: try +; CHECK: call foo +; CHECK: catch +; CHECK-NOT: global.get $push{{.+}}=, __stack_pointer +; CHECK: global.set __stack_pointer +; CHECK: block ; CHECK: block -; CHECK: block -; CHECK: br_if 0 -; CHECK: i32.call $drop=, __cxa_begin_catch -; CHECK: try -; CHECK: call foo -; CHECK: br 2 -; CHECK: catch -; CHECK-NOT: global.get $push{{.+}}=, __stack_pointer -; CHECK: global.set __stack_pointer -; CHECK: call __cxa_end_catch -; CHECK: rethrow -; CHECK-NOT: global.set __stack_pointer, $pop{{.+}} -; CHECK: end_try -; CHECK: end_block -; CHECK: call __cxa_rethrow +; CHECK: br_if 0 +; CHECK: i32.call $drop=, __cxa_begin_catch +; CHECK: try +; CHECK: call foo +; CHECK: catch +; CHECK-NOT: global.get $push{{.+}}=, __stack_pointer +; CHECK: global.set __stack_pointer +; CHECK: call __cxa_end_catch +; CHECK: rethrow +; CHECK-NOT: global.set __stack_pointer, $pop{{.+}} +; CHECK: end_try ; CHECK: end_block -; CHECK-NOT: global.set __stack_pointer, $pop{{.+}} -; CHECK: call __cxa_end_catch -; CHECK: end_try -; CHECK: end_block +; CHECK: call __cxa_rethrow +; CHECK: end_block +; CHECK-NOT: global.set __stack_pointer, $pop{{.+}} +; CHECK: call __cxa_end_catch +; CHECK: end_try define void @test_no_prolog_epilog_in_ehpad() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) { entry: %stack_var = alloca i32, align 4 @@ -309,15 +290,12 @@ ehcleanup: ; preds = %catch ; } ; CHECK-LABEL: test_no_sp_writeback -; CHECK: block -; CHECK: try -; CHECK: call foo -; CHECK: br 0 -; CHECK: catch -; CHECK: i32.call $drop=, __cxa_begin_catch -; CHECK: call __cxa_end_catch -; CHECK: end_try -; CHECK: end_block +; CHECK: try +; CHECK: call foo +; CHECK: catch +; CHECK: i32.call $drop=, __cxa_begin_catch +; CHECK: call __cxa_end_catch +; CHECK: end_try ; CHECK-NOT: global.set __stack_pointer ; CHECK: return define void @test_no_sp_writeback() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) { |