7102a439f3bcfce5e72af34bc5a2ac68881112cf
[platform/framework/web/crosswalk.git] / src / v8 / src / hydrogen-check-elimination.h
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     DCHECK_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_