Chromium Code Reviews| Index: src/arm/lithium-arm.cc |
| =================================================================== |
| --- src/arm/lithium-arm.cc (revision 6433) |
| +++ src/arm/lithium-arm.cc (working copy) |
| @@ -64,12 +64,12 @@ |
| } |
| -void LInstruction::PrintTo(StringStream* stream) const { |
| +void LInstruction::PrintTo(StringStream* stream) { |
| stream->Add("%s ", this->Mnemonic()); |
| if (HasResult()) { |
| - result()->PrintTo(stream); |
| - stream->Add(" "); |
| + PrintOutputOperandTo(stream); |
| } |
| + |
| PrintDataTo(stream); |
| if (HasEnvironment()) { |
| @@ -84,7 +84,29 @@ |
| } |
| -void LLabel::PrintDataTo(StringStream* stream) const { |
| +template<int R, int I, int T> |
| +void LTemplateInstruction<R, I, T>::PrintDataTo(StringStream* stream) { |
| + stream->Add("= "); |
| + inputs_.PrintOperandsTo(stream); |
| +} |
| + |
| + |
| +template<int R, int I, int T> |
| +void LTemplateInstruction<R, I, T>::PrintOutputOperandTo(StringStream* stream) { |
| + results_.PrintOperandsTo(stream); |
| +} |
| + |
| + |
| +template<typename T, int N> |
| +void OperandContainer<T, N>::PrintOperandsTo(StringStream* stream) { |
| + for (int i = 0; i < N; i++) { |
| + if (i > 0) stream->Add(" "); |
| + elems_[i]->PrintTo(stream); |
| + } |
| +} |
| + |
| + |
| +void LLabel::PrintDataTo(StringStream* stream) { |
| LGap::PrintDataTo(stream); |
| LLabel* rep = replacement(); |
| if (rep != NULL) { |
| @@ -143,74 +165,65 @@ |
| } |
| - |
| -void LBinaryOperation::PrintDataTo(StringStream* stream) const { |
| - stream->Add("= "); |
| - left()->PrintTo(stream); |
| - stream->Add(" "); |
| - right()->PrintTo(stream); |
| -} |
| - |
| - |
| -void LGoto::PrintDataTo(StringStream* stream) const { |
| +void LGoto::PrintDataTo(StringStream* stream) { |
| stream->Add("B%d", block_id()); |
| } |
| -void LBranch::PrintDataTo(StringStream* stream) const { |
| +void LBranch::PrintDataTo(StringStream* stream) { |
| stream->Add("B%d | B%d on ", true_block_id(), false_block_id()); |
| - input()->PrintTo(stream); |
| + InputAt(0)->PrintTo(stream); |
| } |
| -void LCmpIDAndBranch::PrintDataTo(StringStream* stream) const { |
| +void LCmpIDAndBranch::PrintDataTo(StringStream* stream) { |
| stream->Add("if "); |
| - left()->PrintTo(stream); |
| + InputAt(0)->PrintTo(stream); |
| stream->Add(" %s ", Token::String(op())); |
| - right()->PrintTo(stream); |
| + InputAt(1)->PrintTo(stream); |
| stream->Add(" then B%d else B%d", true_block_id(), false_block_id()); |
| } |
| -void LIsNullAndBranch::PrintDataTo(StringStream* stream) const { |
| +void LIsNullAndBranch::PrintDataTo(StringStream* stream) { |
| stream->Add("if "); |
| - input()->PrintTo(stream); |
| + InputAt(0)->PrintTo(stream); |
| stream->Add(is_strict() ? " === null" : " == null"); |
| stream->Add(" then B%d else B%d", true_block_id(), false_block_id()); |
| } |
| -void LIsObjectAndBranch::PrintDataTo(StringStream* stream) const { |
| +void LIsObjectAndBranch::PrintDataTo(StringStream* stream) { |
| stream->Add("if is_object("); |
| - input()->PrintTo(stream); |
| + InputAt(0)->PrintTo(stream); |
| stream->Add(") then B%d else B%d", true_block_id(), false_block_id()); |
| } |
| -void LIsSmiAndBranch::PrintDataTo(StringStream* stream) const { |
| +void LIsSmiAndBranch::PrintDataTo(StringStream* stream) { |
| stream->Add("if is_smi("); |
| - input()->PrintTo(stream); |
| + InputAt(0)->PrintTo(stream); |
| stream->Add(") then B%d else B%d", true_block_id(), false_block_id()); |
| } |
| -void LHasInstanceTypeAndBranch::PrintDataTo(StringStream* stream) const { |
| +void LHasInstanceTypeAndBranch::PrintDataTo(StringStream* stream) { |
| stream->Add("if has_instance_type("); |
| - input()->PrintTo(stream); |
| + InputAt(0)->PrintTo(stream); |
| stream->Add(") then B%d else B%d", true_block_id(), false_block_id()); |
| } |
| -void LHasCachedArrayIndexAndBranch::PrintDataTo(StringStream* stream) const { |
| +void LHasCachedArrayIndexAndBranch::PrintDataTo(StringStream* stream) { |
| stream->Add("if has_cached_array_index("); |
| - input()->PrintTo(stream); |
| + InputAt(0)->PrintTo(stream); |
| stream->Add(") then B%d else B%d", true_block_id(), false_block_id()); |
| } |
| -void LClassOfTestAndBranch::PrintDataTo(StringStream* stream) const { |
| +void LClassOfTestAndBranch::PrintDataTo(StringStream* stream) { |
| stream->Add("if class_of_test("); |
| - input()->PrintTo(stream); |
| + InputAt(0)->PrintTo(stream); |
| stream->Add(", \"%o\") then B%d else B%d", |
| *hydrogen()->class_name(), |
| true_block_id(), |
| @@ -218,29 +231,29 @@ |
| } |
| -void LTypeofIs::PrintDataTo(StringStream* stream) const { |
| - input()->PrintTo(stream); |
| +void LTypeofIs::PrintDataTo(StringStream* stream) { |
| + InputAt(0)->PrintTo(stream); |
| stream->Add(" == \"%s\"", *hydrogen()->type_literal()->ToCString()); |
| } |
| -void LTypeofIsAndBranch::PrintDataTo(StringStream* stream) const { |
| +void LTypeofIsAndBranch::PrintDataTo(StringStream* stream) { |
| stream->Add("if typeof "); |
| - input()->PrintTo(stream); |
| + InputAt(0)->PrintTo(stream); |
| stream->Add(" == \"%s\" then B%d else B%d", |
| *hydrogen()->type_literal()->ToCString(), |
| true_block_id(), false_block_id()); |
| } |
| -void LCallConstantFunction::PrintDataTo(StringStream* stream) const { |
| +void LCallConstantFunction::PrintDataTo(StringStream* stream) { |
| stream->Add("#%d / ", arity()); |
| } |
| -void LUnaryMathOperation::PrintDataTo(StringStream* stream) const { |
| +void LUnaryMathOperation::PrintDataTo(StringStream* stream) { |
| stream->Add("/%s ", hydrogen()->OpName()); |
| - input()->PrintTo(stream); |
| + InputAt(0)->PrintTo(stream); |
| } |
| @@ -249,48 +262,43 @@ |
| } |
| -void LCallKeyed::PrintDataTo(StringStream* stream) const { |
| +void LCallKeyed::PrintDataTo(StringStream* stream) { |
| stream->Add("[r2] #%d / ", arity()); |
| } |
| -void LCallNamed::PrintDataTo(StringStream* stream) const { |
| +void LCallNamed::PrintDataTo(StringStream* stream) { |
| SmartPointer<char> name_string = name()->ToCString(); |
| stream->Add("%s #%d / ", *name_string, arity()); |
| } |
| -void LCallGlobal::PrintDataTo(StringStream* stream) const { |
| +void LCallGlobal::PrintDataTo(StringStream* stream) { |
| SmartPointer<char> name_string = name()->ToCString(); |
| stream->Add("%s #%d / ", *name_string, arity()); |
| } |
| -void LCallKnownGlobal::PrintDataTo(StringStream* stream) const { |
| +void LCallKnownGlobal::PrintDataTo(StringStream* stream) { |
| stream->Add("#%d / ", arity()); |
| } |
| -void LCallNew::PrintDataTo(StringStream* stream) const { |
| - LUnaryOperation::PrintDataTo(stream); |
| +void LCallNew::PrintDataTo(StringStream* stream) { |
| + stream->Add("= "); |
| + InputAt(0)->PrintTo(stream); |
| stream->Add(" #%d / ", arity()); |
| } |
| -void LClassOfTest::PrintDataTo(StringStream* stream) const { |
| +void LClassOfTest::PrintDataTo(StringStream* stream) { |
| stream->Add("= class_of_test("); |
| - input()->PrintTo(stream); |
| + InputAt(0)->PrintTo(stream); |
| stream->Add(", \"%o\")", *hydrogen()->class_name()); |
| } |
| -void LUnaryOperation::PrintDataTo(StringStream* stream) const { |
| - stream->Add("= "); |
| - input()->PrintTo(stream); |
| -} |
| - |
| - |
| -void LAccessArgumentsAt::PrintDataTo(StringStream* stream) const { |
| +void LAccessArgumentsAt::PrintDataTo(StringStream* stream) { |
| arguments()->PrintTo(stream); |
| stream->Add(" length "); |
| @@ -301,6 +309,24 @@ |
| } |
| +void LStoreNamed::PrintDataTo(StringStream* stream) { |
| + object()->PrintTo(stream); |
| + stream->Add("."); |
| + stream->Add(*String::cast(*name())->ToCString()); |
| + stream->Add(" <- "); |
| + value()->PrintTo(stream); |
| +} |
| + |
| + |
| +void LStoreKeyed::PrintDataTo(StringStream* stream) { |
| + object()->PrintTo(stream); |
| + stream->Add("["); |
| + key()->PrintTo(stream); |
| + stream->Add("] <- "); |
| + value()->PrintTo(stream); |
| +} |
| + |
| + |
| LChunk::LChunk(HGraph* graph) |
| : spill_slot_count_(0), |
| graph_(graph), |
| @@ -310,11 +336,6 @@ |
| } |
| -void LChunk::Verify() const { |
| - // TODO(twuerthinger): Implement verification for chunk. |
| -} |
| - |
| - |
| int LChunk::GetNextSpillIndex(bool is_double) { |
| // Skip a slot if for a double-width slot. |
| if (is_double) spill_slot_count_++; |
| @@ -369,24 +390,6 @@ |
| } |
| -void LStoreNamed::PrintDataTo(StringStream* stream) const { |
| - object()->PrintTo(stream); |
| - stream->Add("."); |
| - stream->Add(*String::cast(*name())->ToCString()); |
| - stream->Add(" <- "); |
| - value()->PrintTo(stream); |
| -} |
| - |
| - |
| -void LStoreKeyed::PrintDataTo(StringStream* stream) const { |
| - object()->PrintTo(stream); |
| - stream->Add("["); |
| - key()->PrintTo(stream); |
| - stream->Add("] <- "); |
| - value()->PrintTo(stream); |
| -} |
| - |
| - |
| int LChunk::AddInstruction(LInstruction* instr, HBasicBlock* block) { |
| LGap* gap = new LGap(block); |
| int index = -1; |
| @@ -593,33 +596,52 @@ |
| } |
| -LInstruction* LChunkBuilder::Define(LInstruction* instr) { |
| +template<int I, int T> |
| +LInstruction* LChunkBuilder::Define(LTemplateInstruction<1, I, T>* instr, |
| + LUnallocated* result) { |
| + allocator_->RecordDefinition(current_instruction_, result); |
| + instr->set_result(result); |
| + return instr; |
| +} |
| + |
| + |
| +template<int I, int T> |
| +LInstruction* LChunkBuilder::Define(LTemplateInstruction<1, I, T>* instr) { |
| return Define(instr, new LUnallocated(LUnallocated::NONE)); |
| } |
| -LInstruction* LChunkBuilder::DefineAsRegister(LInstruction* instr) { |
| +template<int I, int T> |
| +LInstruction* LChunkBuilder::DefineAsRegister( |
| + LTemplateInstruction<1, I, T>* instr) { |
| return Define(instr, new LUnallocated(LUnallocated::MUST_HAVE_REGISTER)); |
| } |
| -LInstruction* LChunkBuilder::DefineAsSpilled(LInstruction* instr, int index) { |
| +template<int I, int T> |
| +LInstruction* LChunkBuilder::DefineAsSpilled( |
| + LTemplateInstruction<1, I, T>* instr, int index) { |
| return Define(instr, new LUnallocated(LUnallocated::FIXED_SLOT, index)); |
| } |
| -LInstruction* LChunkBuilder::DefineSameAsFirst(LInstruction* instr) { |
| +template<int I, int T> |
| +LInstruction* LChunkBuilder::DefineSameAsFirst( |
| + LTemplateInstruction<1, I, T>* instr) { |
| return Define(instr, new LUnallocated(LUnallocated::SAME_AS_FIRST_INPUT)); |
| } |
| -LInstruction* LChunkBuilder::DefineFixed(LInstruction* instr, Register reg) { |
| +template<int I, int T> |
| +LInstruction* LChunkBuilder::DefineFixed( |
| + LTemplateInstruction<1, I, T>* instr, Register reg) { |
| return Define(instr, ToUnallocated(reg)); |
| } |
| -LInstruction* LChunkBuilder::DefineFixedDouble(LInstruction* instr, |
| - DoubleRegister reg) { |
| +template<int I, int T> |
| +LInstruction* LChunkBuilder::DefineFixedDouble( |
| + LTemplateInstruction<1, I, T>* instr, DoubleRegister reg) { |
| return Define(instr, ToUnallocated(reg)); |
| } |
| @@ -687,13 +709,6 @@ |
| } |
| -LInstruction* LChunkBuilder::Define(LInstruction* instr, LUnallocated* result) { |
| - allocator_->RecordDefinition(current_instruction_, result); |
| - instr->set_result(result); |
| - return instr; |
| -} |
| - |
| - |
| LUnallocated* LChunkBuilder::TempRegister() { |
| LUnallocated* operand = new LUnallocated(LUnallocated::MUST_HAVE_REGISTER); |
| allocator_->RecordTemporary(operand); |
| @@ -801,7 +816,7 @@ |
| ASSERT(right->representation().IsTagged()); |
| LOperand* left_operand = UseFixed(left, r1); |
| LOperand* right_operand = UseFixed(right, r0); |
| - LInstruction* result = new LArithmeticT(op, left_operand, right_operand); |
| + LArithmeticT* result = new LArithmeticT(op, left_operand, right_operand); |
| return MarkAsCall(DefineFixed(result, r0), instr); |
| } |
| @@ -882,8 +897,17 @@ |
| if (FLAG_stress_environments && !instr->HasEnvironment()) { |
| instr = AssignEnvironment(instr); |
| } |
| - if (current->IsTest()) { |
| - instr->set_hydrogen_value(HTest::cast(current)->value()); |
| + if (current->IsTest() && !instr->IsGoto()) { |
| + // TODO(fschneider): Handle test instructions uniformly like |
|
Søren Thygesen Gjesse
2011/01/24 08:08:40
Username -> issue number
fschneider
2011/01/24 09:40:16
I removed the todo since it really is part of our
|
| + // other instructions. This requires us to generate the right |
| + // branch instruction already at the HIR level. |
| + ASSERT(instr->IsControl()); |
| + HTest* test = HTest::cast(current); |
| + instr->set_hydrogen_value(test->value()); |
| + HBasicBlock* first = test->FirstSuccessor(); |
| + HBasicBlock* second = test->SecondSuccessor(); |
| + ASSERT(first != NULL && second != NULL); |
| + instr->SetBranchTargets(first->block_id(), second->block_id()); |
| } else { |
| instr->set_hydrogen_value(current); |
| } |
| @@ -939,21 +963,13 @@ |
| LInstruction* LChunkBuilder::DoTest(HTest* instr) { |
| HValue* v = instr->value(); |
| - HBasicBlock* first = instr->FirstSuccessor(); |
| - HBasicBlock* second = instr->SecondSuccessor(); |
| - ASSERT(first != NULL && second != NULL); |
| - int first_id = first->block_id(); |
| - int second_id = second->block_id(); |
| - |
| if (v->EmitAtUses()) { |
| if (v->IsClassOfTest()) { |
| HClassOfTest* compare = HClassOfTest::cast(v); |
| ASSERT(compare->value()->representation().IsTagged()); |
| return new LClassOfTestAndBranch(UseTempRegister(compare->value()), |
| - TempRegister(), |
| - first_id, |
| - second_id); |
| + TempRegister()); |
| } else if (v->IsCompare()) { |
| HCompare* compare = HCompare::cast(v); |
| Token::Value op = compare->token(); |
| @@ -964,16 +980,12 @@ |
| ASSERT(left->representation().IsInteger32()); |
| ASSERT(right->representation().IsInteger32()); |
| return new LCmpIDAndBranch(UseRegisterAtStart(left), |
| - UseOrConstantAtStart(right), |
| - first_id, |
| - second_id); |
| + UseOrConstantAtStart(right)); |
| } else if (r.IsDouble()) { |
| ASSERT(left->representation().IsDouble()); |
| ASSERT(right->representation().IsDouble()); |
| return new LCmpIDAndBranch(UseRegisterAtStart(left), |
| - UseRegisterAtStart(right), |
| - first_id, |
| - second_id); |
| + UseRegisterAtStart(right)); |
| } else { |
| ASSERT(left->representation().IsTagged()); |
| ASSERT(right->representation().IsTagged()); |
| @@ -981,38 +993,30 @@ |
| LOperand* left_operand = UseFixed(left, reversed ? r0 : r1); |
| LOperand* right_operand = UseFixed(right, reversed ? r1 : r0); |
| LInstruction* result = new LCmpTAndBranch(left_operand, |
| - right_operand, |
| - first_id, |
| - second_id); |
| + right_operand); |
| return MarkAsCall(result, instr); |
| } |
| } else if (v->IsIsSmi()) { |
| HIsSmi* compare = HIsSmi::cast(v); |
| ASSERT(compare->value()->representation().IsTagged()); |
| - return new LIsSmiAndBranch(Use(compare->value()), |
| - first_id, |
| - second_id); |
| + return new LIsSmiAndBranch(Use(compare->value())); |
| } else if (v->IsHasInstanceType()) { |
| HHasInstanceType* compare = HHasInstanceType::cast(v); |
| ASSERT(compare->value()->representation().IsTagged()); |
| - |
| - return new LHasInstanceTypeAndBranch(UseRegisterAtStart(compare->value()), |
| - first_id, |
| - second_id); |
| + return new LHasInstanceTypeAndBranch( |
| + UseRegisterAtStart(compare->value())); |
| } else if (v->IsHasCachedArrayIndex()) { |
| HHasCachedArrayIndex* compare = HHasCachedArrayIndex::cast(v); |
| ASSERT(compare->value()->representation().IsTagged()); |
| return new LHasCachedArrayIndexAndBranch( |
| - UseRegisterAtStart(compare->value()), first_id, second_id); |
| + UseRegisterAtStart(compare->value())); |
| } else if (v->IsIsNull()) { |
| HIsNull* compare = HIsNull::cast(v); |
| ASSERT(compare->value()->representation().IsTagged()); |
| - return new LIsNullAndBranch(UseRegisterAtStart(compare->value()), |
| - first_id, |
| - second_id); |
| + return new LIsNullAndBranch(UseRegisterAtStart(compare->value())); |
| } else if (v->IsIsObject()) { |
| HIsObject* compare = HIsObject::cast(v); |
| ASSERT(compare->value()->representation().IsTagged()); |
| @@ -1021,41 +1025,33 @@ |
| LOperand* temp2 = TempRegister(); |
| return new LIsObjectAndBranch(UseRegisterAtStart(compare->value()), |
| temp1, |
| - temp2, |
| - first_id, |
| - second_id); |
| + temp2); |
| } else if (v->IsCompareJSObjectEq()) { |
| HCompareJSObjectEq* compare = HCompareJSObjectEq::cast(v); |
| return new LCmpJSObjectEqAndBranch(UseRegisterAtStart(compare->left()), |
| - UseRegisterAtStart(compare->right()), |
| - first_id, |
| - second_id); |
| + UseRegisterAtStart(compare->right())); |
| } else if (v->IsInstanceOf()) { |
| HInstanceOf* instance_of = HInstanceOf::cast(v); |
| LInstruction* result = |
| new LInstanceOfAndBranch(Use(instance_of->left()), |
| - Use(instance_of->right()), |
| - first_id, |
| - second_id); |
| + Use(instance_of->right())); |
| return MarkAsCall(result, instr); |
| } else if (v->IsTypeofIs()) { |
| HTypeofIs* typeof_is = HTypeofIs::cast(v); |
| - return new LTypeofIsAndBranch(UseTempRegister(typeof_is->value()), |
| - first_id, |
| - second_id); |
| + return new LTypeofIsAndBranch(UseTempRegister(typeof_is->value())); |
| } else { |
| if (v->IsConstant()) { |
| if (HConstant::cast(v)->handle()->IsTrue()) { |
| - return new LGoto(first_id); |
| + return new LGoto(instr->FirstSuccessor()->block_id()); |
| } else if (HConstant::cast(v)->handle()->IsFalse()) { |
| - return new LGoto(second_id); |
| + return new LGoto(instr->SecondSuccessor()->block_id()); |
| } |
| } |
| Abort("Undefined compare before branch"); |
| return NULL; |
| } |
| } |
| - return new LBranch(UseRegisterAtStart(v), first_id, second_id); |
| + return new LBranch(UseRegisterAtStart(v)); |
| } |
| @@ -1078,7 +1074,7 @@ |
| LInstruction* LChunkBuilder::DoInstanceOf(HInstanceOf* instr) { |
| - LInstruction* result = |
| + LInstanceOf* result = |
| new LInstanceOf(UseFixed(instr->left(), r0), |
| UseFixed(instr->right(), r1)); |
| return MarkAsCall(DefineFixed(result, r0), instr); |
| @@ -1087,7 +1083,7 @@ |
| LInstruction* LChunkBuilder::DoInstanceOfKnownGlobal( |
| HInstanceOfKnownGlobal* instr) { |
| - LInstruction* result = |
| + LInstanceOfKnownGlobal* result = |
| new LInstanceOfKnownGlobal(UseFixed(instr->value(), r0), FixedTemp(r4)); |
| MarkAsSaveDoubles(result); |
| return AssignEnvironment(AssignPointerMap(DefineFixed(result, r0))); |
| @@ -1099,10 +1095,10 @@ |
| LOperand* receiver = UseFixed(instr->receiver(), r0); |
| LOperand* length = UseRegisterAtStart(instr->length()); |
| LOperand* elements = UseRegisterAtStart(instr->elements()); |
| - LInstruction* result = new LApplyArguments(function, |
| - receiver, |
| - length, |
| - elements); |
| + LApplyArguments* result = new LApplyArguments(function, |
| + receiver, |
| + length, |
| + elements); |
| return MarkAsCall(DefineFixed(result, r0), instr, CAN_DEOPTIMIZE_EAGERLY); |
| } |
| @@ -1135,7 +1131,7 @@ |
| BuiltinFunctionId op = instr->op(); |
| LOperand* input = UseRegisterAtStart(instr->value()); |
| LOperand* temp = (op == kMathFloor) ? TempRegister() : NULL; |
| - LInstruction* result = new LUnaryMathOperation(input, temp); |
| + LUnaryMathOperation* result = new LUnaryMathOperation(input, temp); |
| switch (op) { |
| case kMathAbs: |
| return AssignEnvironment(AssignPointerMap(DefineSameAsFirst(result))); |
| @@ -1168,8 +1164,8 @@ |
| LInstruction* LChunkBuilder::DoCallKeyed(HCallKeyed* instr) { |
| ASSERT(instr->key()->representation().IsTagged()); |
| argument_count_ -= instr->argument_count(); |
| - UseFixed(instr->key(), r2); |
| - return MarkAsCall(DefineFixed(new LCallKeyed, r0), instr); |
| + LOperand* key = UseFixed(instr->key(), r2); |
| + return MarkAsCall(DefineFixed(new LCallKeyed(key), r0), instr); |
| } |
| @@ -1194,7 +1190,7 @@ |
| LInstruction* LChunkBuilder::DoCallNew(HCallNew* instr) { |
| LOperand* constructor = UseFixed(instr->constructor(), r1); |
| argument_count_ -= instr->argument_count(); |
| - LInstruction* result = new LCallNew(constructor); |
| + LCallNew* result = new LCallNew(constructor); |
| return MarkAsCall(DefineFixed(result, r0), instr); |
| } |
| @@ -1384,7 +1380,7 @@ |
| bool reversed = (op == Token::GT || op == Token::LTE); |
| LOperand* left = UseFixed(instr->left(), reversed ? r0 : r1); |
| LOperand* right = UseFixed(instr->right(), reversed ? r1 : r0); |
| - LInstruction* result = new LCmpT(left, right); |
| + LCmpT* result = new LCmpT(left, right); |
| return MarkAsCall(DefineFixed(result, r0), instr); |
| } |
| } |
| @@ -1394,7 +1390,7 @@ |
| HCompareJSObjectEq* instr) { |
| LOperand* left = UseRegisterAtStart(instr->left()); |
| LOperand* right = UseRegisterAtStart(instr->right()); |
| - LInstruction* result = new LCmpJSObjectEq(left, right); |
| + LCmpJSObjectEq* result = new LCmpJSObjectEq(left, right); |
| return DefineAsRegister(result); |
| } |
| @@ -1461,7 +1457,7 @@ |
| LInstruction* LChunkBuilder::DoValueOf(HValueOf* instr) { |
| LOperand* object = UseRegister(instr->value()); |
| - LInstruction* result = new LValueOf(object, TempRegister()); |
| + LValueOf* result = new LValueOf(object, TempRegister()); |
| return AssignEnvironment(DefineSameAsFirst(result)); |
| } |
| @@ -1484,7 +1480,7 @@ |
| if (from.IsTagged()) { |
| if (to.IsDouble()) { |
| LOperand* value = UseRegister(instr->value()); |
| - LInstruction* res = new LNumberUntagD(value); |
| + LNumberUntagD* res = new LNumberUntagD(value); |
| return AssignEnvironment(DefineAsRegister(res)); |
| } else { |
| ASSERT(to.IsInteger32()); |
| @@ -1510,13 +1506,13 @@ |
| // Make sure that the temp and result_temp registers are |
| // different. |
| LUnallocated* result_temp = TempRegister(); |
| - LInstruction* result = new LNumberTagD(value, temp1, temp2); |
| + LNumberTagD* result = new LNumberTagD(value, temp1, temp2); |
| Define(result, result_temp); |
| return AssignPointerMap(result); |
| } else { |
| ASSERT(to.IsInteger32()); |
| LOperand* value = UseRegister(instr->value()); |
| - LInstruction* res = new LDoubleToI(value); |
| + LDoubleToI* res = new LDoubleToI(value); |
| return AssignEnvironment(DefineAsRegister(res)); |
| } |
| } else if (from.IsInteger32()) { |
| @@ -1526,7 +1522,7 @@ |
| if (val->HasRange() && val->range()->IsInSmiRange()) { |
| return DefineSameAsFirst(new LSmiTag(value)); |
| } else { |
| - LInstruction* result = new LNumberTagI(value); |
| + LNumberTagI* result = new LNumberTagI(value); |
| return AssignEnvironment(AssignPointerMap(DefineSameAsFirst(result))); |
| } |
| } else { |
| @@ -1603,7 +1599,7 @@ |
| LInstruction* LChunkBuilder::DoLoadGlobal(HLoadGlobal* instr) { |
| - LInstruction* result = new LLoadGlobal(); |
| + LLoadGlobal* result = new LLoadGlobal(); |
| return instr->check_hole_value() |
| ? AssignEnvironment(DefineAsRegister(result)) |
| : DefineAsRegister(result); |
| @@ -1652,7 +1648,7 @@ |
| ASSERT(instr->key()->representation().IsInteger32()); |
| LOperand* obj = UseRegisterAtStart(instr->object()); |
| LOperand* key = UseRegisterAtStart(instr->key()); |
| - LInstruction* result = new LLoadKeyedFastElement(obj, key); |
| + LLoadKeyedFastElement* result = new LLoadKeyedFastElement(obj, key); |
| return AssignEnvironment(DefineSameAsFirst(result)); |
| } |
| @@ -1726,7 +1722,7 @@ |
| LInstruction* LChunkBuilder::DoStringCharCodeAt(HStringCharCodeAt* instr) { |
| LOperand* string = UseRegister(instr->string()); |
| LOperand* index = UseRegisterOrConstant(instr->index()); |
| - LInstruction* result = new LStringCharCodeAt(string, index); |
| + LStringCharCodeAt* result = new LStringCharCodeAt(string, index); |
| return AssignEnvironment(AssignPointerMap(DefineAsRegister(result))); |
| } |
| @@ -1760,7 +1756,7 @@ |
| LInstruction* LChunkBuilder::DoDeleteProperty(HDeleteProperty* instr) { |
| LOperand* object = UseRegisterAtStart(instr->object()); |
| LOperand* key = UseRegisterAtStart(instr->key()); |
| - LInstruction* result = new LDeleteProperty(object, key); |
| + LDeleteProperty* result = new LDeleteProperty(object, key); |
| return MarkAsCall(DefineFixed(result, r0), instr); |
| } |
| @@ -1801,13 +1797,13 @@ |
| LOperand* arguments = UseRegister(instr->arguments()); |
| LOperand* length = UseTempRegister(instr->length()); |
| LOperand* index = UseRegister(instr->index()); |
| - LInstruction* result = new LAccessArgumentsAt(arguments, length, index); |
| - return DefineAsRegister(AssignEnvironment(result)); |
| + LAccessArgumentsAt* result = new LAccessArgumentsAt(arguments, length, index); |
| + return AssignEnvironment(DefineAsRegister(result)); |
| } |
| LInstruction* LChunkBuilder::DoTypeof(HTypeof* instr) { |
| - LInstruction* result = new LTypeof(UseRegisterAtStart(instr->value())); |
| + LTypeof* result = new LTypeof(UseRegisterAtStart(instr->value())); |
| return MarkAsCall(DefineFixed(result, r0), instr); |
| } |