| (module |
| (memory 1) |
| (func $a ;; load 8s, but use is 8u, so load should be signed |
| (local $y i32) |
| (local.set $y |
| (i32.load8_s |
| (i32.const 1024) |
| ) |
| ) |
| (drop |
| (i32.and |
| (local.get $y) |
| (i32.const 255) |
| ) |
| ) |
| ) |
| (func $b ;; load 16s, but use is 16u, so load should be signed |
| (local $y i32) |
| (local.set $y |
| (i32.load16_s |
| (i32.const 1024) |
| ) |
| ) |
| (drop |
| (i32.and |
| (local.get $y) |
| (i32.const 65535) |
| ) |
| ) |
| ) |
| (func $c ;; load 8u, keep |
| (local $y i32) |
| (local.set $y |
| (i32.load8_u |
| (i32.const 1024) |
| ) |
| ) |
| (drop |
| (i32.and |
| (local.get $y) |
| (i32.const 255) |
| ) |
| ) |
| ) |
| (func $d ;; load 16u, keep |
| (local $y i32) |
| (local.set $y |
| (i32.load16_u |
| (i32.const 1024) |
| ) |
| ) |
| (drop |
| (i32.and |
| (local.get $y) |
| (i32.const 65535) |
| ) |
| ) |
| ) |
| (func $one-of-each ;; prefer the signed, potential code removal is bigger |
| (local $y i32) |
| (local.set $y |
| (i32.load8_s |
| (i32.const 1024) |
| ) |
| ) |
| (drop |
| (i32.and |
| (local.get $y) |
| (i32.const 255) |
| ) |
| ) |
| (drop |
| (i32.shr_s |
| (i32.shl |
| (local.get $y) |
| (i32.const 24) |
| ) |
| (i32.const 24) |
| ) |
| ) |
| ) |
| (func $more-of-one ;; prefer the signed even if 2x more unsigned |
| (local $y i32) |
| (local.set $y |
| (i32.load8_s |
| (i32.const 1024) |
| ) |
| ) |
| (drop |
| (i32.and |
| (local.get $y) |
| (i32.const 255) |
| ) |
| ) |
| (drop |
| (i32.and |
| (local.get $y) |
| (i32.const 255) |
| ) |
| ) |
| (drop |
| (i32.shr_s |
| (i32.shl |
| (local.get $y) |
| (i32.const 24) |
| ) |
| (i32.const 24) |
| ) |
| ) |
| ) |
| (func $many-more-of-one ;; but not 3x |
| (local $y i32) |
| (local.set $y |
| (i32.load8_s |
| (i32.const 1024) |
| ) |
| ) |
| (drop |
| (i32.and |
| (local.get $y) |
| (i32.const 255) |
| ) |
| ) |
| (drop |
| (i32.and |
| (local.get $y) |
| (i32.const 255) |
| ) |
| ) |
| (drop |
| (i32.and |
| (local.get $y) |
| (i32.const 255) |
| ) |
| ) |
| (drop |
| (i32.shr_s |
| (i32.shl |
| (local.get $y) |
| (i32.const 24) |
| ) |
| (i32.const 24) |
| ) |
| ) |
| ) |
| (func $a-sign ;; load 8s, use is s, so keep |
| (local $y i32) |
| (local.set $y |
| (i32.load8_s |
| (i32.const 1024) |
| ) |
| ) |
| (drop |
| (i32.shr_s |
| (i32.shl |
| (local.get $y) |
| (i32.const 24) |
| ) |
| (i32.const 24) |
| ) |
| ) |
| ) |
| (func $multivar |
| (local $x i32) |
| (local $y i32) |
| (local.set $x |
| (i32.load8_s |
| (i32.const 1024) |
| ) |
| ) |
| (drop |
| (i32.and |
| (local.get $x) |
| (i32.const 255) |
| ) |
| ) |
| (local.set $y |
| (i32.load8_s |
| (i32.const 1024) |
| ) |
| ) |
| (drop |
| (i32.shr_s |
| (i32.shl |
| (local.get $y) |
| (i32.const 24) |
| ) |
| (i32.const 24) |
| ) |
| ) |
| ) |
| (func $corners |
| (local $y i32) |
| (drop |
| (i32.load8_s ;; not sent into a local.set |
| (i32.const 1024) |
| ) |
| ) |
| (drop |
| (i32.load8_u ;; not sent into a local.set |
| (i32.const 1024) |
| ) |
| ) |
| (local.set $y |
| (i32.const 1024) ;; not a load |
| ) |
| ) |
| (func $wrong-size ;; load 8s, but use is 16 |
| (local $y i32) |
| (local.set $y |
| (i32.load8_s |
| (i32.const 1024) |
| ) |
| ) |
| (drop |
| (i32.and |
| (local.get $y) |
| (i32.const 65535) |
| ) |
| ) |
| ) |
| (func $wrong-size_s ;; load 8s, but use is 16 |
| (local $y i32) |
| (local.set $y |
| (i32.load8_u |
| (i32.const 1024) |
| ) |
| ) |
| (drop |
| (i32.shr_s |
| (i32.shl |
| (local.get $y) |
| (i32.const 16) |
| ) |
| (i32.const 16) |
| ) |
| ) |
| ) |
| (func $non-sign-or-unsigned-use |
| (local $y i32) |
| (local.set $y |
| (i32.load8_s |
| (i32.const 1024) |
| ) |
| ) |
| (drop |
| (i32.and |
| (local.get $y) |
| (i32.const 255) |
| ) |
| ) |
| (drop |
| (local.get $y) |
| ) |
| ) |
| (func $toplevel-load (result i32) |
| (i32.load8_s |
| (i32.const 1024) |
| ) |
| ) |
| (func $tees |
| (local $y i32) |
| (drop ;; a "use", so we can't alter the value |
| (local.tee $y |
| (i32.load8_s |
| (i32.const 1024) |
| ) |
| ) |
| ) |
| (drop |
| (i32.and |
| (local.get $y) |
| (i32.const 255) |
| ) |
| ) |
| ) |
| ) |