Line data Source code
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_TYPED_OPTIMIZATION_H_
6 : #define V8_COMPILER_TYPED_OPTIMIZATION_H_
7 :
8 : #include "src/base/compiler-specific.h"
9 : #include "src/compiler/graph-reducer.h"
10 : #include "src/globals.h"
11 :
12 : namespace v8 {
13 : namespace internal {
14 :
15 : // Forward declarations.
16 : class CompilationDependencies;
17 : class Factory;
18 : class Isolate;
19 :
20 : namespace compiler {
21 :
22 : // Forward declarations.
23 : class JSGraph;
24 : class SimplifiedOperatorBuilder;
25 : class TypeCache;
26 :
27 : class V8_EXPORT_PRIVATE TypedOptimization final
28 : : public NON_EXPORTED_BASE(AdvancedReducer) {
29 : public:
30 : TypedOptimization(Editor* editor, CompilationDependencies* dependencies,
31 : JSGraph* jsgraph);
32 : ~TypedOptimization();
33 :
34 0 : const char* reducer_name() const override { return "TypedOptimization"; }
35 :
36 : Reduction Reduce(Node* node) final;
37 :
38 : private:
39 : Reduction ReduceCheckHeapObject(Node* node);
40 : Reduction ReduceCheckMaps(Node* node);
41 : Reduction ReduceCheckNumber(Node* node);
42 : Reduction ReduceCheckString(Node* node);
43 : Reduction ReduceCheckSeqString(Node* node);
44 : Reduction ReduceCheckEqualsInternalizedString(Node* node);
45 : Reduction ReduceCheckEqualsSymbol(Node* node);
46 : Reduction ReduceLoadField(Node* node);
47 : Reduction ReduceNumberFloor(Node* node);
48 : Reduction ReduceNumberRoundop(Node* node);
49 : Reduction ReduceNumberToUint8Clamped(Node* node);
50 : Reduction ReducePhi(Node* node);
51 : Reduction ReduceReferenceEqual(Node* node);
52 : Reduction ReduceSelect(Node* node);
53 : Reduction ReduceSpeculativeToNumber(Node* node);
54 : Reduction ReduceCheckNotTaggedHole(Node* node);
55 : Reduction ReduceTypeOf(Node* node);
56 : Reduction ReduceToBoolean(Node* node);
57 :
58 : CompilationDependencies* dependencies() const { return dependencies_; }
59 : Factory* factory() const;
60 : Graph* graph() const;
61 : Isolate* isolate() const;
62 : JSGraph* jsgraph() const { return jsgraph_; }
63 : SimplifiedOperatorBuilder* simplified() const;
64 :
65 : CompilationDependencies* const dependencies_;
66 : JSGraph* const jsgraph_;
67 : Type* const true_type_;
68 : Type* const false_type_;
69 : TypeCache const& type_cache_;
70 :
71 : DISALLOW_COPY_AND_ASSIGN(TypedOptimization);
72 : };
73 :
74 : } // namespace compiler
75 : } // namespace internal
76 : } // namespace v8
77 :
78 : #endif // V8_COMPILER_TYPED_OPTIMIZATION_H_
|