|
3 | 3 | ;; RUN: foreach %s %t wasm-opt -all --gufa -S -o - | filecheck %s |
4 | 4 |
|
5 | 5 | ;; The function here will use a NullLocation for (ref exn) as well as a |
6 | | -;; TypeLocation for that very same type. We should not get confused and end up |
7 | | -;; optimizing anything here. |
| 6 | +;; TypeLocation for that very same type. We should not get confused by that (see |
| 7 | +;; below). |
8 | 8 |
|
9 | 9 | (module |
| 10 | + ;; CHECK: (type $func (func)) |
10 | 11 | (type $func (func)) |
11 | 12 |
|
| 13 | + ;; CHECK: (tag $tag (type $func)) |
12 | 14 | (tag $tag (type $func)) |
13 | 15 |
|
| 16 | + ;; CHECK: (export "func" (func $func)) |
| 17 | + |
| 18 | + ;; CHECK: (func $func (type $func) |
| 19 | + ;; CHECK-NEXT: (local $1 (ref exn)) |
| 20 | + ;; CHECK-NEXT: (drop |
| 21 | + ;; CHECK-NEXT: (block $block (result (ref exn)) |
| 22 | + ;; CHECK-NEXT: (try_table (catch_all_ref $block) |
| 23 | + ;; CHECK-NEXT: (throw $tag) |
| 24 | + ;; CHECK-NEXT: ) |
| 25 | + ;; CHECK-NEXT: (return) |
| 26 | + ;; CHECK-NEXT: ) |
| 27 | + ;; CHECK-NEXT: ) |
| 28 | + ;; CHECK-NEXT: (try |
| 29 | + ;; CHECK-NEXT: (do |
| 30 | + ;; CHECK-NEXT: (nop) |
| 31 | + ;; CHECK-NEXT: ) |
| 32 | + ;; CHECK-NEXT: (catch $tag |
| 33 | + ;; CHECK-NEXT: (drop |
| 34 | + ;; CHECK-NEXT: (block |
| 35 | + ;; CHECK-NEXT: (drop |
| 36 | + ;; CHECK-NEXT: (block $block0 (result (ref noexn)) |
| 37 | + ;; CHECK-NEXT: (local.tee $1 |
| 38 | + ;; CHECK-NEXT: (unreachable) |
| 39 | + ;; CHECK-NEXT: ) |
| 40 | + ;; CHECK-NEXT: (br_on_non_null $block0 |
| 41 | + ;; CHECK-NEXT: (ref.null noexn) |
| 42 | + ;; CHECK-NEXT: ) |
| 43 | + ;; CHECK-NEXT: (drop |
| 44 | + ;; CHECK-NEXT: (unreachable) |
| 45 | + ;; CHECK-NEXT: ) |
| 46 | + ;; CHECK-NEXT: (unreachable) |
| 47 | + ;; CHECK-NEXT: ) |
| 48 | + ;; CHECK-NEXT: ) |
| 49 | + ;; CHECK-NEXT: (unreachable) |
| 50 | + ;; CHECK-NEXT: ) |
| 51 | + ;; CHECK-NEXT: ) |
| 52 | + ;; CHECK-NEXT: ) |
| 53 | + ;; CHECK-NEXT: ) |
| 54 | + ;; CHECK-NEXT: ) |
14 | 55 | (func $func (export "func") |
15 | 56 | (local $1 (ref exn)) |
16 | 57 | ;; This part ends up generating a TypeLocation for (ref exn). |
| 58 | + ;; |
| 59 | + ;; This code should not be mis-optimized. In particular, it should not trap. |
17 | 60 | (drop |
18 | 61 | (block $block (result (ref exn)) |
19 | 62 | (try_table (catch_all_ref $block) |
|
30 | 73 | (drop |
31 | 74 | (block $block (result (ref exn)) |
32 | 75 | ;; This part ends up generating a NullLocation for (ref exn). |
| 76 | + ;; |
| 77 | + ;; Due to the unreachable here, we will end up modifying this code to add |
| 78 | + ;; more unreachables. |
33 | 79 | (br_on_non_null $block |
34 | 80 | (local.tee $1 |
35 | 81 | (unreachable) |
|
0 commit comments