Home | History | Annotate | Download | only in src
      1 // Copyright 2013 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_HYDROGEN_CHECK_ELIMINATION_H_
      6 #define V8_HYDROGEN_CHECK_ELIMINATION_H_
      7 
      8 #include "src/hydrogen.h"
      9 #include "src/hydrogen-alias-analysis.h"
     10 
     11 namespace v8 {
     12 namespace internal {
     13 
     14 
     15 // Remove CheckMaps instructions through flow- and branch-sensitive analysis.
     16 class HCheckEliminationPhase : public HPhase {
     17  public:
     18   explicit HCheckEliminationPhase(HGraph* graph)
     19       : HPhase("H_Check Elimination", graph), aliasing_(),
     20         string_maps_(kStringMapsSize, zone()) {
     21     // Compute the set of string maps.
     22     #define ADD_STRING_MAP(type, size, name, Name)                  \
     23       string_maps_.Add(Unique<Map>::CreateImmovable(                \
     24               graph->isolate()->factory()->name##_map()), zone());
     25     STRING_TYPE_LIST(ADD_STRING_MAP)
     26     #undef ADD_STRING_MAP
     27     ASSERT_EQ(kStringMapsSize, string_maps_.size());
     28 #ifdef DEBUG
     29     redundant_ = 0;
     30     removed_ = 0;
     31     removed_cho_ = 0;
     32     removed_cit_ = 0;
     33     narrowed_ = 0;
     34     loads_ = 0;
     35     empty_ = 0;
     36     compares_true_ = 0;
     37     compares_false_ = 0;
     38     transitions_ = 0;
     39 #endif
     40   }
     41 
     42   void Run();
     43 
     44   friend class HCheckTable;
     45 
     46  private:
     47   const UniqueSet<Map>* string_maps() const { return &string_maps_; }
     48 
     49   void PrintStats();
     50 
     51   HAliasAnalyzer* aliasing_;
     52   #define COUNT(type, size, name, Name) + 1
     53   static const int kStringMapsSize = 0 STRING_TYPE_LIST(COUNT);
     54   #undef COUNT
     55   UniqueSet<Map> string_maps_;
     56 #ifdef DEBUG
     57   int redundant_;
     58   int removed_;
     59   int removed_cho_;
     60   int removed_cit_;
     61   int narrowed_;
     62   int loads_;
     63   int empty_;
     64   int compares_true_;
     65   int compares_false_;
     66   int transitions_;
     67 #endif
     68 };
     69 
     70 
     71 } }  // namespace v8::internal
     72 
     73 #endif  // V8_HYDROGEN_CHECK_ELIMINATION_H_
     74