LCOV - code coverage report
Current view: top level - src/compiler - machine-graph.h (source / functions) Hit Total Coverage
Test: app.info Lines: 5 5 100.0 %
Date: 2019-04-17 Functions: 1 1 100.0 %

          Line data    Source code
       1             : // Copyright 2018 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_MACHINE_GRAPH_H_
       6             : #define V8_COMPILER_MACHINE_GRAPH_H_
       7             : 
       8             : #include "src/base/compiler-specific.h"
       9             : #include "src/compiler/common-node-cache.h"
      10             : #include "src/compiler/common-operator.h"
      11             : #include "src/compiler/graph.h"
      12             : #include "src/compiler/machine-operator.h"
      13             : #include "src/globals.h"
      14             : #include "src/runtime/runtime.h"
      15             : 
      16             : namespace v8 {
      17             : namespace internal {
      18             : namespace compiler {
      19             : 
      20             : // Implements a facade on a Graph, enhancing the graph with machine-specific
      21             : // notions, including a builder for common and machine operators, as well
      22             : // as caching primitive constants.
      23             : class V8_EXPORT_PRIVATE MachineGraph : public NON_EXPORTED_BASE(ZoneObject) {
      24             :  public:
      25             :   MachineGraph(Graph* graph, CommonOperatorBuilder* common,
      26             :                MachineOperatorBuilder* machine)
      27     8578366 :       : graph_(graph), common_(common), machine_(machine), cache_(zone()) {}
      28             : 
      29             :   // Creates a Int32Constant node, usually canonicalized.
      30             :   Node* Int32Constant(int32_t value);
      31             :   Node* Uint32Constant(uint32_t value) {
      32       40234 :     return Int32Constant(bit_cast<int32_t>(value));
      33             :   }
      34             : 
      35             :   // Creates a Int64Constant node, usually canonicalized.
      36             :   Node* Int64Constant(int64_t value);
      37             :   Node* Uint64Constant(uint64_t value) {
      38             :     return Int64Constant(bit_cast<int64_t>(value));
      39             :   }
      40             : 
      41             :   // Creates a Int32Constant/Int64Constant node, depending on the word size of
      42             :   // the target machine.
      43             :   // TODO(turbofan): Code using Int32Constant/Int64Constant to store pointer
      44             :   // constants is probably not serializable.
      45             :   Node* IntPtrConstant(intptr_t value);
      46             : 
      47             :   Node* RelocatableInt32Constant(int32_t value, RelocInfo::Mode rmode);
      48             :   Node* RelocatableInt64Constant(int64_t value, RelocInfo::Mode rmode);
      49             :   Node* RelocatableIntPtrConstant(intptr_t value, RelocInfo::Mode rmode);
      50             : 
      51             :   // Creates a Float32Constant node, usually canonicalized.
      52             :   Node* Float32Constant(float value);
      53             : 
      54             :   // Creates a Float64Constant node, usually canonicalized.
      55             :   Node* Float64Constant(double value);
      56             : 
      57             :   // Creates a PointerConstant node.
      58             :   Node* PointerConstant(intptr_t value);
      59             :   template <typename T>
      60             :   Node* PointerConstant(T* value) {
      61        1348 :     return PointerConstant(bit_cast<intptr_t>(value));
      62             :   }
      63             : 
      64             :   // Creates an ExternalConstant node, usually canonicalized.
      65             :   Node* ExternalConstant(ExternalReference ref);
      66             :   Node* ExternalConstant(Runtime::FunctionId function_id);
      67             : 
      68             :   // Global cache of the dead node.
      69    16861225 :   Node* Dead() {
      70    18012270 :     return Dead_ ? Dead_ : Dead_ = graph_->NewNode(common_->Dead());
      71             :   }
      72             : 
      73             :   CommonOperatorBuilder* common() const { return common_; }
      74             :   MachineOperatorBuilder* machine() const { return machine_; }
      75             :   Graph* graph() const { return graph_; }
      76             :   Zone* zone() const { return graph()->zone(); }
      77             : 
      78             :  protected:
      79             :   Graph* graph_;
      80             :   CommonOperatorBuilder* common_;
      81             :   MachineOperatorBuilder* machine_;
      82             :   CommonNodeCache cache_;
      83             :   Node* Dead_ = nullptr;
      84             : 
      85             :   DISALLOW_COPY_AND_ASSIGN(MachineGraph);
      86             : };
      87             : 
      88             : }  // namespace compiler
      89             : }  // namespace internal
      90             : }  // namespace v8
      91             : 
      92             : #endif  // V8_COMPILER_MACHINE_GRAPH_H_

Generated by: LCOV version 1.10