diff options
Diffstat (limited to 'deps/v8/test/cctest/compiler/graph-builder-tester.cc')
-rw-r--r-- | deps/v8/test/cctest/compiler/graph-builder-tester.cc | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/deps/v8/test/cctest/compiler/graph-builder-tester.cc b/deps/v8/test/cctest/compiler/graph-builder-tester.cc new file mode 100644 index 000000000..fb6e4a28c --- /dev/null +++ b/deps/v8/test/cctest/compiler/graph-builder-tester.cc @@ -0,0 +1,65 @@ +// 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/graph-builder-tester.h" +#include "src/compiler/pipeline.h" + +namespace v8 { +namespace internal { +namespace compiler { + +MachineCallHelper::MachineCallHelper(Zone* zone, + MachineCallDescriptorBuilder* builder) + : CallHelper(zone->isolate()), + call_descriptor_builder_(builder), + parameters_(NULL), + graph_(NULL) {} + + +void MachineCallHelper::InitParameters(GraphBuilder* builder, + CommonOperatorBuilder* common) { + DCHECK_EQ(NULL, parameters_); + graph_ = builder->graph(); + if (parameter_count() == 0) return; + parameters_ = graph_->zone()->NewArray<Node*>(parameter_count()); + for (int i = 0; i < parameter_count(); ++i) { + parameters_[i] = builder->NewNode(common->Parameter(i), graph_->start()); + } +} + + +byte* MachineCallHelper::Generate() { + DCHECK(parameter_count() == 0 || parameters_ != NULL); + if (!Pipeline::SupportedBackend()) return NULL; + if (code_.is_null()) { + Zone* zone = graph_->zone(); + CompilationInfo info(zone->isolate(), zone); + Linkage linkage(&info, call_descriptor_builder_->BuildCallDescriptor(zone)); + Pipeline pipeline(&info); + code_ = pipeline.GenerateCodeForMachineGraph(&linkage, graph_); + } + return code_.ToHandleChecked()->entry(); +} + + +void MachineCallHelper::VerifyParameters(int parameter_count, + MachineType* parameter_types) { + CHECK_EQ(this->parameter_count(), parameter_count); + const MachineType* expected_types = + call_descriptor_builder_->parameter_types(); + for (int i = 0; i < parameter_count; i++) { + CHECK_EQ(expected_types[i], parameter_types[i]); + } +} + + +Node* MachineCallHelper::Parameter(int offset) { + DCHECK_NE(NULL, parameters_); + DCHECK(0 <= offset && offset < parameter_count()); + return parameters_[offset]; +} + +} // namespace compiler +} // namespace internal +} // namespace v8 |