LCOV - code coverage report
Current view: top level - src/compiler - simplified-lowering.h (source / functions) Hit Total Coverage
Test: app.info Lines: 5 5 100.0 %
Date: 2019-02-19 Functions: 0 0 -

          Line data    Source code
       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_SIMPLIFIED_LOWERING_H_
       6             : #define V8_COMPILER_SIMPLIFIED_LOWERING_H_
       7             : 
       8             : #include "src/compiler/js-graph.h"
       9             : #include "src/compiler/machine-operator.h"
      10             : #include "src/compiler/node.h"
      11             : #include "src/compiler/simplified-operator.h"
      12             : 
      13             : namespace v8 {
      14             : namespace internal {
      15             : namespace compiler {
      16             : 
      17             : // Forward declarations.
      18             : class NodeOriginTable;
      19             : class RepresentationChanger;
      20             : class RepresentationSelector;
      21             : class SourcePositionTable;
      22             : class TypeCache;
      23             : 
      24             : class V8_EXPORT_PRIVATE SimplifiedLowering final {
      25             :  public:
      26             :   SimplifiedLowering(JSGraph* jsgraph, JSHeapBroker* broker, Zone* zone,
      27             :                      SourcePositionTable* source_position,
      28             :                      NodeOriginTable* node_origins,
      29             :                      PoisoningMitigationLevel poisoning_level);
      30             :   ~SimplifiedLowering() = default;
      31             : 
      32             :   void LowerAllNodes();
      33             : 
      34             :   void DoMax(Node* node, Operator const* op, MachineRepresentation rep);
      35             :   void DoMin(Node* node, Operator const* op, MachineRepresentation rep);
      36             :   void DoJSToNumberOrNumericTruncatesToFloat64(
      37             :       Node* node, RepresentationSelector* selector);
      38             :   void DoJSToNumberOrNumericTruncatesToWord32(Node* node,
      39             :                                               RepresentationSelector* selector);
      40             :   void DoIntegral32ToBit(Node* node);
      41             :   void DoOrderedNumberToBit(Node* node);
      42             :   void DoNumberToBit(Node* node);
      43             :   void DoIntegerToUint8Clamped(Node* node);
      44             :   void DoNumberToUint8Clamped(Node* node);
      45             :   void DoSigned32ToUint8Clamped(Node* node);
      46             :   void DoUnsigned32ToUint8Clamped(Node* node);
      47             : 
      48             :  private:
      49             :   JSGraph* const jsgraph_;
      50             :   JSHeapBroker* broker_;
      51             :   Zone* const zone_;
      52             :   TypeCache const* type_cache_;
      53             :   SetOncePointer<Node> to_number_code_;
      54             :   SetOncePointer<Node> to_number_convert_big_int_code_;
      55             :   SetOncePointer<Node> to_numeric_code_;
      56             :   SetOncePointer<Operator const> to_number_operator_;
      57             :   SetOncePointer<Operator const> to_number_convert_big_int_operator_;
      58             :   SetOncePointer<Operator const> to_numeric_operator_;
      59             : 
      60             :   // TODO(danno): SimplifiedLowering shouldn't know anything about the source
      61             :   // positions table, but must for now since there currently is no other way to
      62             :   // pass down source position information to nodes created during
      63             :   // lowering. Once this phase becomes a vanilla reducer, it should get source
      64             :   // position information via the SourcePositionWrapper like all other reducers.
      65             :   SourcePositionTable* source_positions_;
      66             :   NodeOriginTable* node_origins_;
      67             : 
      68             :   PoisoningMitigationLevel poisoning_level_;
      69             : 
      70             :   Node* Float64Round(Node* const node);
      71             :   Node* Float64Sign(Node* const node);
      72             :   Node* Int32Abs(Node* const node);
      73             :   Node* Int32Div(Node* const node);
      74             :   Node* Int32Mod(Node* const node);
      75             :   Node* Int32Sign(Node* const node);
      76             :   Node* Uint32Div(Node* const node);
      77             :   Node* Uint32Mod(Node* const node);
      78             : 
      79             :   Node* ToNumberCode();
      80             :   Node* ToNumberConvertBigIntCode();
      81             :   Node* ToNumericCode();
      82             :   Operator const* ToNumberOperator();
      83             :   Operator const* ToNumberConvertBigIntOperator();
      84             :   Operator const* ToNumericOperator();
      85             : 
      86             :   friend class RepresentationSelector;
      87             : 
      88        2976 :   Isolate* isolate() { return jsgraph_->isolate(); }
      89             :   Zone* zone() { return jsgraph_->zone(); }
      90             :   JSGraph* jsgraph() { return jsgraph_; }
      91       79777 :   Graph* graph() { return jsgraph()->graph(); }
      92      223077 :   CommonOperatorBuilder* common() { return jsgraph()->common(); }
      93      239729 :   MachineOperatorBuilder* machine() { return jsgraph()->machine(); }
      94        7769 :   SimplifiedOperatorBuilder* simplified() { return jsgraph()->simplified(); }
      95             : };
      96             : 
      97             : }  // namespace compiler
      98             : }  // namespace internal
      99             : }  // namespace v8
     100             : 
     101             : #endif  // V8_COMPILER_SIMPLIFIED_LOWERING_H_

Generated by: LCOV version 1.10