| Index: src/ia32/lithium-ia32.cc
|
| ===================================================================
|
| --- src/ia32/lithium-ia32.cc (revision 9846)
|
| +++ src/ia32/lithium-ia32.cc (working copy)
|
| @@ -459,7 +459,7 @@
|
|
|
|
|
| void LChunk::AddInstruction(LInstruction* instr, HBasicBlock* block) {
|
| - LInstructionGap* gap = new LInstructionGap(block);
|
| + LInstructionGap* gap = new(graph_->zone()) LInstructionGap(block);
|
| int index = -1;
|
| if (instr->IsControl()) {
|
| instructions_.Add(gap);
|
| @@ -534,7 +534,7 @@
|
|
|
| LChunk* LChunkBuilder::Build() {
|
| ASSERT(is_unused());
|
| - chunk_ = new LChunk(info(), graph());
|
| + chunk_ = new(zone()) LChunk(info(), graph());
|
| HPhase phase("Building chunk", chunk_);
|
| status_ = BUILDING;
|
| const ZoneList<HBasicBlock*>* blocks = graph()->blocks();
|
| @@ -570,14 +570,14 @@
|
|
|
|
|
| LUnallocated* LChunkBuilder::ToUnallocated(Register reg) {
|
| - return new LUnallocated(LUnallocated::FIXED_REGISTER,
|
| - Register::ToAllocationIndex(reg));
|
| + return new(zone()) LUnallocated(LUnallocated::FIXED_REGISTER,
|
| + Register::ToAllocationIndex(reg));
|
| }
|
|
|
|
|
| LUnallocated* LChunkBuilder::ToUnallocated(XMMRegister reg) {
|
| - return new LUnallocated(LUnallocated::FIXED_DOUBLE_REGISTER,
|
| - XMMRegister::ToAllocationIndex(reg));
|
| + return new(zone()) LUnallocated(LUnallocated::FIXED_DOUBLE_REGISTER,
|
| + XMMRegister::ToAllocationIndex(reg));
|
| }
|
|
|
|
|
| @@ -592,30 +592,30 @@
|
|
|
|
|
| LOperand* LChunkBuilder::UseRegister(HValue* value) {
|
| - return Use(value, new LUnallocated(LUnallocated::MUST_HAVE_REGISTER));
|
| + return Use(value, new(zone()) LUnallocated(LUnallocated::MUST_HAVE_REGISTER));
|
| }
|
|
|
|
|
| LOperand* LChunkBuilder::UseRegisterAtStart(HValue* value) {
|
| return Use(value,
|
| - new LUnallocated(LUnallocated::MUST_HAVE_REGISTER,
|
| - LUnallocated::USED_AT_START));
|
| + new(zone()) LUnallocated(LUnallocated::MUST_HAVE_REGISTER,
|
| + LUnallocated::USED_AT_START));
|
| }
|
|
|
|
|
| LOperand* LChunkBuilder::UseTempRegister(HValue* value) {
|
| - return Use(value, new LUnallocated(LUnallocated::WRITABLE_REGISTER));
|
| + return Use(value, new(zone()) LUnallocated(LUnallocated::WRITABLE_REGISTER));
|
| }
|
|
|
|
|
| LOperand* LChunkBuilder::Use(HValue* value) {
|
| - return Use(value, new LUnallocated(LUnallocated::NONE));
|
| + return Use(value, new(zone()) LUnallocated(LUnallocated::NONE));
|
| }
|
|
|
|
|
| LOperand* LChunkBuilder::UseAtStart(HValue* value) {
|
| - return Use(value, new LUnallocated(LUnallocated::NONE,
|
| - LUnallocated::USED_AT_START));
|
| + return Use(value, new(zone()) LUnallocated(LUnallocated::NONE,
|
| + LUnallocated::USED_AT_START));
|
| }
|
|
|
|
|
| @@ -650,7 +650,7 @@
|
| LOperand* LChunkBuilder::UseAny(HValue* value) {
|
| return value->IsConstant()
|
| ? chunk_->DefineConstantOperand(HConstant::cast(value))
|
| - : Use(value, new LUnallocated(LUnallocated::ANY));
|
| + : Use(value, new(zone()) LUnallocated(LUnallocated::ANY));
|
| }
|
|
|
|
|
| @@ -675,14 +675,15 @@
|
|
|
| template<int I, int T>
|
| LInstruction* LChunkBuilder::Define(LTemplateInstruction<1, I, T>* instr) {
|
| - return Define(instr, new LUnallocated(LUnallocated::NONE));
|
| + return Define(instr, new(zone()) LUnallocated(LUnallocated::NONE));
|
| }
|
|
|
|
|
| template<int I, int T>
|
| LInstruction* LChunkBuilder::DefineAsRegister(
|
| LTemplateInstruction<1, I, T>* instr) {
|
| - return Define(instr, new LUnallocated(LUnallocated::MUST_HAVE_REGISTER));
|
| + return Define(instr,
|
| + new(zone()) LUnallocated(LUnallocated::MUST_HAVE_REGISTER));
|
| }
|
|
|
|
|
| @@ -690,14 +691,16 @@
|
| LInstruction* LChunkBuilder::DefineAsSpilled(
|
| LTemplateInstruction<1, I, T>* instr,
|
| int index) {
|
| - return Define(instr, new LUnallocated(LUnallocated::FIXED_SLOT, index));
|
| + return Define(instr,
|
| + new(zone()) LUnallocated(LUnallocated::FIXED_SLOT, index));
|
| }
|
|
|
|
|
| template<int I, int T>
|
| LInstruction* LChunkBuilder::DefineSameAsFirst(
|
| LTemplateInstruction<1, I, T>* instr) {
|
| - return Define(instr, new LUnallocated(LUnallocated::SAME_AS_FIRST_INPUT));
|
| + return Define(instr,
|
| + new(zone()) LUnallocated(LUnallocated::SAME_AS_FIRST_INPUT));
|
| }
|
|
|
|
|
| @@ -779,13 +782,14 @@
|
|
|
| LInstruction* LChunkBuilder::AssignPointerMap(LInstruction* instr) {
|
| ASSERT(!instr->HasPointerMap());
|
| - instr->set_pointer_map(new LPointerMap(position_));
|
| + instr->set_pointer_map(new(zone()) LPointerMap(position_));
|
| return instr;
|
| }
|
|
|
|
|
| LUnallocated* LChunkBuilder::TempRegister() {
|
| - LUnallocated* operand = new LUnallocated(LUnallocated::MUST_HAVE_REGISTER);
|
| + LUnallocated* operand =
|
| + new(zone()) LUnallocated(LUnallocated::MUST_HAVE_REGISTER);
|
| allocator_->RecordTemporary(operand);
|
| return operand;
|
| }
|
| @@ -806,17 +810,17 @@
|
|
|
|
|
| LInstruction* LChunkBuilder::DoBlockEntry(HBlockEntry* instr) {
|
| - return new LLabel(instr->block());
|
| + return new(zone()) LLabel(instr->block());
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoSoftDeoptimize(HSoftDeoptimize* instr) {
|
| - return AssignEnvironment(new LDeoptimize);
|
| + return AssignEnvironment(new(zone()) LDeoptimize);
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoDeoptimize(HDeoptimize* instr) {
|
| - return AssignEnvironment(new LDeoptimize);
|
| + return AssignEnvironment(new(zone()) LDeoptimize);
|
| }
|
|
|
|
|
| @@ -829,7 +833,7 @@
|
| LOperand* context = UseFixed(instr->context(), esi);
|
| LOperand* left = UseFixed(instr->left(), edx);
|
| LOperand* right = UseFixed(instr->right(), eax);
|
| - LArithmeticT* result = new LArithmeticT(op, context, left, right);
|
| + LArithmeticT* result = new(zone()) LArithmeticT(op, context, left, right);
|
| return MarkAsCall(DefineFixed(result, eax), instr);
|
| }
|
|
|
| @@ -863,7 +867,7 @@
|
| }
|
|
|
| LInstruction* result =
|
| - DefineSameAsFirst(new LShiftI(op, left, right, does_deopt));
|
| + DefineSameAsFirst(new(zone()) LShiftI(op, left, right, does_deopt));
|
| return does_deopt ? AssignEnvironment(result) : result;
|
| }
|
|
|
| @@ -876,7 +880,7 @@
|
| ASSERT(op != Token::MOD);
|
| LOperand* left = UseRegisterAtStart(instr->left());
|
| LOperand* right = UseRegisterAtStart(instr->right());
|
| - LArithmeticD* result = new LArithmeticD(op, left, right);
|
| + LArithmeticD* result = new(zone()) LArithmeticD(op, left, right);
|
| return DefineSameAsFirst(result);
|
| }
|
|
|
| @@ -896,7 +900,7 @@
|
| LOperand* left_operand = UseFixed(left, edx);
|
| LOperand* right_operand = UseFixed(right, eax);
|
| LArithmeticT* result =
|
| - new LArithmeticT(op, context, left_operand, right_operand);
|
| + new(zone()) LArithmeticT(op, context, left_operand, right_operand);
|
| return MarkAsCall(DefineFixed(result, eax), instr);
|
| }
|
|
|
| @@ -994,12 +998,13 @@
|
| int ast_id = hydrogen_env->ast_id();
|
| ASSERT(ast_id != AstNode::kNoNumber);
|
| int value_count = hydrogen_env->length();
|
| - LEnvironment* result = new LEnvironment(hydrogen_env->closure(),
|
| - ast_id,
|
| - hydrogen_env->parameter_count(),
|
| - argument_count_,
|
| - value_count,
|
| - outer);
|
| + LEnvironment* result =
|
| + new(zone()) LEnvironment(hydrogen_env->closure(),
|
| + ast_id,
|
| + hydrogen_env->parameter_count(),
|
| + argument_count_,
|
| + value_count,
|
| + outer);
|
| for (int i = 0; i < value_count; ++i) {
|
| if (hydrogen_env->is_special_index(i)) continue;
|
|
|
| @@ -1008,7 +1013,7 @@
|
| if (value->IsArgumentsObject()) {
|
| op = NULL;
|
| } else if (value->IsPushArgument()) {
|
| - op = new LArgument((*argument_index_accumulator)++);
|
| + op = new(zone()) LArgument((*argument_index_accumulator)++);
|
| } else {
|
| op = UseAny(value);
|
| }
|
| @@ -1020,7 +1025,7 @@
|
|
|
|
|
| LInstruction* LChunkBuilder::DoGoto(HGoto* instr) {
|
| - return new LGoto(instr->FirstSuccessor()->block_id());
|
| + return new(zone()) LGoto(instr->FirstSuccessor()->block_id());
|
| }
|
|
|
|
|
| @@ -1032,7 +1037,7 @@
|
| HBasicBlock* successor = HConstant::cast(v)->ToBoolean()
|
| ? instr->FirstSuccessor()
|
| : instr->SecondSuccessor();
|
| - return new LGoto(successor->block_id());
|
| + return new(zone()) LGoto(successor->block_id());
|
| }
|
| ToBooleanStub::Types expected = instr->expected_input_types();
|
| // We need a temporary register when we have to access the map *or* we have
|
| @@ -1040,24 +1045,24 @@
|
| // involving maps).
|
| bool needs_temp = expected.NeedsMap() || expected.IsEmpty();
|
| LOperand* temp = needs_temp ? TempRegister() : NULL;
|
| - return AssignEnvironment(new LBranch(UseRegister(v), temp));
|
| + return AssignEnvironment(new(zone()) LBranch(UseRegister(v), temp));
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoCompareMap(HCompareMap* instr) {
|
| ASSERT(instr->value()->representation().IsTagged());
|
| LOperand* value = UseRegisterAtStart(instr->value());
|
| - return new LCmpMapAndBranch(value);
|
| + return new(zone()) LCmpMapAndBranch(value);
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoArgumentsLength(HArgumentsLength* length) {
|
| - return DefineAsRegister(new LArgumentsLength(Use(length->value())));
|
| + return DefineAsRegister(new(zone()) LArgumentsLength(Use(length->value())));
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoArgumentsElements(HArgumentsElements* elems) {
|
| - return DefineAsRegister(new LArgumentsElements);
|
| + return DefineAsRegister(new(zone()) LArgumentsElements);
|
| }
|
|
|
|
|
| @@ -1065,7 +1070,7 @@
|
| LOperand* left = UseFixed(instr->left(), InstanceofStub::left());
|
| LOperand* right = UseFixed(instr->right(), InstanceofStub::right());
|
| LOperand* context = UseFixed(instr->context(), esi);
|
| - LInstanceOf* result = new LInstanceOf(context, left, right);
|
| + LInstanceOf* result = new(zone()) LInstanceOf(context, left, right);
|
| return MarkAsCall(DefineFixed(result, eax), instr);
|
| }
|
|
|
| @@ -1073,7 +1078,7 @@
|
| LInstruction* LChunkBuilder::DoInstanceOfKnownGlobal(
|
| HInstanceOfKnownGlobal* instr) {
|
| LInstanceOfKnownGlobal* result =
|
| - new LInstanceOfKnownGlobal(
|
| + new(zone()) LInstanceOfKnownGlobal(
|
| UseFixed(instr->context(), esi),
|
| UseFixed(instr->left(), InstanceofStub::left()),
|
| FixedTemp(edi));
|
| @@ -1087,11 +1092,11 @@
|
| LOperand* length = UseFixed(instr->length(), ebx);
|
| LOperand* elements = UseFixed(instr->elements(), ecx);
|
| LOperand* temp = FixedTemp(edx);
|
| - LApplyArguments* result = new LApplyArguments(function,
|
| - receiver,
|
| - length,
|
| - elements,
|
| - temp);
|
| + LApplyArguments* result = new(zone()) LApplyArguments(function,
|
| + receiver,
|
| + length,
|
| + elements,
|
| + temp);
|
| return MarkAsCall(DefineFixed(result, eax), instr, CAN_DEOPTIMIZE_EAGERLY);
|
| }
|
|
|
| @@ -1099,42 +1104,44 @@
|
| LInstruction* LChunkBuilder::DoPushArgument(HPushArgument* instr) {
|
| ++argument_count_;
|
| LOperand* argument = UseAny(instr->argument());
|
| - return new LPushArgument(argument);
|
| + return new(zone()) LPushArgument(argument);
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoThisFunction(HThisFunction* instr) {
|
| - return instr->HasNoUses() ? NULL : DefineAsRegister(new LThisFunction);
|
| + return instr->HasNoUses()
|
| + ? NULL
|
| + : DefineAsRegister(new(zone()) LThisFunction);
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoContext(HContext* instr) {
|
| - return instr->HasNoUses() ? NULL : DefineAsRegister(new LContext);
|
| + return instr->HasNoUses() ? NULL : DefineAsRegister(new(zone()) LContext);
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoOuterContext(HOuterContext* instr) {
|
| LOperand* context = UseRegisterAtStart(instr->value());
|
| - return DefineAsRegister(new LOuterContext(context));
|
| + return DefineAsRegister(new(zone()) LOuterContext(context));
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoGlobalObject(HGlobalObject* instr) {
|
| LOperand* context = UseRegisterAtStart(instr->value());
|
| - return DefineAsRegister(new LGlobalObject(context));
|
| + return DefineAsRegister(new(zone()) LGlobalObject(context));
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoGlobalReceiver(HGlobalReceiver* instr) {
|
| LOperand* global_object = UseRegisterAtStart(instr->value());
|
| - return DefineAsRegister(new LGlobalReceiver(global_object));
|
| + return DefineAsRegister(new(zone()) LGlobalReceiver(global_object));
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoCallConstantFunction(
|
| HCallConstantFunction* instr) {
|
| argument_count_ -= instr->argument_count();
|
| - return MarkAsCall(DefineFixed(new LCallConstantFunction, eax), instr);
|
| + return MarkAsCall(DefineFixed(new(zone()) LCallConstantFunction, eax), instr);
|
| }
|
|
|
|
|
| @@ -1142,7 +1149,7 @@
|
| LOperand* context = UseFixed(instr->context(), esi);
|
| LOperand* function = UseFixed(instr->function(), edi);
|
| argument_count_ -= instr->argument_count();
|
| - LInvokeFunction* result = new LInvokeFunction(context, function);
|
| + LInvokeFunction* result = new(zone()) LInvokeFunction(context, function);
|
| return MarkAsCall(DefineFixed(result, eax), instr, CANNOT_DEOPTIMIZE_EAGERLY);
|
| }
|
|
|
| @@ -1154,17 +1161,20 @@
|
| ASSERT(instr->value()->representation().IsDouble());
|
| LOperand* context = UseAny(instr->context()); // Not actually used.
|
| LOperand* input = UseRegisterAtStart(instr->value());
|
| - LUnaryMathOperation* result = new LUnaryMathOperation(context, input);
|
| + LUnaryMathOperation* result = new(zone()) LUnaryMathOperation(context,
|
| + input);
|
| return DefineSameAsFirst(result);
|
| } else if (op == kMathSin || op == kMathCos) {
|
| LOperand* context = UseFixed(instr->context(), esi);
|
| LOperand* input = UseFixedDouble(instr->value(), xmm1);
|
| - LUnaryMathOperation* result = new LUnaryMathOperation(context, input);
|
| + LUnaryMathOperation* result = new(zone()) LUnaryMathOperation(context,
|
| + input);
|
| return MarkAsCall(DefineFixedDouble(result, xmm1), instr);
|
| } else {
|
| LOperand* input = UseRegisterAtStart(instr->value());
|
| LOperand* context = UseAny(instr->context()); // Deferred use by MathAbs.
|
| - LUnaryMathOperation* result = new LUnaryMathOperation(context, input);
|
| + LUnaryMathOperation* result = new(zone()) LUnaryMathOperation(context,
|
| + input);
|
| switch (op) {
|
| case kMathAbs:
|
| return AssignEnvironment(AssignPointerMap(DefineSameAsFirst(result)));
|
| @@ -1189,7 +1199,7 @@
|
| LOperand* context = UseFixed(instr->context(), esi);
|
| LOperand* key = UseFixed(instr->key(), ecx);
|
| argument_count_ -= instr->argument_count();
|
| - LCallKeyed* result = new LCallKeyed(context, key);
|
| + LCallKeyed* result = new(zone()) LCallKeyed(context, key);
|
| return MarkAsCall(DefineFixed(result, eax), instr);
|
| }
|
|
|
| @@ -1197,7 +1207,7 @@
|
| LInstruction* LChunkBuilder::DoCallNamed(HCallNamed* instr) {
|
| LOperand* context = UseFixed(instr->context(), esi);
|
| argument_count_ -= instr->argument_count();
|
| - LCallNamed* result = new LCallNamed(context);
|
| + LCallNamed* result = new(zone()) LCallNamed(context);
|
| return MarkAsCall(DefineFixed(result, eax), instr);
|
| }
|
|
|
| @@ -1205,14 +1215,14 @@
|
| LInstruction* LChunkBuilder::DoCallGlobal(HCallGlobal* instr) {
|
| LOperand* context = UseFixed(instr->context(), esi);
|
| argument_count_ -= instr->argument_count();
|
| - LCallGlobal* result = new LCallGlobal(context);
|
| + LCallGlobal* result = new(zone()) LCallGlobal(context);
|
| return MarkAsCall(DefineFixed(result, eax), instr);
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoCallKnownGlobal(HCallKnownGlobal* instr) {
|
| argument_count_ -= instr->argument_count();
|
| - return MarkAsCall(DefineFixed(new LCallKnownGlobal, eax), instr);
|
| + return MarkAsCall(DefineFixed(new(zone()) LCallKnownGlobal, eax), instr);
|
| }
|
|
|
|
|
| @@ -1220,7 +1230,7 @@
|
| LOperand* context = UseFixed(instr->context(), esi);
|
| LOperand* constructor = UseFixed(instr->constructor(), edi);
|
| argument_count_ -= instr->argument_count();
|
| - LCallNew* result = new LCallNew(context, constructor);
|
| + LCallNew* result = new(zone()) LCallNew(context, constructor);
|
| return MarkAsCall(DefineFixed(result, eax), instr);
|
| }
|
|
|
| @@ -1228,7 +1238,7 @@
|
| LInstruction* LChunkBuilder::DoCallFunction(HCallFunction* instr) {
|
| LOperand* context = UseFixed(instr->context(), esi);
|
| argument_count_ -= instr->argument_count();
|
| - LCallFunction* result = new LCallFunction(context);
|
| + LCallFunction* result = new(zone()) LCallFunction(context);
|
| return MarkAsCall(DefineFixed(result, eax), instr);
|
| }
|
|
|
| @@ -1236,7 +1246,7 @@
|
| LInstruction* LChunkBuilder::DoCallRuntime(HCallRuntime* instr) {
|
| argument_count_ -= instr->argument_count();
|
| LOperand* context = UseFixed(instr->context(), esi);
|
| - return MarkAsCall(DefineFixed(new LCallRuntime(context), eax), instr);
|
| + return MarkAsCall(DefineFixed(new(zone()) LCallRuntime(context), eax), instr);
|
| }
|
|
|
|
|
| @@ -1262,7 +1272,7 @@
|
|
|
| LOperand* left = UseRegisterAtStart(instr->LeastConstantOperand());
|
| LOperand* right = UseOrConstantAtStart(instr->MostConstantOperand());
|
| - return DefineSameAsFirst(new LBitI(left, right));
|
| + return DefineSameAsFirst(new(zone()) LBitI(left, right));
|
| } else {
|
| ASSERT(instr->representation().IsTagged());
|
| ASSERT(instr->left()->representation().IsTagged());
|
| @@ -1271,7 +1281,8 @@
|
| LOperand* context = UseFixed(instr->context(), esi);
|
| LOperand* left = UseFixed(instr->left(), edx);
|
| LOperand* right = UseFixed(instr->right(), eax);
|
| - LArithmeticT* result = new LArithmeticT(instr->op(), context, left, right);
|
| + LArithmeticT* result =
|
| + new(zone()) LArithmeticT(instr->op(), context, left, right);
|
| return MarkAsCall(DefineFixed(result, eax), instr);
|
| }
|
| }
|
| @@ -1281,7 +1292,7 @@
|
| ASSERT(instr->value()->representation().IsInteger32());
|
| ASSERT(instr->representation().IsInteger32());
|
| LOperand* input = UseRegisterAtStart(instr->value());
|
| - LBitNotI* result = new LBitNotI(input);
|
| + LBitNotI* result = new(zone()) LBitNotI(input);
|
| return DefineSameAsFirst(result);
|
| }
|
|
|
| @@ -1295,7 +1306,7 @@
|
| LOperand* temp = FixedTemp(edx);
|
| LOperand* dividend = UseFixed(instr->left(), eax);
|
| LOperand* divisor = UseRegister(instr->right());
|
| - LDivI* result = new LDivI(dividend, divisor, temp);
|
| + LDivI* result = new(zone()) LDivI(dividend, divisor, temp);
|
| return AssignEnvironment(DefineFixed(result, eax));
|
| } else {
|
| ASSERT(instr->representation().IsTagged());
|
| @@ -1313,7 +1324,8 @@
|
| if (instr->HasPowerOf2Divisor()) {
|
| ASSERT(!instr->CheckFlag(HValue::kCanBeDivByZero));
|
| LOperand* value = UseRegisterAtStart(instr->left());
|
| - LModI* mod = new LModI(value, UseOrConstant(instr->right()), NULL);
|
| + LModI* mod =
|
| + new(zone()) LModI(value, UseOrConstant(instr->right()), NULL);
|
| result = DefineSameAsFirst(mod);
|
| } else {
|
| // The temporary operand is necessary to ensure that right is
|
| @@ -1321,7 +1333,7 @@
|
| LOperand* temp = FixedTemp(edx);
|
| LOperand* value = UseFixed(instr->left(), eax);
|
| LOperand* divisor = UseRegister(instr->right());
|
| - LModI* mod = new LModI(value, divisor, temp);
|
| + LModI* mod = new(zone()) LModI(value, divisor, temp);
|
| result = DefineFixed(mod, edx);
|
| }
|
|
|
| @@ -1338,7 +1350,7 @@
|
| // TODO(fschneider): Allow any register as input registers.
|
| LOperand* left = UseFixedDouble(instr->left(), xmm2);
|
| LOperand* right = UseFixedDouble(instr->right(), xmm1);
|
| - LArithmeticD* result = new LArithmeticD(Token::MOD, left, right);
|
| + LArithmeticD* result = new(zone()) LArithmeticD(Token::MOD, left, right);
|
| return MarkAsCall(DefineFixedDouble(result, xmm1), instr);
|
| }
|
| }
|
| @@ -1354,7 +1366,7 @@
|
| if (instr->CheckFlag(HValue::kBailoutOnMinusZero)) {
|
| temp = TempRegister();
|
| }
|
| - LMulI* mul = new LMulI(left, right, temp);
|
| + LMulI* mul = new(zone()) LMulI(left, right, temp);
|
| return AssignEnvironment(DefineSameAsFirst(mul));
|
| } else if (instr->representation().IsDouble()) {
|
| return DoArithmeticD(Token::MUL, instr);
|
| @@ -1371,7 +1383,7 @@
|
| ASSERT(instr->right()->representation().IsInteger32());
|
| LOperand* left = UseRegisterAtStart(instr->left());
|
| LOperand* right = UseOrConstantAtStart(instr->right());
|
| - LSubI* sub = new LSubI(left, right);
|
| + LSubI* sub = new(zone()) LSubI(left, right);
|
| LInstruction* result = DefineSameAsFirst(sub);
|
| if (instr->CheckFlag(HValue::kCanOverflow)) {
|
| result = AssignEnvironment(result);
|
| @@ -1392,7 +1404,7 @@
|
| ASSERT(instr->right()->representation().IsInteger32());
|
| LOperand* left = UseRegisterAtStart(instr->LeastConstantOperand());
|
| LOperand* right = UseOrConstantAtStart(instr->MostConstantOperand());
|
| - LAddI* add = new LAddI(left, right);
|
| + LAddI* add = new(zone()) LAddI(left, right);
|
| LInstruction* result = DefineSameAsFirst(add);
|
| if (instr->CheckFlag(HValue::kCanOverflow)) {
|
| result = AssignEnvironment(result);
|
| @@ -1417,7 +1429,7 @@
|
| LOperand* right = exponent_type.IsDouble() ?
|
| UseFixedDouble(instr->right(), xmm2) :
|
| UseFixed(instr->right(), eax);
|
| - LPower* result = new LPower(left, right);
|
| + LPower* result = new(zone()) LPower(left, right);
|
| return MarkAsCall(DefineFixedDouble(result, xmm3), instr,
|
| CAN_DEOPTIMIZE_EAGERLY);
|
| }
|
| @@ -1429,7 +1441,7 @@
|
| LOperand* context = UseFixed(instr->context(), esi);
|
| LOperand* left = UseFixed(instr->left(), edx);
|
| LOperand* right = UseFixed(instr->right(), eax);
|
| - LCmpT* result = new LCmpT(context, left, right);
|
| + LCmpT* result = new(zone()) LCmpT(context, left, right);
|
| return MarkAsCall(DefineFixed(result, eax), instr);
|
| }
|
|
|
| @@ -1442,7 +1454,7 @@
|
| ASSERT(instr->right()->representation().IsInteger32());
|
| LOperand* left = UseRegisterOrConstantAtStart(instr->left());
|
| LOperand* right = UseOrConstantAtStart(instr->right());
|
| - return new LCmpIDAndBranch(left, right);
|
| + return new(zone()) LCmpIDAndBranch(left, right);
|
| } else {
|
| ASSERT(r.IsDouble());
|
| ASSERT(instr->left()->representation().IsDouble());
|
| @@ -1456,7 +1468,7 @@
|
| left = UseRegisterAtStart(instr->left());
|
| right = UseRegisterAtStart(instr->right());
|
| }
|
| - return new LCmpIDAndBranch(left, right);
|
| + return new(zone()) LCmpIDAndBranch(left, right);
|
| }
|
| }
|
|
|
| @@ -1465,49 +1477,51 @@
|
| HCompareObjectEqAndBranch* instr) {
|
| LOperand* left = UseRegisterAtStart(instr->left());
|
| LOperand* right = UseAtStart(instr->right());
|
| - return new LCmpObjectEqAndBranch(left, right);
|
| + return new(zone()) LCmpObjectEqAndBranch(left, right);
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoCompareConstantEqAndBranch(
|
| HCompareConstantEqAndBranch* instr) {
|
| - return new LCmpConstantEqAndBranch(UseRegisterAtStart(instr->value()));
|
| + return new(zone()) LCmpConstantEqAndBranch(
|
| + UseRegisterAtStart(instr->value()));
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoIsNilAndBranch(HIsNilAndBranch* instr) {
|
| // We only need a temp register for non-strict compare.
|
| LOperand* temp = instr->kind() == kStrictEquality ? NULL : TempRegister();
|
| - return new LIsNilAndBranch(UseRegisterAtStart(instr->value()), temp);
|
| + return new(zone()) LIsNilAndBranch(UseRegisterAtStart(instr->value()), temp);
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoIsObjectAndBranch(HIsObjectAndBranch* instr) {
|
| ASSERT(instr->value()->representation().IsTagged());
|
| LOperand* temp = TempRegister();
|
| - return new LIsObjectAndBranch(UseRegister(instr->value()), temp);
|
| + return new(zone()) LIsObjectAndBranch(UseRegister(instr->value()), temp);
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoIsSmiAndBranch(HIsSmiAndBranch* instr) {
|
| ASSERT(instr->value()->representation().IsTagged());
|
| - return new LIsSmiAndBranch(Use(instr->value()));
|
| + return new(zone()) LIsSmiAndBranch(Use(instr->value()));
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoIsUndetectableAndBranch(
|
| HIsUndetectableAndBranch* instr) {
|
| ASSERT(instr ->value()->representation().IsTagged());
|
| - return new LIsUndetectableAndBranch(UseRegisterAtStart(instr->value()),
|
| - TempRegister());
|
| + return new(zone()) LIsUndetectableAndBranch(
|
| + UseRegisterAtStart(instr->value()), TempRegister());
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoHasInstanceTypeAndBranch(
|
| HHasInstanceTypeAndBranch* instr) {
|
| ASSERT(instr->value()->representation().IsTagged());
|
| - return new LHasInstanceTypeAndBranch(UseRegisterAtStart(instr->value()),
|
| - TempRegister());
|
| + return new(zone()) LHasInstanceTypeAndBranch(
|
| + UseRegisterAtStart(instr->value()),
|
| + TempRegister());
|
| }
|
|
|
|
|
| @@ -1516,14 +1530,14 @@
|
| ASSERT(instr->value()->representation().IsTagged());
|
| LOperand* value = UseRegisterAtStart(instr->value());
|
|
|
| - return DefineAsRegister(new LGetCachedArrayIndex(value));
|
| + return DefineAsRegister(new(zone()) LGetCachedArrayIndex(value));
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoHasCachedArrayIndexAndBranch(
|
| HHasCachedArrayIndexAndBranch* instr) {
|
| ASSERT(instr->value()->representation().IsTagged());
|
| - return new LHasCachedArrayIndexAndBranch(
|
| + return new(zone()) LHasCachedArrayIndexAndBranch(
|
| UseRegisterAtStart(instr->value()));
|
| }
|
|
|
| @@ -1531,7 +1545,7 @@
|
| LInstruction* LChunkBuilder::DoClassOfTestAndBranch(
|
| HClassOfTestAndBranch* instr) {
|
| ASSERT(instr->value()->representation().IsTagged());
|
| - return new LClassOfTestAndBranch(UseTempRegister(instr->value()),
|
| + return new(zone()) LClassOfTestAndBranch(UseTempRegister(instr->value()),
|
| TempRegister(),
|
| TempRegister());
|
| }
|
| @@ -1539,32 +1553,32 @@
|
|
|
| LInstruction* LChunkBuilder::DoJSArrayLength(HJSArrayLength* instr) {
|
| LOperand* array = UseRegisterAtStart(instr->value());
|
| - return DefineAsRegister(new LJSArrayLength(array));
|
| + return DefineAsRegister(new(zone()) LJSArrayLength(array));
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoFixedArrayBaseLength(
|
| HFixedArrayBaseLength* instr) {
|
| LOperand* array = UseRegisterAtStart(instr->value());
|
| - return DefineAsRegister(new LFixedArrayBaseLength(array));
|
| + return DefineAsRegister(new(zone()) LFixedArrayBaseLength(array));
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoElementsKind(HElementsKind* instr) {
|
| LOperand* object = UseRegisterAtStart(instr->value());
|
| - return DefineAsRegister(new LElementsKind(object));
|
| + return DefineAsRegister(new(zone()) LElementsKind(object));
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoValueOf(HValueOf* instr) {
|
| LOperand* object = UseRegister(instr->value());
|
| - LValueOf* result = new LValueOf(object, TempRegister());
|
| + LValueOf* result = new(zone()) LValueOf(object, TempRegister());
|
| return AssignEnvironment(DefineSameAsFirst(result));
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoBoundsCheck(HBoundsCheck* instr) {
|
| - return AssignEnvironment(new LBoundsCheck(
|
| + return AssignEnvironment(new(zone()) LBoundsCheck(
|
| UseRegisterOrConstantAtStart(instr->index()),
|
| UseAtStart(instr->length())));
|
| }
|
| @@ -1580,7 +1594,7 @@
|
| LInstruction* LChunkBuilder::DoThrow(HThrow* instr) {
|
| LOperand* context = UseFixed(instr->context(), esi);
|
| LOperand* value = UseFixed(instr->value(), eax);
|
| - return MarkAsCall(new LThrow(context, value), instr);
|
| + return MarkAsCall(new(zone()) LThrow(context, value), instr);
|
| }
|
|
|
|
|
| @@ -1603,7 +1617,7 @@
|
| if (from.IsTagged()) {
|
| if (to.IsDouble()) {
|
| LOperand* value = UseRegister(instr->value());
|
| - LNumberUntagD* res = new LNumberUntagD(value);
|
| + LNumberUntagD* res = new(zone()) LNumberUntagD(value);
|
| return AssignEnvironment(DefineAsRegister(res));
|
| } else {
|
| ASSERT(to.IsInteger32());
|
| @@ -1615,10 +1629,10 @@
|
| (truncating && CpuFeatures::IsSupported(SSE3))
|
| ? NULL
|
| : FixedTemp(xmm1);
|
| - LTaggedToI* res = new LTaggedToI(value, xmm_temp);
|
| + LTaggedToI* res = new(zone()) LTaggedToI(value, xmm_temp);
|
| return AssignEnvironment(DefineSameAsFirst(res));
|
| } else {
|
| - return DefineSameAsFirst(new LSmiUntag(value, needs_check));
|
| + return DefineSameAsFirst(new(zone()) LSmiUntag(value, needs_check));
|
| }
|
| }
|
| } else if (from.IsDouble()) {
|
| @@ -1628,7 +1642,7 @@
|
|
|
| // Make sure that temp and result_temp are different registers.
|
| LUnallocated* result_temp = TempRegister();
|
| - LNumberTagD* result = new LNumberTagD(value, temp);
|
| + LNumberTagD* result = new(zone()) LNumberTagD(value, temp);
|
| return AssignPointerMap(Define(result, result_temp));
|
| } else {
|
| ASSERT(to.IsInteger32());
|
| @@ -1637,21 +1651,23 @@
|
| LOperand* value = needs_temp ?
|
| UseTempRegister(instr->value()) : UseRegister(instr->value());
|
| LOperand* temp = needs_temp ? TempRegister() : NULL;
|
| - return AssignEnvironment(DefineAsRegister(new LDoubleToI(value, temp)));
|
| + return AssignEnvironment(
|
| + DefineAsRegister(new(zone()) LDoubleToI(value, temp)));
|
| }
|
| } else if (from.IsInteger32()) {
|
| if (to.IsTagged()) {
|
| HValue* val = instr->value();
|
| LOperand* value = UseRegister(val);
|
| if (val->HasRange() && val->range()->IsInSmiRange()) {
|
| - return DefineSameAsFirst(new LSmiTag(value));
|
| + return DefineSameAsFirst(new(zone()) LSmiTag(value));
|
| } else {
|
| - LNumberTagI* result = new LNumberTagI(value);
|
| + LNumberTagI* result = new(zone()) LNumberTagI(value);
|
| return AssignEnvironment(AssignPointerMap(DefineSameAsFirst(result)));
|
| }
|
| } else {
|
| ASSERT(to.IsDouble());
|
| - return DefineAsRegister(new LInteger32ToDouble(Use(instr->value())));
|
| + return DefineAsRegister(
|
| + new(zone()) LInteger32ToDouble(Use(instr->value())));
|
| }
|
| }
|
| UNREACHABLE();
|
| @@ -1661,28 +1677,28 @@
|
|
|
| LInstruction* LChunkBuilder::DoCheckNonSmi(HCheckNonSmi* instr) {
|
| LOperand* value = UseAtStart(instr->value());
|
| - return AssignEnvironment(new LCheckNonSmi(value));
|
| + return AssignEnvironment(new(zone()) LCheckNonSmi(value));
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoCheckInstanceType(HCheckInstanceType* instr) {
|
| LOperand* value = UseRegisterAtStart(instr->value());
|
| LOperand* temp = TempRegister();
|
| - LCheckInstanceType* result = new LCheckInstanceType(value, temp);
|
| + LCheckInstanceType* result = new(zone()) LCheckInstanceType(value, temp);
|
| return AssignEnvironment(result);
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoCheckPrototypeMaps(HCheckPrototypeMaps* instr) {
|
| LOperand* temp = TempRegister();
|
| - LCheckPrototypeMaps* result = new LCheckPrototypeMaps(temp);
|
| + LCheckPrototypeMaps* result = new(zone()) LCheckPrototypeMaps(temp);
|
| return AssignEnvironment(result);
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoCheckSmi(HCheckSmi* instr) {
|
| LOperand* value = UseAtStart(instr->value());
|
| - return AssignEnvironment(new LCheckSmi(value));
|
| + return AssignEnvironment(new(zone()) LCheckSmi(value));
|
| }
|
|
|
|
|
| @@ -1694,13 +1710,13 @@
|
| LOperand* value = Isolate::Current()->heap()->InNewSpace(*instr->target())
|
| ? UseRegisterAtStart(instr->value())
|
| : UseAtStart(instr->value());
|
| - return AssignEnvironment(new LCheckFunction(value));
|
| + return AssignEnvironment(new(zone()) LCheckFunction(value));
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoCheckMap(HCheckMap* instr) {
|
| LOperand* value = UseRegisterAtStart(instr->value());
|
| - LCheckMap* result = new LCheckMap(value);
|
| + LCheckMap* result = new(zone()) LCheckMap(value);
|
| return AssignEnvironment(result);
|
| }
|
|
|
| @@ -1710,17 +1726,17 @@
|
| Representation input_rep = value->representation();
|
| if (input_rep.IsDouble()) {
|
| LOperand* reg = UseRegister(value);
|
| - return DefineAsRegister(new LClampDToUint8(reg));
|
| + return DefineAsRegister(new(zone()) LClampDToUint8(reg));
|
| } else if (input_rep.IsInteger32()) {
|
| LOperand* reg = UseFixed(value, eax);
|
| - return DefineFixed(new LClampIToUint8(reg), eax);
|
| + return DefineFixed(new(zone()) LClampIToUint8(reg), eax);
|
| } else {
|
| ASSERT(input_rep.IsTagged());
|
| LOperand* reg = UseFixed(value, eax);
|
| // Register allocator doesn't (yet) support allocation of double
|
| // temps. Reserve xmm1 explicitly.
|
| LOperand* temp = FixedTemp(xmm1);
|
| - LClampTToUint8* result = new LClampTToUint8(reg, temp);
|
| + LClampTToUint8* result = new(zone()) LClampTToUint8(reg, temp);
|
| return AssignEnvironment(DefineFixed(result, eax));
|
| }
|
| }
|
| @@ -1735,7 +1751,7 @@
|
| LOperand* reg = UseRegister(value);
|
| LOperand* temp_reg =
|
| CpuFeatures::IsSupported(SSE3) ? NULL : TempRegister();
|
| - result = DefineAsRegister(new LDoubleToI(reg, temp_reg));
|
| + result = DefineAsRegister(new(zone()) LDoubleToI(reg, temp_reg));
|
| } else if (input_rep.IsInteger32()) {
|
| // Canonicalization should already have removed the hydrogen instruction in
|
| // this case, since it is a noop.
|
| @@ -1748,29 +1764,29 @@
|
| // temps. Reserve xmm1 explicitly.
|
| LOperand* xmm_temp =
|
| CpuFeatures::IsSupported(SSE3) ? NULL : FixedTemp(xmm1);
|
| - result = DefineSameAsFirst(new LTaggedToI(reg, xmm_temp));
|
| + result = DefineSameAsFirst(new(zone()) LTaggedToI(reg, xmm_temp));
|
| }
|
| return AssignEnvironment(result);
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoReturn(HReturn* instr) {
|
| - return new LReturn(UseFixed(instr->value(), eax));
|
| + return new(zone()) LReturn(UseFixed(instr->value(), eax));
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoConstant(HConstant* instr) {
|
| Representation r = instr->representation();
|
| if (r.IsInteger32()) {
|
| - return DefineAsRegister(new LConstantI);
|
| + return DefineAsRegister(new(zone()) LConstantI);
|
| } else if (r.IsDouble()) {
|
| double value = instr->DoubleValue();
|
| LOperand* temp = (BitCast<uint64_t, double>(value) != 0)
|
| ? TempRegister()
|
| : NULL;
|
| - return DefineAsRegister(new LConstantD(temp));
|
| + return DefineAsRegister(new(zone()) LConstantD(temp));
|
| } else if (r.IsTagged()) {
|
| - return DefineAsRegister(new LConstantT);
|
| + return DefineAsRegister(new(zone()) LConstantT);
|
| } else {
|
| UNREACHABLE();
|
| return NULL;
|
| @@ -1779,7 +1795,7 @@
|
|
|
|
|
| LInstruction* LChunkBuilder::DoLoadGlobalCell(HLoadGlobalCell* instr) {
|
| - LLoadGlobalCell* result = new LLoadGlobalCell;
|
| + LLoadGlobalCell* result = new(zone()) LLoadGlobalCell;
|
| return instr->RequiresHoleCheck()
|
| ? AssignEnvironment(DefineAsRegister(result))
|
| : DefineAsRegister(result);
|
| @@ -1789,14 +1805,15 @@
|
| LInstruction* LChunkBuilder::DoLoadGlobalGeneric(HLoadGlobalGeneric* instr) {
|
| LOperand* context = UseFixed(instr->context(), esi);
|
| LOperand* global_object = UseFixed(instr->global_object(), eax);
|
| - LLoadGlobalGeneric* result = new LLoadGlobalGeneric(context, global_object);
|
| + LLoadGlobalGeneric* result =
|
| + new(zone()) LLoadGlobalGeneric(context, global_object);
|
| return MarkAsCall(DefineFixed(result, eax), instr);
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoStoreGlobalCell(HStoreGlobalCell* instr) {
|
| LStoreGlobalCell* result =
|
| - new LStoreGlobalCell(UseTempRegister(instr->value()),
|
| + new(zone()) LStoreGlobalCell(UseTempRegister(instr->value()),
|
| TempRegister(),
|
| TempRegister());
|
| return instr->RequiresHoleCheck() ? AssignEnvironment(result) : result;
|
| @@ -1808,14 +1825,14 @@
|
| LOperand* global_object = UseFixed(instr->global_object(), edx);
|
| LOperand* value = UseFixed(instr->value(), eax);
|
| LStoreGlobalGeneric* result =
|
| - new LStoreGlobalGeneric(context, global_object, value);
|
| + new(zone()) LStoreGlobalGeneric(context, global_object, value);
|
| return MarkAsCall(result, instr);
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoLoadContextSlot(HLoadContextSlot* instr) {
|
| LOperand* context = UseRegisterAtStart(instr->value());
|
| - return DefineAsRegister(new LLoadContextSlot(context));
|
| + return DefineAsRegister(new(zone()) LLoadContextSlot(context));
|
| }
|
|
|
|
|
| @@ -1830,14 +1847,14 @@
|
| value = UseRegister(instr->value());
|
| temp = NULL;
|
| }
|
| - return new LStoreContextSlot(context, value, temp);
|
| + return new(zone()) LStoreContextSlot(context, value, temp);
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoLoadNamedField(HLoadNamedField* instr) {
|
| ASSERT(instr->representation().IsTagged());
|
| LOperand* obj = UseRegisterAtStart(instr->object());
|
| - return DefineAsRegister(new LLoadNamedField(obj));
|
| + return DefineAsRegister(new(zone()) LLoadNamedField(obj));
|
| }
|
|
|
|
|
| @@ -1848,12 +1865,12 @@
|
| if (instr->need_generic()) {
|
| LOperand* obj = UseFixed(instr->object(), eax);
|
| LLoadNamedFieldPolymorphic* result =
|
| - new LLoadNamedFieldPolymorphic(context, obj);
|
| + new(zone()) LLoadNamedFieldPolymorphic(context, obj);
|
| return MarkAsCall(DefineFixed(result, eax), instr);
|
| } else {
|
| LOperand* obj = UseRegisterAtStart(instr->object());
|
| LLoadNamedFieldPolymorphic* result =
|
| - new LLoadNamedFieldPolymorphic(context, obj);
|
| + new(zone()) LLoadNamedFieldPolymorphic(context, obj);
|
| return AssignEnvironment(DefineAsRegister(result));
|
| }
|
| }
|
| @@ -1862,7 +1879,7 @@
|
| LInstruction* LChunkBuilder::DoLoadNamedGeneric(HLoadNamedGeneric* instr) {
|
| LOperand* context = UseFixed(instr->context(), esi);
|
| LOperand* object = UseFixed(instr->object(), eax);
|
| - LLoadNamedGeneric* result = new LLoadNamedGeneric(context, object);
|
| + LLoadNamedGeneric* result = new(zone()) LLoadNamedGeneric(context, object);
|
| return MarkAsCall(DefineFixed(result, eax), instr);
|
| }
|
|
|
| @@ -1870,21 +1887,21 @@
|
| LInstruction* LChunkBuilder::DoLoadFunctionPrototype(
|
| HLoadFunctionPrototype* instr) {
|
| return AssignEnvironment(DefineAsRegister(
|
| - new LLoadFunctionPrototype(UseRegister(instr->function()),
|
| - TempRegister())));
|
| + new(zone()) LLoadFunctionPrototype(UseRegister(instr->function()),
|
| + TempRegister())));
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoLoadElements(HLoadElements* instr) {
|
| LOperand* input = UseRegisterAtStart(instr->value());
|
| - return DefineAsRegister(new LLoadElements(input));
|
| + return DefineAsRegister(new(zone()) LLoadElements(input));
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoLoadExternalArrayPointer(
|
| HLoadExternalArrayPointer* instr) {
|
| LOperand* input = UseRegisterAtStart(instr->value());
|
| - return DefineAsRegister(new LLoadExternalArrayPointer(input));
|
| + return DefineAsRegister(new(zone()) LLoadExternalArrayPointer(input));
|
| }
|
|
|
|
|
| @@ -1894,7 +1911,7 @@
|
| ASSERT(instr->key()->representation().IsInteger32());
|
| LOperand* obj = UseRegisterAtStart(instr->object());
|
| LOperand* key = UseRegisterOrConstantAtStart(instr->key());
|
| - LLoadKeyedFastElement* result = new LLoadKeyedFastElement(obj, key);
|
| + LLoadKeyedFastElement* result = new(zone()) LLoadKeyedFastElement(obj, key);
|
| return AssignEnvironment(DefineAsRegister(result));
|
| }
|
|
|
| @@ -1906,7 +1923,7 @@
|
| LOperand* elements = UseRegisterAtStart(instr->elements());
|
| LOperand* key = UseRegisterOrConstantAtStart(instr->key());
|
| LLoadKeyedFastDoubleElement* result =
|
| - new LLoadKeyedFastDoubleElement(elements, key);
|
| + new(zone()) LLoadKeyedFastDoubleElement(elements, key);
|
| return AssignEnvironment(DefineAsRegister(result));
|
| }
|
|
|
| @@ -1926,7 +1943,7 @@
|
| LOperand* external_pointer = UseRegister(instr->external_pointer());
|
| LOperand* key = UseRegisterOrConstant(instr->key());
|
| LLoadKeyedSpecializedArrayElement* result =
|
| - new LLoadKeyedSpecializedArrayElement(external_pointer,
|
| + new(zone()) LLoadKeyedSpecializedArrayElement(external_pointer,
|
| key);
|
| LInstruction* load_instr = DefineAsRegister(result);
|
| // An unsigned int array load might overflow and cause a deopt, make sure it
|
| @@ -1942,7 +1959,8 @@
|
| LOperand* object = UseFixed(instr->object(), edx);
|
| LOperand* key = UseFixed(instr->key(), eax);
|
|
|
| - LLoadKeyedGeneric* result = new LLoadKeyedGeneric(context, object, key);
|
| + LLoadKeyedGeneric* result =
|
| + new(zone()) LLoadKeyedGeneric(context, object, key);
|
| return MarkAsCall(DefineFixed(result, eax), instr);
|
| }
|
|
|
| @@ -1962,7 +1980,7 @@
|
| ? UseTempRegister(instr->key())
|
| : UseRegisterOrConstantAtStart(instr->key());
|
|
|
| - return AssignEnvironment(new LStoreKeyedFastElement(obj, key, val));
|
| + return AssignEnvironment(new(zone()) LStoreKeyedFastElement(obj, key, val));
|
| }
|
|
|
|
|
| @@ -1976,7 +1994,7 @@
|
| LOperand* val = UseTempRegister(instr->value());
|
| LOperand* key = UseRegisterOrConstantAtStart(instr->key());
|
|
|
| - return new LStoreKeyedFastDoubleElement(elements, key, val);
|
| + return new(zone()) LStoreKeyedFastDoubleElement(elements, key, val);
|
| }
|
|
|
|
|
| @@ -2006,9 +2024,9 @@
|
| val = UseRegister(instr->value());
|
| }
|
|
|
| - return new LStoreKeyedSpecializedArrayElement(external_pointer,
|
| - key,
|
| - val);
|
| + return new(zone()) LStoreKeyedSpecializedArrayElement(external_pointer,
|
| + key,
|
| + val);
|
| }
|
|
|
|
|
| @@ -2023,7 +2041,7 @@
|
| ASSERT(instr->value()->representation().IsTagged());
|
|
|
| LStoreKeyedGeneric* result =
|
| - new LStoreKeyedGeneric(context, object, key, value);
|
| + new(zone()) LStoreKeyedGeneric(context, object, key, value);
|
| return MarkAsCall(result, instr);
|
| }
|
|
|
| @@ -2036,14 +2054,16 @@
|
| LOperand* new_map_reg = TempRegister();
|
| LOperand* temp_reg = TempRegister();
|
| LTransitionElementsKind* result =
|
| - new LTransitionElementsKind(object, new_map_reg, temp_reg);
|
| + new(zone()) LTransitionElementsKind(object, new_map_reg, temp_reg);
|
| return DefineSameAsFirst(result);
|
| } else {
|
| LOperand* object = UseFixed(instr->object(), eax);
|
| LOperand* fixed_object_reg = FixedTemp(edx);
|
| LOperand* new_map_reg = FixedTemp(ebx);
|
| LTransitionElementsKind* result =
|
| - new LTransitionElementsKind(object, new_map_reg, fixed_object_reg);
|
| + new(zone()) LTransitionElementsKind(object,
|
| + new_map_reg,
|
| + fixed_object_reg);
|
| return MarkAsCall(DefineFixed(result, eax), instr);
|
| }
|
| }
|
| @@ -2071,7 +2091,7 @@
|
| ? TempRegister()
|
| : NULL;
|
|
|
| - return new LStoreNamedField(obj, val, temp);
|
| + return new(zone()) LStoreNamedField(obj, val, temp);
|
| }
|
|
|
|
|
| @@ -2080,7 +2100,8 @@
|
| LOperand* object = UseFixed(instr->object(), edx);
|
| LOperand* value = UseFixed(instr->value(), eax);
|
|
|
| - LStoreNamedGeneric* result = new LStoreNamedGeneric(context, object, value);
|
| + LStoreNamedGeneric* result =
|
| + new(zone()) LStoreNamedGeneric(context, object, value);
|
| return MarkAsCall(result, instr);
|
| }
|
|
|
| @@ -2089,7 +2110,7 @@
|
| LOperand* context = UseFixed(instr->context(), esi);
|
| LOperand* left = UseOrConstantAtStart(instr->left());
|
| LOperand* right = UseOrConstantAtStart(instr->right());
|
| - LStringAdd* string_add = new LStringAdd(context, left, right);
|
| + LStringAdd* string_add = new(zone()) LStringAdd(context, left, right);
|
| return MarkAsCall(DefineFixed(string_add, eax), instr);
|
| }
|
|
|
| @@ -2098,7 +2119,8 @@
|
| LOperand* string = UseTempRegister(instr->string());
|
| LOperand* index = UseTempRegister(instr->index());
|
| LOperand* context = UseAny(instr->context());
|
| - LStringCharCodeAt* result = new LStringCharCodeAt(context, string, index);
|
| + LStringCharCodeAt* result =
|
| + new(zone()) LStringCharCodeAt(context, string, index);
|
| return AssignEnvironment(AssignPointerMap(DefineAsRegister(result)));
|
| }
|
|
|
| @@ -2106,38 +2128,43 @@
|
| LInstruction* LChunkBuilder::DoStringCharFromCode(HStringCharFromCode* instr) {
|
| LOperand* char_code = UseRegister(instr->value());
|
| LOperand* context = UseAny(instr->context());
|
| - LStringCharFromCode* result = new LStringCharFromCode(context, char_code);
|
| + LStringCharFromCode* result =
|
| + new(zone()) LStringCharFromCode(context, char_code);
|
| return AssignPointerMap(DefineAsRegister(result));
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoStringLength(HStringLength* instr) {
|
| LOperand* string = UseRegisterAtStart(instr->value());
|
| - return DefineAsRegister(new LStringLength(string));
|
| + return DefineAsRegister(new(zone()) LStringLength(string));
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoArrayLiteral(HArrayLiteral* instr) {
|
| LOperand* context = UseFixed(instr->context(), esi);
|
| - return MarkAsCall(DefineFixed(new LArrayLiteral(context), eax), instr);
|
| + return MarkAsCall(
|
| + DefineFixed(new(zone()) LArrayLiteral(context), eax), instr);
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoObjectLiteral(HObjectLiteral* instr) {
|
| LOperand* context = UseFixed(instr->context(), esi);
|
| - return MarkAsCall(DefineFixed(new LObjectLiteral(context), eax), instr);
|
| + return MarkAsCall(
|
| + DefineFixed(new(zone()) LObjectLiteral(context), eax), instr);
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoRegExpLiteral(HRegExpLiteral* instr) {
|
| LOperand* context = UseFixed(instr->context(), esi);
|
| - return MarkAsCall(DefineFixed(new LRegExpLiteral(context), eax), instr);
|
| + return MarkAsCall(
|
| + DefineFixed(new(zone()) LRegExpLiteral(context), eax), instr);
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoFunctionLiteral(HFunctionLiteral* instr) {
|
| LOperand* context = UseFixed(instr->context(), esi);
|
| - return MarkAsCall(DefineFixed(new LFunctionLiteral(context), eax), instr);
|
| + return MarkAsCall(
|
| + DefineFixed(new(zone()) LFunctionLiteral(context), eax), instr);
|
| }
|
|
|
|
|
| @@ -2145,7 +2172,7 @@
|
| LOperand* context = UseFixed(instr->context(), esi);
|
| LOperand* object = UseAtStart(instr->object());
|
| LOperand* key = UseOrConstantAtStart(instr->key());
|
| - LDeleteProperty* result = new LDeleteProperty(context, object, key);
|
| + LDeleteProperty* result = new(zone()) LDeleteProperty(context, object, key);
|
| return MarkAsCall(DefineFixed(result, eax), instr);
|
| }
|
|
|
| @@ -2153,13 +2180,13 @@
|
| LInstruction* LChunkBuilder::DoOsrEntry(HOsrEntry* instr) {
|
| allocator_->MarkAsOsrEntry();
|
| current_block_->last_environment()->set_ast_id(instr->ast_id());
|
| - return AssignEnvironment(new LOsrEntry);
|
| + return AssignEnvironment(new(zone()) LOsrEntry);
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoParameter(HParameter* instr) {
|
| int spill_index = chunk()->GetParameterStackSlot(instr->index());
|
| - return DefineAsSpilled(new LParameter, spill_index);
|
| + return DefineAsSpilled(new(zone()) LParameter, spill_index);
|
| }
|
|
|
|
|
| @@ -2169,14 +2196,14 @@
|
| Abort("Too many spill slots needed for OSR");
|
| spill_index = 0;
|
| }
|
| - return DefineAsSpilled(new LUnknownOSRValue, spill_index);
|
| + return DefineAsSpilled(new(zone()) LUnknownOSRValue, spill_index);
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoCallStub(HCallStub* instr) {
|
| LOperand* context = UseFixed(instr->context(), esi);
|
| argument_count_ -= instr->argument_count();
|
| - LCallStub* result = new LCallStub(context);
|
| + LCallStub* result = new(zone()) LCallStub(context);
|
| return MarkAsCall(DefineFixed(result, eax), instr);
|
| }
|
|
|
| @@ -2194,14 +2221,15 @@
|
| LOperand* arguments = UseRegister(instr->arguments());
|
| LOperand* length = UseTempRegister(instr->length());
|
| LOperand* index = Use(instr->index());
|
| - LAccessArgumentsAt* result = new LAccessArgumentsAt(arguments, length, index);
|
| + LAccessArgumentsAt* result =
|
| + new(zone()) LAccessArgumentsAt(arguments, length, index);
|
| return AssignEnvironment(DefineAsRegister(result));
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoToFastProperties(HToFastProperties* instr) {
|
| LOperand* object = UseFixed(instr->value(), eax);
|
| - LToFastProperties* result = new LToFastProperties(object);
|
| + LToFastProperties* result = new(zone()) LToFastProperties(object);
|
| return MarkAsCall(DefineFixed(result, eax), instr);
|
| }
|
|
|
| @@ -2209,19 +2237,19 @@
|
| LInstruction* LChunkBuilder::DoTypeof(HTypeof* instr) {
|
| LOperand* context = UseFixed(instr->context(), esi);
|
| LOperand* value = UseAtStart(instr->value());
|
| - LTypeof* result = new LTypeof(context, value);
|
| + LTypeof* result = new(zone()) LTypeof(context, value);
|
| return MarkAsCall(DefineFixed(result, eax), instr);
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoTypeofIsAndBranch(HTypeofIsAndBranch* instr) {
|
| - return new LTypeofIsAndBranch(UseTempRegister(instr->value()));
|
| + return new(zone()) LTypeofIsAndBranch(UseTempRegister(instr->value()));
|
| }
|
|
|
|
|
| LInstruction* LChunkBuilder::DoIsConstructCallAndBranch(
|
| HIsConstructCallAndBranch* instr) {
|
| - return new LIsConstructCallAndBranch(TempRegister());
|
| + return new(zone()) LIsConstructCallAndBranch(TempRegister());
|
| }
|
|
|
|
|
| @@ -2245,7 +2273,7 @@
|
| // lazy bailout instruction to capture the environment.
|
| if (pending_deoptimization_ast_id_ != AstNode::kNoNumber) {
|
| ASSERT(pending_deoptimization_ast_id_ == instr->ast_id());
|
| - LLazyBailout* lazy_bailout = new LLazyBailout;
|
| + LLazyBailout* lazy_bailout = new(zone()) LLazyBailout;
|
| LInstruction* result = AssignEnvironment(lazy_bailout);
|
| instruction_pending_deoptimization_environment_->
|
| set_deoptimization_environment(result->environment());
|
| @@ -2260,11 +2288,12 @@
|
| LInstruction* LChunkBuilder::DoStackCheck(HStackCheck* instr) {
|
| if (instr->is_function_entry()) {
|
| LOperand* context = UseFixed(instr->context(), esi);
|
| - return MarkAsCall(new LStackCheck(context), instr);
|
| + return MarkAsCall(new(zone()) LStackCheck(context), instr);
|
| } else {
|
| ASSERT(instr->is_backwards_branch());
|
| LOperand* context = UseAny(instr->context());
|
| - return AssignEnvironment(AssignPointerMap(new LStackCheck(context)));
|
| + return AssignEnvironment(
|
| + AssignPointerMap(new(zone()) LStackCheck(context)));
|
| }
|
| }
|
|
|
| @@ -2293,7 +2322,7 @@
|
| LOperand* context = UseFixed(instr->context(), esi);
|
| LOperand* key = UseOrConstantAtStart(instr->key());
|
| LOperand* object = UseOrConstantAtStart(instr->object());
|
| - LIn* result = new LIn(context, key, object);
|
| + LIn* result = new(zone()) LIn(context, key, object);
|
| return MarkAsCall(DefineFixed(result, eax), instr);
|
| }
|
|
|
|
|