• Toon Verwaest's avatar
    [maglev] Various regalloc fixes · e16e8d8b
    Toon Verwaest authored
      * Move fixed temporary allocation before arbitrary input allocation,
        so that fixed temporaries don't accidentally clobber the arbitrary
        input register. Now the input allocation will pick a different
        register.
      * For the above, make temporary allocation 'block' the register with a
        sentinel value, rather than marking it free, so that the subsequent
        input allocation knows not to use those registers (including
        spilling into them).
      * Similarly, move arbitrary input allocation after phi resolution when
        allocating control nodes, since phis may have fixed requirements.
      * Allow deopts to spill their inputs if they are not in registers and
        not yet loadable. This is done during the equivalent of input
        allocation for deopts.
      * Allow there to be multiple targets for a single source during gap
        move collection / cycle detection. There can still only be a single
        source per target, therefore there can only be one cycle for each
        connected component -- this is DCHECKed.
      * Make register validation more complete -- also walk the entire
        graph, and check whether value nodes' result register states match
        the current register allocator state.
      * Add much more printing to --trace-maglev-regalloc because these bugs
        ain't easy to debug.
    
    Bug: v8:7700
    Change-Id: Id98259c2920d772ce168bf27497162e78b136f9f
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3714235
    Auto-Submit: Toon Verwaest <verwaest@chromium.org>
    Commit-Queue: Toon Verwaest <verwaest@chromium.org>
    Reviewed-by: 's avatarIgor Sheludko <ishell@chromium.org>
    Commit-Queue: Igor Sheludko <ishell@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#81252}
    e16e8d8b
Name
Last commit
Last update
..
DEPS Loading commit data...
OWNERS Loading commit data...
maglev-basic-block.h Loading commit data...
maglev-code-gen-state.h Loading commit data...
maglev-code-generator.cc Loading commit data...
maglev-code-generator.h Loading commit data...
maglev-compilation-info.cc Loading commit data...
maglev-compilation-info.h Loading commit data...
maglev-compilation-unit.cc Loading commit data...
maglev-compilation-unit.h Loading commit data...
maglev-compiler.cc Loading commit data...
maglev-compiler.h Loading commit data...
maglev-concurrent-dispatcher.cc Loading commit data...
maglev-concurrent-dispatcher.h Loading commit data...
maglev-graph-builder.cc Loading commit data...
maglev-graph-builder.h Loading commit data...
maglev-graph-labeller.h Loading commit data...
maglev-graph-printer.cc Loading commit data...
maglev-graph-printer.h Loading commit data...
maglev-graph-processor.h Loading commit data...
maglev-graph-verifier.h Loading commit data...
maglev-graph.h Loading commit data...
maglev-interpreter-frame-state.h Loading commit data...
maglev-ir.cc Loading commit data...
maglev-ir.h Loading commit data...
maglev-regalloc-data.h Loading commit data...
maglev-regalloc.cc Loading commit data...
maglev-regalloc.h Loading commit data...
maglev-register-frame-array.h Loading commit data...
maglev-vreg-allocator.h Loading commit data...
maglev.cc Loading commit data...
maglev.h Loading commit data...