// Copyright 2014 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef V8_COMPILER_VERIFIER_H_
#define V8_COMPILER_VERIFIER_H_

#include "src/v8.h"

namespace v8 {
namespace internal {
namespace compiler {

class Graph;
class Schedule;

// Verifies properties of a graph, such as the well-formedness of inputs to
// each node, etc.
class Verifier {
 public:
  static void Run(Graph* graph);

 private:
  class Visitor;
  DISALLOW_COPY_AND_ASSIGN(Verifier);
};

// Verifies properties of a schedule, such as dominance, phi placement, etc.
class ScheduleVerifier {
 public:
  static void Run(Schedule* schedule);
};
}
}
}  // namespace v8::internal::compiler

#endif  // V8_COMPILER_VERIFIER_H_
