Upgrade V8 to version 4.9.385.28
https://chromium.googlesource.com/v8/v8/+/4.9.385.28
FPIIM-449
Change-Id: I4b2e74289d4bf3667f2f3dc8aa2e541f63e26eb4
diff --git a/src/compiler/load-elimination.cc b/src/compiler/load-elimination.cc
index fe0714e..97f1ab0 100644
--- a/src/compiler/load-elimination.cc
+++ b/src/compiler/load-elimination.cc
@@ -4,7 +4,7 @@
#include "src/compiler/load-elimination.h"
-#include "src/compiler/node-properties-inl.h"
+#include "src/compiler/node-properties.h"
#include "src/compiler/simplified-operator.h"
namespace v8 {
@@ -28,7 +28,7 @@
Reduction LoadElimination::ReduceLoadField(Node* node) {
DCHECK_EQ(IrOpcode::kLoadField, node->opcode());
FieldAccess const access = FieldAccessOf(node->op());
- Node* const object = NodeProperties::GetValueInput(node, 0);
+ Node* object = NodeProperties::GetValueInput(node, 0);
for (Node* effect = NodeProperties::GetEffectInput(node);;
effect = NodeProperties::GetEffectInput(effect)) {
switch (effect->opcode()) {
@@ -36,7 +36,7 @@
if (object == NodeProperties::GetValueInput(effect, 0) &&
access == FieldAccessOf(effect->op())) {
Node* const value = effect;
- NodeProperties::ReplaceWithValue(node, value);
+ ReplaceWithValue(node, value);
return Replace(value);
}
break;
@@ -45,7 +45,7 @@
if (access == FieldAccessOf(effect->op())) {
if (object == NodeProperties::GetValueInput(effect, 0)) {
Node* const value = NodeProperties::GetValueInput(effect, 1);
- NodeProperties::ReplaceWithValue(node, value);
+ ReplaceWithValue(node, value);
return Replace(value);
}
// TODO(turbofan): Alias analysis to the rescue?
@@ -53,11 +53,24 @@
}
break;
}
+ case IrOpcode::kBeginRegion:
case IrOpcode::kStoreBuffer:
case IrOpcode::kStoreElement: {
// These can never interfere with field loads.
break;
}
+ case IrOpcode::kFinishRegion: {
+ // "Look through" FinishRegion nodes to make LoadElimination capable
+ // of looking into atomic regions.
+ if (object == effect) object = NodeProperties::GetValueInput(effect, 0);
+ break;
+ }
+ case IrOpcode::kAllocate: {
+ // Allocations don't interfere with field loads. In case we see the
+ // actual allocation for the {object} we can abort.
+ if (object == effect) return NoChange();
+ break;
+ }
default: {
if (!effect->op()->HasProperty(Operator::kNoWrite) ||
effect->op()->EffectInputCount() != 1) {