1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef V8_CCTEST_COMPILER_GRAPH_BUILDER_TESTER_H_
6 #define V8_CCTEST_COMPILER_GRAPH_BUILDER_TESTER_H_
9 #include "test/cctest/cctest.h"
11 #include "src/compiler/common-operator.h"
12 #include "src/compiler/graph-builder.h"
13 #include "src/compiler/machine-node-factory.h"
14 #include "src/compiler/machine-operator.h"
15 #include "src/compiler/simplified-node-factory.h"
16 #include "src/compiler/simplified-operator.h"
17 #include "test/cctest/compiler/call-tester.h"
18 #include "test/cctest/compiler/simplified-graph-builder.h"
24 // A class that just passes node creation on to the Graph.
25 class DirectGraphBuilder : public GraphBuilder {
27 explicit DirectGraphBuilder(Graph* graph) : GraphBuilder(graph) {}
28 virtual ~DirectGraphBuilder() {}
31 virtual Node* MakeNode(Operator* op, int value_input_count,
32 Node** value_inputs) {
33 return graph()->NewNode(op, value_input_count, value_inputs);
38 class MachineCallHelper : public CallHelper {
40 MachineCallHelper(Zone* zone, MachineCallDescriptorBuilder* builder);
42 Node* Parameter(int offset);
44 void GenerateCode() { Generate(); }
47 virtual byte* Generate();
48 virtual void VerifyParameters(int parameter_count, MachineType* parameters);
49 void InitParameters(GraphBuilder* builder, CommonOperatorBuilder* common);
52 int parameter_count() const {
53 return call_descriptor_builder_->parameter_count();
57 MachineCallDescriptorBuilder* call_descriptor_builder_;
59 // TODO(dcarney): shouldn't need graph stored.
61 MaybeHandle<Code> code_;
65 class GraphAndBuilders {
67 explicit GraphAndBuilders(Zone* zone)
68 : main_graph_(new (zone) Graph(zone)),
71 main_simplified_(zone) {}
74 // Prefixed with main_ to avoid naiming conflicts.
76 CommonOperatorBuilder main_common_;
77 MachineOperatorBuilder main_machine_;
78 SimplifiedOperatorBuilder main_simplified_;
82 template <typename ReturnType>
83 class GraphBuilderTester
84 : public HandleAndZoneScope,
85 private GraphAndBuilders,
86 public MachineCallHelper,
87 public SimplifiedGraphBuilder,
88 public CallHelper2<ReturnType, GraphBuilderTester<ReturnType> > {
90 explicit GraphBuilderTester(MachineType p0 = kMachineLast,
91 MachineType p1 = kMachineLast,
92 MachineType p2 = kMachineLast,
93 MachineType p3 = kMachineLast,
94 MachineType p4 = kMachineLast)
95 : GraphAndBuilders(main_zone()),
98 ToCallDescriptorBuilder(
99 main_zone(), ReturnValueTraits<ReturnType>::Representation(),
100 p0, p1, p2, p3, p4)),
101 SimplifiedGraphBuilder(main_graph_, &main_common_, &main_machine_,
103 Begin(parameter_count());
104 InitParameters(this, &main_common_);
106 virtual ~GraphBuilderTester() {}
108 Factory* factory() const { return isolate()->factory(); }
110 } // namespace compiler
111 } // namespace internal
114 #endif // V8_CCTEST_COMPILER_GRAPH_BUILDER_TESTER_H_