|
| 1 | +;; RUN: foreach %s %t wasm-opt -O2 --skip-pass=coalesce-locals --skip-pass=simplify-locals--skip-pass=simplify-locals-nostructure -S -o - 2>&1 | filecheck %s |
| 2 | + |
| 3 | +;; Check that we can skip several passes. Note that no local.tee is introduced. |
| 4 | + |
| 5 | +;; There should also be no warning in the output. |
| 6 | +;; CHECK-NOT: warning: |
| 7 | + |
| 8 | +(module |
| 9 | + ;; CHECK: (type $0 (func (param i32 i32))) |
| 10 | + |
| 11 | + ;; CHECK: (type $1 (func (param i32))) |
| 12 | + |
| 13 | + ;; CHECK: (import "a" "b" (func $log (param i32 i32))) |
| 14 | + (import "a" "b" (func $log (param i32 i32))) |
| 15 | + |
| 16 | + (func $foo (export "foo") (param $p i32) |
| 17 | + ;; The locals $x and $y can be coalesced into a single local, but as we do not |
| 18 | + ;; run that pass, they will not be. Other minor optimizations will occur here, |
| 19 | + ;; such as using a tee. |
| 20 | + (local $x i32) |
| 21 | + (local $y i32) |
| 22 | + |
| 23 | + (local.set $x |
| 24 | + (i32.add |
| 25 | + (local.get $p) |
| 26 | + (i32.const 1) |
| 27 | + ) |
| 28 | + ) |
| 29 | + (call $log |
| 30 | + (local.get $x) |
| 31 | + (local.get $x) |
| 32 | + ) |
| 33 | + |
| 34 | + (local.set $y |
| 35 | + (i32.add |
| 36 | + (local.get $p) |
| 37 | + (i32.const 1) |
| 38 | + ) |
| 39 | + ) |
| 40 | + (call $log |
| 41 | + (local.get $y) |
| 42 | + (local.get $y) |
| 43 | + ) |
| 44 | + ) |
| 45 | +) |
| 46 | +;; CHECK: (export "foo" (func $foo)) |
| 47 | + |
| 48 | +;; CHECK: (func $foo (param $p i32) |
| 49 | +;; CHECK-NEXT: (local $x i32) |
| 50 | +;; CHECK-NEXT: (local $y i32) |
| 51 | +;; CHECK-NEXT: (local.set $x |
| 52 | +;; CHECK-NEXT: (i32.add |
| 53 | +;; CHECK-NEXT: (local.get $p) |
| 54 | +;; CHECK-NEXT: (i32.const 1) |
| 55 | +;; CHECK-NEXT: ) |
| 56 | +;; CHECK-NEXT: ) |
| 57 | +;; CHECK-NEXT: (call $log |
| 58 | +;; CHECK-NEXT: (local.get $x) |
| 59 | +;; CHECK-NEXT: (local.get $x) |
| 60 | +;; CHECK-NEXT: ) |
| 61 | +;; CHECK-NEXT: (local.set $y |
| 62 | +;; CHECK-NEXT: (i32.add |
| 63 | +;; CHECK-NEXT: (local.get $p) |
| 64 | +;; CHECK-NEXT: (i32.const 1) |
| 65 | +;; CHECK-NEXT: ) |
| 66 | +;; CHECK-NEXT: ) |
| 67 | +;; CHECK-NEXT: (call $log |
| 68 | +;; CHECK-NEXT: (local.get $y) |
| 69 | +;; CHECK-NEXT: (local.get $y) |
| 70 | +;; CHECK-NEXT: ) |
| 71 | +;; CHECK-NEXT: ) |
0 commit comments