[llvm] r354842 - [WebAssembly] Improve readability of EH tests
Heejin Ahn via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 25 19:29:59 PST 2019
Author: aheejin
Date: Mon Feb 25 19:29:59 2019
New Revision: 354842
URL: http://llvm.org/viewvc/llvm-project?rev=354842&view=rev
Log:
[WebAssembly] Improve readability of EH tests
Summary:
- Indent check lines to easily figure out try-catch-end structure
- Add the original C++ code the tests were genereated from
- Add a few more lines to make the structure more readable
- Rename a couple function / structures
- Add label and branch annotations to cfg-stackify-eh.ll
- Temporarily delete check lines for `test1` in `cfg-stackify-eh.ll`
because it will be updated in a later CL soon and there's no point of
making it look better here
Reviewers: dschuff
Subscribers: sunfish, sbc100, jgravelle-google, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D58562
Modified:
llvm/trunk/test/CodeGen/WebAssembly/cfg-stackify-eh.ll
llvm/trunk/test/CodeGen/WebAssembly/exception.ll
llvm/trunk/test/CodeGen/WebAssembly/wasmehprepare.ll
Modified: llvm/trunk/test/CodeGen/WebAssembly/cfg-stackify-eh.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/WebAssembly/cfg-stackify-eh.ll?rev=354842&r1=354841&r2=354842&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/WebAssembly/cfg-stackify-eh.ll (original)
+++ llvm/trunk/test/CodeGen/WebAssembly/cfg-stackify-eh.ll Mon Feb 25 19:29:59 2019
@@ -1,4 +1,4 @@
-; RUN: llc < %s -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -disable-block-placement -verify-machineinstrs -fast-isel=false -machine-sink-split-probability-threshold=0 -cgp-freq-ratio-to-skip-merge=1000 -exception-model=wasm -mattr=+exception-handling | FileCheck %s
+; RUN: llc < %s -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -disable-block-placement -verify-machineinstrs -fast-isel=false -machine-sink-split-probability-threshold=0 -cgp-freq-ratio-to-skip-merge=1000 -exception-model=wasm -mattr=+exception-handling | FileCheck %s
target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
target triple = "wasm32-unknown-unknown"
@@ -7,26 +7,37 @@ target triple = "wasm32-unknown-unknown"
@_ZTId = external constant i8*
; Simple test case with two catch clauses
+;
+; void foo();
; void test0() {
; try {
; foo();
-; } catch (int n) {
-; bar();
-; } catch (double d) {
+; } catch (int) {
+; } catch (double) {
; }
; }
; CHECK-LABEL: test0
+; CHECK: block
; CHECK: try
-; CHECK: call foo
-; CHECK: catch $[[EXCEPT_REF:[0-9]+]]=
-; CHECK: block i32
-; CHECK: br_on_exn 0, __cpp_exception, $[[EXCEPT_REF]]
-; CHECK: rethrow
-; CHECK: end_block
-; CHECK: i32.call $drop=, _Unwind_CallPersonality
-; CHECK: end_try
-; CHECK: return
+; 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
define void @test0() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
entry:
invoke void @foo()
@@ -45,21 +56,16 @@ catch.start:
catch2: ; preds = %catch.start
%5 = call i8* @__cxa_begin_catch(i8* %2) [ "funclet"(token %1) ]
- %6 = bitcast i8* %5 to i32*
- %7 = load i32, i32* %6, align 4
- call void @bar() [ "funclet"(token %1) ]
call void @__cxa_end_catch() [ "funclet"(token %1) ]
catchret from %1 to label %try.cont
catch.fallthrough: ; preds = %catch.start
- %8 = call i32 @llvm.eh.typeid.for(i8* bitcast (i8** @_ZTId to i8*))
- %matches1 = icmp eq i32 %3, %8
+ %6 = call i32 @llvm.eh.typeid.for(i8* bitcast (i8** @_ZTId to i8*))
+ %matches1 = icmp eq i32 %3, %6
br i1 %matches1, label %catch, label %rethrow
catch: ; preds = %catch.fallthrough
- %9 = call i8* @__cxa_begin_catch(i8* %2) [ "funclet"(token %1) ]
- %10 = bitcast i8* %9 to double*
- %11 = load double, double* %10, align 8
+ %7 = call i8* @__cxa_begin_catch(i8* %2) [ "funclet"(token %1) ]
call void @__cxa_end_catch() [ "funclet"(token %1) ]
catchret from %1 to label %try.cont
@@ -75,41 +81,17 @@ try.cont:
; void test1() {
; try {
; foo();
-; } catch (int n) {
+; } catch (int) {
; try {
; foo();
-; } catch (int n) {
+; } catch (int) {
; foo();
; }
; }
; }
; CHECK-LABEL: test1
-; CHECK: try
-; CHECK: call foo
-; CHECK: catch
-; CHECK: br_on_exn 0, __cpp_exception
-; CHECK: rethrow
-; CHECK: i32.call $drop=, _Unwind_CallPersonality
-; CHECK: try
-; CHECK: call foo
-; CHECK: catch
-; CHECK: br_on_exn 0, __cpp_exception
-; CHECK: rethrow
-; CHECK: i32.call $drop=, _Unwind_CallPersonality
-; CHECK: try
-; CHECK: i32.call $drop=, __cxa_begin_catch
-; CHECK: try
-; CHECK: call foo
-; CHECK: catch $drop=
-; CHECK: rethrow
-; CHECK: end_try
-; CHECK: catch $drop=
-; CHECK: rethrow
-; CHECK: end_try
-; CHECK: end_try
-; CHECK: end_try
-; CHECK: return
+; TODO Fill in CHECK lines once we fix ScopeTops info bug in D58605
define void @test1() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
entry:
invoke void @foo()
@@ -195,29 +177,39 @@ unreachable:
; }
; CHECK-LABEL: test2
+; CHECK: block
; CHECK: try
-; CHECK: call foo
-; CHECK: catch
-; CHECK: br_on_exn 0, __cpp_exception
-; CHECK: rethrow
-; CHECK: loop
-; CHECK: try
-; CHECK: call foo
-; CHECK: catch $drop=
-; CHECK: try
-; CHECK: call __cxa_end_catch
+; CHECK: call foo
+; CHECK: br 0 # 0: down to label17
; CHECK: catch
-; CHECK: br_on_exn 0, __cpp_exception
-; CHECK: call __clang_call_terminate, 0
-; CHECK: unreachable
-; CHECK: call __clang_call_terminate
-; CHECK: unreachable
-; CHECK: end_try
-; CHECK: rethrow
-; CHECK: end_try
-; CHECK: end_loop
-; CHECK: end_try
-; CHECK: return
+; CHECK: i32.call $drop=, __cxa_begin_catch
+; CHECK: loop # label19:
+; CHECK: block
+; CHECK: block
+; CHECK: br_if 0, {{.*}} # 0: down to label21
+; CHECK: try
+; CHECK: call foo
+; CHECK: br 2 # 2: down to label20
+; 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: 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
define void @test2() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
entry:
invoke void @foo()
Modified: llvm/trunk/test/CodeGen/WebAssembly/exception.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/WebAssembly/exception.ll?rev=354842&r1=354841&r2=354842&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/WebAssembly/exception.ll (original)
+++ llvm/trunk/test/CodeGen/WebAssembly/exception.ll Mon Feb 25 19:29:59 2019
@@ -5,45 +5,62 @@
target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
target triple = "wasm32-unknown-unknown"
-%struct.Cleanup = type { i8 }
+%struct.Temp = type { i8 }
@_ZTIi = external constant i8*
; CHECK-LABEL: test_throw:
-; CHECK: throw __cpp_exception, $0
-; CHECK-NOT: unreachable
+; CHECK: throw __cpp_exception, $0
+; CHECK-NOT: unreachable
define void @test_throw(i8* %p) {
call void @llvm.wasm.throw(i32 0, i8* %p)
ret void
}
; CHECK-LABEL: test_rethrow:
-; CHECK: rethrow
-; CHECK-NOT: unreachable
+; CHECK: rethrow
+; CHECK-NOT: unreachable
define void @test_rethrow(i8* %p) {
call void @llvm.wasm.rethrow()
ret void
}
-; CHECK-LABEL: test_catch_rethrow:
-; CHECK: global.get ${{.+}}=, __stack_pointer
-; 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: i32.call $drop=, __cxa_begin_catch
-; CHECK: call __cxa_end_catch
-; CHECK: call __cxa_rethrow
-; CHECK: end_try
-define void @test_catch_rethrow() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
+; Simple test with a try-catch
+;
+; void foo();
+; void test_catch() {
+; try {
+; foo();
+; } catch (int) {
+; }
+; }
+
+; 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
+define void @test_catch() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
entry:
invoke void @foo()
to label %try.cont unwind label %catch.dispatch
@@ -72,40 +89,88 @@ try.cont:
ret void
}
+; Destructor (cleanup) test
+;
+; void foo();
+; struct Temp {
+; ~Temp() {}
+; };
+; void test_cleanup() {
+; Temp t;
+; foo();
+; }
+
; CHECK-LABEL: test_cleanup:
+; CHECK: block
; CHECK: try
-; CHECK: call foo
+; CHECK: call foo
+; CHECK: br 0
; CHECK: catch
-; CHECK: global.set __stack_pointer
-; CHECK: i32.call $drop=, _ZN7CleanupD1Ev
-; CHECK: rethrow
+; CHECK: global.set __stack_pointer
+; CHECK: i32.call $drop=, _ZN4TempD2Ev
+; CHECK: rethrow
; CHECK: end_try
+; CHECK: end_block
define void @test_cleanup() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
entry:
- %c = alloca %struct.Cleanup, align 1
+ %t = alloca %struct.Temp, align 1
invoke void @foo()
to label %invoke.cont unwind label %ehcleanup
invoke.cont: ; preds = %entry
- %call = call %struct.Cleanup* @_ZN7CleanupD1Ev(%struct.Cleanup* %c)
+ %call = call %struct.Temp* @_ZN4TempD2Ev(%struct.Temp* %t)
ret void
ehcleanup: ; preds = %entry
%0 = cleanuppad within none []
- %call1 = call %struct.Cleanup* @_ZN7CleanupD1Ev(%struct.Cleanup* %c) [ "funclet"(token %0) ]
+ %call1 = call %struct.Temp* @_ZN4TempD2Ev(%struct.Temp* %t) [ "funclet"(token %0) ]
cleanupret from %0 unwind to caller
}
+; Calling a function that may throw within a 'catch (...)' generates a
+; temrinatepad, because __cxa_end_catch() also can throw within 'catch (...)'.
+;
+; void foo();
+; void test_terminatepad() {
+; try {
+; foo();
+; } catch (...) {
+; foo();
+; }
+; }
+
; CHECK-LABEL: test_terminatepad
+; CHECK: block
+; CHECK: try
+; CHECK: call foo
+; 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: extract_exception
-; CHECK: call __clang_call_terminate
-; CHECK: unreachable
+; 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: end_try
+; CHECK: end_block
define void @test_terminatepad() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
entry:
invoke void @foo()
@@ -149,23 +214,47 @@ terminate:
; should not have a prologue, and BBs ending with a catchret/cleanupret should
; not have an epilogue. This is separate from __stack_pointer restoring
; instructions after a catch instruction.
+;
+; void bar(int) noexcept;
+; void test_no_prolog_epilog_in_ehpad() {
+; int stack_var = 0;
+; bar(stack_var);
+; try {
+; foo();
+; } catch (int) {
+; foo();
+; }
+; }
; CHECK-LABEL: test_no_prolog_epilog_in_ehpad
-; CHECK: try
-; CHECK: call foo
-; 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: call __cxa_end_catch
-; CHECK-NOT: global.set __stack_pointer, $pop{{.+}}
-; CHECK: end_try
-; CHECK-NOT: global.set __stack_pointer, $pop{{.+}}
-; CHECK: end_try
+; 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: 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: end_block
+; CHECK-NOT: global.set __stack_pointer, $pop{{.+}}
+; CHECK: call __cxa_end_catch
+; CHECK: end_try
+; CHECK: end_block
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
@@ -210,14 +299,28 @@ ehcleanup:
; When a function does not have stack-allocated objects, it does not need to
; store SP back to __stack_pointer global at the epilog.
-
-; CHECK-LABEL: no_sp_writeback
-; CHECK: try
-; CHECK: call foo
-; CHECK: end_try
-; CHECK-NOT: global.set __stack_pointer
-; CHECK: return
-define void @no_sp_writeback() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
+;
+; void foo();
+; void test_no_sp_writeback() {
+; try {
+; foo();
+; } 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-NOT: global.set __stack_pointer
+; CHECK: return
+define void @test_no_sp_writeback() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
entry:
invoke void @foo()
to label %try.cont unwind label %catch.dispatch
@@ -249,7 +352,7 @@ declare i8* @__cxa_begin_catch(i8*)
declare void @__cxa_end_catch()
declare void @__cxa_rethrow()
declare void @__clang_call_terminate(i8*)
-declare %struct.Cleanup* @_ZN7CleanupD1Ev(%struct.Cleanup* returned)
+declare %struct.Temp* @_ZN4TempD2Ev(%struct.Temp* returned)
; CHECK: __cpp_exception:
; CHECK: .eventtype __cpp_exception i32
Modified: llvm/trunk/test/CodeGen/WebAssembly/wasmehprepare.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/WebAssembly/wasmehprepare.ll?rev=354842&r1=354841&r2=354842&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/WebAssembly/wasmehprepare.ll (original)
+++ llvm/trunk/test/CodeGen/WebAssembly/wasmehprepare.ll Mon Feb 25 19:29:59 2019
@@ -6,11 +6,19 @@ target triple = "wasm32-unknown-unknown"
; CHECK: @__wasm_lpad_context = external global { i32, i8*, i32 }
@_ZTIi = external constant i8*
-%struct.Cleanup = type { i8 }
+%struct.Temp = type { i8 }
; A single 'catch (int)' clause.
; A wasm.catch() call, wasm.lsda() call, and personality call to generate a
; selector should all be genereated after the catchpad.
+;
+; void foo();
+; void test0() {
+; try {
+; foo();
+; } catch (int) {
+; }
+; }
define void @test0() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
; CHECK-LABEL: @test0()
entry:
@@ -53,11 +61,23 @@ try.cont:
ret void
}
-; Two try-catches, one of them is with a single 'catch (...)' clause.
+; Two try-catches.
; For the catchpad with a single 'catch (...)', only a wasm.catch() call should
; be generated after the catchpad; wasm.landingpad.index() and personality call
; should NOT be generated. For the other catchpad, the argument of
; wasm.landingpad.index() should be not 1 but 0.
+;
+; void foo();
+; void test1() {
+; try {
+; foo();
+; } catch (...) {
+; }
+; try {
+; foo();
+; } catch (int) {
+; }
+; }
define void @test1() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
; CHECK-LABEL: @test1()
entry:
@@ -112,8 +132,20 @@ try.cont7:
ret void
}
-; A nested try-catch within a catch. Within the nested catchpad, wasm.lsda()
-; call should NOT be generated.
+; A nested try-catch within a catch.
+;
+; void foo();
+; void test2() {
+; try {
+; foo();
+; } catch (int) {
+; try {
+; foo();
+; } catch (int) {
+; }
+; }
+; }
+; Within the nested catchpad, wasm.lsda() call should NOT be generated.
define void @test2() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
; CHECK-LABEL: @test2()
entry:
@@ -189,6 +221,15 @@ unreachable:
; A cleanuppad with a call to __clang_call_terminate().
; A call to wasm.catch() should be generated after the cleanuppad.
+;
+; void foo();
+; void test3() {
+; try {
+; foo();
+; } catch (...) {
+; foo();
+; }
+; }
define void @test3() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
; CHECK-LABEL: @test3
entry:
@@ -234,10 +275,37 @@ terminate:
; PHI demotion test. Only the phi before catchswitch should be demoted; the phi
; before cleanuppad should NOT.
+;
+; void foo();
+; int bar(int) noexcept;
+; struct Temp {
+; ~Temp() {}
+; };
+;
+; void test4() {
+; int num;
+; try {
+; Temp t;
+; num = 1;
+; foo();
+; num = 2;
+; foo();
+; } catch (...) {
+; bar(num);
+; }
+; try {
+; foo();
+; num = 1;
+; foo();
+; num = 2;
+; } catch (...) {
+; bar(num);
+; }
+; }
define void @test4() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
; CHECK-LABEL: @test4
entry:
- %c = alloca %struct.Cleanup, align 1
+ %t = alloca %struct.Temp, align 1
invoke void @foo()
to label %invoke.cont unwind label %ehcleanup
@@ -246,13 +314,13 @@ invoke.cont:
to label %invoke.cont1 unwind label %ehcleanup
invoke.cont1: ; preds = %invoke.cont
- %call = call %struct.Cleanup* @_ZN7CleanupD1Ev(%struct.Cleanup* %c)
+ %call = call %struct.Temp* @_ZN4TempD2Ev(%struct.Temp* %t)
br label %try.cont
ehcleanup: ; preds = %invoke.cont, %entry
%num.0 = phi i32 [ 2, %invoke.cont ], [ 1, %entry ]
%0 = cleanuppad within none []
- %call2 = call %struct.Cleanup* @_ZN7CleanupD1Ev(%struct.Cleanup* %c) [ "funclet"(token %0) ]
+ %call2 = call %struct.Temp* @_ZN4TempD2Ev(%struct.Temp* %t) [ "funclet"(token %0) ]
cleanupret from %0 unwind label %catch.dispatch
; CHECK: ehcleanup:
; CHECK-NEXT: = phi
@@ -265,7 +333,7 @@ catch.start:
%3 = call i8* @llvm.wasm.get.exception(token %2)
%4 = call i32 @llvm.wasm.get.ehselector(token %2)
%5 = call i8* @__cxa_begin_catch(i8* %3) [ "funclet"(token %2) ]
- call void @func(i32 %num.0) [ "funclet"(token %2) ]
+ call void @bar(i32 %num.0) [ "funclet"(token %2) ]
call void @__cxa_end_catch() [ "funclet"(token %2) ]
catchret from %2 to label %try.cont
@@ -288,7 +356,7 @@ catch.start6:
%8 = call i8* @llvm.wasm.get.exception(token %7)
%9 = call i32 @llvm.wasm.get.ehselector(token %7)
%10 = call i8* @__cxa_begin_catch(i8* %8) [ "funclet"(token %7) ]
- call void @func(i32 %num.1) [ "funclet"(token %7) ]
+ call void @bar(i32 %num.1) [ "funclet"(token %7) ]
call void @__cxa_end_catch() [ "funclet"(token %7) ]
catchret from %7 to label %try.cont10
@@ -353,8 +421,8 @@ merge:
}
declare void @foo()
-declare void @func(i32)
-declare %struct.Cleanup* @_ZN7CleanupD1Ev(%struct.Cleanup* returned)
+declare void @bar(i32)
+declare %struct.Temp* @_ZN4TempD2Ev(%struct.Temp* returned)
declare i32 @__gxx_wasm_personality_v0(...)
declare i8* @llvm.wasm.get.exception(token)
declare i32 @llvm.wasm.get.ehselector(token)
More information about the llvm-commits
mailing list