• pierre.langlois's avatar
    [turbofan] ARM64: Support shifted indexes in loads and stores · 60fb6ea1
    pierre.langlois authored
    This patch adds support for the `Operand2_R_LSL_I` addressing mode to
    loads and stores. This allows merging a shift instruction into a
    MemoryOperand. Since the shift immediate is restricted to the log2 of
    the operation width, the opportunities to hit this are slim. However,
    Ignition's bytecode handlers hit this case all the time:
    
    kind = BYTECODE_HANDLER
    name = Star
    compiler = turbofan
    Instructions (size = 44)
    0x23e67280     0  add x1, x19, #0x1 (1)
    0x23e67284     4  ldrsb x1, [x20, x1]
    0x23e67288     8  sxtw x1, w1
    0x23e6728c    12  mov x2, fp
    0x23e67290    16  str x0, [x2, x1, lsl #3]
                      ^^^^^^^^^^^^^^^^^^^^^
    0x23e67294    20  add x19, x19, #0x2 (2)
    0x23e67298    24  ldrb w1, [x20, x19]
    0x23e6729c    28  ldr x1, [x21, x1, lsl #3]
                      ^^^^^^^^^^^^^^^^^^^^^
    0x23e672a0    32  br x1
    
    Additionally, I noticed the optimisation occurs once in both the
    `StringPrototypeCharAt` and `StringPrototypeCharCodeAt` turbofan stubs.
    
    BUG=
    
    Review-Url: https://codereview.chromium.org/1972103002
    Cr-Commit-Position: refs/heads/master@{#36227}
    60fb6ea1
Name
Last commit
Last update
..
arm Loading commit data...
arm64 Loading commit data...
ia32 Loading commit data...
mips Loading commit data...
mips64 Loading commit data...
ppc Loading commit data...
s390 Loading commit data...
x64 Loading commit data...
branch-elimination-unittest.cc Loading commit data...
coalesced-live-ranges-unittest.cc Loading commit data...
common-operator-reducer-unittest.cc Loading commit data...
common-operator-unittest.cc Loading commit data...
compiler-test-utils.h Loading commit data...
control-equivalence-unittest.cc Loading commit data...
control-flow-optimizer-unittest.cc Loading commit data...
dead-code-elimination-unittest.cc Loading commit data...
diamond-unittest.cc Loading commit data...
effect-control-linearizer-unittest.cc Loading commit data...
escape-analysis-unittest.cc Loading commit data...
graph-reducer-unittest.cc Loading commit data...
graph-reducer-unittest.h Loading commit data...
graph-trimmer-unittest.cc Loading commit data...
graph-unittest.cc Loading commit data...
graph-unittest.h Loading commit data...
instruction-selector-unittest.cc Loading commit data...
instruction-selector-unittest.h Loading commit data...
instruction-sequence-unittest.cc Loading commit data...
instruction-sequence-unittest.h Loading commit data...
int64-lowering-unittest.cc Loading commit data...
js-builtin-reducer-unittest.cc Loading commit data...
js-create-lowering-unittest.cc Loading commit data...
js-intrinsic-lowering-unittest.cc Loading commit data...
js-operator-unittest.cc Loading commit data...
js-type-feedback-unittest.cc Loading commit data...
js-typed-lowering-unittest.cc Loading commit data...
linkage-tail-call-unittest.cc Loading commit data...
live-range-builder.h Loading commit data...
live-range-unittest.cc Loading commit data...
liveness-analyzer-unittest.cc Loading commit data...
load-elimination-unittest.cc Loading commit data...
loop-peeling-unittest.cc Loading commit data...
machine-operator-reducer-unittest.cc Loading commit data...
machine-operator-unittest.cc Loading commit data...
move-optimizer-unittest.cc Loading commit data...
node-cache-unittest.cc Loading commit data...
node-matchers-unittest.cc Loading commit data...
node-properties-unittest.cc Loading commit data...
node-test-utils.cc Loading commit data...
node-test-utils.h Loading commit data...
node-unittest.cc Loading commit data...
opcodes-unittest.cc Loading commit data...
register-allocator-unittest.cc Loading commit data...
schedule-unittest.cc Loading commit data...
scheduler-rpo-unittest.cc Loading commit data...
scheduler-unittest.cc Loading commit data...
simplified-operator-reducer-unittest.cc Loading commit data...
simplified-operator-unittest.cc Loading commit data...
state-values-utils-unittest.cc Loading commit data...
tail-call-optimization-unittest.cc Loading commit data...
typer-unittest.cc Loading commit data...
value-numbering-reducer-unittest.cc Loading commit data...
zone-pool-unittest.cc Loading commit data...