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.
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;
21
22namespace compiler {
23
24using ::testing::Matcher;
25
26
27class GraphTest : public TestWithContext, public TestWithIsolateAndZone {
28 public:
29  explicit GraphTest(int num_parameters = 1);
30  ~GraphTest() override;
31
32 protected:
33  Node* start() { return graph()->start(); }
34  Node* end() { return graph()->end(); }
35
36  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);
46  Node* FalseConstant();
47  Node* TrueConstant();
48  Node* UndefinedConstant();
49
50  Node* EmptyFrameState();
51
52  Matcher<Node*> IsFalseConstant();
53  Matcher<Node*> IsTrueConstant();
54  Matcher<Node*> IsUndefinedConstant();
55
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);
68  ~TypedGraphTest() override;
69
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_
85