// Copyright 2021 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. // This file declares the implementation of a new intrinsic %ObserveNode(expr), // which has noop semantics but triggers the invocation of callbacks on a // NodeObserver object. The NodeObserver is set on the OptimizedCompilationInfo // and callbacks are called when the node generated for 'expr' is created or // changed in any phase, until EffectControlLinearization. // // The modifications currently observed are changes to the observed Node // operator and type and its replacement with another Node. // // This provides the infrastructure to write unit tests that check for the // construction of or the lowering to specific nodes in the TurboFan graphs. #ifndef V8_COMPILER_NODE_OBSERVER_H_ #define V8_COMPILER_NODE_OBSERVER_H_ #include "src/compiler/node.h" #include "src/compiler/operator.h" #include "src/zone/zone.h" namespace v8 { namespace internal { namespace compiler { class Node; class Operator; class ObservableNodeState { … }; inline bool operator==(const ObservableNodeState& lhs, const ObservableNodeState& rhs) { … } inline bool operator!=(const ObservableNodeState& lhs, const ObservableNodeState& rhs) { … } class NodeObserver : public ZoneObject { … }; inline NodeObserver::~NodeObserver() = default; struct NodeObservation : public ZoneObject { … }; class ObserveNodeManager : public ZoneObject { … }; struct ObserveNodeInfo { … }; } // namespace compiler } // namespace internal } // namespace v8 #endif // V8_COMPILER_NODE_OBSERVER_H_