V8 API Reference, 7.2.502.16 (for Deno 0.2.4)
redundancy-elimination.h
1 // Copyright 2016 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_COMPILER_REDUNDANCY_ELIMINATION_H_
6 #define V8_COMPILER_REDUNDANCY_ELIMINATION_H_
7 
8 #include "src/compiler/graph-reducer.h"
9 
10 namespace v8 {
11 namespace internal {
12 namespace compiler {
13 
14 class V8_EXPORT_PRIVATE RedundancyElimination final : public AdvancedReducer {
15  public:
16  RedundancyElimination(Editor* editor, Zone* zone);
17  ~RedundancyElimination() final;
18 
19  const char* reducer_name() const override { return "RedundancyElimination"; }
20 
21  Reduction Reduce(Node* node) final;
22 
23  private:
24  struct Check {
25  Check(Node* node, Check* next) : node(node), next(next) {}
26  Node* node;
27  Check* next;
28  };
29 
30  class EffectPathChecks final {
31  public:
32  static EffectPathChecks* Copy(Zone* zone, EffectPathChecks const* checks);
33  static EffectPathChecks const* Empty(Zone* zone);
34  bool Equals(EffectPathChecks const* that) const;
35  void Merge(EffectPathChecks const* that);
36 
37  EffectPathChecks const* AddCheck(Zone* zone, Node* node) const;
38  Node* LookupCheck(Node* node) const;
39  Node* LookupBoundsCheckFor(Node* node) const;
40 
41  private:
42  EffectPathChecks(Check* head, size_t size) : head_(head), size_(size) {}
43 
44  // We keep track of the list length so that we can find the longest
45  // common tail easily.
46  Check* head_;
47  size_t size_;
48  };
49 
50  class PathChecksForEffectNodes final {
51  public:
52  explicit PathChecksForEffectNodes(Zone* zone) : info_for_node_(zone) {}
53  EffectPathChecks const* Get(Node* node) const;
54  void Set(Node* node, EffectPathChecks const* checks);
55 
56  private:
58  };
59 
60  Reduction ReduceCheckNode(Node* node);
61  Reduction ReduceEffectPhi(Node* node);
62  Reduction ReduceSpeculativeNumberComparison(Node* node);
63  Reduction ReduceSpeculativeNumberOperation(Node* node);
64  Reduction ReduceStart(Node* node);
65  Reduction ReduceOtherNode(Node* node);
66 
67  Reduction TakeChecksFromFirstEffect(Node* node);
68  Reduction UpdateChecks(Node* node, EffectPathChecks const* checks);
69 
70  Zone* zone() const { return zone_; }
71 
72  PathChecksForEffectNodes node_checks_;
73  Zone* const zone_;
74 
75  DISALLOW_COPY_AND_ASSIGN(RedundancyElimination);
76 };
77 
78 } // namespace compiler
79 } // namespace internal
80 } // namespace v8
81 
82 #endif // V8_COMPILER_REDUNDANCY_ELIMINATION_H_
Definition: libplatform.h:13
Definition: v8.h:3740