-
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: Igor Sheludko <ishell@chromium.org> Commit-Queue: Igor Sheludko <ishell@chromium.org> Cr-Commit-Position: refs/heads/main@{#81252}
e16e8d8b