17d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// Copyright 2014 the V8 project authors. All rights reserved. 27d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be 37d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// found in the LICENSE file. 47d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 57d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "test/cctest/compiler/graph-builder-tester.h" 6b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org 7b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org#include "src/compiler/linkage.h" 87d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/compiler/pipeline.h" 97d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgnamespace v8 { 117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgnamespace internal { 127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgnamespace compiler { 137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 149aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgMachineCallHelper::MachineCallHelper(Zone* zone, MachineSignature* machine_sig) 159aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org : CallHelper(zone->isolate(), machine_sig), 167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org parameters_(NULL), 177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org graph_(NULL) {} 187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgvoid MachineCallHelper::InitParameters(GraphBuilder* builder, 217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CommonOperatorBuilder* common) { 22e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK_EQ(NULL, parameters_); 237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org graph_ = builder->graph(); 249aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org int param_count = static_cast<int>(parameter_count()); 259aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org if (param_count == 0) return; 269aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org parameters_ = graph_->zone()->NewArray<Node*>(param_count); 279aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org for (int i = 0; i < param_count; ++i) { 283e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org parameters_[i] = builder->NewNode(common->Parameter(i), graph_->start()); 297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgbyte* MachineCallHelper::Generate() { 34e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(parameter_count() == 0 || parameters_ != NULL); 355e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org if (!Pipeline::SupportedBackend()) return NULL; 367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org if (code_.is_null()) { 377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Zone* zone = graph_->zone(); 387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CompilationInfo info(zone->isolate(), zone); 399aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org Linkage linkage(&info, 409aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org Linkage::GetSimplifiedCDescriptor(zone, machine_sig_)); 417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Pipeline pipeline(&info); 427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org code_ = pipeline.GenerateCodeForMachineGraph(&linkage, graph_); 437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org return code_.ToHandleChecked()->entry(); 457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 489aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgNode* MachineCallHelper::Parameter(size_t index) { 49e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK_NE(NULL, parameters_); 509aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org DCHECK(index < parameter_count()); 519aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org return parameters_[index]; 527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 537d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 547d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} // namespace compiler 557d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} // namespace internal 567d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} // namespace v8 57