• Clemens Backes's avatar
    [Liftoff] Merge i32.eqz and br_if instructions · 5c20da07
    Clemens Backes authored
    We currently generate code for both separately, resulting in five
    instructions (three for the i32_eqz, two for the br_if):
      test rax,rax
      seteq dl
      movzxb rdx,rdx
      test rdx,rdx
      jz <label>
    
    After this CL, we just generate two instructions:
      test rax, rax
      jnz <label>
    
    This is implemented by a look-ahead in the {kExprI32Eqz} handler. If the
    opcode is followed by {kExprBrIf}, no code is emitted. Instead, a flag in
    the {LiftoffCompiler} is set to signal to the {kExprBrIf} handler that
    the previous instruction was not processed yet.
    Note that this mechanism is designed to be reusable for more similar
    improvements. For the single instance implemented in this CL, it is not
    needed.
    
    Plus some drive-by cleanup.
    
    R=jkummerow@chromium.org
    
    Bug: v8:9831
    Change-Id: I47495fe763b7db7cef41aa207c88a2f1b74bf1a9
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1862557
    Commit-Queue: Clemens Backes <clemensb@chromium.org>
    Reviewed-by: 's avatarJakob Kummerow <jkummerow@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#64292}
    5c20da07
liftoff-compiler.cc 91.5 KB