Commit 5981d168 authored by George Wort's avatar George Wort Committed by V8 LUCI CQ

[compiler] Apply StoreStoreElimination through bitcasts

Add BitcastWordToTagged and BitcastWordToTagged to
CannotObserveStoreField in StoreStoreElimination to
allow more stores to be eliminated.

Also add the use properties in CannotObserveStoreField
so that future nodes don't block opportunities.

Improves Speedometer2 by 0.16% and 0.12% on a Cortex-A55
and a Neoverse-N1 machine respectively, with Preact seeing
+0.8% on both.

Change-Id: I0cfe887ec4c0c435dbb0f9d8dc3da4bfcdabc265
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3865560Reviewed-by: 's avatarPatrick Thier <pthier@chromium.org>
Commit-Queue: George Wort <george.wort@arm.com>
Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
Cr-Commit-Position: refs/heads/main@{#82946}
parent 9691e60e
......@@ -352,10 +352,14 @@ UnobservablesSet RedundantStoreFinder::RecomputeSet(
bool RedundantStoreFinder::CannotObserveStoreField(Node* node) {
IrOpcode::Value opcode = node->opcode();
return opcode == IrOpcode::kLoadElement || opcode == IrOpcode::kLoad ||
constexpr uint8_t cannot_observe = Operator::kNoRead | Operator::kNoWrite |
Operator::kNoThrow | Operator::kNoDeopt;
return ((node->op()->properties() & cannot_observe) == cannot_observe) ||
opcode == IrOpcode::kLoadElement || opcode == IrOpcode::kLoad ||
opcode == IrOpcode::kLoadImmutable || opcode == IrOpcode::kStore ||
opcode == IrOpcode::kEffectPhi || opcode == IrOpcode::kStoreElement ||
opcode == IrOpcode::kRetain;
opcode == IrOpcode::kStoreElement ||
opcode == IrOpcode::kBitcastWordToTagged ||
opcode == IrOpcode::kBitcastTaggedToWord;
}
void RedundantStoreFinder::Visit(Node* node) {
......
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