blob: 9c99992511b828c11f205ff183829c32d95c39aa [file] [log] [blame]
Emily Bernierd0a1eb72015-03-24 16:35:39 -04001// 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.
4
5#ifndef V8_UNITTESTS_COMPILER_GRAPH_UNITTEST_H_
6#define V8_UNITTESTS_COMPILER_GRAPH_UNITTEST_H_
7
8#include "src/compiler/common-operator.h"
9#include "src/compiler/graph.h"
10#include "src/compiler/typer.h"
11#include "test/unittests/test-utils.h"
12#include "testing/gmock/include/gmock/gmock.h"
13
14namespace v8 {
15namespace internal {
16
17// Forward declarations.
18template <class T>
19class Handle;
20class HeapObject;
Emily Bernierd0a1eb72015-03-24 16:35:39 -040021
22namespace compiler {
23
24using ::testing::Matcher;
25
26
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000027class GraphTest : public TestWithContext, public TestWithIsolateAndZone {
Emily Bernierd0a1eb72015-03-24 16:35:39 -040028 public:
29 explicit GraphTest(int num_parameters = 1);
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000030 ~GraphTest() override;
Emily Bernierd0a1eb72015-03-24 16:35:39 -040031
32 protected:
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000033 Node* start() { return graph()->start(); }
34 Node* end() { return graph()->end(); }
35
Emily Bernierd0a1eb72015-03-24 16:35:39 -040036 Node* Parameter(int32_t index = 0);
37 Node* Float32Constant(volatile float value);
38 Node* Float64Constant(volatile double value);
39 Node* Int32Constant(int32_t value);
40 Node* Uint32Constant(uint32_t value) {
41 return Int32Constant(bit_cast<int32_t>(value));
42 }
43 Node* Int64Constant(int64_t value);
44 Node* NumberConstant(volatile double value);
45 Node* HeapConstant(const Handle<HeapObject>& value);
Emily Bernierd0a1eb72015-03-24 16:35:39 -040046 Node* FalseConstant();
47 Node* TrueConstant();
48 Node* UndefinedConstant();
49
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000050 Node* EmptyFrameState();
51
Emily Bernierd0a1eb72015-03-24 16:35:39 -040052 Matcher<Node*> IsFalseConstant();
53 Matcher<Node*> IsTrueConstant();
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000054 Matcher<Node*> IsUndefinedConstant();
Emily Bernierd0a1eb72015-03-24 16:35:39 -040055
56 CommonOperatorBuilder* common() { return &common_; }
57 Graph* graph() { return &graph_; }
58
59 private:
60 CommonOperatorBuilder common_;
61 Graph graph_;
62};
63
64
65class TypedGraphTest : public GraphTest {
66 public:
67 explicit TypedGraphTest(int num_parameters = 1);
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000068 ~TypedGraphTest() override;
Emily Bernierd0a1eb72015-03-24 16:35:39 -040069
70 protected:
71 Node* Parameter(int32_t index = 0) { return GraphTest::Parameter(index); }
72 Node* Parameter(Type* type, int32_t index = 0);
73
74 Typer* typer() { return &typer_; }
75
76 private:
77 Typer typer_;
78};
79
80} // namespace compiler
81} // namespace internal
82} // namespace v8
83
84#endif // V8_UNITTESTS_COMPILER_GRAPH_UNITTEST_H_