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/base/flags.h" 10 #include "src/compiler/graph-reducer.h" 11 #include "src/globals.h" 12 13 namespace v8 { 14 namespace internal { 15 16 // Forward declarations. 17 class CompilationDependencies; 18 class Factory; 19 class Isolate; 20 21 namespace compiler { 22 23 // Forward declarations. 24 class JSGraph; 25 class SimplifiedOperatorBuilder; 26 class TypeCache; 27 28 class V8_EXPORT_PRIVATE TypedOptimization final NON_EXPORTED_BASE(AdvancedReducer)29 : public NON_EXPORTED_BASE(AdvancedReducer) { 30 public: 31 // Flags that control the mode of operation. 32 enum Flag { 33 kNoFlags = 0u, 34 kDeoptimizationEnabled = 1u << 0, 35 }; 36 typedef base::Flags<Flag> Flags; 37 38 TypedOptimization(Editor* editor, CompilationDependencies* dependencies, 39 Flags flags, JSGraph* jsgraph); 40 ~TypedOptimization(); 41 42 Reduction Reduce(Node* node) final; 43 44 private: 45 Reduction ReduceCheckHeapObject(Node* node); 46 Reduction ReduceCheckMaps(Node* node); 47 Reduction ReduceCheckString(Node* node); 48 Reduction ReduceLoadField(Node* node); 49 Reduction ReduceNumberFloor(Node* node); 50 Reduction ReduceNumberRoundop(Node* node); 51 Reduction ReduceNumberToUint8Clamped(Node* node); 52 Reduction ReducePhi(Node* node); 53 Reduction ReduceReferenceEqual(Node* node); 54 Reduction ReduceSelect(Node* node); 55 56 CompilationDependencies* dependencies() const { return dependencies_; } 57 Factory* factory() const; 58 Flags flags() const { return flags_; } 59 Graph* graph() const; 60 Isolate* isolate() const; 61 JSGraph* jsgraph() const { return jsgraph_; } 62 SimplifiedOperatorBuilder* simplified() const; 63 64 CompilationDependencies* const dependencies_; 65 Flags const flags_; 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 DEFINE_OPERATORS_FOR_FLAGS(TypedOptimization::Flags) 75 76 } // namespace compiler 77 } // namespace internal 78 } // namespace v8 79 80 #endif // V8_COMPILER_TYPED_OPTIMIZATION_H_ 81