diff options
Diffstat (limited to 'deps/v8/src/compiler/js-call-reducer.h')
-rw-r--r-- | deps/v8/src/compiler/js-call-reducer.h | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/deps/v8/src/compiler/js-call-reducer.h b/deps/v8/src/compiler/js-call-reducer.h new file mode 100644 index 0000000000..9ffae152ac --- /dev/null +++ b/deps/v8/src/compiler/js-call-reducer.h @@ -0,0 +1,67 @@ +// Copyright 2015 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8_COMPILER_JS_CALL_REDUCER_H_ +#define V8_COMPILER_JS_CALL_REDUCER_H_ + +#include "src/base/flags.h" +#include "src/compiler/graph-reducer.h" + +namespace v8 { +namespace internal { +namespace compiler { + +// Forward declarations. +class CommonOperatorBuilder; +class JSGraph; +class JSOperatorBuilder; + + +// Performs strength reduction on {JSCallConstruct} and {JSCallFunction} nodes, +// which might allow inlining or other optimizations to be performed afterwards. +class JSCallReducer final : public Reducer { + public: + // Flags that control the mode of operation. + enum Flag { + kNoFlags = 0u, + kDeoptimizationEnabled = 1u << 0, + }; + typedef base::Flags<Flag> Flags; + + JSCallReducer(JSGraph* jsgraph, Flags flags, + MaybeHandle<Context> native_context) + : jsgraph_(jsgraph), flags_(flags), native_context_(native_context) {} + + Reduction Reduce(Node* node) final; + + private: + Reduction ReduceArrayConstructor(Node* node); + Reduction ReduceNumberConstructor(Node* node); + Reduction ReduceFunctionPrototypeApply(Node* node); + Reduction ReduceFunctionPrototypeCall(Node* node); + Reduction ReduceJSCallConstruct(Node* node); + Reduction ReduceJSCallFunction(Node* node); + + MaybeHandle<Context> GetNativeContext(Node* node); + + Graph* graph() const; + Flags flags() const { return flags_; } + JSGraph* jsgraph() const { return jsgraph_; } + Isolate* isolate() const; + MaybeHandle<Context> native_context() const { return native_context_; } + CommonOperatorBuilder* common() const; + JSOperatorBuilder* javascript() const; + + JSGraph* const jsgraph_; + Flags const flags_; + MaybeHandle<Context> const native_context_; +}; + +DEFINE_OPERATORS_FOR_FLAGS(JSCallReducer::Flags) + +} // namespace compiler +} // namespace internal +} // namespace v8 + +#endif // V8_COMPILER_JS_CALL_REDUCER_H_ |