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
This commit is contained in:
parent
e4ddf3ca48
commit
026c5507bd
@ -1579,6 +1579,9 @@ class HForceRepresentation V8_FINAL : public HTemplateInstruction<1> {
|
|||||||
|
|
||||||
DECLARE_CONCRETE_INSTRUCTION(ForceRepresentation)
|
DECLARE_CONCRETE_INSTRUCTION(ForceRepresentation)
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual int RedefinedOperandIndex() { return 0; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
HForceRepresentation(HValue* value, Representation required_representation) {
|
HForceRepresentation(HValue* value, Representation required_representation) {
|
||||||
SetOperandAt(0, value);
|
SetOperandAt(0, value);
|
||||||
|
@ -2100,10 +2100,10 @@ void HGraphBuilder::BuildFillElementsWithHole(HValue* elements,
|
|||||||
static const int kLoopUnfoldLimit = 4;
|
static const int kLoopUnfoldLimit = 4;
|
||||||
bool unfold_loop = false;
|
bool unfold_loop = false;
|
||||||
int initial_capacity = JSArray::kPreallocatedArrayElements;
|
int initial_capacity = JSArray::kPreallocatedArrayElements;
|
||||||
if (from->IsConstant() && to->IsConstant() &&
|
if (from->ActualValue()->IsConstant() && to->ActualValue()->IsConstant() &&
|
||||||
initial_capacity <= kLoopUnfoldLimit) {
|
initial_capacity <= kLoopUnfoldLimit) {
|
||||||
HConstant* constant_from = HConstant::cast(from);
|
HConstant* constant_from = HConstant::cast(from->ActualValue());
|
||||||
HConstant* constant_to = HConstant::cast(to);
|
HConstant* constant_to = HConstant::cast(to->ActualValue());
|
||||||
|
|
||||||
if (constant_from->HasInteger32Value() &&
|
if (constant_from->HasInteger32Value() &&
|
||||||
constant_from->Integer32Value() == 0 &&
|
constant_from->Integer32Value() == 0 &&
|
||||||
|
Loading…
Reference in New Issue
Block a user