• 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
Name
Last commit
Last update
..
api Loading commit data...
asmjs Loading commit data...
ast Loading commit data...
base Loading commit data...
builtins Loading commit data...
codegen Loading commit data...
common Loading commit data...
compiler Loading commit data...
compiler-dispatcher Loading commit data...
d8 Loading commit data...
date Loading commit data...
debug Loading commit data...
deoptimizer Loading commit data...
diagnostics Loading commit data...
execution Loading commit data...
extensions Loading commit data...
flags Loading commit data...
handles Loading commit data...
heap Loading commit data...
ic Loading commit data...
init Loading commit data...
inspector Loading commit data...
interpreter Loading commit data...
json Loading commit data...
libplatform Loading commit data...
libsampler Loading commit data...
logging Loading commit data...
numbers Loading commit data...
objects Loading commit data...
parsing Loading commit data...
profiler Loading commit data...
protobuf Loading commit data...
regexp Loading commit data...
roots Loading commit data...
runtime Loading commit data...
sanitizer Loading commit data...
snapshot Loading commit data...
strings Loading commit data...
tasks Loading commit data...
third_party Loading commit data...
torque Loading commit data...
tracing Loading commit data...
trap-handler Loading commit data...
utils Loading commit data...
wasm Loading commit data...
zone Loading commit data...
DEPS Loading commit data...
OWNERS Loading commit data...