Home | History | Annotate | Download | only in compiler
      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
     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