LCOV - code coverage report
Current view: top level - src/compiler - operator-properties.cc (source / functions) Hit Total Coverage
Test: app.info Lines: 20 20 100.0 %
Date: 2017-04-26 Functions: 4 4 100.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             : #include "src/compiler/operator-properties.h"
       6             : 
       7             : #include "src/compiler/js-operator.h"
       8             : #include "src/compiler/linkage.h"
       9             : #include "src/compiler/opcodes.h"
      10             : 
      11             : namespace v8 {
      12             : namespace internal {
      13             : namespace compiler {
      14             : 
      15             : // static
      16   879977017 : bool OperatorProperties::HasContextInput(const Operator* op) {
      17   879977017 :   IrOpcode::Value opcode = static_cast<IrOpcode::Value>(op->opcode());
      18   879399511 :   return IrOpcode::IsJsOpcode(opcode);
      19             : }
      20             : 
      21             : 
      22             : // static
      23   866431940 : bool OperatorProperties::HasFrameStateInput(const Operator* op) {
      24   866431940 :   switch (op->opcode()) {
      25             :     case IrOpcode::kCheckpoint:
      26             :     case IrOpcode::kFrameState:
      27             :       return true;
      28             :     case IrOpcode::kJSCallRuntime: {
      29     9203331 :       const CallRuntimeParameters& p = CallRuntimeParametersOf(op);
      30     9203327 :       return Linkage::NeedsFrameStateInput(p.id());
      31             :     }
      32             : 
      33             :     // Strict equality cannot lazily deoptimize.
      34             :     case IrOpcode::kJSStrictEqual:
      35     6038991 :       return false;
      36             : 
      37             :     // Binary operations
      38             :     case IrOpcode::kJSAdd:
      39             :     case IrOpcode::kJSSubtract:
      40             :     case IrOpcode::kJSMultiply:
      41             :     case IrOpcode::kJSDivide:
      42             :     case IrOpcode::kJSModulus:
      43             : 
      44             :     // Bitwise operations
      45             :     case IrOpcode::kJSBitwiseOr:
      46             :     case IrOpcode::kJSBitwiseXor:
      47             :     case IrOpcode::kJSBitwiseAnd:
      48             : 
      49             :     // Shift operations
      50             :     case IrOpcode::kJSShiftLeft:
      51             :     case IrOpcode::kJSShiftRight:
      52             :     case IrOpcode::kJSShiftRightLogical:
      53             : 
      54             :     // Compare operations
      55             :     case IrOpcode::kJSEqual:
      56             :     case IrOpcode::kJSGreaterThan:
      57             :     case IrOpcode::kJSGreaterThanOrEqual:
      58             :     case IrOpcode::kJSLessThan:
      59             :     case IrOpcode::kJSLessThanOrEqual:
      60             :     case IrOpcode::kJSHasProperty:
      61             :     case IrOpcode::kJSInstanceOf:
      62             :     case IrOpcode::kJSOrdinaryHasInstance:
      63             : 
      64             :     // Object operations
      65             :     case IrOpcode::kJSCreate:
      66             :     case IrOpcode::kJSCreateArguments:
      67             :     case IrOpcode::kJSCreateArray:
      68             :     case IrOpcode::kJSCreateLiteralArray:
      69             :     case IrOpcode::kJSCreateLiteralObject:
      70             :     case IrOpcode::kJSCreateLiteralRegExp:
      71             : 
      72             :     // Property access operations
      73             :     case IrOpcode::kJSLoadNamed:
      74             :     case IrOpcode::kJSStoreNamed:
      75             :     case IrOpcode::kJSLoadProperty:
      76             :     case IrOpcode::kJSStoreProperty:
      77             :     case IrOpcode::kJSLoadGlobal:
      78             :     case IrOpcode::kJSStoreGlobal:
      79             :     case IrOpcode::kJSStoreNamedOwn:
      80             :     case IrOpcode::kJSStoreDataPropertyInLiteral:
      81             :     case IrOpcode::kJSDeleteProperty:
      82             : 
      83             :     // Context operations
      84             :     case IrOpcode::kJSCreateScriptContext:
      85             : 
      86             :     // Conversions
      87             :     case IrOpcode::kJSToInteger:
      88             :     case IrOpcode::kJSToLength:
      89             :     case IrOpcode::kJSToName:
      90             :     case IrOpcode::kJSToNumber:
      91             :     case IrOpcode::kJSToObject:
      92             :     case IrOpcode::kJSToString:
      93             : 
      94             :     // Call operations
      95             :     case IrOpcode::kJSConstruct:
      96             :     case IrOpcode::kJSConstructWithSpread:
      97             :     case IrOpcode::kJSCallForwardVarargs:
      98             :     case IrOpcode::kJSCall:
      99             :     case IrOpcode::kJSCallWithSpread:
     100             : 
     101             :     // Misc operations
     102             :     case IrOpcode::kJSForInNext:
     103             :     case IrOpcode::kJSForInPrepare:
     104             :     case IrOpcode::kJSStackCheck:
     105             :     case IrOpcode::kJSDebugger:
     106             :     case IrOpcode::kJSGetSuperConstructor:
     107             :       return true;
     108             : 
     109             :     default:
     110   703734520 :       return false;
     111             :   }
     112             : }
     113             : 
     114             : 
     115             : // static
     116     1732518 : int OperatorProperties::GetTotalInputCount(const Operator* op) {
     117     1155012 :   return op->ValueInputCount() + GetContextInputCount(op) +
     118      577506 :          GetFrameStateInputCount(op) + op->EffectInputCount() +
     119      577506 :          op->ControlInputCount();
     120             : }
     121             : 
     122             : 
     123             : // static
     124          49 : bool OperatorProperties::IsBasicBlockBegin(const Operator* op) {
     125             :   Operator::Opcode const opcode = op->opcode();
     126          49 :   return opcode == IrOpcode::kStart || opcode == IrOpcode::kEnd ||
     127          49 :          opcode == IrOpcode::kDead || opcode == IrOpcode::kLoop ||
     128          49 :          opcode == IrOpcode::kMerge || opcode == IrOpcode::kIfTrue ||
     129          49 :          opcode == IrOpcode::kIfFalse || opcode == IrOpcode::kIfSuccess ||
     130          98 :          opcode == IrOpcode::kIfException || opcode == IrOpcode::kIfValue ||
     131          49 :          opcode == IrOpcode::kIfDefault;
     132             : }
     133             : 
     134             : }  // namespace compiler
     135             : }  // namespace internal
     136             : }  // namespace v8

Generated by: LCOV version 1.10