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 Node* start() { return graph()->start(); } 33 Node* end() { return graph()->end(); } 34 35 Node* Parameter(int32_t index = 0); 36 Node* Float32Constant(volatile float value); 37 Node* Float64Constant(volatile double value); 38 Node* Int32Constant(int32_t value); 39 Node* Uint32Constant(uint32_t value) { 40 return Int32Constant(bit_cast<int32_t>(value)); 41 } 42 Node* Int64Constant(int64_t value); 43 Node* NumberConstant(volatile double value); 44 Node* HeapConstant(const Handle<HeapObject>& value); 45 Node* FalseConstant(); 46 Node* TrueConstant(); 47 Node* UndefinedConstant(); 48 49 Node* EmptyFrameState(); 50 51 Matcher<Node*> IsBooleanConstant(bool value) { 52 return value ? IsTrueConstant() : IsFalseConstant(); 53 } 54 Matcher<Node*> IsFalseConstant(); 55 Matcher<Node*> IsTrueConstant(); 56 Matcher<Node*> IsUndefinedConstant(); 57 58 CommonOperatorBuilder* common() { return &common_; } 59 Graph* graph() { return &graph_; } 60 61 private: 62 CommonOperatorBuilder common_; 63 Graph graph_; 64}; 65 66 67class TypedGraphTest : public GraphTest { 68 public: 69 explicit TypedGraphTest(int num_parameters = 1); 70 ~TypedGraphTest() override; 71 72 protected: 73 Node* Parameter(int32_t index = 0) { return GraphTest::Parameter(index); } 74 Node* Parameter(Type* type, int32_t index = 0); 75 76 Typer* typer() { return &typer_; } 77 78 private: 79 Typer typer_; 80}; 81 82} // namespace compiler 83} // namespace internal 84} // namespace v8 85 86#endif // V8_UNITTESTS_COMPILER_GRAPH_UNITTEST_H_ 87