Index: src/hydrogen-instructions.h |
diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h |
index 069642ae8c75210d638024126c784db225cbb6b4..7efe4b96aa8d305ac1b7a45c02eabb95bbf91b6c 100644 |
--- a/src/hydrogen-instructions.h |
+++ b/src/hydrogen-instructions.h |
@@ -4191,15 +4191,18 @@ class HTransitionElementsKind: public HTemplateInstruction<1> { |
transitioned_map_(transitioned_map) { |
SetOperandAt(0, object); |
SetFlag(kUseGVN); |
+ // DependsOn flags for TransitionElementsKinds only effect instruction |
+ // hoisting, which could change their location relative to instructions that |
+ // have side-effects. GVN duplicate value elimination handles |
+ // TransitionElementsKinds specially, ensuring the no-op transitions are |
+ // always eliminated. |
SetGVNFlag(kDependsOnMaps); |
SetGVNFlag(kChangesElementsKind); |
if (original_map->has_fast_double_elements()) { |
SetGVNFlag(kChangesElementsPointer); |
- SetGVNFlag(kDependsOnElementsPointer); |
SetGVNFlag(kDependsOnDoubleArrayElements); |
} else if (transitioned_map->has_fast_double_elements()) { |
SetGVNFlag(kChangesElementsPointer); |
- SetGVNFlag(kDependsOnElementsPointer); |
SetGVNFlag(kDependsOnArrayElements); |
} |
set_representation(Representation::Tagged()); |