Commit 66cbbb7a authored by Ng Zhi An's avatar Ng Zhi An Committed by V8 LUCI CQ

[compiler] Load ops should not increase effect level

The idea of effect level was introduced in
https://codereview.chromium.org/1706763002. This change was trying to
optimize sequences like:

  x = load o, i
  cmp 1, x

to use a memory operand:

  cmp 1, [o+i]

However, the load can be invalidated, like so:

  x = load o, i
  store o, i, v
  cmp 1, x

Then, selecting a memory operand for cmp would be incorrect (it should
be using the loaded value x, not the store valued v:

  store o, i, v
  cmp 1, [o+i]  # uses v, which is wrong, should use x

Effect levels were introduced to mark where levels of potentially
invalidating instructions:

                  effect level
  x = load o, i      0
  store o, i, v      1
  cmp 1, x           1

Then when selecting instructions, CanCover will check to ensure that cmp
and load are on the same level.

ProtectedLoad, and LoadTransforms should not affect the effect levels in
this case, because they don't invalidate any prior loads:

  x = load o, i
  y = protected load o, i
  cmp 1, x

Becomes:

  y = protected load o, i
  cmp 1, [o+i]

Bug: v8:12189
Change-Id: I585b94320def4ba554ae955fa5f8fcc9efd6dafe
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3158551Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
Commit-Queue: Zhi An Ng <zhin@chromium.org>
Cr-Commit-Position: refs/heads/main@{#76826}
parent 8b8e61c0
......@@ -1195,9 +1195,7 @@ void InstructionSelector::VisitBlock(BasicBlock* block) {
if (node->opcode() == IrOpcode::kStore ||
node->opcode() == IrOpcode::kUnalignedStore ||
node->opcode() == IrOpcode::kCall ||
node->opcode() == IrOpcode::kProtectedLoad ||
node->opcode() == IrOpcode::kProtectedStore ||
node->opcode() == IrOpcode::kLoadTransform ||
#define ADD_EFFECT_FOR_ATOMIC_OP(Opcode) \
node->opcode() == IrOpcode::k##Opcode ||
MACHINE_ATOMIC_OP_LIST(ADD_EFFECT_FOR_ATOMIC_OP)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment