Upgrade V8 to version 4.9.385.28
https://chromium.googlesource.com/v8/v8/+/4.9.385.28
FPIIM-449
Change-Id: I4b2e74289d4bf3667f2f3dc8aa2e541f63e26eb4
diff --git a/src/compiler/js-intrinsic-lowering.h b/src/compiler/js-intrinsic-lowering.h
new file mode 100644
index 0000000..1977a58
--- /dev/null
+++ b/src/compiler/js-intrinsic-lowering.h
@@ -0,0 +1,103 @@
+// 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_INTRINSIC_LOWERING_H_
+#define V8_COMPILER_JS_INTRINSIC_LOWERING_H_
+
+#include "src/compiler/common-operator.h"
+#include "src/compiler/graph-reducer.h"
+
+namespace v8 {
+namespace internal {
+
+// Forward declarations.
+class Callable;
+class TypeCache;
+
+
+namespace compiler {
+
+// Forward declarations.
+class CommonOperatorBuilder;
+class JSOperatorBuilder;
+class JSGraph;
+class MachineOperatorBuilder;
+class SimplifiedOperatorBuilder;
+
+
+// Lowers certain JS-level runtime calls.
+class JSIntrinsicLowering final : public AdvancedReducer {
+ public:
+ enum DeoptimizationMode { kDeoptimizationEnabled, kDeoptimizationDisabled };
+
+ JSIntrinsicLowering(Editor* editor, JSGraph* jsgraph,
+ DeoptimizationMode mode);
+ ~JSIntrinsicLowering() final {}
+
+ Reduction Reduce(Node* node) final;
+
+ private:
+ Reduction ReduceConstructDouble(Node* node);
+ Reduction ReduceCreateIterResultObject(Node* node);
+ Reduction ReduceDeoptimizeNow(Node* node);
+ Reduction ReduceDoubleHi(Node* node);
+ Reduction ReduceDoubleLo(Node* node);
+ Reduction ReduceIncrementStatsCounter(Node* node);
+ Reduction ReduceIsMinusZero(Node* node);
+ Reduction ReduceIsInstanceType(Node* node, InstanceType instance_type);
+ Reduction ReduceIsFunction(Node* node);
+ Reduction ReduceIsJSReceiver(Node* node);
+ Reduction ReduceIsSmi(Node* node);
+ Reduction ReduceJSValueGetValue(Node* node);
+ Reduction ReduceMathClz32(Node* node);
+ Reduction ReduceMathFloor(Node* node);
+ Reduction ReduceMathSqrt(Node* node);
+ Reduction ReduceValueOf(Node* node);
+ Reduction ReduceFixedArrayGet(Node* node);
+ Reduction ReduceFixedArraySet(Node* node);
+ Reduction ReduceRegExpConstructResult(Node* node);
+ Reduction ReduceRegExpExec(Node* node);
+ Reduction ReduceRegExpFlags(Node* node);
+ Reduction ReduceRegExpSource(Node* node);
+ Reduction ReduceSubString(Node* node);
+ Reduction ReduceToInteger(Node* node);
+ Reduction ReduceToLength(Node* node);
+ Reduction ReduceToName(Node* node);
+ Reduction ReduceToNumber(Node* node);
+ Reduction ReduceToObject(Node* node);
+ Reduction ReduceToPrimitive(Node* node);
+ Reduction ReduceToString(Node* node);
+ Reduction ReduceCall(Node* node);
+ Reduction ReduceTailCall(Node* node);
+ Reduction ReduceGetSuperConstructor(Node* node);
+
+ Reduction Change(Node* node, const Operator* op);
+ Reduction Change(Node* node, const Operator* op, Node* a, Node* b);
+ Reduction Change(Node* node, const Operator* op, Node* a, Node* b, Node* c);
+ Reduction Change(Node* node, const Operator* op, Node* a, Node* b, Node* c,
+ Node* d);
+ Reduction ChangeToUndefined(Node* node, Node* effect = nullptr);
+ Reduction Change(Node* node, Callable const& callable,
+ int stack_parameter_count);
+
+ Graph* graph() const;
+ JSGraph* jsgraph() const { return jsgraph_; }
+ Isolate* isolate() const;
+ CommonOperatorBuilder* common() const;
+ JSOperatorBuilder* javascript() const;
+ MachineOperatorBuilder* machine() const;
+ SimplifiedOperatorBuilder* simplified() const;
+ DeoptimizationMode mode() const { return mode_; }
+ TypeCache const& type_cache() const { return type_cache_; }
+
+ JSGraph* const jsgraph_;
+ DeoptimizationMode const mode_;
+ TypeCache const& type_cache_;
+};
+
+} // namespace compiler
+} // namespace internal
+} // namespace v8
+
+#endif // V8_COMPILER_JS_INTRINSIC_LOWERING_H_