LCOV - code coverage report
Current view: top level - src/compiler - js-heap-copy-reducer.cc (source / functions) Hit Total Coverage
Test: app.info Lines: 58 58 100.0 %
Date: 2019-02-19 Functions: 4 5 80.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             : #include "src/compiler/js-heap-copy-reducer.h"
       6             : 
       7             : #include "src/compiler/common-operator.h"
       8             : #include "src/compiler/js-heap-broker.h"
       9             : #include "src/compiler/js-operator.h"
      10             : #include "src/compiler/node-properties.h"
      11             : #include "src/compiler/simplified-operator.h"
      12             : #include "src/heap/factory-inl.h"
      13             : #include "src/objects/map.h"
      14             : #include "src/objects/scope-info.h"
      15             : 
      16             : namespace v8 {
      17             : namespace internal {
      18             : namespace compiler {
      19             : 
      20             : // In the functions below, we call the ObjectRef (or subclass) constructor in
      21             : // order to trigger serialization if not yet done.
      22             : 
      23      913578 : JSHeapCopyReducer::JSHeapCopyReducer(JSHeapBroker* broker) : broker_(broker) {}
      24             : 
      25     8275457 : JSHeapBroker* JSHeapCopyReducer::broker() { return broker_; }
      26             : 
      27    36913451 : Reduction JSHeapCopyReducer::Reduce(Node* node) {
      28    36913451 :   switch (node->opcode()) {
      29             :     case IrOpcode::kHeapConstant: {
      30    12288876 :       ObjectRef object(broker(), HeapConstantOf(node->op()));
      31     6144437 :       if (object.IsJSFunction()) object.AsJSFunction().Serialize();
      32     6144437 :       if (object.IsJSObject()) object.AsJSObject().SerializeObjectCreateMap();
      33     6144438 :       if (object.IsModule()) object.AsModule().Serialize();
      34     6144438 :       if (object.IsContext()) object.AsContext().Serialize();
      35             :       break;
      36             :     }
      37             :     case IrOpcode::kJSCreateArray: {
      38        1367 :       CreateArrayParameters const& p = CreateArrayParametersOf(node->op());
      39             :       Handle<AllocationSite> site;
      40        1904 :       if (p.site().ToHandle(&site)) AllocationSiteRef(broker(), site);
      41             :       break;
      42             :     }
      43             :     case IrOpcode::kJSCreateArguments: {
      44       19278 :       Node* const frame_state = NodeProperties::GetFrameStateInput(node);
      45       19278 :       FrameStateInfo state_info = FrameStateInfoOf(frame_state->op());
      46             :       SharedFunctionInfoRef shared(broker(),
      47             :                                    state_info.shared_info().ToHandleChecked());
      48             :       break;
      49             :     }
      50             :     case IrOpcode::kJSCreateBlockContext: {
      51       18276 :       ScopeInfoRef(broker(), ScopeInfoOf(node->op()));
      52        9138 :       break;
      53             :     }
      54             :     case IrOpcode::kJSCreateBoundFunction: {
      55             :       CreateBoundFunctionParameters const& p =
      56         105 :           CreateBoundFunctionParametersOf(node->op());
      57         105 :       MapRef(broker(), p.map());
      58         105 :       break;
      59             :     }
      60             :     case IrOpcode::kJSCreateCatchContext: {
      61       28698 :       ScopeInfoRef(broker(), ScopeInfoOf(node->op()));
      62       14349 :       break;
      63             :     }
      64             :     case IrOpcode::kJSCreateClosure: {
      65      437241 :       CreateClosureParameters const& p = CreateClosureParametersOf(node->op());
      66      437241 :       SharedFunctionInfoRef(broker(), p.shared_info());
      67      437241 :       HeapObjectRef(broker(), p.feedback_cell());
      68      437241 :       HeapObjectRef(broker(), p.code());
      69      437241 :       break;
      70             :     }
      71             :     case IrOpcode::kJSCreateEmptyLiteralArray: {
      72       21661 :       FeedbackParameter const& p = FeedbackParameterOf(node->op());
      73       21661 :       FeedbackVectorRef(broker(), p.feedback().vector()).SerializeSlots();
      74       21661 :       break;
      75             :     }
      76             :     case IrOpcode::kJSCreateFunctionContext: {
      77             :       CreateFunctionContextParameters const& p =
      78       29247 :           CreateFunctionContextParametersOf(node->op());
      79       29247 :       ScopeInfoRef(broker(), p.scope_info());
      80       29247 :       break;
      81             :     }
      82             :     case IrOpcode::kJSCreateLiteralArray:
      83             :     case IrOpcode::kJSCreateLiteralObject: {
      84       23230 :       CreateLiteralParameters const& p = CreateLiteralParametersOf(node->op());
      85       23230 :       FeedbackVectorRef(broker(), p.feedback().vector()).SerializeSlots();
      86       23230 :       break;
      87             :     }
      88             :     case IrOpcode::kJSCreateLiteralRegExp: {
      89        6421 :       CreateLiteralParameters const& p = CreateLiteralParametersOf(node->op());
      90        6421 :       FeedbackVectorRef(broker(), p.feedback().vector()).SerializeSlots();
      91        6421 :       break;
      92             :     }
      93             :     case IrOpcode::kJSCreateWithContext: {
      94         978 :       ScopeInfoRef(broker(), ScopeInfoOf(node->op()));
      95         489 :       break;
      96             :     }
      97             :     case IrOpcode::kJSLoadNamed:
      98             :     case IrOpcode::kJSStoreNamed: {
      99      480459 :       NamedAccess const& p = NamedAccessOf(node->op());
     100      480459 :       NameRef(broker(), p.name());
     101      480459 :       break;
     102             :     }
     103             :     case IrOpcode::kStoreField:
     104             :     case IrOpcode::kLoadField: {
     105     1809327 :       FieldAccess access = FieldAccessOf(node->op());
     106             :       Handle<Map> map_handle;
     107     1809327 :       if (access.map.ToHandle(&map_handle)) {
     108        3058 :         MapRef(broker(), map_handle);
     109             :       }
     110             :       Handle<Name> name_handle;
     111     1809327 :       if (access.name.ToHandle(&name_handle)) {
     112       95697 :         NameRef(broker(), name_handle);
     113             :       }
     114             :       break;
     115             :     }
     116             :     case IrOpcode::kMapGuard: {
     117        6648 :       ZoneHandleSet<Map> const maps = MapGuardMapsOf(node->op()).maps();
     118       13296 :       for (Handle<Map> map : maps) {
     119        6648 :         MapRef(broker(), map);
     120             :       }
     121             :       break;
     122             :     }
     123             :     case IrOpcode::kCheckMaps: {
     124       94073 :       ZoneHandleSet<Map> const maps = CheckMapsParametersOf(node->op()).maps();
     125      196540 :       for (Handle<Map> map : maps) {
     126      102467 :         MapRef(broker(), map);
     127             :       }
     128             :       break;
     129             :     }
     130             :     case IrOpcode::kCompareMaps: {
     131             :       ZoneHandleSet<Map> const maps =
     132        6512 :           CompareMapsParametersOf(node->op()).maps();
     133       13024 :       for (Handle<Map> map : maps) {
     134        6512 :         MapRef(broker(), map);
     135             :       }
     136             :       break;
     137             :     }
     138             : 
     139             :     default:
     140             :       break;
     141             :   }
     142    36913450 :   return NoChange();
     143             : }
     144             : 
     145             : }  // namespace compiler
     146             : }  // namespace internal
     147      178779 : }  // namespace v8

Generated by: LCOV version 1.10