From 026c5507bd59c463bc82b94713dd5ed163bb7f1c Mon Sep 17 00:00:00 2001 From: "mvstanton@chromium.org" Date: Wed, 13 Nov 2013 17:03:11 +0000 Subject: [PATCH] Make HForceRepresentation an idef. An optimization in the array constructor wasn't firing because the code would check for constant values, failing to find them through intervening HForceRepresentation instructions. Repaired this site. A follow-on CL will provide a better way of making decisions based on constant HValues. R=verwaest@chromium.org Review URL: https://codereview.chromium.org/59623009 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@17708 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/hydrogen-instructions.h | 3 +++ src/hydrogen.cc | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h index dd7781bca0..9bd0b90b4c 100644 --- a/src/hydrogen-instructions.h +++ b/src/hydrogen-instructions.h @@ -1579,6 +1579,9 @@ class HForceRepresentation V8_FINAL : public HTemplateInstruction<1> { DECLARE_CONCRETE_INSTRUCTION(ForceRepresentation) + protected: + virtual int RedefinedOperandIndex() { return 0; } + private: HForceRepresentation(HValue* value, Representation required_representation) { SetOperandAt(0, value); diff --git a/src/hydrogen.cc b/src/hydrogen.cc index 7c42a3bcd6..33586f347e 100644 --- a/src/hydrogen.cc +++ b/src/hydrogen.cc @@ -2100,10 +2100,10 @@ void HGraphBuilder::BuildFillElementsWithHole(HValue* elements, static const int kLoopUnfoldLimit = 4; bool unfold_loop = false; int initial_capacity = JSArray::kPreallocatedArrayElements; - if (from->IsConstant() && to->IsConstant() && + if (from->ActualValue()->IsConstant() && to->ActualValue()->IsConstant() && initial_capacity <= kLoopUnfoldLimit) { - HConstant* constant_from = HConstant::cast(from); - HConstant* constant_to = HConstant::cast(to); + HConstant* constant_from = HConstant::cast(from->ActualValue()); + HConstant* constant_to = HConstant::cast(to->ActualValue()); if (constant_from->HasInteger32Value() && constant_from->Integer32Value() == 0 &&