V8 Project
hydrogen-check-elimination.h
Go to the documentation of this file.
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"
10 
11 namespace v8 {
12 namespace internal {
13 
14 
15 // Remove CheckMaps instructions through flow- and branch-sensitive analysis.
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());
26  #undef ADD_STRING_MAP
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 
52  #define COUNT(type, size, name, Name) + 1
53  static const int kStringMapsSize = 0 STRING_TYPE_LIST(COUNT);
54  #undef COUNT
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_
const UniqueSet< Map > * string_maps() const
HGraph * graph() const
Definition: hydrogen.h:2802
#define COUNT(type, size, name, Name)
#define ADD_STRING_MAP(type, size, name, Name)
#define DCHECK_EQ(v1, v2)
Definition: logging.h:206
Debugger support for the V8 JavaScript engine.
Definition: accessors.cc:20
#define STRING_TYPE_LIST(V)
Definition: objects.h:457