Stream: git-wasmtime

Topic: wasmtime / issue #13990 Dead-store-elimination changing b...


view this post on Zulip Wasmtime GitHub notifications bot (Jul 25 2026 at 20:41):

alexcrichton opened issue #13990:

This program is minimized as much as possible with wasm-tools shrink but is still unfortunately pretty large:

<details>

(module
  (type (;0;) (func (param i32) (result i32)))
  (type (;1;) (func (param i32 i64 v128) (result i32 i64 v128)))
  (type (;2;) (func (param i32 i64) (result i64)))
  (memory (;0;) 1)
  (global (;0;) (mut i32) i32.const 3)
  (global (;1;) (mut i64) i64.const 2)
  (global (;2;) (mut v128) v128.const i32x4 0x735127d8 0x101dfc4c 0x00000000 0x00000000)
  (export "f" (func 2))
  (func (;0;) (type 0) (param i32) (result i32)
    i32.const 0
  )
  (func (;1;) (type 1) (param i32 i64 v128) (result i32 i64 v128)
    i32.const 0
    i64.const 0
    local.get 2
  )
  (func (;2;) (type 2) (param i32 i64) (result i64)
    (local i32 i32 i32 i64 i64 i64 i64 i32 i32 i32 i32 i32 i32 i64 v128)
    block (result i64) ;; label = @1
      i64.const 0
      i32.const 0
      br_if 0 (;@1;)
      drop
      i64.const -5711338421754897453
    end
    block (result i64) ;; label = @1
      i64.const 1
      global.set 1
      global.get 1
    end
    i64.or
    i64.eqz
    i32.const 446637775
    i32.and
    block (result i32) ;; label = @1
      i32.const -1406424254
      local.get 2
      i32.const 1
      i32.and
      drop
      call 0
      local.get 2
      if (result i32) ;; label = @2
        i32.const 1921195370
      else
        local.get 4
      end
      i32.gt_u
      i32.const -1749529909
      if (result i32) ;; label = @2
        local.get 4
      else
        local.get 4
      end
      i32.const 1
      i32.and
      i32.load8_s
      br_if 0 (;@1;)
      drop
      local.get 3
    end
    local.get 5
    i64.const 8414888160472258071
    i64.ge_s
    i32.clz
    i32.extend16_s
    i32.gt_u
    local.get 4
    select
    i32.const 1023
    i32.and
    block (result i32) ;; label = @1
      i32.const 476009111
      i32.const 1
      i32.eqz
      br_if 0 (;@1;)
      drop
      local.get 0
    end
    i32.const 1008
    i32.and
    i32.load
    block (result i32) ;; label = @1
      local.get 0
      i32.const 1
      i32.and
      drop
      local.get 6
      i64.clz
      i32.const -1519123096
      call 0
      i64.extend_i32_u
      i64.ge_s
      i32.const 1471333110
      i32.const 0
      local.tee 2
      i32.xor
      br_if 0 (;@1;)
      drop
      block (result i32) ;; label = @2
        local.get 2
        i32.const 1918905060
        i32.lt_s
        block (result i32) ;; label = @3
          block (result i32) ;; label = @4
            local.get 3
            local.get 4
            br_table 0 (;@4;) 1 (;@3;) 0 (;@4;)
          end
          drop
          local.get 0
        end
        br_if 0 (;@2;)
        drop
        i32.const 14561677
        local.tee 2
      end
    end
    i32.rotl
    block (result i32) ;; label = @1
      block (result i32) ;; label = @2
        local.get 0
        i64.const -5675628639357158877
        v128.const i32x4 0xd2fc56a6 0xf0878b73 0x8f8ec78b 0x447623ff
        call 1
        drop
        drop
      end
      i64.const 5363747676322618229
      local.get 2
      i8x16.splat
      call 1
      drop
      drop
    end
    local.get 0
    i32.gt_u
    block (result i32) ;; label = @1
      local.get 3
      block (result i32) ;; label = @2
        block (result i32) ;; label = @3
          local.get 4
          local.get 4
          br_table 0 (;@3;) 1 (;@2;) 0 (;@3;)
        end
        drop
        i32.const 0
      end
      br_if 0 (;@1;)
      drop
      local.get 2
      local.get 2
      i32.le_u
    end
    block (result i32) ;; label = @1
      local.get 3
      i64.const 7071744533476972922
      v128.const i32x4 0x151ff715 0xa09b1350 0x575cadbb 0x24d4eb85
      call 1
      drop
      drop
    end
    i32.clz
    i32.or
    i32.const 1
    i32.and
    drop
    call 0
    i32.const 1
    i32.and
    drop
    call 0
    i32.const 0
    i32.and
    i32.const 16
    memory.copy
    block ;; label = @1
      global.get 1
      global.set 1
      i32.const 3
      local.set 11
      loop ;; label = @2
        block ;; label = @3
          block ;; label = @4
            block ;; label = @5
              global.get 1
              local.set 1
              block (result i32) ;; label = @6
                i32.const -2036555229
                i32.const 845971366
                i32.const -1922581628
                i32.const -173276392
                select
                i32.eqz
                i32.rotr
                local.tee 0
                local.get 2
                i32.const 1008
                i32.and
                i32.load8_s
                block (result i64) ;; label = @7
                  i32.const -87421239
                  if (result i64) ;; label = @8
                    local.get 1
                  else
                    local.get 5
                  end
                  i64.const 6899538321531476456
                  i64.const -3687636894700885108
                  i64.and
                  i64.const -8422830880910966294
                  i64.const 4943946277244235565
                  i64.sub
                  block (result i64) ;; label = @8
                    local.get 5
                    i64.const -1394648095061745276
                    i64.const -2349510720535540661
                    i64.const 1550820316367784105
                    i64.sub128
                    local.set 15
                    drop
                    local.get 15
                  end
                  i64.sub128
                  local.set 15
                  drop
                  local.get 15
                end
                i32.wrap_i64
                i32.shl
                br_if 0 (;@6;)
                drop
                block (result i32) ;; label = @7
                  i32.const 1
                  i32.const -135490420
                  i32.const -1637671880
                  select
                  i32.const 1008
                  i32.and
                  i32.load8_s
                  block (result i32) ;; label = @8
                    i32.const 334595627
                    i32.const -1449464008
                    i32.const 1
                    i32.and
                    drop
                    call 0
                    i32.const -1733147615
                    i64.extend_i32_s
                    v128.const i32x4 0x3d47dd2a 0x981a2149 0xb54f5810 0x1c536a32
                    v128.const i32x4 0xa8040925 0x9e1f29de 0x459ce877 0x119d9fc2
                    i8x16.swizzle
                    call 1
                    drop
                    drop
                  end
                  i32.const 1
                  i32.and
                  drop
                  call 0
                  global.set 0
                  global.get 0
                end
              end
              global.get 0
              i32.const 3
              i32.and
              br_table 0 (;@5;) 1 (;@4;) 2 (;@3;)
            end
          end
        end
        block (result i64) ;; label = @3
          local.get 0
          block (result i32) ;; label = @4
            block (result i32) ;; label = @5
              block (result i32) ;; label = @6
                block (result i32) ;; label = @7
                  i32.const 0
                  local.get 2
                  br_table 0 (;@7;) 1 (;@6;) 0 (;@7;)
                end
                drop
                local.get 3
              end
              local.get 4
              i32.xor
              i32.const 1244055536
              i32.const 113189742
              local.get 2
              i32.shr_s
              i32.le_u
              br_table 0 (;@5;) 1 (;@4;) 0 (;@5;)
            end
            drop
            i32.const 1
            block (result i32) ;; label = @5
              block (result i32) ;; label = @6
                local.get 4
                i32.const -637362876
                br_table 0 (;@6;) 1 (;@5;) 0 (;@6;)
              end
              drop
              local.get 0
            end
            i32.gt_u
          end
          i32.const 1008
          i32.and
          i64.load8_u
          v128.const i32x4 0x0be5d26f 0xa0322f6f 0x52dd620b 0x070b5c19
          local.get 4
          i16x8.shr_u
          local.get 3
          i32.popcnt
          block (result i32) ;; label = @4
            local.get 0
            i64.const -8302054958861359082
            v128.const i32x4 0x5dcd08ac 0x5e526942 0x785b39bd 0xbe20c0fc
            call 1
            drop
            drop
          end
          local.get 4
          select
          block (result i32) ;; label = @4
            i32.const -1313179990
            i32.const -904460586
            i32.const -1352124639
            select
            local.get 4
            local.get 0
            i32.add
            br_if 0 (;@4;)
            drop
            local.get 0
            i32.const 1008
            i32.and
            i32.load8_s
          end
          i32.mul
          i8x16.shr_s
          call 1
          drop
          local.set 15
          drop
          local.get 15
        end
        global.set 1
        local.get 11
        i32.const 1
        i32.sub
        local.set 11
        local.get 11
        br_if 0 (;@2;)
      end
      block ;; label = @2
        block ;; label = @3
          block ;; label = @4
            i32.const -1842640751
            i32.const 1023
            i32.and
            local.get 4
            block (result i32) ;; label = @5
              local.get 3
              block (result i64) ;; label = @6
                block (result i64) ;; label = @7
                  local.get 8
                  i64.const -6595809796573528572
                  i64.mul_wide_s
                  drop
                end
                global.set 1
                global.get 1
              end
              v128.const i32x4 0x90e13e16 0x99
[message truncated]

view this post on Zulip Wasmtime GitHub notifications bot (Jul 25 2026 at 20:41):

alexcrichton edited issue #13990:

This program is minimized as much as possible with wasm-tools shrink but is still unfortunately pretty large:

<details>

(module
  (type (;0;) (func (param i32) (result i32)))
  (type (;1;) (func (param i32 i64 v128) (result i32 i64 v128)))
  (type (;2;) (func (param i32 i64) (result i64)))
  (memory (;0;) 1)
  (global (;0;) (mut i32) i32.const 3)
  (global (;1;) (mut i64) i64.const 2)
  (global (;2;) (mut v128) v128.const i32x4 0x735127d8 0x101dfc4c 0x00000000 0x00000000)
  (export "f" (func 2))
  (func (;0;) (type 0) (param i32) (result i32)
    i32.const 0
  )
  (func (;1;) (type 1) (param i32 i64 v128) (result i32 i64 v128)
    i32.const 0
    i64.const 0
    local.get 2
  )
  (func (;2;) (type 2) (param i32 i64) (result i64)
    (local i32 i32 i32 i64 i64 i64 i64 i32 i32 i32 i32 i32 i32 i64 v128)
    block (result i64) ;; label = @1
      i64.const 0
      i32.const 0
      br_if 0 (;@1;)
      drop
      i64.const -5711338421754897453
    end
    block (result i64) ;; label = @1
      i64.const 1
      global.set 1
      global.get 1
    end
    i64.or
    i64.eqz
    i32.const 446637775
    i32.and
    block (result i32) ;; label = @1
      i32.const -1406424254
      local.get 2
      i32.const 1
      i32.and
      drop
      call 0
      local.get 2
      if (result i32) ;; label = @2
        i32.const 1921195370
      else
        local.get 4
      end
      i32.gt_u
      i32.const -1749529909
      if (result i32) ;; label = @2
        local.get 4
      else
        local.get 4
      end
      i32.const 1
      i32.and
      i32.load8_s
      br_if 0 (;@1;)
      drop
      local.get 3
    end
    local.get 5
    i64.const 8414888160472258071
    i64.ge_s
    i32.clz
    i32.extend16_s
    i32.gt_u
    local.get 4
    select
    i32.const 1023
    i32.and
    block (result i32) ;; label = @1
      i32.const 476009111
      i32.const 1
      i32.eqz
      br_if 0 (;@1;)
      drop
      local.get 0
    end
    i32.const 1008
    i32.and
    i32.load
    block (result i32) ;; label = @1
      local.get 0
      i32.const 1
      i32.and
      drop
      local.get 6
      i64.clz
      i32.const -1519123096
      call 0
      i64.extend_i32_u
      i64.ge_s
      i32.const 1471333110
      i32.const 0
      local.tee 2
      i32.xor
      br_if 0 (;@1;)
      drop
      block (result i32) ;; label = @2
        local.get 2
        i32.const 1918905060
        i32.lt_s
        block (result i32) ;; label = @3
          block (result i32) ;; label = @4
            local.get 3
            local.get 4
            br_table 0 (;@4;) 1 (;@3;) 0 (;@4;)
          end
          drop
          local.get 0
        end
        br_if 0 (;@2;)
        drop
        i32.const 14561677
        local.tee 2
      end
    end
    i32.rotl
    block (result i32) ;; label = @1
      block (result i32) ;; label = @2
        local.get 0
        i64.const -5675628639357158877
        v128.const i32x4 0xd2fc56a6 0xf0878b73 0x8f8ec78b 0x447623ff
        call 1
        drop
        drop
      end
      i64.const 5363747676322618229
      local.get 2
      i8x16.splat
      call 1
      drop
      drop
    end
    local.get 0
    i32.gt_u
    block (result i32) ;; label = @1
      local.get 3
      block (result i32) ;; label = @2
        block (result i32) ;; label = @3
          local.get 4
          local.get 4
          br_table 0 (;@3;) 1 (;@2;) 0 (;@3;)
        end
        drop
        i32.const 0
      end
      br_if 0 (;@1;)
      drop
      local.get 2
      local.get 2
      i32.le_u
    end
    block (result i32) ;; label = @1
      local.get 3
      i64.const 7071744533476972922
      v128.const i32x4 0x151ff715 0xa09b1350 0x575cadbb 0x24d4eb85
      call 1
      drop
      drop
    end
    i32.clz
    i32.or
    i32.const 1
    i32.and
    drop
    call 0
    i32.const 1
    i32.and
    drop
    call 0
    i32.const 0
    i32.and
    i32.const 16
    memory.copy
    block ;; label = @1
      global.get 1
      global.set 1
      i32.const 3
      local.set 11
      loop ;; label = @2
        block ;; label = @3
          block ;; label = @4
            block ;; label = @5
              global.get 1
              local.set 1
              block (result i32) ;; label = @6
                i32.const -2036555229
                i32.const 845971366
                i32.const -1922581628
                i32.const -173276392
                select
                i32.eqz
                i32.rotr
                local.tee 0
                local.get 2
                i32.const 1008
                i32.and
                i32.load8_s
                block (result i64) ;; label = @7
                  i32.const -87421239
                  if (result i64) ;; label = @8
                    local.get 1
                  else
                    local.get 5
                  end
                  i64.const 6899538321531476456
                  i64.const -3687636894700885108
                  i64.and
                  i64.const -8422830880910966294
                  i64.const 4943946277244235565
                  i64.sub
                  block (result i64) ;; label = @8
                    local.get 5
                    i64.const -1394648095061745276
                    i64.const -2349510720535540661
                    i64.const 1550820316367784105
                    i64.sub128
                    local.set 15
                    drop
                    local.get 15
                  end
                  i64.sub128
                  local.set 15
                  drop
                  local.get 15
                end
                i32.wrap_i64
                i32.shl
                br_if 0 (;@6;)
                drop
                block (result i32) ;; label = @7
                  i32.const 1
                  i32.const -135490420
                  i32.const -1637671880
                  select
                  i32.const 1008
                  i32.and
                  i32.load8_s
                  block (result i32) ;; label = @8
                    i32.const 334595627
                    i32.const -1449464008
                    i32.const 1
                    i32.and
                    drop
                    call 0
                    i32.const -1733147615
                    i64.extend_i32_s
                    v128.const i32x4 0x3d47dd2a 0x981a2149 0xb54f5810 0x1c536a32
                    v128.const i32x4 0xa8040925 0x9e1f29de 0x459ce877 0x119d9fc2
                    i8x16.swizzle
                    call 1
                    drop
                    drop
                  end
                  i32.const 1
                  i32.and
                  drop
                  call 0
                  global.set 0
                  global.get 0
                end
              end
              global.get 0
              i32.const 3
              i32.and
              br_table 0 (;@5;) 1 (;@4;) 2 (;@3;)
            end
          end
        end
        block (result i64) ;; label = @3
          local.get 0
          block (result i32) ;; label = @4
            block (result i32) ;; label = @5
              block (result i32) ;; label = @6
                block (result i32) ;; label = @7
                  i32.const 0
                  local.get 2
                  br_table 0 (;@7;) 1 (;@6;) 0 (;@7;)
                end
                drop
                local.get 3
              end
              local.get 4
              i32.xor
              i32.const 1244055536
              i32.const 113189742
              local.get 2
              i32.shr_s
              i32.le_u
              br_table 0 (;@5;) 1 (;@4;) 0 (;@5;)
            end
            drop
            i32.const 1
            block (result i32) ;; label = @5
              block (result i32) ;; label = @6
                local.get 4
                i32.const -637362876
                br_table 0 (;@6;) 1 (;@5;) 0 (;@6;)
              end
              drop
              local.get 0
            end
            i32.gt_u
          end
          i32.const 1008
          i32.and
          i64.load8_u
          v128.const i32x4 0x0be5d26f 0xa0322f6f 0x52dd620b 0x070b5c19
          local.get 4
          i16x8.shr_u
          local.get 3
          i32.popcnt
          block (result i32) ;; label = @4
            local.get 0
            i64.const -8302054958861359082
            v128.const i32x4 0x5dcd08ac 0x5e526942 0x785b39bd 0xbe20c0fc
            call 1
            drop
            drop
          end
          local.get 4
          select
          block (result i32) ;; label = @4
            i32.const -1313179990
            i32.const -904460586
            i32.const -1352124639
            select
            local.get 4
            local.get 0
            i32.add
            br_if 0 (;@4;)
            drop
            local.get 0
            i32.const 1008
            i32.and
            i32.load8_s
          end
          i32.mul
          i8x16.shr_s
          call 1
          drop
          local.set 15
          drop
          local.get 15
        end
        global.set 1
        local.get 11
        i32.const 1
        i32.sub
        local.set 11
        local.get 11
        br_if 0 (;@2;)
      end
      block ;; label = @2
        block ;; label = @3
          block ;; label = @4
            i32.const -1842640751
            i32.const 1023
            i32.and
            local.get 4
            block (result i32) ;; label = @5
              local.get 3
              block (result i64) ;; label = @6
                block (result i64) ;; label = @7
                  local.get 8
                  i64.const -6595809796573528572
                  i64.mul_wide_s
                  drop
                end
                global.set 1
                global.get 1
              end
              v128.const i32x4 0x90e13e16
[message truncated]

view this post on Zulip Wasmtime GitHub notifications bot (Jul 25 2026 at 20:41):

alexcrichton added the bug label to Issue #13990.

view this post on Zulip Wasmtime GitHub notifications bot (Jul 25 2026 at 20:41):

alexcrichton added the cranelift label to Issue #13990.


Last updated: Jul 29 2026 at 05:03 UTC