5 #ifndef V8_COMPILER_JS_CALL_REDUCER_H_ 6 #define V8_COMPILER_JS_CALL_REDUCER_H_ 8 #include "src/base/flags.h" 9 #include "src/compiler/frame-states.h" 10 #include "src/compiler/graph-reducer.h" 11 #include "src/deoptimize-reason.h" 25 class CommonOperatorBuilder;
26 class CompilationDependencies;
30 class JSOperatorBuilder;
31 class SimplifiedOperatorBuilder;
38 enum Flag { kNoFlags = 0u, kBailoutOnUninitialized = 1u << 0 };
47 dependencies_(dependencies) {}
49 const char* reducer_name()
const override {
return "JSCallReducer"; }
55 void Finalize()
final;
80 enum class ArrayReduceDirection { kLeft, kRight };
81 Reduction ReduceArrayReduce(
Node* node, ArrayReduceDirection direction,
85 enum class ArrayFindVariant { kFind, kFindIndex };
86 Reduction ReduceArrayFind(
Node* node, ArrayFindVariant variant,
89 enum class SearchVariant { kIncludes, kIndexOf };
90 Reduction ReduceArrayIndexOfIncludes(SearchVariant search_variant,
98 enum class ArrayIteratorKind { kArray, kTypedArray };
99 Reduction ReduceArrayIterator(
Node* node, IterationKind kind);
104 Reduction ReduceCallOrConstructWithArrayLikeOrSpread(
124 #ifdef V8_INTL_SUPPORT 127 #endif // V8_INTL_SUPPORT 148 Reduction ReduceSoftDeoptimize(
Node* node, DeoptimizeReason reason);
167 CollectionKind collection_kind,
168 IterationKind iteration_kind);
170 CollectionKind collection_kind);
171 Reduction ReduceCollectionIteratorPrototypeNext(
173 InstanceType collection_iterator_instance_type_first,
174 InstanceType collection_iterator_instance_type_last);
178 InstanceType instance_type,
181 enum class DataViewAccess { kGet, kSet };
182 Reduction ReduceDataViewAccess(
Node* node, DataViewAccess access,
183 ExternalArrayType element_type);
193 Node* DoFilterPostCallbackWork(ElementsKind kind,
Node** control,
195 Node* element,
Node* callback_value);
202 void WireInCallbackIsCallableCheck(
Node* fncallback,
Node* context,
203 Node* check_frame_state,
Node* effect,
206 void RewirePostCallbackExceptionEdges(
Node* check_throw,
Node* on_exception,
221 Node* SafeLoadElement(ElementsKind kind,
Node* receiver,
Node* control,
225 Node* CreateArtificialFrameState(
Node* node,
Node* outer_frame_state,
226 int parameter_count,
BailoutId bailout_id,
227 FrameStateType frame_state_type,
229 Node* context =
nullptr);
231 Graph* graph()
const;
232 JSGraph* jsgraph()
const {
return jsgraph_; }
236 NativeContextRef native_context()
const {
return broker()->native_context(); }
240 Flags flags()
const {
return flags_; }
247 std::set<Node*> waitlist_;
254 #endif // V8_COMPILER_JS_CALL_REDUCER_H_