• Andreas Haas's avatar
    [wasm][liftoff] Order registers in a register pair · f11a938a
    Andreas Haas authored
    With this CL the registers in a register pair get ordered such that the
    low word register always has a lower register code than the high word
    register. This should allow easier reasoning about the register
    allocation, and prevent some register allocation bugs.
    
    Background: for many operations in Liftoff, input registers are reused
    as output registers. With register pairs, input register pairs are
    reused as output register pairs. Additional reasoning, and sometimes
    even additional code is needed when the registers of the output register
    pair are swapped, i.e. when the high word register of the input becomes
    the low word register of the output. With this CL the additional
    reasoning is not necessary anymore, as the high word and low word
    registers would get swapped during register allocation.
    
    Additionally this CL fixes the logic of the last_spilled_regs list. This
    list stored the last spilled registers, but recorded only one of the two
    registers of a register pair. With this CL, both registers get recorded.
    
    This CL does not have a regression test. The regression test was more
    than 9000 lines long, and quite slow. I was not able to minimize it
    substantially. The test would be fragile by nature, as it has to create
    a special register configuration or otherwise does not test anything
    meaningful. All in all I think it's better not to add the test.
    
    R=clemensb@chromium.org
    
    Bug: chromium:1074586
    Change-Id: I4b2475b0c6537c7ce2e51fee281388cdd85f2953
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2168875Reviewed-by: 's avatarClemens Backes <clemensb@chromium.org>
    Commit-Queue: Andreas Haas <ahaas@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#67473}
    f11a938a
liftoff-assembler.cc 37.1 KB