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-04-18 Functions: 3 4 75.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      928022 : JSHeapCopyReducer::JSHeapCopyReducer(JSHeapBroker* broker) : broker_(broker) {}
      24             : 
      25     8405429 : JSHeapBroker* JSHeapCopyReducer::broker() { return broker_; }
      26             : 
      27    35962550 : Reduction JSHeapCopyReducer::Reduce(Node* node) {
      28    35962550 :   switch (node->opcode()) {
      29             :     case IrOpcode::kHeapConstant: {
      30    12473958 :       ObjectRef object(broker(), HeapConstantOf(node->op()));
      31     6236968 :       if (object.IsJSFunction()) object.AsJSFunction().Serialize();
      32     6236961 :       if (object.IsJSObject()) object.AsJSObject().SerializeObjectCreateMap();
      33     6236956 :       if (object.IsModule()) object.AsModule().Serialize();
      34     6236960 :       if (object.IsContext()) object.AsContext().SerializeContextChain();
      35             :       break;
      36             :     }
      37             :     case IrOpcode::kJSCreateArray: {
      38        1565 :       CreateArrayParameters const& p = CreateArrayParametersOf(node->op());
      39             :       Handle<AllocationSite> site;
      40        2112 :       if (p.site().ToHandle(&site)) AllocationSiteRef(broker(), site);
      41             :       break;
      42             :     }
      43             :     case IrOpcode::kJSCreateArguments: {
      44       19439 :       Node* const frame_state = NodeProperties::GetFrameStateInput(node);
      45       19439 :       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       18830 :       ScopeInfoRef(broker(), ScopeInfoOf(node->op()));
      52        9415 :       break;
      53             :     }
      54             :     case IrOpcode::kJSCreateBoundFunction: {
      55             :       CreateBoundFunctionParameters const& p =
      56         117 :           CreateBoundFunctionParametersOf(node->op());
      57         117 :       MapRef(broker(), p.map());
      58         117 :       break;
      59             :     }
      60             :     case IrOpcode::kJSCreateCatchContext: {
      61       30734 :       ScopeInfoRef(broker(), ScopeInfoOf(node->op()));
      62       15367 :       break;
      63             :     }
      64             :     case IrOpcode::kJSCreateClosure: {
      65      442188 :       CreateClosureParameters const& p = CreateClosureParametersOf(node->op());
      66      442190 :       SharedFunctionInfoRef(broker(), p.shared_info());
      67      442189 :       HeapObjectRef(broker(), p.feedback_cell());
      68      442190 :       HeapObjectRef(broker(), p.code());
      69      442190 :       break;
      70             :     }
      71             :     case IrOpcode::kJSCreateEmptyLiteralArray: {
      72       22345 :       FeedbackParameter const& p = FeedbackParameterOf(node->op());
      73       22345 :       FeedbackVectorRef(broker(), p.feedback().vector()).SerializeSlots();
      74       22345 :       break;
      75             :     }
      76             :     case IrOpcode::kJSCreateFunctionContext: {
      77             :       CreateFunctionContextParameters const& p =
      78       29704 :           CreateFunctionContextParametersOf(node->op());
      79       29704 :       ScopeInfoRef(broker(), p.scope_info());
      80       29704 :       break;
      81             :     }
      82             :     case IrOpcode::kJSCreateLiteralArray:
      83             :     case IrOpcode::kJSCreateLiteralObject: {
      84       24331 :       CreateLiteralParameters const& p = CreateLiteralParametersOf(node->op());
      85       24330 :       FeedbackVectorRef(broker(), p.feedback().vector()).SerializeSlots();
      86       24330 :       break;
      87             :     }
      88             :     case IrOpcode::kJSCreateLiteralRegExp: {
      89        6447 :       CreateLiteralParameters const& p = CreateLiteralParametersOf(node->op());
      90        6447 :       FeedbackVectorRef(broker(), p.feedback().vector()).SerializeSlots();
      91        6447 :       break;
      92             :     }
      93             :     case IrOpcode::kJSCreateWithContext: {
      94         992 :       ScopeInfoRef(broker(), ScopeInfoOf(node->op()));
      95         496 :       break;
      96             :     }
      97             :     case IrOpcode::kJSLoadNamed:
      98             :     case IrOpcode::kJSStoreNamed: {
      99      506318 :       NamedAccess const& p = NamedAccessOf(node->op());
     100      506318 :       NameRef(broker(), p.name());
     101      506318 :       break;
     102             :     }
     103             :     case IrOpcode::kStoreField:
     104             :     case IrOpcode::kLoadField: {
     105     1804960 :       FieldAccess access = FieldAccessOf(node->op());
     106             :       Handle<Map> map_handle;
     107     1804960 :       if (access.map.ToHandle(&map_handle)) {
     108        3609 :         MapRef(broker(), map_handle);
     109             :       }
     110             :       Handle<Name> name_handle;
     111     1804960 :       if (access.name.ToHandle(&name_handle)) {
     112       93453 :         NameRef(broker(), name_handle);
     113             :       }
     114             :       break;
     115             :     }
     116             :     case IrOpcode::kMapGuard: {
     117        6671 :       ZoneHandleSet<Map> const& maps = MapGuardMapsOf(node->op());
     118       13350 :       for (Handle<Map> map : maps) {
     119        6679 :         MapRef(broker(), map);
     120             :       }
     121             :       break;
     122             :     }
     123             :     case IrOpcode::kCheckMaps: {
     124       89470 :       ZoneHandleSet<Map> const& maps = CheckMapsParametersOf(node->op()).maps();
     125      186563 :       for (Handle<Map> map : maps) {
     126       97093 :         MapRef(broker(), map);
     127             :       }
     128             :       break;
     129             :     }
     130             :     case IrOpcode::kCompareMaps: {
     131        6517 :       ZoneHandleSet<Map> const& maps = CompareMapsParametersOf(node->op());
     132       13042 :       for (Handle<Map> map : maps) {
     133        6525 :         MapRef(broker(), map);
     134             :       }
     135             :       break;
     136             :     }
     137             : 
     138             :     default:
     139             :       break;
     140             :   }
     141    35962531 :   return NoChange();
     142             : }
     143             : 
     144             : }  // namespace compiler
     145             : }  // namespace internal
     146      122036 : }  // namespace v8

Generated by: LCOV version 1.10