• Clemens Backes's avatar
    [liftoff] Materialize constants before conditional branches · 1a911e6c
    Clemens Backes authored
    The number of constants stored in locals and the merge region can be
    arbitrarily big, thus generating arbitrarily long code for a single
    `br_if`. This happened in particular for unoptimized code.
    
    This CL solves this by materializing all constants (in registers or on
    the stack) before doing a conditional branch. This ensures that in a
    series of `br_if`s, each constant is only spilled once instead of on
    each single branch.
    
    For the linked bug, this reduces the total generated code size by ~36%.
    
    R=thibaudm@chromium.org
    
    Bug: chromium:1117033
    Change-Id: I84ea2ea9ba4d3de9b042ceb223af15c3d73dc5b8
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2364498Reviewed-by: 's avatarThibaud Michaud <thibaudm@chromium.org>
    Commit-Queue: Clemens Backes <clemensb@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#69485}
    1a911e6c
liftoff-assembler.h 61.2 KB