Index: src/hydrogen-instructions.cc |
diff --git a/src/hydrogen-instructions.cc b/src/hydrogen-instructions.cc |
index d3eda765a70035d375d27ff6f717ed6296695a9d..76d6614d418569fdb84b3fda0c4de43a6f6a3b0b 100644 |
--- a/src/hydrogen-instructions.cc |
+++ b/src/hydrogen-instructions.cc |
@@ -1091,12 +1091,13 @@ void HBoundsCheck::ApplyIndexChange() { |
int actual_offset = decomposition.offset() + offset(); |
int actual_scale = decomposition.scale() + scale(); |
+ Zone* zone = block()->graph()->zone(); |
+ HValue* context = block()->graph()->GetInvalidContext(); |
if (actual_offset != 0) { |
- HConstant* add_offset = new(block()->graph()->zone()) HConstant( |
- actual_offset, index()->representation()); |
+ HConstant* add_offset = HConstant::New(zone, context, actual_offset); |
add_offset->InsertBefore(this); |
- HInstruction* add = HAdd::New(block()->graph()->zone(), |
- block()->graph()->GetInvalidContext(), current_index, add_offset); |
+ HInstruction* add = HAdd::New(zone, context, |
+ current_index, add_offset); |
add->InsertBefore(this); |
add->AssumeRepresentation(index()->representation()); |
add->ClearFlag(kCanOverflow); |
@@ -1104,11 +1105,10 @@ void HBoundsCheck::ApplyIndexChange() { |
} |
if (actual_scale != 0) { |
- HConstant* sar_scale = new(block()->graph()->zone()) HConstant( |
- actual_scale, index()->representation()); |
+ HConstant* sar_scale = HConstant::New(zone, context, actual_scale); |
sar_scale->InsertBefore(this); |
- HInstruction* sar = HSar::New(block()->graph()->zone(), |
- block()->graph()->GetInvalidContext(), current_index, sar_scale); |
+ HInstruction* sar = HSar::New(zone, context, |
+ current_index, sar_scale); |
sar->InsertBefore(this); |
sar->AssumeRepresentation(index()->representation()); |
current_index = sar; |
@@ -1612,8 +1612,8 @@ HValue* HUnaryMathOperation::Canonicalize() { |
!HInstruction::cast(new_right)->IsLinked()) { |
HInstruction::cast(new_right)->InsertBefore(this); |
} |
- HMathFloorOfDiv* instr = new(block()->zone()) |
- HMathFloorOfDiv(context(), new_left, new_right); |
+ HMathFloorOfDiv* instr = |
+ HMathFloorOfDiv::New(block()->zone(), context(), new_left, new_right); |
// Replace this HMathFloor instruction by the new HMathFloorOfDiv. |
instr->InsertBefore(this); |
ReplaceAllUsesWith(instr); |
@@ -2129,8 +2129,8 @@ void InductionVariableData::ChecksRelatedToLength::UseNewIndexInCurrentBlock( |
HValue* previous_index = first_check_in_block()->index(); |
ASSERT(context != NULL); |
- set_added_constant(new(index_base->block()->graph()->zone()) HConstant( |
- mask, index_base->representation())); |
+ Zone* zone = index_base->block()->graph()->zone(); |
+ set_added_constant(HConstant::New(zone, context, mask)); |
if (added_index() != NULL) { |
added_constant()->InsertBefore(added_index()); |
} else { |
@@ -2139,9 +2139,8 @@ void InductionVariableData::ChecksRelatedToLength::UseNewIndexInCurrentBlock( |
if (added_index() == NULL) { |
first_check_in_block()->ReplaceAllUsesWith(first_check_in_block()->index()); |
- HInstruction* new_index = HBitwise::New( |
- index_base->block()->graph()->zone(), |
- token, context, index_base, added_constant()); |
+ HInstruction* new_index = HBitwise::New(zone, context, token, index_base, |
+ added_constant()); |
ASSERT(new_index->IsBitwise()); |
new_index->ClearAllSideEffects(); |
new_index->AssumeRepresentation(Representation::Integer32()); |
@@ -3281,9 +3280,10 @@ HLoadNamedFieldPolymorphic::HLoadNamedFieldPolymorphic(HValue* context, |
} |
-HCheckMaps* HCheckMaps::New(HValue* value, |
+HCheckMaps* HCheckMaps::New(Zone* zone, |
+ HValue* context, |
+ HValue* value, |
Handle<Map> map, |
- Zone* zone, |
CompilationInfo* info, |
HValue* typecheck) { |
HCheckMaps* check_map = new(zone) HCheckMaps(value, zone, typecheck); |
@@ -3469,8 +3469,13 @@ HValue* HLoadKeyedGeneric::Canonicalize() { |
HForInCacheArray* index_cache = |
names_cache->index_cache(); |
HCheckMapValue* map_check = |
- new(block()->zone()) HCheckMapValue(object(), names_cache->map()); |
- HInstruction* index = new(block()->zone()) HLoadKeyed( |
+ HCheckMapValue::New(block()->graph()->zone(), |
+ block()->graph()->GetInvalidContext(), |
+ object(), |
+ names_cache->map()); |
+ HInstruction* index = HLoadKeyed::New( |
+ block()->graph()->zone(), |
+ block()->graph()->GetInvalidContext(), |
index_cache, |
key_load->key(), |
key_load->key(), |
@@ -3703,8 +3708,8 @@ void HAllocate::HandleSideEffectDominator(GVNFlag side_effect, |
} |
HBasicBlock* block = dominator->block(); |
Zone* zone = block->zone(); |
- HInstruction* new_dominator_size_constant = new(zone) HConstant( |
- new_dominator_size); |
+ HInstruction* new_dominator_size_constant = |
+ HConstant::New(zone, context(), new_dominator_size); |
new_dominator_size_constant->InsertBefore(dominator_allocate_instr); |
dominator_allocate_instr->UpdateSize(new_dominator_size_constant); |
@@ -3716,9 +3721,11 @@ void HAllocate::HandleSideEffectDominator(GVNFlag side_effect, |
// After that replace the dominated allocate instruction. |
HInstruction* dominated_allocate_instr = |
- new(zone) HInnerAllocatedObject(dominator_allocate_instr, |
- dominator_size_constant, |
- type()); |
+ HInnerAllocatedObject::New(zone, |
+ context(), |
+ dominator_allocate_instr, |
+ dominator_size_constant, |
+ type()); |
dominated_allocate_instr->InsertBefore(this); |
DeleteAndReplaceWith(dominated_allocate_instr); |
if (FLAG_trace_allocation_folding) { |
@@ -3856,10 +3863,10 @@ bool HStoreKeyed::NeedsCanonicalization() { |
} |
-#define H_CONSTANT_INT(val) \ |
-new(zone) HConstant(static_cast<int32_t>(val)) |
+#define H_CONSTANT_INT(val) \ |
+HConstant::New(zone, context, static_cast<int32_t>(val)) |
#define H_CONSTANT_DOUBLE(val) \ |
-new(zone) HConstant(static_cast<double>(val), Representation::Double()) |
+HConstant::New(zone, context, static_cast<double>(val)) |
#define DEFINE_NEW_H_SIMPLE_ARITHMETIC_INSTR(HInstr, op) \ |
HInstruction* HInstr::New( \ |
@@ -3870,7 +3877,7 @@ HInstruction* HInstr::New( \ |
if ((c_left->HasNumberValue() && c_right->HasNumberValue())) { \ |
double double_res = c_left->DoubleValue() op c_right->DoubleValue(); \ |
if (TypeInfo::IsInt32Double(double_res)) { \ |
- return H_CONSTANT_INT(double_res); \ |
+ return H_CONSTANT_INT(double_res); \ |
} \ |
return H_CONSTANT_DOUBLE(double_res); \ |
} \ |
@@ -3897,7 +3904,7 @@ HInstruction* HStringAdd::New(Zone* zone, |
if (c_left->HasStringValue() && c_right->HasStringValue()) { |
Handle<String> concat = zone->isolate()->factory()->NewFlatConcatString( |
c_left->StringValue(), c_right->StringValue()); |
- return new(zone) HConstant(concat, Representation::Tagged()); |
+ return HConstant::New(zone, context, concat); |
} |
} |
return new(zone) HStringAdd(context, left, right, flags); |
@@ -3912,23 +3919,21 @@ HInstruction* HStringCharFromCode::New( |
if (c_code->HasNumberValue()) { |
if (std::isfinite(c_code->DoubleValue())) { |
uint32_t code = c_code->NumberValueAsInteger32() & 0xffff; |
- return new(zone) HConstant(LookupSingleCharacterStringFromCode(isolate, |
- code), |
- Representation::Tagged()); |
+ return HConstant::New(zone, context, |
+ LookupSingleCharacterStringFromCode(isolate, code)); |
} |
- return new(zone) HConstant(isolate->factory()->empty_string(), |
- Representation::Tagged()); |
+ return HConstant::New(zone, context, isolate->factory()->empty_string()); |
} |
} |
return new(zone) HStringCharFromCode(context, char_code); |
} |
-HInstruction* HStringLength::New(Zone* zone, HValue* string) { |
+HInstruction* HStringLength::New(Zone* zone, HValue* context, HValue* string) { |
if (FLAG_fold_constants && string->IsConstant()) { |
HConstant* c_string = HConstant::cast(string); |
if (c_string->HasStringValue()) { |
- return new(zone) HConstant(c_string->StringValue()->length()); |
+ return HConstant::New(zone, context, c_string->StringValue()->length()); |
} |
} |
return new(zone) HStringLength(string); |
@@ -4003,7 +4008,10 @@ HInstruction* HUnaryMathOperation::New( |
} |
-HInstruction* HPower::New(Zone* zone, HValue* left, HValue* right) { |
+HInstruction* HPower::New(Zone* zone, |
+ HValue* context, |
+ HValue* left, |
+ HValue* right) { |
if (FLAG_fold_constants && left->IsConstant() && right->IsConstant()) { |
HConstant* c_left = HConstant::cast(left); |
HConstant* c_right = HConstant::cast(right); |
@@ -4102,7 +4110,7 @@ HInstruction* HDiv::New( |
HInstruction* HBitwise::New( |
- Zone* zone, Token::Value op, HValue* context, HValue* left, HValue* right) { |
+ Zone* zone, HValue* context, Token::Value op, HValue* left, HValue* right) { |
if (FLAG_fold_constants && left->IsConstant() && right->IsConstant()) { |
HConstant* c_left = HConstant::cast(left); |
HConstant* c_right = HConstant::cast(right); |
@@ -4127,7 +4135,7 @@ HInstruction* HBitwise::New( |
return H_CONSTANT_INT(result); |
} |
} |
- return new(zone) HBitwise(op, context, left, right); |
+ return new(zone) HBitwise(context, op, left, right); |
} |
@@ -4196,7 +4204,8 @@ void HPhi::SimplifyConstantInputs() { |
continue; |
} else if (operand->HasDoubleValue()) { |
HConstant* integer_input = |
- new(graph->zone()) HConstant(DoubleToInt32(operand->DoubleValue())); |
+ HConstant::New(graph->zone(), graph->GetInvalidContext(), |
+ DoubleToInt32(operand->DoubleValue())); |
integer_input->InsertAfter(operand); |
SetOperandAt(i, integer_input); |
} else if (operand == graph->GetConstantTrue()) { |