[clang] [lld] [llvm] [LLVM][WebAssembly] Implement branch hinting proposal (PR #146230)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Nov 28 08:11:01 PST 2025
Lukas =?utf-8?q?Döllerer?= <contact at lukas-doellerer.de>,
Lukas =?utf-8?q?Döllerer?= <contact at lukas-doellerer.de>,
Lukas =?utf-8?q?Döllerer?= <contact at lukas-doellerer.de>,
Lukas =?utf-8?q?Döllerer?= <contact at lukas-doellerer.de>,
Lukas =?utf-8?q?Döllerer?= <contact at lukas-doellerer.de>,
Lukas =?utf-8?q?Döllerer?= <contact at lukas-doellerer.de>,
Lukas =?utf-8?q?Döllerer?= <lukas.doellerer at tum.de>,
Lukas =?utf-8?q?Döllerer?= <contact at lukas-doellerer.de>,
Lukas =?utf-8?q?Döllerer?= <contact at lukas-doellerer.de>,
Lukas =?utf-8?q?Döllerer?= <lukas.doellerer at tum.de>,
Lukas =?utf-8?q?Döllerer?= <lukas.doellerer at tum.de>,
Lukas =?utf-8?q?Döllerer?= <lukas.doellerer at tum.de>,
Lukas =?utf-8?q?Döllerer?= <lukas.doellerer at tum.de>
Message-ID:
In-Reply-To: <llvm.org/llvm/llvm-project/pull/146230 at github.com>
github-actions[bot] wrote:
<!--PREMERGE ADVISOR COMMENT: Linux-->
# :penguin: Linux x64 Test Results
* 166441 tests passed
* 2875 tests skipped
* 2 tests failed
## Failed Tests
(click on a test name to see its output)
### LLVM
<details>
<summary>LLVM.CodeGen/WebAssembly/exception.ll</summary>
```
Exit Code: -6
Command Output (stdout):
--
# RUN: at line 1
/home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/llc < /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/test/CodeGen/WebAssembly/exception.ll -asm-verbose=false -wasm-enable-eh -wasm-use-legacy-eh=false -exception-model=wasm -mattr=+exception-handling -verify-machineinstrs | /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/FileCheck --implicit-check-not=ehgcr -allow-deprecated-dag-overlap /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/test/CodeGen/WebAssembly/exception.ll
# executed command: /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/llc -asm-verbose=false -wasm-enable-eh -wasm-use-legacy-eh=false -exception-model=wasm -mattr=+exception-handling -verify-machineinstrs
# note: command had no output on stdout or stderr
# executed command: /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/FileCheck --implicit-check-not=ehgcr -allow-deprecated-dag-overlap /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/test/CodeGen/WebAssembly/exception.ll
# note: command had no output on stdout or stderr
# RUN: at line 2
/home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/llc < /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/test/CodeGen/WebAssembly/exception.ll -asm-verbose=false -wasm-enable-eh -wasm-use-legacy-eh=false -exception-model=wasm -mattr=+exception-handling -verify-machineinstrs -O0
# executed command: /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/llc -asm-verbose=false -wasm-enable-eh -wasm-use-legacy-eh=false -exception-model=wasm -mattr=+exception-handling -verify-machineinstrs -O0
# .---command stdout------------
# | .file "<stdin>"
# | .globaltype __stack_pointer, i32
# | .tagtype __cpp_exception i32
# | .functype throw (i32) -> ()
# | .functype catch () -> ()
# | .functype cleanup () -> ()
# | .functype terminatepad () -> ()
# | .functype no_prolog_epilog_in_ehpad () -> ()
# | .functype no_sp_writeback () -> ()
# | .functype get_exception_wo_use () -> ()
# | .functype complex_cleanup_region () -> ()
# | .functype rethrow_terminator () -> ()
# | .functype inlined_cleanupret () -> ()
# | .functype invoke_throw (i32) -> ()
# | .functype unwind_destinations () -> ()
# | .functype foo () -> ()
# | .functype bar (i32) -> ()
# | .functype take_i32 (i32) -> ()
# | .functype __gxx_wasm_personality_v0 (i32) -> (i32)
# | .functype __cxa_allocate_exception (i32) -> (i32)
# | .functype __cxa_begin_catch (i32) -> (i32)
# | .functype __cxa_end_catch () -> ()
# | .functype __cxa_throw (i32, i32, i32) -> ()
# | .functype _ZSt9terminatev () -> ()
# | .functype _ZN4TempD2Ev (i32) -> (i32)
# | .functype _Unwind_CallPersonality (i32) -> (i32)
# | .section .text.throw,"",@
# | .globl throw
# | .type throw, at function
# | throw:
# | .functype throw (i32) -> ()
# | local.get 0
# | throw __cpp_exception
# | end_function
# |
# | .section .text.catch,"",@
# | .globl catch
# | .type catch, at function
# | catch:
# | .Lfunc_begin0:
# | .functype catch () -> ()
# | .local i32, i32, exnref, i32, i32
# | global.get __stack_pointer
# | local.set 0
# | block
# | block () -> (i32, exnref)
# | try_table (catch_ref __cpp_exception 0)
# | .Ltmp0:
# | call foo
# | .Ltmp1:
# | br 2
# | end_try_table
# | unreachable
# | .LBB1_2:
# | end_block
# | .Ltmp2:
# | local.set 2
# | local.set 1
# | local.get 0
# | global.set __stack_pointer
# | i32.const 0
# | local.set 3
# | i32.const 0
# | local.get 3
# | i32.store __wasm_lpad_context
# | i32.const GCC_except_table1
# | local.set 4
# | i32.const 0
# | local.get 4
# | i32.store __wasm_lpad_context+4
# | local.get 1
# | call _Unwind_CallPersonality
# | drop
# | block
# | i32.const 0
# | i32.load __wasm_lpad_context+8
# | i32.const 1
# | i32.eq
# | i32.const 1
# | i32.and
# | i32.eqz
# | br_if 0
# | local.get 1
# | call __cxa_begin_catch
# | drop
# | call __cxa_end_catch
# | br 1
# | .LBB1_4:
# | end_block
# | local.get 2
# | throw_ref
# | .LBB1_5:
# | end_block
# | return
# | end_function
# | .Lfunc_end0:
# | .section .rodata.gcc_except_table,"",@
# | .p2align 2, 0x0
# | GCC_except_table1:
# | .Lexception0:
# | .int8 255
# | .int8 0
# | .uleb128 .Lttbase0-.Lttbaseref0
# | .Lttbaseref0:
# | .int8 1
# | .uleb128 .Lcst_end0-.Lcst_begin0
# | .Lcst_begin0:
# | .int8 0
# | .int8 1
# | .Lcst_end0:
# | .int8 1
# | .int8 0
# | .p2align 2, 0x0
# | .int32 _ZTIi
# | .Lttbase0:
# | .p2align 2, 0x0
# | .LGCC_except_table_end0:
# | .size GCC_except_table1, .LGCC_except_table_end0-GCC_except_table1
# |
# | .section .text.cleanup,"",@
# | .globl cleanup
# | .type cleanup, at function
# | cleanup:
# | .Lfunc_begin1:
# | .functype cleanup () -> ()
# | .local i32, exnref
# | global.get __stack_pointer
# | i32.const 16
# | i32.sub
# | local.set 0
# | local.get 0
# | global.set __stack_pointer
# | block
# | block exnref
# | try_table (catch_all_ref 0)
# | .Ltmp3:
# | call foo
# | .Ltmp4:
# | br 2
# | end_try_table
# | unreachable
# | .LBB2_2:
# | end_block
# | .Ltmp5:
# | local.set 1
# | local.get 0
# | global.set __stack_pointer
# | local.get 0
# | i32.const 15
# | i32.add
# | call _ZN4TempD2Ev
# | drop
# | local.get 1
# | throw_ref
# | .LBB2_3:
# | end_block
# | local.get 0
# | i32.const 15
# | i32.add
# | call _ZN4TempD2Ev
# | drop
# | local.get 0
# | i32.const 16
# | i32.add
# | global.set __stack_pointer
# | return
# | end_function
# | .Lfunc_end1:
# |
# | .section .text.terminatepad,"",@
# | .globl terminatepad
# | .type terminatepad, at function
# | terminatepad:
# | .Lfunc_begin2:
# | .functype terminatepad () -> ()
# | .local i32, i32, exnref
# | global.get __stack_pointer
# | local.set 0
# | block
# | block i32
# | try_table (catch __cpp_exception 0)
# | .Ltmp6:
# | call foo
# | .Ltmp7:
# | br 2
# | end_try_table
# | unreachable
# | .LBB3_2:
# | end_block
# | .Ltmp8:
# | local.set 1
# | local.get 0
# | global.set __stack_pointer
# | local.get 1
# | call __cxa_begin_catch
# | drop
# | block
# | block exnref
# | try_table (catch_all_ref 0)
# | .Ltmp9:
# | call foo
# | .Ltmp10:
# | br 2
# | end_try_table
# | unreachable
# | .LBB3_4:
# | end_block
# | .Ltmp11:
# | .Ltmp12:
# | local.set 2
# | local.get 0
# | global.set __stack_pointer
# | block
# | block
# | try_table (catch_all 0)
# | call __cxa_end_catch
# | .Ltmp13:
# | br 2
# | end_try_table
# | unreachable
# | .LBB3_6:
# | end_block
# | .Ltmp14:
# | local.get 0
# | global.set __stack_pointer
# | call _ZSt9terminatev
# | unreachable
# | .LBB3_7:
# | end_block
# | local.get 2
# | throw_ref
# | .LBB3_8:
# | end_block
# | call __cxa_end_catch
# | .LBB3_9:
# | end_block
# | return
# | end_function
# | .Lfunc_end2:
# |
# | .section .text.no_prolog_epilog_in_ehpad,"",@
# | .globl no_prolog_epilog_in_ehpad
# | .type no_prolog_epilog_in_ehpad, at function
# | no_prolog_epilog_in_ehpad:
# | .Lfunc_begin3:
# | .functype no_prolog_epilog_in_ehpad () -> ()
# | .local i32, i32, exnref, i32, i32, exnref
# | global.get __stack_pointer
# | i32.const 16
# | i32.sub
# | local.set 0
# | local.get 0
# | global.set __stack_pointer
# | local.get 0
# | i32.const 12
# | i32.add
# | call bar
# | block
# | block () -> (i32, exnref)
# | try_table (catch_ref __cpp_exception 0)
# | .Ltmp15:
# | call foo
# | .Ltmp16:
# | br 2
# | end_try_table
# | unreachable
# | .LBB4_2:
# | end_block
# | .Ltmp17:
# | local.set 2
# | local.set 1
# | local.get 0
# | global.set __stack_pointer
# | i32.const 0
# | local.set 3
# | i32.const 0
# | local.get 3
# | i32.store __wasm_lpad_context
# | i32.const GCC_except_table4
# | local.set 4
# | i32.const 0
# | local.get 4
# | i32.store __wasm_lpad_context+4
# | local.get 1
# | call _Unwind_CallPersonality
# | drop
# | block
# | block
# | i32.const 0
# | i32.load __wasm_lpad_context+8
# | i32.const 1
# | i32.eq
# | i32.const 1
# | i32.and
# | i32.eqz
# | br_if 0
# | local.get 1
# | call __cxa_begin_catch
# | drop
# | block exnref
# | try_table (catch_all_ref 0)
# | .Ltmp18:
# | call foo
# | .Ltmp19:
# | br 3
# | end_try_table
# | unreachable
# | .LBB4_5:
# | end_block
# | .Ltmp20:
# | local.set 5
# | local.get 0
# | global.set __stack_pointer
# | call __cxa_end_catch
# | local.get 5
# | throw_ref
# | .LBB4_6:
# | end_block
# | local.get 2
# | throw_ref
# | .LBB4_7:
# | end_block
# | call __cxa_end_catch
# | .LBB4_8:
# | end_block
# | local.get 0
# | i32.const 16
# | i32.add
# | global.set __stack_pointer
# | return
# | end_function
# | .Lfunc_end3:
# | .section .rodata.gcc_except_table,"",@
# | .p2align 2, 0x0
# | GCC_except_table4:
# | .Lexception1:
# | .int8 255
# | .int8 0
# | .uleb128 .Lttbase1-.Lttbaseref1
# | .Lttbaseref1:
# | .int8 1
# | .uleb128 .Lcst_end1-.Lcst_begin1
# | .Lcst_begin1:
# | .int8 0
# | .int8 1
# | .Lcst_end1:
# | .int8 1
# | .int8 0
# | .p2align 2, 0x0
# | .int32 _ZTIi
# | .Lttbase1:
# | .p2align 2, 0x0
# | .LGCC_except_table_end1:
# | .size GCC_except_table4, .LGCC_except_table_end1-GCC_except_table4
# |
# | .section .text.no_sp_writeback,"",@
# | .globl no_sp_writeback
# | .type no_sp_writeback, at function
# | no_sp_writeback:
# | .Lfunc_begin4:
# | .functype no_sp_writeback () -> ()
# | .local i32, i32
# | global.get __stack_pointer
# | local.set 0
# | block
# | block i32
# | try_table (catch __cpp_exception 0)
# | .Ltmp21:
# | call foo
# | .Ltmp22:
# | br 2
# | end_try_table
# | unreachable
# | .LBB5_2:
# | end_block
# | .Ltmp23:
# | local.set 1
# | local.get 0
# | global.set __stack_pointer
# | local.get 1
# | call __cxa_begin_catch
# | drop
# | call __cxa_end_catch
# | .LBB5_3:
# | end_block
# | return
# | end_function
# | .Lfunc_end4:
# |
# | .section .text.get_exception_wo_use,"",@
# | .globl get_exception_wo_use
# | .type get_exception_wo_use, at function
# | get_exception_wo_use:
# | .Lfunc_begin5:
# | .functype get_exception_wo_use () -> ()
# | .local i32
# | global.get __stack_pointer
# | local.set 0
# | block
# | block i32
# | try_table (catch __cpp_exception 0)
# | .Ltmp24:
# | call foo
# | .Ltmp25:
# | br 2
# | end_try_table
# | unreachable
# | .LBB6_2:
# | end_block
# | .Ltmp26:
# | drop
# | local.get 0
# | global.set __stack_pointer
# | .LBB6_3:
# | end_block
# | return
# | end_function
# | .Lfunc_end5:
# |
# | .section .text.complex_cleanup_region,"",@
# | .globl complex_cleanup_region
# | .type complex_cleanup_region, at function
# | complex_cleanup_region:
# | .Lfunc_begin6:
# | .functype complex_cleanup_region () -> ()
# | .local i32, exnref
# | global.get __stack_pointer
# | local.set 0
# | block
# | block exnref
# | try_table (catch_all_ref 0)
# | .Ltmp27:
# | call foo
# | .Ltmp28:
# | br 2
# | end_try_table
# | unreachable
# | .LBB7_2:
# | end_block
# | .Ltmp29:
# | .Ltmp30:
# | local.set 1
# | local.get 0
# | global.set __stack_pointer
# | block
# | block
# | try_table (catch_all 0)
# | block i32
# | try_table (catch __cpp_exception 0)
# | call foo
# | .Ltmp31:
# | br 4
# | end_try_table
# | unreachable
# | .LBB7_4:
# | end_block
# | .Ltmp32:
# | drop
# | local.get 0
# | global.set __stack_pointer
# | br 2
# | end_try_table
# | unreachable
# | .LBB7_6:
# | end_block
# | .Ltmp33:
# | local.get 0
# | global.set __stack_pointer
# | unreachable
# | .LBB7_7:
# | end_block
# | local.get 1
# | throw_ref
# | .LBB7_8:
# | end_block
# | return
# | end_function
# | .Lfunc_end6:
# |
# | .section .text.rethrow_terminator,"",@
# | .globl rethrow_terminator
# | .type rethrow_terminator, at function
# | rethrow_terminator:
# | .Lfunc_begin7:
# | .functype rethrow_terminator () -> ()
# | .local i32, i32, exnref, i32, i32, exnref, exnref
# | block exnref
# | global.get __stack_pointer
# | i32.const 16
# | i32.sub
# | local.set 0
# | local.get 0
# | global.set __stack_pointer
# | local.get 0
# | i32.const 10
# | i32.store 12
# | block
# | block exnref
# | try_table (catch_all_ref 0)
# | block () -> (i32, exnref)
# | try_table (catch_ref __cpp_exception 0)
# | .Ltmp34:
# | call foo
# | .Ltmp35:
# | br 4
# | end_try_table
# | unreachable
# | .LBB8_2:
# | end_block
# | .Ltmp36:
# | local.set 2
# | local.set 1
# | local.get 0
# | global.set __stack_pointer
# | i32.const 0
# | local.set 3
# | i32.const 0
# | local.get 3
# | i32.store __wasm_lpad_context
# | i32.const GCC_except_table8
# | local.set 4
# | i32.const 0
# | local.get 4
# | i32.store __wasm_lpad_context+4
# | local.get 1
# | call _Unwind_CallPersonality
# | drop
# | block
# | i32.const 0
# | i32.load __wasm_lpad_context+8
# | i32.const 1
# | i32.eq
# | i32.const 1
# | i32.and
# | i32.eqz
# | br_if 0
# | local.get 1
# | call __cxa_begin_catch
# | drop
# | try_table (catch_all_ref 4)
# | call __cxa_end_catch
# | end_try_table
# | .LBB8_5:
# | br 3
# | .LBB8_6:
# | end_block
# | local.get 0
# | i32.const 20
# | i32.store 12
# | local.get 2
# | throw_ref
# | end_try_table
# | unreachable
# | .LBB8_8:
# | end_block
# | .Ltmp37:
# | local.set 5
# | local.get 0
# | global.set __stack_pointer
# | local.get 0
# | i32.load 12
# | call take_i32
# | local.get 5
# | throw_ref
# | .LBB8_9:
# | end_block
# | local.get 0
# | i32.const 16
# | i32.add
# | global.set __stack_pointer
# | return
# | unreachable
# | .LBB8_10:
# | end_block
# | local.set 6
# | local.get 6
# | throw_ref
# | end_function
# | .Lfunc_end7:
# | .section .rodata.gcc_except_table,"",@
# | .p2align 2, 0x0
# | GCC_except_table8:
# | .Lexception2:
# | .int8 255
# | .int8 0
# | .uleb128 .Lttbase2-.Lttbaseref2
# | .Lttbaseref2:
# | .int8 1
# | .uleb128 .Lcst_end2-.Lcst_begin2
# | .Lcst_begin2:
# | .int8 0
# | .int8 1
# | .Lcst_end2:
# | .int8 1
# | .int8 0
# | .p2align 2, 0x0
# | .int32 _ZTIi
# | .Lttbase2:
# | .p2align 2, 0x0
# | .LGCC_except_table_end2:
# | .size GCC_except_table8, .LGCC_except_table_end2-GCC_except_table8
# |
# | .section .text.inlined_cleanupret,"",@
# | .globl inlined_cleanupret
# | .type inlined_cleanupret, at function
# | inlined_cleanupret:
# | .Lfunc_begin8:
# | .functype inlined_cleanupret () -> ()
# | .local i32, i32, exnref, i32, i32, i32, exnref
# | block exnref
# | global.get __stack_pointer
# | local.set 0
# | i32.const 4
# | call __cxa_allocate_exception
# | local.set 1
# | local.get 1
# | i32.const 2
# | i32.store 0
# | .Ltmp38:
# | block
# | block exnref
# | try_table (catch_all_ref 0)
# | local.get 1
# | i32.const _ZTIi
# | i32.const 0
# | call __cxa_throw
# | .Ltmp39:
# | br 2
# | end_try_table
# | unreachable
# | .LBB9_2:
# | end_block
# | .Ltmp40:
# | local.set 2
# | local.get 0
# | global.set __stack_pointer
# | i32.const 4
# | call __cxa_allocate_exception
# | local.set 3
# | local.get 3
# | i32.const 1
# | i32.store 0
# | .Ltmp41:
# | block
# | try_table (catch_all 0)
# | block
# | block i32
# | try_table (catch __cpp_exception 0)
# | local.get 3
# | i32.const _ZTIi
# | i32.const 0
# | call __cxa_throw
# | .Ltmp42:
# | br 2
# | end_try_table
# | unreachable
# | .LBB9_4:
# | end_block
# | .Ltmp43:
# | local.set 4
# | local.get 0
# | global.set __stack_pointer
# | local.get 4
# | call __cxa_begin_catch
# | drop
# | .Ltmp44:
# | call __cxa_end_catch
# | .Ltmp45:
# | block i32
# | try_table (catch_all_ref 5)
# | try_table (catch __cpp_exception 1)
# | local.get 2
# | throw_ref
# | end_try_table
# | end_try_table
# | .LBB9_9:
# | unreachable
# | .LBB9_10:
# | end_block
# | .Ltmp46:
# | local.set 5
# | local.get 0
# | global.set __stack_pointer
# | local.get 5
# | call __cxa_begin_catch
# | drop
# | try_table (catch_all_ref 4)
# | call __cxa_end_catch
# | end_try_table
# | .LBB9_12:
# | return
# | .LBB9_13:
# | end_block
# | unreachable
# | end_try_table
# | unreachable
# | .LBB9_15:
# | end_block
# | .Ltmp47:
# | local.get 0
# | global.set __stack_pointer
# | call _ZSt9terminatev
# | unreachable
# | .LBB9_16:
# | end_block
# | unreachable
# | unreachable
# | .LBB9_17:
# | end_block
# | local.set 6
# | local.get 6
# | throw_ref
# | end_function
# | .Lfunc_end8:
# |
# | .section .text.invoke_throw,"",@
# | .globl invoke_throw
# | .type invoke_throw, at function
# | invoke_throw:
# | .Lfunc_begin9:
# | .functype invoke_throw (i32) -> ()
# | .local i32, i32
# | global.get __stack_pointer
# | local.set 1
# | block i32
# | try_table (catch __cpp_exception 0)
# | local.get 0
# | throw __cpp_exception
# | end_try_table
# | unreachable
# | .LBB10_2:
# | end_block
# | .Ltmp48:
# | local.set 2
# | local.get 1
# | global.set __stack_pointer
# | local.get 2
# | call __cxa_begin_catch
# | drop
# | call __cxa_end_catch
# | return
# | end_function
# | .Lfunc_end9:
# |
# | .section .text.unwind_destinations,"",@
# | .globl unwind_destinations
# | .type unwind_destinations, at function
# | unwind_destinations:
# | .Lfunc_begin10:
# | .functype unwind_destinations () -> ()
# | .local i32, i32
# | global.get __stack_pointer
# | local.set 0
# | block
# | block
# | try_table (catch_all 0)
# | block i32
# | try_table (catch __cpp_exception 0)
# | .Ltmp49:
# | call foo
# | .Ltmp50:
# | br 4
# | end_try_table
# | unreachable
# | .LBB11_2:
# | end_block
# | .Ltmp51:
# | local.set 1
# | local.get 0
# | global.set __stack_pointer
# | local.get 1
# | call __cxa_begin_catch
# | drop
# | call _ZSt9terminatev
# | unreachable
# | end_try_table
# | unreachable
# | .LBB11_4:
# | end_block
# | .Ltmp52:
# | local.get 0
# | global.set __stack_pointer
# | call _ZSt9terminatev
# | unreachable
# | .LBB11_5:
# | end_block
# | return
# | end_function
# | .Lfunc_end10:
# |
# | .no_dead_strip __indirect_function_table
# | .size _ZTIi, 4
# | .size __wasm_lpad_context, 12
# | .section .custom_section.target_features,"",@
# | .int8 10
# | .int8 43
# | .int8 11
# | .ascii "bulk-memory"
# | .int8 43
# | .int8 15
# | .ascii "bulk-memory-opt"
# | .int8 43
# | .int8 22
# | .ascii "call-indirect-overlong"
# | .int8 43
# | .int8 18
# | .ascii "exception-handling"
# | .int8 43
# | .int8 10
# | .ascii "multivalue"
# | .int8 43
# | .int8 15
# | .ascii "mutable-globals"
# | .int8 43
# | .int8 19
# | .ascii "nontrapping-fptoint"
# | .int8 43
# | .int8 15
# | .ascii "reference-types"
# | .int8 43
# | .int8 8
# | .ascii "sign-ext"
# | .int8 45
# | .int8 10
# | .ascii "shared-mem"
# | .section .text.unwind_destinations,"",@
# `-----------------------------
# RUN: at line 3
/home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/llc < /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/test/CodeGen/WebAssembly/exception.ll -wasm-enable-eh -wasm-use-legacy-eh=false -exception-model=wasm -mattr=+exception-handling
# executed command: /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/llc -wasm-enable-eh -wasm-use-legacy-eh=false -exception-model=wasm -mattr=+exception-handling
# .---command stdout------------
# | .file "<stdin>"
# | .globaltype __stack_pointer, i32
# | .tagtype __cpp_exception i32
# | .functype throw (i32) -> ()
# | .functype catch () -> ()
# | .functype cleanup () -> ()
# | .functype terminatepad () -> ()
# | .functype no_prolog_epilog_in_ehpad () -> ()
# | .functype no_sp_writeback () -> ()
# | .functype get_exception_wo_use () -> ()
# | .functype complex_cleanup_region () -> ()
# | .functype rethrow_terminator () -> ()
# | .functype inlined_cleanupret () -> ()
# | .functype invoke_throw (i32) -> ()
# | .functype unwind_destinations () -> ()
# | .functype foo () -> ()
# | .functype bar (i32) -> ()
# | .functype take_i32 (i32) -> ()
# | .functype __gxx_wasm_personality_v0 (i32) -> (i32)
# | .functype __cxa_allocate_exception (i32) -> (i32)
# | .functype __cxa_begin_catch (i32) -> (i32)
# | .functype __cxa_end_catch () -> ()
# | .functype __cxa_throw (i32, i32, i32) -> ()
# | .functype _ZSt9terminatev () -> ()
# | .functype _ZN4TempD2Ev (i32) -> (i32)
# | .functype _Unwind_CallPersonality (i32) -> (i32)
# | .section .text.throw,"",@
# | .globl throw # -- Begin function throw
# | .type throw, at function
# | throw: # @throw
# | .functype throw (i32) -> ()
# | # %bb.0:
# | local.get 0
# | throw __cpp_exception
# | end_function
# | # -- End function
# | .section .text.catch,"",@
# | .globl catch # -- Begin function catch
# | .type catch, at function
# | catch: # @catch
# | .Lfunc_begin0:
# | .functype catch () -> ()
# | .local i32, i32, exnref
# | # %bb.0: # %entry
# | global.get __stack_pointer
# | local.set 0
# | block
# | block () -> (i32, exnref)
# | try_table (catch_ref __cpp_exception 0) # 0: down to label1
# | .Ltmp0: # EH_LABEL
# | call foo
# | .Ltmp1: # EH_LABEL
# | br 2 # 2: down to label0
# | # %bb.1:
# | end_try_table # label2:
# | unreachable
# | .LBB1_2: # %catch.start
# | end_block # label1:
# | .Ltmp2: # EH_LABEL
# | local.set 2
# | local.set 1
# | local.get 0
# | global.set __stack_pointer
# | i32.const 4
# | i32.const GCC_except_table1
# | i32.store __wasm_lpad_context
# | i32.const 0
# | i32.const 0
# | i32.store __wasm_lpad_context
# | local.get 1
# | call _Unwind_CallPersonality
# | drop
# | block
# | i32.const 8
# | i32.load __wasm_lpad_context
# | i32.const 1
# | i32.ne
# | br_if 0 # 0: down to label3
# | # %bb.3: # %catch
# | local.get 1
# | call __cxa_begin_catch
# | drop
# | call __cxa_end_catch
# | br 1 # 1: down to label0
# | .LBB1_4: # %rethrow
# | end_block # label3:
# | local.get 2
# | throw_ref
# | .LBB1_5: # %try.cont
# | end_block # label0:
# | # fallthrough-return
# | end_function
# | .Lfunc_end0:
# | .section .rodata.gcc_except_table,"",@
# | .p2align 2, 0x0
# | GCC_except_table1:
# | .Lexception0:
# | .int8 255 # @LPStart Encoding = omit
# | .int8 0 # @TType Encoding = absptr
# | .uleb128 .Lttbase0-.Lttbaseref0
# | .Lttbaseref0:
# | .int8 1 # Call site Encoding = uleb128
# | .uleb128 .Lcst_end0-.Lcst_begin0
# | .Lcst_begin0:
# | .int8 0 # >> Call Site 0 <<
# | # On exception at call site 0
# | .int8 1 # Action: 1
# | .Lcst_end0:
# | .int8 1 # >> Action Record 1 <<
# | # Catch TypeInfo 1
# | .int8 0 # No further actions
# | .p2align 2, 0x0
# | # >> Catch TypeInfos <<
# | .int32 _ZTIi # TypeInfo 1
# | .Lttbase0:
# | .p2align 2, 0x0
# | .LGCC_except_table_end0:
# | .size GCC_except_table1, .LGCC_except_table_end0-GCC_except_table1
# | # -- End function
# | .section .text.cleanup,"",@
# | .globl cleanup # -- Begin function cleanup
# | .type cleanup, at function
# | cleanup: # @cleanup
# | .Lfunc_begin1:
# | .functype cleanup () -> ()
# | .local i32, exnref
# | # %bb.0: # %entry
# | global.get __stack_pointer
# | i32.const 16
# | i32.sub
# | local.tee 0
# | global.set __stack_pointer
# | block
# | block exnref
# | try_table (catch_all_ref 0) # 0: down to label5
# | .Ltmp3: # EH_LABEL
# | call foo
# | .Ltmp4: # EH_LABEL
# | br 2 # 2: down to label4
# | # %bb.1:
# | end_try_table # label6:
# | unreachable
# | .LBB2_2: # %ehcleanup
# | end_block # label5:
# | .Ltmp5: # EH_LABEL
# | local.set 1
# | local.get 0
# | global.set __stack_pointer
# | local.get 0
# | i32.const 15
# | i32.add
# | call _ZN4TempD2Ev
# | drop
# | local.get 1
# | throw_ref
# | .LBB2_3: # %invoke.cont
# | end_block # label4:
# | local.get 0
# | i32.const 15
# | i32.add
# | call _ZN4TempD2Ev
# | drop
# | local.get 0
# | i32.const 16
# | i32.add
# | global.set __stack_pointer
# | # fallthrough-return
# | end_function
# | .Lfunc_end1:
# | # -- End function
# | .section .text.terminatepad,"",@
# | .globl terminatepad # -- Begin function terminatepad
# | .type terminatepad, at function
# | terminatepad: # @terminatepad
# | .Lfunc_begin2:
# | .functype terminatepad () -> ()
# | .local i32, i32, exnref
# | # %bb.0: # %entry
# | global.get __stack_pointer
# | local.set 0
# | block
# | block i32
# | try_table (catch __cpp_exception 0) # 0: down to label8
# | .Ltmp6: # EH_LABEL
# | call foo
# | .Ltmp7: # EH_LABEL
# | br 2 # 2: down to label7
# | # %bb.1:
# | end_try_table # label9:
# | unreachable
# | .LBB3_2: # %catch.start
# | end_block # label8:
# | .Ltmp8: # EH_LABEL
# | local.set 1
# | local.get 0
# | global.set __stack_pointer
# | local.get 1
# | call __cxa_begin_catch
# | drop
# | block
# | block exnref
# | try_table (catch_all_ref 0) # 0: down to label11
# | .Ltmp9: # EH_LABEL
# | call foo
# | .Ltmp10: # EH_LABEL
# | br 2 # 2: down to label10
# | # %bb.3:
# | end_try_table # label12:
# | unreachable
# | .LBB3_4: # %ehcleanup
# | end_block # label11:
# | .Ltmp11: # EH_LABEL
# | .Ltmp12: # EH_LABEL
# | local.set 2
# | local.get 0
# | global.set __stack_pointer
# | block
# | block
# | try_table (catch_all 0) # 0: down to label14
# | call __cxa_end_catch
# | .Ltmp13: # EH_LABEL
# | br 2 # 2: down to label13
# | # %bb.5:
# | end_try_table # label15:
# | unreachable
# | .LBB3_6: # %terminate
# | end_block # label14:
# | .Ltmp14: # EH_LABEL
# | local.get 0
# | global.set __stack_pointer
# | call _ZSt9terminatev
# | unreachable
# | .LBB3_7: # %invoke.cont2
# | end_block # label13:
# | local.get 2
# | throw_ref
# | .LBB3_8: # %invoke.cont1
# | end_block # label10:
# | call __cxa_end_catch
# | .LBB3_9: # %try.cont
# | end_block # label7:
# | # fallthrough-return
# | end_function
# | .Lfunc_end2:
# | # -- End function
# | .section .text.no_prolog_epilog_in_ehpad,"",@
# | .globl no_prolog_epilog_in_ehpad # -- Begin function no_prolog_epilog_in_ehpad
# | .type no_prolog_epilog_in_ehpad, at function
# | no_prolog_epilog_in_ehpad: # @no_prolog_epilog_in_ehpad
# | .Lfunc_begin3:
# | .functype no_prolog_epilog_in_ehpad () -> ()
# | .local i32, i32, exnref
# | # %bb.0: # %entry
# | global.get __stack_pointer
# | i32.const 16
# | i32.sub
# | local.tee 0
# | global.set __stack_pointer
# | local.get 0
# | i32.const 12
# | i32.add
# | call bar
# | block
# | block () -> (i32, exnref)
# | try_table (catch_ref __cpp_exception 0) # 0: down to label17
# | .Ltmp15: # EH_LABEL
# | call foo
# | .Ltmp16: # EH_LABEL
# | br 2 # 2: down to label16
# | # %bb.1:
# | end_try_table # label18:
# | unreachable
# | .LBB4_2: # %catch.start
# | end_block # label17:
# | .Ltmp17: # EH_LABEL
# | local.set 2
# | local.set 1
# | local.get 0
# | global.set __stack_pointer
# | i32.const 4
# | i32.const GCC_except_table4
# | i32.store __wasm_lpad_context
# | i32.const 0
# | i32.const 0
# | i32.store __wasm_lpad_context
# | local.get 1
# | call _Unwind_CallPersonality
# | drop
# | block
# | block
# | i32.const 8
# | i32.load __wasm_lpad_context
# | i32.const 1
# | i32.ne
# | br_if 0 # 0: down to label20
# | # %bb.3: # %catch
# | local.get 1
# | call __cxa_begin_catch
# | drop
# | block exnref
# | try_table (catch_all_ref 0) # 0: down to label21
# | .Ltmp18: # EH_LABEL
# | call foo
# | .Ltmp19: # EH_LABEL
# | br 3 # 3: down to label19
# | # %bb.4:
# | end_try_table # label22:
# | unreachable
# | .LBB4_5: # %ehcleanup
# | end_block # label21:
# | .Ltmp20: # EH_LABEL
# | local.set 2
# | local.get 0
# | global.set __stack_pointer
# | call __cxa_end_catch
# | local.get 2
# | throw_ref
# | .LBB4_6: # %rethrow
# | end_block # label20:
# | local.get 2
# | throw_ref
# | .LBB4_7: # %invoke.cont1
# | end_block # label19:
# | call __cxa_end_catch
# | .LBB4_8: # %try.cont
# | end_block # label16:
# | local.get 0
# | i32.const 16
# | i32.add
# | global.set __stack_pointer
# | # fallthrough-return
# | end_function
# | .Lfunc_end3:
# | .section .rodata.gcc_except_table,"",@
# | .p2align 2, 0x0
# | GCC_except_table4:
# | .Lexception1:
# | .int8 255 # @LPStart Encoding = omit
# | .int8 0 # @TType Encoding = absptr
# | .uleb128 .Lttbase1-.Lttbaseref1
# | .Lttbaseref1:
# | .int8 1 # Call site Encoding = uleb128
# | .uleb128 .Lcst_end1-.Lcst_begin1
# | .Lcst_begin1:
# | .int8 0 # >> Call Site 0 <<
# | # On exception at call site 0
# | .int8 1 # Action: 1
# | .Lcst_end1:
# | .int8 1 # >> Action Record 1 <<
# | # Catch TypeInfo 1
# | .int8 0 # No further actions
# | .p2align 2, 0x0
# | # >> Catch TypeInfos <<
# | .int32 _ZTIi # TypeInfo 1
# | .Lttbase1:
# | .p2align 2, 0x0
# | .LGCC_except_table_end1:
# | .size GCC_except_table4, .LGCC_except_table_end1-GCC_except_table4
# | # -- End function
# | .section .text.no_sp_writeback,"",@
# | .globl no_sp_writeback # -- Begin function no_sp_writeback
# | .type no_sp_writeback, at function
# | no_sp_writeback: # @no_sp_writeback
# | .Lfunc_begin4:
# | .functype no_sp_writeback () -> ()
# | .local i32, i32
# | # %bb.0: # %entry
# | global.get __stack_pointer
# | local.set 0
# | block
# | block i32
# | try_table (catch __cpp_exception 0) # 0: down to label24
# | .Ltmp21: # EH_LABEL
# | call foo
# | .Ltmp22: # EH_LABEL
# | br 2 # 2: down to label23
# | # %bb.1:
# | end_try_table # label25:
# | unreachable
# | .LBB5_2: # %catch.start
# | end_block # label24:
# | .Ltmp23: # EH_LABEL
# | local.set 1
# | local.get 0
# | global.set __stack_pointer
# | local.get 1
# | call __cxa_begin_catch
# | drop
# | call __cxa_end_catch
# | .LBB5_3: # %try.cont
# | end_block # label23:
# | # fallthrough-return
# | end_function
# | .Lfunc_end4:
# | # -- End function
# | .section .text.get_exception_wo_use,"",@
# | .globl get_exception_wo_use # -- Begin function get_exception_wo_use
# | .type get_exception_wo_use, at function
# | get_exception_wo_use: # @get_exception_wo_use
# | .Lfunc_begin5:
# | .functype get_exception_wo_use () -> ()
# | .local i32
# | # %bb.0: # %entry
# | global.get __stack_pointer
# | local.set 0
# | block
# | block i32
# | try_table (catch __cpp_exception 0) # 0: down to label27
# | .Ltmp24: # EH_LABEL
# | call foo
# | .Ltmp25: # EH_LABEL
# | br 2 # 2: down to label26
# | # %bb.1:
# | end_try_table # label28:
# | unreachable
# | .LBB6_2: # %catch.start
# | end_block # label27:
# | .Ltmp26: # EH_LABEL
# | drop
# | local.get 0
# | global.set __stack_pointer
# | .LBB6_3: # %try.cont
# | end_block # label26:
# | # fallthrough-return
# | end_function
# | .Lfunc_end5:
# | # -- End function
# | .section .text.complex_cleanup_region,"",@
# | .globl complex_cleanup_region # -- Begin function complex_cleanup_region
# | .type complex_cleanup_region, at function
# | complex_cleanup_region: # @complex_cleanup_region
# | .Lfunc_begin6:
# | .functype complex_cleanup_region () -> ()
# | .local i32, exnref
# | # %bb.0: # %entry
# | global.get __stack_pointer
# | local.set 0
# | block
# | block exnref
# | try_table (catch_all_ref 0) # 0: down to label30
# | .Ltmp27: # EH_LABEL
# | call foo
# | .Ltmp28: # EH_LABEL
# | br 2 # 2: down to label29
# | # %bb.1:
# | end_try_table # label31:
# | unreachable
# | .LBB7_2: # %ehcleanup
# | end_block # label30:
# | .Ltmp29: # EH_LABEL
# | .Ltmp30: # EH_LABEL
# | local.set 1
# | local.get 0
# | global.set __stack_pointer
# | block
# | block
# | try_table (catch_all 0) # 0: down to label33
# | block i32
# | try_table (catch __cpp_exception 0) # 0: down to label35
# | call foo
# | .Ltmp31: # EH_LABEL
# | br 4 # 4: down to label32
# | # %bb.3:
# | end_try_table # label36:
# | unreachable
# | .LBB7_4: # %catch.start
# | end_block # label35:
# | .Ltmp32: # EH_LABEL
# | drop
# | local.get 0
# | global.set __stack_pointer
# | br 2 # 2: down to label32
# | # %bb.5:
# | end_try_table # label34:
# | unreachable
# | .LBB7_6: # %ehcleanup.1
# | end_block # label33:
# | .Ltmp33: # EH_LABEL
# | local.get 0
# | global.set __stack_pointer
# | unreachable
# | .LBB7_7: # %ehcleanupret
# | end_block # label32:
# | local.get 1
# | throw_ref
# | .LBB7_8: # %invoke.cont
# | end_block # label29:
# | # fallthrough-return
# | end_function
# | .Lfunc_end6:
# | # -- End function
# | .section .text.rethrow_terminator,"",@
# | .globl rethrow_terminator # -- Begin function rethrow_terminator
# | .type rethrow_terminator, at function
# | rethrow_terminator: # @rethrow_terminator
# | .Lfunc_begin7:
# | .functype rethrow_terminator () -> ()
# | .local i32, i32, exnref, exnref
# | # %bb.0: # %entry
# | block exnref
# | global.get __stack_pointer
# | i32.const 16
# | i32.sub
# | local.tee 0
# | global.set __stack_pointer
# | local.get 0
# | i32.const 10
# | i32.store 12
# | block
# | block exnref
# | try_table (catch_all_ref 0) # 0: down to label39
# | block () -> (i32, exnref)
# | try_table (catch_ref __cpp_exception 0) # 0: down to label41
# | .Ltmp34: # EH_LABEL
# | call foo
# | .Ltmp35: # EH_LABEL
# | br 4 # 4: down to label38
# | # %bb.1:
# | end_try_table # label42:
# | unreachable
# | .LBB8_2: # %catch.start
# | end_block # label41:
# | .Ltmp36: # EH_LABEL
# | local.set 2
# | local.set 1
# | local.get 0
# | global.set __stack_pointer
# | i32.const 4
# | i32.const GCC_except_table8
# | i32.store __wasm_lpad_context
# | i32.const 0
# | i32.const 0
# | i32.store __wasm_lpad_context
# | local.get 1
# | call _Unwind_CallPersonality
# | drop
# | block
# | i32.const 8
# | i32.load __wasm_lpad_context
# | i32.const 1
# | i32.ne
# | br_if 0 # 0: down to label43
# | # %bb.3: # %catch
# | local.get 1
# | call __cxa_begin_catch
# | drop
# | try_table (catch_all_ref 4) # 4: down to label37
# | call __cxa_end_catch
# | # %bb.4:
# | end_try_table # label44:
# | .LBB8_5:
# | br 3 # 3: down to label38
# | .LBB8_6: # %rethrow
# | end_block # label43:
# | local.get 0
# | i32.const 20
# | i32.store 12
# | local.get 2
# | throw_ref
# | # %bb.7:
# | end_try_table # label40:
# | unreachable
# | .LBB8_8: # %ehcleanup
# | end_block # label39:
# | .Ltmp37: # EH_LABEL
# | local.set 2
# | local.get 0
# | global.set __stack_pointer
# | local.get 0
# | i32.load 12
# | call take_i32
# | local.get 2
# | throw_ref
# | .LBB8_9: # %try.cont
# | end_block # label38:
# | local.get 0
# | i32.const 16
# | i32.add
# | global.set __stack_pointer
# | return
# | unreachable
# | .LBB8_10:
# | end_block # label37:
# | local.set 3
# | local.get 3
# | throw_ref
# | end_function
# | .Lfunc_end7:
# | .section .rodata.gcc_except_table,"",@
# | .p2align 2, 0x0
# | GCC_except_table8:
# | .Lexception2:
# | .int8 255 # @LPStart Encoding = omit
# | .int8 0 # @TType Encoding = absptr
# | .uleb128 .Lttbase2-.Lttbaseref2
# | .Lttbaseref2:
# | .int8 1 # Call site Encoding = uleb128
# | .uleb128 .Lcst_end2-.Lcst_begin2
# | .Lcst_begin2:
# | .int8 0 # >> Call Site 0 <<
# | # On exception at call site 0
# | .int8 1 # Action: 1
# | .Lcst_end2:
# | .int8 1 # >> Action Record 1 <<
# | # Catch TypeInfo 1
# | .int8 0 # No further actions
# | .p2align 2, 0x0
# | # >> Catch TypeInfos <<
# | .int32 _ZTIi # TypeInfo 1
# | .Lttbase2:
# | .p2align 2, 0x0
# | .LGCC_except_table_end2:
# | .size GCC_except_table8, .LGCC_except_table_end2-GCC_except_table8
# | # -- End function
# | .section .text.inlined_cleanupret,"",@
# | .globl inlined_cleanupret # -- Begin function inlined_cleanupret
# | .type inlined_cleanupret, at function
# | inlined_cleanupret: # @inlined_cleanupret
# | .Lfunc_begin8:
# | .functype inlined_cleanupret () -> ()
# | .local i32, i32, exnref, exnref
# | # %bb.0: # %entry
# | block exnref
# | global.get __stack_pointer
# | local.set 0
# | i32.const 4
# | call __cxa_allocate_exception
# | local.tee 1
# | i32.const 2
# | i32.store 0
# | .Ltmp38: # EH_LABEL
# | block
# | block exnref
# | try_table (catch_all_ref 0) # 0: down to label47
# | local.get 1
# | i32.const _ZTIi
# | i32.const 0
# | call __cxa_throw
# | .Ltmp39: # EH_LABEL
# | br 2 # 2: down to label46
# | # %bb.1:
# | end_try_table # label48:
# | unreachable
# | .LBB9_2: # %ehcleanup
# | end_block # label47:
# | .Ltmp40: # EH_LABEL
# | local.set 2
# | local.get 0
# | global.set __stack_pointer
# | i32.const 4
# | call __cxa_allocate_exception
# | local.tee 1
# | i32.const 1
# | i32.store 0
# | .Ltmp41: # EH_LABEL
# | block
# | try_table (catch_all 0) # 0: down to label49
# | block
# | block i32
# | try_table (catch __cpp_exception 0) # 0: down to label52
# | local.get 1
# | i32.const _ZTIi
# | i32.const 0
# | call __cxa_throw
# | .Ltmp42: # EH_LABEL
# | br 2 # 2: down to label51
# | # %bb.3:
# | end_try_table # label53:
# | unreachable
# | .LBB9_4: # %catch.start.i
# | end_block # label52:
# | .Ltmp43: # EH_LABEL
# | local.set 1
# | local.get 0
# | global.set __stack_pointer
# | local.get 1
# | call __cxa_begin_catch
# | drop
# | .Ltmp44: # EH_LABEL
# | call __cxa_end_catch
# | .Ltmp45: # EH_LABEL
# | # %bb.5: # %invoke.cont.i
# | # %bb.6: # %_ZN4TempD2Ev.exit
# | block i32
# | try_table (catch_all_ref 5) # 5: down to label45
# | try_table (catch __cpp_exception 1) # 1: down to label54
# | local.get 2
# | throw_ref
# | # %bb.7:
# | end_try_table # label56:
# | # %bb.8:
# | end_try_table # label55:
# | .LBB9_9:
# | unreachable
# | .LBB9_10: # %catch.start
# | end_block # label54:
# | .Ltmp46: # EH_LABEL
# | local.set 1
# | local.get 0
# | global.set __stack_pointer
# | local.get 1
# | call __cxa_begin_catch
# | drop
# | try_table (catch_all_ref 4) # 4: down to label45
# | call __cxa_end_catch
# | # %bb.11:
# | end_try_table # label57:
# | .LBB9_12: # %try.cont
# | return
# | .LBB9_13: # %unreachable
# | end_block # label51:
# | unreachable
# | # %bb.14:
# | end_try_table # label50:
# | unreachable
# | .LBB9_15: # %terminate.i
# | end_block # label49:
# | .Ltmp47: # EH_LABEL
# | local.get 0
# | global.set __stack_pointer
# | call _ZSt9terminatev
# | unreachable
# | .LBB9_16: # %unreachable.for.entry
# | end_block # label46:
# | unreachable
# | unreachable
# | .LBB9_17:
# | end_block # label45:
# | local.set 3
# | local.get 3
# | throw_ref
# | end_function
# | .Lfunc_end8:
# | # -- End function
# | .section .text.invoke_throw,"",@
# | .globl invoke_throw # -- Begin function invoke_throw
# | .type invoke_throw, at function
# | invoke_throw: # @invoke_throw
# | .Lfunc_begin9:
# | .functype invoke_throw (i32) -> ()
# | .local i32
# | # %bb.0: # %entry
# | global.get __stack_pointer
# | local.set 1
# | block i32
# | try_table (catch __cpp_exception 0) # 0: down to label58
# | local.get 0
# | throw __cpp_exception
# | # %bb.1:
# | end_try_table # label59:
# | unreachable
# | .LBB10_2: # %catch.start
# | end_block # label58:
# | .Ltmp48: # EH_LABEL
# | local.set 0
# | local.get 1
# | global.set __stack_pointer
# | local.get 0
# | call __cxa_begin_catch
# | drop
# | call __cxa_end_catch
# | # %bb.3: # %try.cont
# | # fallthrough-return
# | end_function
# | .Lfunc_end9:
# | # -- End function
# | .section .text.unwind_destinations,"",@
# | .globl unwind_destinations # -- Begin function unwind_destinations
# | .type unwind_destinations, at function
# | unwind_destinations: # @unwind_destinations
# | .Lfunc_begin10:
# | .functype unwind_destinations () -> ()
# | .local i32, i32
# | # %bb.0: # %entry
# | global.get __stack_pointer
# | local.set 0
# | block
# | block
# | try_table (catch_all 0) # 0: down to label61
# | block i32
# | try_table (catch __cpp_exception 0) # 0: down to label63
# | .Ltmp49: # EH_LABEL
# | call foo
# | .Ltmp50: # EH_LABEL
# | br 4 # 4: down to label60
# | # %bb.1:
# | end_try_table # label64:
# | unreachable
# | .LBB11_2: # %catch.start
# | end_block # label63:
# | .Ltmp51: # EH_LABEL
# | local.set 1
# | local.get 0
# | global.set __stack_pointer
# | local.get 1
# | call __cxa_begin_catch
# | drop
# | call _ZSt9terminatev
# | unreachable
# | # %bb.3:
# | end_try_table # label62:
# | unreachable
# | .LBB11_4: # %terminate
# | end_block # label61:
# | .Ltmp52: # EH_LABEL
# | local.get 0
# | global.set __stack_pointer
# | call _ZSt9terminatev
# | unreachable
# | .LBB11_5: # %try.cont
# | end_block # label60:
# | # fallthrough-return
# | end_function
# | .Lfunc_end10:
# | # -- End function
# | .no_dead_strip __indirect_function_table
# | .size _ZTIi, 4
# | .size __wasm_lpad_context, 12
# | .section .custom_section.target_features,"",@
# | .int8 10
# | .int8 43
# | .int8 11
# | .ascii "bulk-memory"
# | .int8 43
# | .int8 15
# | .ascii "bulk-memory-opt"
# | .int8 43
# | .int8 22
# | .ascii "call-indirect-overlong"
# | .int8 43
# | .int8 18
# | .ascii "exception-handling"
# | .int8 43
# | .int8 10
# | .ascii "multivalue"
# | .int8 43
# | .int8 15
# | .ascii "mutable-globals"
# | .int8 43
# | .int8 19
# | .ascii "nontrapping-fptoint"
# | .int8 43
# | .int8 15
# | .ascii "reference-types"
# | .int8 43
# | .int8 8
# | .ascii "sign-ext"
# | .int8 45
# | .int8 10
# | .ascii "shared-mem"
# | .section .text.unwind_destinations,"",@
# `-----------------------------
# RUN: at line 4
/home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/llc < /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/test/CodeGen/WebAssembly/exception.ll -wasm-enable-eh -wasm-use-legacy-eh=false -exception-model=wasm -mattr=+exception-handling -filetype=obj
# executed command: /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/llc -wasm-enable-eh -wasm-use-legacy-eh=false -exception-model=wasm -mattr=+exception-handling -filetype=obj
# .---command stderr------------
# | llc: /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/MC/MCWasmStreamer.cpp:158: virtual void llvm::MCWasmStreamer::emitULEB128Value(const MCExpr *): Assertion `Value->getKind() == MCExpr::SymbolRef && "Non-absolute leb values can only be symbol refs"' failed.
# | PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace and instructions to reproduce the bug.
# | Stack dump:
# | 0. Program arguments: /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/llc -wasm-enable-eh -wasm-use-legacy-eh=false -exception-model=wasm -mattr=+exception-handling -filetype=obj
# | 1. Running pass 'Function Pass Manager' on module '<stdin>'.
# | 2. Running pass 'WebAssembly Assembly Printer' on function '@catch'
# | #0 0x0000000007f09078 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Support/Unix/Signals.inc:834:13
# | #1 0x0000000007f06785 llvm::sys::RunSignalHandlers() /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Support/Signals.cpp:105:18
# | #2 0x0000000007f09e41 SignalHandler(int, siginfo_t*, void*) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Support/Unix/Signals.inc:426:38
# | #3 0x00007f2ee13f4330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
# | #4 0x00007f2ee144db2c pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x9eb2c)
# | #5 0x00007f2ee13f427e raise (/lib/x86_64-linux-gnu/libc.so.6+0x4527e)
# | #6 0x00007f2ee13d78ff abort (/lib/x86_64-linux-gnu/libc.so.6+0x288ff)
# | #7 0x00007f2ee13d781b (/lib/x86_64-linux-gnu/libc.so.6+0x2881b)
# | #8 0x00007f2ee13ea517 (/lib/x86_64-linux-gnu/libc.so.6+0x3b517)
# | #9 0x00000000075d18bf (/home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/llc+0x75d18bf)
# | #10 0x0000000006cc3605 llvm::EHStreamer::emitExceptionTable()::$_1::operator()() const /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/CodeGen/AsmPrinter/EHStreamer.cpp:500:7
# | #11 0x0000000006cc2535 size /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/ADT/SmallVector.h:80:32
# | #12 0x0000000006cc2535 end /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include/llvm/ADT/SmallVector.h:273:37
# | #13 0x0000000006cc2535 llvm::EHStreamer::emitExceptionTable() /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/CodeGen/AsmPrinter/EHStreamer.cpp:596:47
# | #14 0x0000000006cec612 llvm::WasmException::endFunction(llvm::MachineFunction const*) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/CodeGen/AsmPrinter/WasmException.cpp:33:3
# | #15 0x0000000006c38ddf llvm::AsmPrinter::emitFunctionBody() /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp:2289:22
# | #16 0x00000000062d222b llvm::WebAssemblyAsmPrinter::runOnMachineFunction(llvm::MachineFunction&) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Target/WebAssembly/WebAssemblyAsmPrinter.h:58:5
# | #17 0x0000000006f15343 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/CodeGen/MachineFunctionPass.cpp:0:10
# | #18 0x0000000007485345 llvm::FPPassManager::runOnFunction(llvm::Function&) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1398:27
# | #19 0x000000000748d2f2 llvm::FPPassManager::runOnModule(llvm::Module&) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1444:13
# | #20 0x0000000007485dec runOnModule /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1513:27
# | #21 0x0000000007485dec llvm::legacy::PassManagerImpl::run(llvm::Module&) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:531:44
# | #22 0x0000000004dd8308 compileModule(char**, llvm::LLVMContext&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&) /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/tools/llc/llc.cpp:0:8
# | #23 0x0000000004dd56a0 main /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/tools/llc/llc.cpp:451:13
# | #24 0x00007f2ee13d91ca (/lib/x86_64-linux-gnu/libc.so.6+0x2a1ca)
# | #25 0x00007f2ee13d928b __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2a28b)
# | #26 0x0000000004dd1125 _start (/home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/llc+0x4dd1125)
# `-----------------------------
# error: command failed with exit status: -6
--
```
</details>
<details>
<summary>LLVM.CodeGen/WebAssembly/target-features-cpus.ll</summary>
```
Exit Code: 1
Command Output (stdout):
--
# RUN: at line 1
/home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/llc < /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/test/CodeGen/WebAssembly/target-features-cpus.ll -mcpu=mvp | /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/FileCheck /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/test/CodeGen/WebAssembly/target-features-cpus.ll --check-prefixes MVP
# executed command: /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/llc -mcpu=mvp
# note: command had no output on stdout or stderr
# executed command: /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/FileCheck /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/test/CodeGen/WebAssembly/target-features-cpus.ll --check-prefixes MVP
# note: command had no output on stdout or stderr
# RUN: at line 2
/home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/llc < /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/test/CodeGen/WebAssembly/target-features-cpus.ll -mcpu=generic | /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/FileCheck /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/test/CodeGen/WebAssembly/target-features-cpus.ll --check-prefixes GENERIC
# executed command: /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/llc -mcpu=generic
# note: command had no output on stdout or stderr
# executed command: /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/FileCheck /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/test/CodeGen/WebAssembly/target-features-cpus.ll --check-prefixes GENERIC
# note: command had no output on stdout or stderr
# RUN: at line 3
/home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/llc < /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/test/CodeGen/WebAssembly/target-features-cpus.ll -mcpu=lime1 | /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/FileCheck /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/test/CodeGen/WebAssembly/target-features-cpus.ll --check-prefixes LIME1
# executed command: /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/llc -mcpu=lime1
# note: command had no output on stdout or stderr
# executed command: /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/FileCheck /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/test/CodeGen/WebAssembly/target-features-cpus.ll --check-prefixes LIME1
# note: command had no output on stdout or stderr
# RUN: at line 4
/home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/llc < /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/test/CodeGen/WebAssembly/target-features-cpus.ll | /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/FileCheck /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/test/CodeGen/WebAssembly/target-features-cpus.ll --check-prefixes GENERIC
# executed command: /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/llc
# note: command had no output on stdout or stderr
# executed command: /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/FileCheck /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/test/CodeGen/WebAssembly/target-features-cpus.ll --check-prefixes GENERIC
# note: command had no output on stdout or stderr
# RUN: at line 5
/home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/llc < /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/test/CodeGen/WebAssembly/target-features-cpus.ll -mcpu=bleeding-edge | /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/FileCheck /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/test/CodeGen/WebAssembly/target-features-cpus.ll --check-prefixes BLEEDING-EDGE
# executed command: /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/llc -mcpu=bleeding-edge
# note: command had no output on stdout or stderr
# executed command: /home/gha/actions-runner/_work/llvm-project/llvm-project/build/bin/FileCheck /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/test/CodeGen/WebAssembly/target-features-cpus.ll --check-prefixes BLEEDING-EDGE
# .---command stderr------------
# | /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/test/CodeGen/WebAssembly/target-features-cpus.ll:75:23: error: BLEEDING-EDGE-NEXT: expected string not found in input
# | ; BLEEDING-EDGE-NEXT: .int8 17
# | ^
# | <stdin>:2:47: note: scanning from here
# | .section .custom_section.target_features,"",@
# | ^
# | <stdin>:3:2: note: possible intended match here
# | .int8 18
# | ^
# |
# | Input file: <stdin>
# | Check file: /home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/test/CodeGen/WebAssembly/target-features-cpus.ll
# |
# | -dump-input=help explains the following input dump.
# |
# | Input was:
# | <<<<<<
# | 1: .file "<stdin>"
# | 2: .section .custom_section.target_features,"",@
# | next:75'0 X error: no match found
# | 3: .int8 18
# | next:75'0 ~~~~~~~~~~
# | next:75'1 ? possible intended match
# | 4: .int8 43
# | next:75'0 ~~~~~~~~~~
# | 5: .int8 7
# | next:75'0 ~~~~~~~~~
# | 6: .ascii "atomics"
# | next:75'0 ~~~~~~~~~~~~~~~~~~
# | 7: .int8 43
# | next:75'0 ~~~~~~~~~~
# | 8: .int8 14
# | next:75'0 ~~~~~~~~~~
# | .
# | .
# | .
# | >>>>>>
# `-----------------------------
# error: command failed with exit status: 1
--
```
</details>
If these failures are unrelated to your changes (for example tests are broken or flaky at HEAD), please open an issue at https://github.com/llvm/llvm-project/issues and add the `infrastructure` label.
https://github.com/llvm/llvm-project/pull/146230
More information about the cfe-commits
mailing list