• 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
maglev-ir.cc 66.2 KB