1b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Copyright 2014 the V8 project authors. All rights reserved. 2b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// found in the LICENSE file. 4b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 5b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "test/cctest/compiler/graph-builder-tester.h" 6b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 7b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/compiler/linkage.h" 8b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/compiler/pipeline.h" 9b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 10b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochnamespace v8 { 11b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochnamespace internal { 12b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochnamespace compiler { 13b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 14b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochMachineCallHelper::MachineCallHelper(Zone* zone, MachineSignature* machine_sig) 15b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch : CallHelper(zone->isolate(), machine_sig), 16b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch parameters_(NULL), 17b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch graph_(NULL) {} 18b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 19b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 20b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid MachineCallHelper::InitParameters(GraphBuilder* builder, 21b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CommonOperatorBuilder* common) { 22b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DCHECK_EQ(NULL, parameters_); 23b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch graph_ = builder->graph(); 24b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch int param_count = static_cast<int>(parameter_count()); 25b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (param_count == 0) return; 26b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch parameters_ = graph_->zone()->NewArray<Node*>(param_count); 27b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (int i = 0; i < param_count; ++i) { 28b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch parameters_[i] = builder->NewNode(common->Parameter(i), graph_->start()); 29b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 30b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 31b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 32b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 33b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochbyte* MachineCallHelper::Generate() { 34b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DCHECK(parameter_count() == 0 || parameters_ != NULL); 35b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (!Pipeline::SupportedBackend()) return NULL; 36b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (code_.is_null()) { 37b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Zone* zone = graph_->zone(); 38b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CompilationInfo info(zone->isolate(), zone); 39b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Linkage linkage(&info, 40b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Linkage::GetSimplifiedCDescriptor(zone, machine_sig_)); 41b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Pipeline pipeline(&info); 42b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch code_ = pipeline.GenerateCodeForMachineGraph(&linkage, graph_); 43b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 44b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return code_.ToHandleChecked()->entry(); 45b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 46b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 47b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 48b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochNode* MachineCallHelper::Parameter(size_t index) { 49b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DCHECK_NE(NULL, parameters_); 50b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DCHECK(index < parameter_count()); 51b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return parameters_[index]; 52b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 53b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 54b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} // namespace compiler 55b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} // namespace internal 56b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} // namespace v8 57