js-builtin-reducer.h revision f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3
1// Copyright 2014 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_JS_BUILTIN_REDUCER_H_ 6#define V8_COMPILER_JS_BUILTIN_REDUCER_H_ 7 8#include "src/base/flags.h" 9#include "src/compiler/graph-reducer.h" 10 11namespace v8 { 12namespace internal { 13 14// Forward declarations. 15class CompilationDependencies; 16class Factory; 17 18namespace compiler { 19 20// Forward declarations. 21class CommonOperatorBuilder; 22struct FieldAccess; 23class JSGraph; 24class JSOperatorBuilder; 25class SimplifiedOperatorBuilder; 26class TypeCache; 27 28class JSBuiltinReducer final : public AdvancedReducer { 29 public: 30 // Flags that control the mode of operation. 31 enum Flag { 32 kNoFlags = 0u, 33 kDeoptimizationEnabled = 1u << 0, 34 }; 35 typedef base::Flags<Flag> Flags; 36 37 JSBuiltinReducer(Editor* editor, JSGraph* jsgraph, Flags flags, 38 CompilationDependencies* dependencies); 39 ~JSBuiltinReducer() final {} 40 41 Reduction Reduce(Node* node) final; 42 43 private: 44 Reduction ReduceArrayPop(Node* node); 45 Reduction ReduceArrayPush(Node* node); 46 Reduction ReduceDateGetTime(Node* node); 47 Reduction ReduceFunctionHasInstance(Node* node); 48 Reduction ReduceGlobalIsFinite(Node* node); 49 Reduction ReduceGlobalIsNaN(Node* node); 50 Reduction ReduceMathAbs(Node* node); 51 Reduction ReduceMathAcos(Node* node); 52 Reduction ReduceMathAcosh(Node* node); 53 Reduction ReduceMathAsin(Node* node); 54 Reduction ReduceMathAsinh(Node* node); 55 Reduction ReduceMathAtan(Node* node); 56 Reduction ReduceMathAtanh(Node* node); 57 Reduction ReduceMathAtan2(Node* node); 58 Reduction ReduceMathCbrt(Node* node); 59 Reduction ReduceMathCeil(Node* node); 60 Reduction ReduceMathClz32(Node* node); 61 Reduction ReduceMathCos(Node* node); 62 Reduction ReduceMathCosh(Node* node); 63 Reduction ReduceMathExp(Node* node); 64 Reduction ReduceMathExpm1(Node* node); 65 Reduction ReduceMathFloor(Node* node); 66 Reduction ReduceMathFround(Node* node); 67 Reduction ReduceMathImul(Node* node); 68 Reduction ReduceMathLog(Node* node); 69 Reduction ReduceMathLog1p(Node* node); 70 Reduction ReduceMathLog10(Node* node); 71 Reduction ReduceMathLog2(Node* node); 72 Reduction ReduceMathMax(Node* node); 73 Reduction ReduceMathMin(Node* node); 74 Reduction ReduceMathPow(Node* node); 75 Reduction ReduceMathRound(Node* node); 76 Reduction ReduceMathSign(Node* node); 77 Reduction ReduceMathSin(Node* node); 78 Reduction ReduceMathSinh(Node* node); 79 Reduction ReduceMathSqrt(Node* node); 80 Reduction ReduceMathTan(Node* node); 81 Reduction ReduceMathTanh(Node* node); 82 Reduction ReduceMathTrunc(Node* node); 83 Reduction ReduceNumberIsFinite(Node* node); 84 Reduction ReduceNumberIsInteger(Node* node); 85 Reduction ReduceNumberIsNaN(Node* node); 86 Reduction ReduceNumberIsSafeInteger(Node* node); 87 Reduction ReduceNumberParseInt(Node* node); 88 Reduction ReduceStringCharAt(Node* node); 89 Reduction ReduceStringCharCodeAt(Node* node); 90 Reduction ReduceStringFromCharCode(Node* node); 91 Reduction ReduceStringIteratorNext(Node* node); 92 Reduction ReduceArrayBufferViewAccessor(Node* node, 93 InstanceType instance_type, 94 FieldAccess const& access); 95 96 Node* ToNumber(Node* value); 97 Node* ToUint32(Node* value); 98 99 Flags flags() const { return flags_; } 100 Graph* graph() const; 101 Factory* factory() const; 102 JSGraph* jsgraph() const { return jsgraph_; } 103 Isolate* isolate() const; 104 CommonOperatorBuilder* common() const; 105 SimplifiedOperatorBuilder* simplified() const; 106 JSOperatorBuilder* javascript() const; 107 CompilationDependencies* dependencies() const { return dependencies_; } 108 109 CompilationDependencies* const dependencies_; 110 Flags const flags_; 111 JSGraph* const jsgraph_; 112 TypeCache const& type_cache_; 113}; 114 115DEFINE_OPERATORS_FOR_FLAGS(JSBuiltinReducer::Flags) 116 117} // namespace compiler 118} // namespace internal 119} // namespace v8 120 121#endif // V8_COMPILER_JS_BUILTIN_REDUCER_H_ 122