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