Skip to content

Excessive compile time in alias analysis for 500 live structs on the stack #14221

Description

@alexcrichton

This input module:

Details
(module
  (type $a (;0;) (array (mut anyref)))
  (type $s (;2;) (struct))
  (func
    loop
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      struct.new $s
      array.new_fixed $a 513
      drop
      br 0
    end
  )
)

locally takes ~1 second to compile in release mode:

$ time wasmtime compile foo.wat
wasmtime compile foo.wat  1.14s user 0.03s system 101% cpu 1.154 total

This is causing timeouts in fuzzing due to the overhead that fuzzing adds.

cc @fitzgen

Metadata

Metadata

Assignees

No one assigned

    Labels

    fuzz-bugBugs found by a fuzzer

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions