Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1544)

Unified Diff: src/compiler/js-typed-lowering.cc

Issue 1399423002: [turbofan] Introduce node regions for protection from scheduling. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Tweaks Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/compiler/js-typed-lowering.cc
diff --git a/src/compiler/js-typed-lowering.cc b/src/compiler/js-typed-lowering.cc
index de07f5a52e960a796678cf31c1ef6361d5a5b4a8..031c6f9781b07cd133d425c61b361bc9f2473243 100644
--- a/src/compiler/js-typed-lowering.cc
+++ b/src/compiler/js-typed-lowering.cc
@@ -37,15 +37,22 @@ JSTypedLowering::JSTypedLowering(Editor* editor, JSGraph* jsgraph, Zone* zone)
class AllocationBuilder final {
public:
AllocationBuilder(JSGraph* jsgraph, SimplifiedOperatorBuilder* simplified,
- Node* effect, Node* control)
+ Node* node, Node* effect, Node* control)
: jsgraph_(jsgraph),
simplified_(simplified),
allocation_(nullptr),
+ node_(node),
effect_(effect),
control_(control) {}
+ ~AllocationBuilder() {
+ // Make sure we are finished.
+ DCHECK_EQ(IrOpcode::kFinishRegion, node_->opcode());
+ }
+
// Primitive allocation of static size.
void Allocate(int size) {
+ effect_ = graph()->NewNode(jsgraph()->common()->BeginRegion(), effect_);
allocation_ = graph()->NewNode(
simplified()->Allocate(), jsgraph()->Constant(size), effect_, control_);
effect_ = allocation_;
@@ -70,8 +77,13 @@ class AllocationBuilder final {
Store(access, jsgraph()->Constant(value));
}
- Node* allocation() const { return allocation_; }
- Node* effect() const { return effect_; }
+ void Finish() {
Benedikt Meurer 2015/10/13 19:12:09 Nit: I think this helper should return the Reducti
Jarin 2015/10/14 06:37:20 Ack. I will leave the decision to Michi, I do not
+ NodeProperties::SetType(allocation_, NodeProperties::GetType(node_));
+ node_->ReplaceInput(0, allocation_);
+ node_->ReplaceInput(1, effect_);
+ node_->TrimInputCount(2);
+ NodeProperties::ChangeOp(node_, jsgraph()->common()->FinishRegion());
+ }
protected:
JSGraph* jsgraph() { return jsgraph_; }
@@ -82,6 +94,7 @@ class AllocationBuilder final {
JSGraph* const jsgraph_;
SimplifiedOperatorBuilder* simplified_;
Node* allocation_;
+ Node* node_;
Node* effect_;
Node* control_;
};
@@ -1263,7 +1276,8 @@ Reduction JSTypedLowering::ReduceJSCreateFunctionContext(Node* node) {
simplified()->LoadField(
AccessBuilder::ForContextSlot(Context::GLOBAL_OBJECT_INDEX)),
context, effect, control);
- AllocationBuilder a(jsgraph(), simplified(), effect, control);
+ RelaxControls(node);
+ AllocationBuilder a(jsgraph(), simplified(), node, effect, control);
STATIC_ASSERT(Context::MIN_CONTEXT_SLOTS == 4); // Ensure fully covered.
int context_length = slot_count + Context::MIN_CONTEXT_SLOTS;
a.AllocateArray(context_length, factory()->function_context_map());
@@ -1274,13 +1288,7 @@ Reduction JSTypedLowering::ReduceJSCreateFunctionContext(Node* node) {
for (int i = Context::MIN_CONTEXT_SLOTS; i < context_length; ++i) {
a.Store(AccessBuilder::ForContextSlot(i), jsgraph()->TheHoleConstant());
}
- // TODO(mstarzinger): We could mutate {node} into the allocation instead.
- NodeProperties::SetType(a.allocation(), NodeProperties::GetType(node));
- ReplaceWithValue(node, node, a.effect());
- node->ReplaceInput(0, a.allocation());
- node->ReplaceInput(1, a.effect());
- node->TrimInputCount(2);
- NodeProperties::ChangeOp(node, common()->Finish(1));
+ a.Finish();
return Changed(node);
}
@@ -1318,20 +1326,15 @@ Reduction JSTypedLowering::ReduceJSCreateWithContext(Node* node) {
simplified()->LoadField(
AccessBuilder::ForContextSlot(Context::GLOBAL_OBJECT_INDEX)),
context, effect, control);
- AllocationBuilder a(jsgraph(), simplified(), effect, control);
+ RelaxControls(node);
+ AllocationBuilder a(jsgraph(), simplified(), node, effect, control);
STATIC_ASSERT(Context::MIN_CONTEXT_SLOTS == 4); // Ensure fully covered.
a.AllocateArray(Context::MIN_CONTEXT_SLOTS, factory()->with_context_map());
a.Store(AccessBuilder::ForContextSlot(Context::CLOSURE_INDEX), closure);
a.Store(AccessBuilder::ForContextSlot(Context::PREVIOUS_INDEX), context);
a.Store(AccessBuilder::ForContextSlot(Context::EXTENSION_INDEX), input);
a.Store(AccessBuilder::ForContextSlot(Context::GLOBAL_OBJECT_INDEX), load);
- // TODO(mstarzinger): We could mutate {node} into the allocation instead.
- NodeProperties::SetType(a.allocation(), NodeProperties::GetType(node));
- ReplaceWithValue(node, node, a.effect());
- node->ReplaceInput(0, a.allocation());
- node->ReplaceInput(1, a.effect());
- node->TrimInputCount(2);
- NodeProperties::ChangeOp(node, common()->Finish(1));
+ a.Finish();
return Changed(node);
}
@@ -1356,7 +1359,8 @@ Reduction JSTypedLowering::ReduceJSCreateBlockContext(Node* node) {
simplified()->LoadField(
AccessBuilder::ForContextSlot(Context::GLOBAL_OBJECT_INDEX)),
context, effect, control);
- AllocationBuilder a(jsgraph(), simplified(), effect, control);
+ RelaxControls(node);
+ AllocationBuilder a(jsgraph(), simplified(), node, effect, control);
STATIC_ASSERT(Context::MIN_CONTEXT_SLOTS == 4); // Ensure fully covered.
a.AllocateArray(context_length, factory()->block_context_map());
a.Store(AccessBuilder::ForContextSlot(Context::CLOSURE_INDEX), closure);
@@ -1366,13 +1370,7 @@ Reduction JSTypedLowering::ReduceJSCreateBlockContext(Node* node) {
for (int i = Context::MIN_CONTEXT_SLOTS; i < context_length; ++i) {
a.Store(AccessBuilder::ForContextSlot(i), jsgraph()->TheHoleConstant());
}
- // TODO(mstarzinger): We could mutate {node} into the allocation instead.
- NodeProperties::SetType(a.allocation(), NodeProperties::GetType(node));
- ReplaceWithValue(node, node, a.effect());
- node->ReplaceInput(0, a.allocation());
- node->ReplaceInput(1, a.effect());
- node->TrimInputCount(2);
- NodeProperties::ChangeOp(node, common()->Finish(1));
+ a.Finish();
return Changed(node);
}

Powered by Google App Engine
This is Rietveld 408576698