From a09ae07f3d1d8fc70c2f52a284ed5cce9632c917 Mon Sep 17 00:00:00 2001 From: danno Date: Thu, 2 Jul 2015 02:04:31 -0700 Subject: [PATCH] [turbofan] Inline %_FixedArrayGet intrinsic. Review URL: https://codereview.chromium.org/1223583003 Cr-Commit-Position: refs/heads/master@{#29438} --- src/compiler/js-intrinsic-lowering.cc | 26 ++++++++++++++++++++++++++ src/compiler/js-intrinsic-lowering.h | 3 +++ 2 files changed, 29 insertions(+) diff --git a/src/compiler/js-intrinsic-lowering.cc b/src/compiler/js-intrinsic-lowering.cc index 0155255..8f04fc1 100644 --- a/src/compiler/js-intrinsic-lowering.cc +++ b/src/compiler/js-intrinsic-lowering.cc @@ -86,6 +86,8 @@ Reduction JSIntrinsicLowering::Reduce(Node* node) { return ReduceValueOf(node); case Runtime::kInlineIsMinusZero: return ReduceIsMinusZero(node); + case Runtime::kInlineFixedArrayGet: + return ReduceFixedArrayGet(node); case Runtime::kInlineFixedArraySet: return ReduceFixedArraySet(node); case Runtime::kInlineGetTypeFeedbackVector: @@ -447,6 +449,17 @@ Reduction JSIntrinsicLowering::ReduceIsMinusZero(Node* node) { } +Reduction JSIntrinsicLowering::ReduceFixedArrayGet(Node* node) { + Node* base = node->InputAt(0); + Node* index = node->InputAt(1); + Node* effect = NodeProperties::GetEffectInput(node); + Node* control = NodeProperties::GetControlInput(node); + return Change( + node, simplified()->LoadElement(AccessBuilder::ForFixedArrayElement()), + base, index, effect, control); +} + + Reduction JSIntrinsicLowering::ReduceFixedArraySet(Node* node) { Node* base = node->InputAt(0); Node* index = node->InputAt(1); @@ -553,6 +566,19 @@ Reduction JSIntrinsicLowering::Change(Node* node, const Operator* op, Node* a, } +Reduction JSIntrinsicLowering::Change(Node* node, const Operator* op, Node* a, + Node* b, Node* c, Node* d) { + node->set_op(op); + node->ReplaceInput(0, a); + node->ReplaceInput(1, b); + node->ReplaceInput(2, c); + node->ReplaceInput(3, d); + node->TrimInputCount(4); + RelaxControls(node); + return Changed(node); +} + + Reduction JSIntrinsicLowering::ChangeToUndefined(Node* node, Node* effect) { ReplaceWithValue(node, jsgraph()->UndefinedConstant(), effect); return Changed(node); diff --git a/src/compiler/js-intrinsic-lowering.h b/src/compiler/js-intrinsic-lowering.h index 61cf9c4..816defb 100644 --- a/src/compiler/js-intrinsic-lowering.h +++ b/src/compiler/js-intrinsic-lowering.h @@ -53,6 +53,7 @@ class JSIntrinsicLowering final : public AdvancedReducer { Reduction ReduceStringGetLength(Node* node); Reduction ReduceUnLikely(Node* node, BranchHint hint); Reduction ReduceValueOf(Node* node); + Reduction ReduceFixedArrayGet(Node* node); Reduction ReduceFixedArraySet(Node* node); Reduction ReduceGetTypeFeedbackVector(Node* node); Reduction ReduceGetCallerJSFunction(Node* node); @@ -62,6 +63,8 @@ class JSIntrinsicLowering final : public AdvancedReducer { 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); Graph* graph() const; -- 2.7.4