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_COMPILER_VERIFIER_H_ 6 #define V8_COMPILER_VERIFIER_H_ 7 8 #include "src/base/macros.h" 9 10 namespace v8 { 11 namespace internal { 12 namespace compiler { 13 14 class Graph; 15 class Edge; 16 class Node; 17 class Schedule; 18 19 // Verifies properties of a graph, such as the well-formedness of inputs to 20 // each node, etc. 21 class Verifier { 22 public: 23 enum Typing { TYPED, UNTYPED }; 24 25 static void Run(Graph* graph, Typing typing = TYPED); 26 27 #ifdef DEBUG 28 // Verifies consistency of node inputs and uses: 29 // - node inputs should agree with the input count computed from 30 // the node's operator. 31 // - effect inputs should have effect outputs. 32 // - control inputs should have control outputs. 33 // - frame state inputs should be frame states. 34 // - if the node has control uses, it should produce control. 35 // - if the node has effect uses, it should produce effect. 36 // - if the node has frame state uses, it must be a frame state. 37 static void VerifyNode(Node* node); 38 39 // Verify that {replacement} has the required outputs 40 // (effect, control or frame state) to be used as an input for {edge}. 41 static void VerifyEdgeInputReplacement(const Edge& edge, 42 const Node* replacement); 43 #else VerifyNode(Node * node)44 static void VerifyNode(Node* node) {} VerifyEdgeInputReplacement(const Edge & edge,const Node * replacement)45 static void VerifyEdgeInputReplacement(const Edge& edge, 46 const Node* replacement) {} 47 #endif // DEBUG 48 49 private: 50 class Visitor; 51 DISALLOW_COPY_AND_ASSIGN(Verifier); 52 }; 53 54 // Verifies properties of a schedule, such as dominance, phi placement, etc. 55 class ScheduleVerifier { 56 public: 57 static void Run(Schedule* schedule); 58 }; 59 } // namespace compiler 60 } // namespace internal 61 } // namespace v8 62 63 #endif // V8_COMPILER_VERIFIER_H_ 64