v8/test/cctest/compiler/simplified-graph-builder.cc

79 lines
2.1 KiB
C++

// Copyright 2014 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "test/cctest/compiler/simplified-graph-builder.h"
namespace v8 {
namespace internal {
namespace compiler {
SimplifiedGraphBuilder::SimplifiedGraphBuilder(
Graph* graph, CommonOperatorBuilder* common,
MachineOperatorBuilder* machine, SimplifiedOperatorBuilder* simplified)
: StructuredGraphBuilder(graph, common),
machine_(machine),
simplified_(simplified) {}
void SimplifiedGraphBuilder::Begin(int num_parameters) {
DCHECK(graph()->start() == NULL);
Node* start = graph()->NewNode(common()->Start(num_parameters));
graph()->SetStart(start);
set_environment(new (zone()) Environment(this, start));
}
void SimplifiedGraphBuilder::Return(Node* value) {
Node* control = NewNode(common()->Return(), value);
UpdateControlDependencyToLeaveFunction(control);
}
void SimplifiedGraphBuilder::End() {
environment()->UpdateControlDependency(exit_control());
graph()->SetEnd(NewNode(common()->End()));
}
SimplifiedGraphBuilder::Environment::Environment(
SimplifiedGraphBuilder* builder, Node* control_dependency)
: StructuredGraphBuilder::Environment(builder, control_dependency) {}
Node* SimplifiedGraphBuilder::Environment::Top() {
DCHECK(!values()->empty());
return values()->back();
}
void SimplifiedGraphBuilder::Environment::Push(Node* node) {
values()->push_back(node);
}
Node* SimplifiedGraphBuilder::Environment::Pop() {
DCHECK(!values()->empty());
Node* back = values()->back();
values()->pop_back();
return back;
}
void SimplifiedGraphBuilder::Environment::Poke(size_t depth, Node* node) {
DCHECK(depth < values()->size());
size_t index = values()->size() - depth - 1;
values()->at(index) = node;
}
Node* SimplifiedGraphBuilder::Environment::Peek(size_t depth) {
DCHECK(depth < values()->size());
size_t index = values()->size() - depth - 1;
return values()->at(index);
}
} // namespace compiler
} // namespace internal
} // namespace v8