mirror of
https://github.com/dart-lang/sdk
synced 2024-09-06 00:59:09 +00:00
d7e6e0e8c3
In the backend, handle the following cases that were assumed not to happen before: * If the index and offset are both 0, then the operation is a no-op and so the output register should be the same as the first input. (Should only happen if the instruction is used in a non-optimizing context, as otherwise it is removed by canonicalization.) * If the scaled index can be used as an instruction immediate and the offset is 0, then emit the appropriate instruction(s). * If the scaled index and offset can both be used as immediates to instructions, but their sum (the total offset in bytes) cannot, then allocate a register for the index and fall back to the non-constant index case. CalculateElementAddress::Canonicalize now only performs removal of no-op instructions. This CL also fixes a switch on the instruction tag in FlowGraph::RenameRecursive to appropriately convert UnboxedConstant instructions to initial definitions of the FlowGraph as it already does for Constant instructions. TEST=vm/dart/regress_55877 Issue: https://github.com/dart-lang/sdk/issues/55877 Cq-Include-Trybots: luci.dart.try:vm-aot-linux-debug-simarm_x64-try,vm-aot-linux-debug-simriscv64-try,vm-aot-linux-debug-x64-try,vm-aot-linux-debug-x64c-try,vm-linux-debug-ia32-try,vm-linux-debug-x64-try,vm-linux-debug-x64c-try,vm-linux-debug-simriscv64-try,vm-mac-debug-arm64-try,vm-aot-mac-release-arm64-try Change-Id: I613d6c8770fe02facf6bbdb3d2b11f842b51540d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/369642 Commit-Queue: Tess Strickland <sstrickl@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com> |
||
---|---|---|
.. | ||
bin | ||
docs | ||
include | ||
lib | ||
observatory | ||
platform | ||
tests | ||
tools | ||
vm | ||
.clang-tidy | ||
.gitignore | ||
BUILD.gn | ||
codereview.settings | ||
configs.gni | ||
CPPLINT.cfg | ||
OWNERS | ||
PRESUBMIT.py | ||
runtime_args.gni | ||
vm-jit.shard.cml | ||
vm.shard.cml |