| (module | |
| (memory 1) | |
| (func $contrast ;; check for tee and structure sinking | |
| (local $x i32) | |
| (local $y i32) | |
| (local $z i32) | |
| (local $a i32) | |
| (local $b i32) | |
| (local.set $x (i32.const 1)) | |
| (if (local.get $x) (nop)) | |
| (if (local.get $x) (nop)) | |
| (local.set $y (if (result i32) (i32.const 2) (i32.const 3) (i32.const 4))) | |
| (drop (local.get $y)) | |
| (local.set $z (block (result i32) (i32.const 5))) | |
| (drop (local.get $z)) | |
| (if (i32.const 6) | |
| (local.set $a (i32.const 7)) | |
| (local.set $a (i32.const 8)) | |
| ) | |
| (drop (local.get $a)) | |
| (block $val | |
| (if (i32.const 10) | |
| (block | |
| (local.set $b (i32.const 11)) | |
| (br $val) | |
| ) | |
| ) | |
| (local.set $b (i32.const 12)) | |
| ) | |
| (drop (local.get $b)) | |
| ) | |
| (func $no-unreachable | |
| (local $x i32) | |
| (drop | |
| (local.tee $x | |
| (unreachable) | |
| ) | |
| ) | |
| ) | |
| (func $implicit-trap-and-global-effects | |
| (local $var$0 i32) | |
| (local.set $var$0 | |
| (i32.trunc_f64_u | |
| (f64.const -nan:0xfffffffffffc3) ;; this implicit trap will actually trap | |
| ) | |
| ) | |
| (f32.store align=1 ;; and if we move it across this store, the store will execute, having global side effects | |
| (i32.const 22) | |
| (f32.const 154) | |
| ) | |
| (drop | |
| (local.get $var$0) | |
| ) | |
| ) | |
| (func $implicit-trap-and-local-effects | |
| (local $var$0 i32) | |
| (local $other i32) | |
| (local.set $var$0 | |
| (i32.trunc_f64_u | |
| (f64.const -nan:0xfffffffffffc3) ;; this implicit trap will actually trap | |
| ) | |
| ) | |
| (local.set $other (i32.const 100)) ;; but it's fine to move it across a local effect, that vanishes anyhow | |
| (drop | |
| (local.get $var$0) | |
| ) | |
| (if (i32.const 1) | |
| (drop | |
| (local.get $other) | |
| ) | |
| ) | |
| ) | |
| (func $multi-pass-get-equivs-right (param $var$0 i32) (param $var$1 i32) (result f64) | |
| (local $var$2 i32) | |
| (local.set $var$2 | |
| (local.get $var$0) | |
| ) | |
| (i32.store | |
| (local.get $var$2) | |
| (i32.const 1) | |
| ) | |
| (f64.promote_f32 | |
| (f32.load | |
| (local.get $var$2) | |
| ) | |
| ) | |
| ) | |
| (func $if-value-structure-equivalent (param $x i32) (result i32) | |
| (local $y i32) | |
| (if (i32.const 1) | |
| (local.set $x (i32.const 2)) | |
| (block | |
| (local.set $y (local.get $x)) | |
| (local.set $x (local.get $y)) | |
| ) | |
| ) | |
| (local.get $x) | |
| ) | |
| ) | |