|
2833 | 2833 | )
|
2834 | 2834 | )
|
2835 | 2835 | ;; CHECK: (func $sext-24-div (result i32)
|
2836 |
| - ;; CHECK-NEXT: (i32.shr_u |
2837 |
| - ;; CHECK-NEXT: (i32.const 1) |
2838 |
| - ;; CHECK-NEXT: (i32.const 1) |
2839 |
| - ;; CHECK-NEXT: ) |
| 2836 | + ;; CHECK-NEXT: (i32.const 0) |
2840 | 2837 | ;; CHECK-NEXT: )
|
2841 | 2838 | (func $sext-24-div (result i32)
|
2842 | 2839 | (i32.shr_s
|
2843 | 2840 | (i32.shl
|
2844 |
| - (i32.div_s ;; this could be optimizable in theory, but currently we don't look into adds etc. |
2845 |
| - (i32.const 1) |
2846 |
| - (i32.const 2) |
| 2841 | + (i32.div_s ;; we don't precompute this, but we do know the limit on |
| 2842 | + (i32.const 1) ;; max bits, and the sign bit cannot be 1, so this all |
| 2843 | + (i32.const 2) ;; ends up as zero. |
2847 | 2844 | )
|
2848 | 2845 | (i32.const 24)
|
2849 | 2846 | )
|
2850 | 2847 | (i32.const 24)
|
2851 | 2848 | )
|
2852 | 2849 | )
|
| 2850 | + ;; CHECK: (func $sext-24-param (param $x i32) (result i32) |
| 2851 | + ;; CHECK-NEXT: (i32.shr_s |
| 2852 | + ;; CHECK-NEXT: (i32.shl |
| 2853 | + ;; CHECK-NEXT: (local.get $x) |
| 2854 | + ;; CHECK-NEXT: (i32.const 24) |
| 2855 | + ;; CHECK-NEXT: ) |
| 2856 | + ;; CHECK-NEXT: (i32.const 24) |
| 2857 | + ;; CHECK-NEXT: ) |
| 2858 | + ;; CHECK-NEXT: ) |
| 2859 | + (func $sext-24-param (param $x i32) (result i32) |
| 2860 | + (i32.shr_s |
| 2861 | + (i32.shl |
| 2862 | + (local.get $x) ;; we don't know what this is, and so optimize nothing |
| 2863 | + (i32.const 24) |
| 2864 | + ) |
| 2865 | + (i32.const 24) |
| 2866 | + ) |
| 2867 | + ) |
2853 | 2868 | ;; CHECK: (func $sext-24-and-127-128 (result i32)
|
2854 | 2869 | ;; CHECK-NEXT: (i32.and
|
2855 | 2870 | ;; CHECK-NEXT: (i32.const 127)
|
|
3178 | 3193 | )
|
3179 | 3194 | )
|
3180 | 3195 | ;; CHECK: (func $sext-24-shr_s-and-masked-sign (result i32)
|
3181 |
| - ;; CHECK-NEXT: (i32.shr_u |
3182 |
| - ;; CHECK-NEXT: (i32.and |
3183 |
| - ;; CHECK-NEXT: (i32.const -1) |
3184 |
| - ;; CHECK-NEXT: (i32.const 2147483647) |
3185 |
| - ;; CHECK-NEXT: ) |
3186 |
| - ;; CHECK-NEXT: (i32.const 31) |
3187 |
| - ;; CHECK-NEXT: ) |
| 3196 | + ;; CHECK-NEXT: (i32.const 0) |
3188 | 3197 | ;; CHECK-NEXT: )
|
3189 | 3198 | (func $sext-24-shr_s-and-masked-sign (result i32)
|
3190 | 3199 | (i32.shr_s
|
|
3194 | 3203 | (i32.const -1)
|
3195 | 3204 | (i32.const 2147483647)
|
3196 | 3205 | )
|
3197 |
| - (i32.const 31) ;; adjusted after we fixed shift computation to just look at lower 5 bits |
3198 |
| - ) |
| 3206 | + (i32.const 31) ;; no sign bit, so the shift zeroes us out, and |
| 3207 | + ) ;; later shifts cannot add bits, so the result is 0 |
3199 | 3208 | (i32.const 24)
|
3200 | 3209 | )
|
3201 | 3210 | (i32.const 24)
|
|
6281 | 6290 | ;; CHECK: (func $mix-shifts (result i32)
|
6282 | 6291 | ;; CHECK-NEXT: (i32.shr_u
|
6283 | 6292 | ;; CHECK-NEXT: (i32.shl
|
6284 |
| - ;; CHECK-NEXT: (i32.const 23) |
| 6293 | + ;; CHECK-NEXT: (i32.const 65535) |
6285 | 6294 | ;; CHECK-NEXT: (i32.const 3)
|
6286 | 6295 | ;; CHECK-NEXT: )
|
6287 | 6296 | ;; CHECK-NEXT: (i32.const 8)
|
|
6290 | 6299 | (func $mix-shifts (result i32)
|
6291 | 6300 | (i32.shr_s
|
6292 | 6301 | (i32.shl
|
6293 |
| - (i32.const 23) |
| 6302 | + (i32.const 65535) |
6294 | 6303 | (i32.const -61)
|
6295 | 6304 | )
|
6296 | 6305 | (i32.const 168)
|
|
8407 | 8416 | ;; CHECK-NEXT: (i32.const 0)
|
8408 | 8417 | ;; CHECK-NEXT: )
|
8409 | 8418 | ;; CHECK-NEXT: (drop
|
8410 |
| - ;; CHECK-NEXT: (i32.and |
8411 |
| - ;; CHECK-NEXT: (call $andZero |
8412 |
| - ;; CHECK-NEXT: (i32.const 1234) |
| 8419 | + ;; CHECK-NEXT: (block (result i32) |
| 8420 | + ;; CHECK-NEXT: (drop |
| 8421 | + ;; CHECK-NEXT: (call $andZero |
| 8422 | + ;; CHECK-NEXT: (i32.const 1234) |
| 8423 | + ;; CHECK-NEXT: ) |
8413 | 8424 | ;; CHECK-NEXT: )
|
8414 | 8425 | ;; CHECK-NEXT: (i32.const 0)
|
8415 | 8426 | ;; CHECK-NEXT: )
|
|
8425 | 8436 | )
|
8426 | 8437 | (drop
|
8427 | 8438 | (i32.and
|
8428 |
| - (call $andZero (i32.const 1234)) ;; side effects |
| 8439 | + (call $andZero (i32.const 1234)) ;; side effects, we must keep this, but |
| 8440 | + ;; can drop it. |
8429 | 8441 | (i32.const 0)
|
8430 | 8442 | )
|
8431 | 8443 | )
|
|
11114 | 11126 | ;; CHECK-NEXT: )
|
11115 | 11127 | ;; CHECK-NEXT: )
|
11116 | 11128 | ;; CHECK-NEXT: (drop
|
11117 |
| - ;; CHECK-NEXT: (i64.extend_i32_s |
11118 |
| - ;; CHECK-NEXT: (i32.const 0) |
11119 |
| - ;; CHECK-NEXT: ) |
| 11129 | + ;; CHECK-NEXT: (i64.const 0) |
11120 | 11130 | ;; CHECK-NEXT: )
|
11121 | 11131 | ;; CHECK-NEXT: (drop
|
11122 | 11132 | ;; CHECK-NEXT: (i32.const 1)
|
|
0 commit comments