Chromium Code Reviews| Index: src/arm/lithium-arm.cc |
| =================================================================== |
| --- src/arm/lithium-arm.cc (revision 8460) |
| +++ src/arm/lithium-arm.cc (working copy) |
| @@ -265,12 +265,6 @@ |
| } |
| -void LTypeofIs::PrintDataTo(StringStream* stream) { |
| - InputAt(0)->PrintTo(stream); |
| - stream->Add(" == \"%s\"", *hydrogen()->type_literal()->ToCString()); |
| -} |
| - |
| - |
| void LTypeofIsAndBranch::PrintDataTo(StringStream* stream) { |
| stream->Add("if typeof "); |
| InputAt(0)->PrintTo(stream); |
| @@ -340,13 +334,6 @@ |
| } |
| -void LClassOfTest::PrintDataTo(StringStream* stream) { |
| - stream->Add("= class_of_test("); |
| - InputAt(0)->PrintTo(stream); |
| - stream->Add(", \"%o\")", *hydrogen()->class_name()); |
| -} |
| - |
| - |
| void LAccessArgumentsAt::PrintDataTo(StringStream* stream) { |
| arguments()->PrintTo(stream); |
| @@ -990,18 +977,7 @@ |
| if (FLAG_stress_environments && !instr->HasEnvironment()) { |
| instr = AssignEnvironment(instr); |
| } |
| - if (current->IsTest() && !instr->IsGoto()) { |
| - 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); |
| - } |
| - |
| + instr->set_hydrogen_value(current); |
| chunk_->AddInstruction(instr, current_block_); |
| } |
| current_instruction_ = old_current; |
| @@ -1048,78 +1024,13 @@ |
| LInstruction* LChunkBuilder::DoTest(HTest* instr) { |
| HValue* v = instr->value(); |
| - if (!v->EmitAtUses()) return new LBranch(UseRegisterAtStart(v)); |
| - ASSERT(!v->HasSideEffects()); |
| - if (v->IsClassOfTest()) { |
| - HClassOfTest* compare = HClassOfTest::cast(v); |
| - ASSERT(compare->value()->representation().IsTagged()); |
| - return new LClassOfTestAndBranch(UseTempRegister(compare->value()), |
| - TempRegister()); |
| - } else if (v->IsCompare()) { |
| - HCompare* compare = HCompare::cast(v); |
| - HValue* left = compare->left(); |
| - HValue* right = compare->right(); |
| - Representation r = compare->GetInputRepresentation(); |
| - if (r.IsInteger32()) { |
| - ASSERT(left->representation().IsInteger32()); |
| - ASSERT(right->representation().IsInteger32()); |
| - return new LCmpIDAndBranch(UseRegisterAtStart(left), |
| - UseRegisterAtStart(right)); |
| - } else { |
| - ASSERT(r.IsDouble()); |
| - ASSERT(left->representation().IsDouble()); |
| - ASSERT(right->representation().IsDouble()); |
| - return new LCmpIDAndBranch(UseRegisterAtStart(left), |
| - UseRegisterAtStart(right)); |
| - } |
| - } else if (v->IsIsSmi()) { |
| - HIsSmi* compare = HIsSmi::cast(v); |
| - ASSERT(compare->value()->representation().IsTagged()); |
| - return new LIsSmiAndBranch(Use(compare->value())); |
| - } else if (v->IsIsUndetectable()) { |
| - HIsUndetectable* compare = HIsUndetectable::cast(v); |
| - ASSERT(compare->value()->representation().IsTagged()); |
| - return new LIsUndetectableAndBranch(UseRegisterAtStart(compare->value()), |
| - TempRegister()); |
| - } else if (v->IsHasInstanceType()) { |
| - HHasInstanceType* compare = HHasInstanceType::cast(v); |
| - ASSERT(compare->value()->representation().IsTagged()); |
| - 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())); |
| - } else if (v->IsIsNull()) { |
| - HIsNull* compare = HIsNull::cast(v); |
| - ASSERT(compare->value()->representation().IsTagged()); |
| - return new LIsNullAndBranch(UseRegisterAtStart(compare->value())); |
| - } else if (v->IsIsObject()) { |
| - HIsObject* compare = HIsObject::cast(v); |
| - ASSERT(compare->value()->representation().IsTagged()); |
| - LOperand* temp = TempRegister(); |
| - return new LIsObjectAndBranch(UseRegisterAtStart(compare->value()), temp); |
| - } else if (v->IsCompareObjectEq()) { |
| - HCompareObjectEq* compare = HCompareObjectEq::cast(v); |
| - return new LCmpObjectEqAndBranch(UseRegisterAtStart(compare->left()), |
| - UseRegisterAtStart(compare->right())); |
| - } else if (v->IsCompareConstantEq()) { |
| - HCompareConstantEq* compare = HCompareConstantEq::cast(v); |
| - return new LCmpConstantEqAndBranch(UseRegisterAtStart(compare->value())); |
| - } else if (v->IsTypeofIs()) { |
| - HTypeofIs* typeof_is = HTypeofIs::cast(v); |
| - return new LTypeofIsAndBranch(UseTempRegister(typeof_is->value())); |
| - } else if (v->IsIsConstructCall()) { |
| - return new LIsConstructCallAndBranch(TempRegister()); |
| - } else if (v->IsConstant()) { |
| + if (v->EmitAtUses()) { |
| HBasicBlock* successor = HConstant::cast(v)->ToBoolean() |
| ? instr->FirstSuccessor() |
| : instr->SecondSuccessor(); |
| return new LGoto(successor->block_id()); |
| - } else { |
| - Abort("Undefined compare before branch"); |
| - return NULL; |
| } |
| + return new LBranch(UseRegisterAtStart(v)); |
| } |
| @@ -1477,85 +1388,83 @@ |
| } |
| -LInstruction* LChunkBuilder::DoCompare(HCompare* instr) { |
| +LInstruction* LChunkBuilder::DoCompareGeneric(HCompareGeneric* instr) { |
| Token::Value op = instr->token(); |
| Representation r = instr->GetInputRepresentation(); |
| + ASSERT(instr->left()->representation().IsTagged()); |
| + ASSERT(instr->right()->representation().IsTagged()); |
| + bool reversed = (op == Token::GT || op == Token::LTE); |
| + LOperand* left = UseFixed(instr->left(), reversed ? r0 : r1); |
| + LOperand* right = UseFixed(instr->right(), reversed ? r1 : r0); |
| + LCmpT* result = new LCmpT(left, right); |
| + return MarkAsCall(DefineFixed(result, r0), instr); |
| +} |
| + |
| + |
| +LInstruction* LChunkBuilder::DoCompareIDAndBranch( |
| + HCompareIDAndBranch* instr) { |
| + HValue* left = instr->left(); |
| + HValue* right = instr->right(); |
| + Representation r = instr->GetInputRepresentation(); |
| if (r.IsInteger32()) { |
| - ASSERT(instr->left()->representation().IsInteger32()); |
| - ASSERT(instr->right()->representation().IsInteger32()); |
| - LOperand* left = UseRegisterAtStart(instr->left()); |
| - LOperand* right = UseRegisterAtStart(instr->right()); |
| - return DefineAsRegister(new LCmpID(left, right)); |
| - } else if (r.IsDouble()) { |
| - ASSERT(instr->left()->representation().IsDouble()); |
| - ASSERT(instr->right()->representation().IsDouble()); |
| - LOperand* left = UseRegisterAtStart(instr->left()); |
| - LOperand* right = UseRegisterAtStart(instr->right()); |
| - return DefineAsRegister(new LCmpID(left, right)); |
| + ASSERT(left->representation().IsInteger32()); |
| + ASSERT(right->representation().IsInteger32()); |
| + return new LCmpIDAndBranch(UseRegisterAtStart(left), |
|
Kevin Millikin (Chromium)
2011/06/30 10:52:03
I prefer to name the UseRegisterXXX subexpressions
fschneider
2011/06/30 13:13:36
I agree we should be consistent in this. It is a p
|
| + UseRegisterAtStart(right)); |
| } else { |
| - ASSERT(instr->left()->representation().IsTagged()); |
| - ASSERT(instr->right()->representation().IsTagged()); |
| - bool reversed = (op == Token::GT || op == Token::LTE); |
| - LOperand* left = UseFixed(instr->left(), reversed ? r0 : r1); |
| - LOperand* right = UseFixed(instr->right(), reversed ? r1 : r0); |
| - LCmpT* result = new LCmpT(left, right); |
| - return MarkAsCall(DefineFixed(result, r0), instr); |
| + ASSERT(r.IsDouble()); |
| + ASSERT(left->representation().IsDouble()); |
| + ASSERT(right->representation().IsDouble()); |
| + return new LCmpIDAndBranch(UseRegisterAtStart(left), |
| + UseRegisterAtStart(right)); |
| } |
| } |
| -LInstruction* LChunkBuilder::DoCompareObjectEq(HCompareObjectEq* instr) { |
| - LOperand* left = UseRegisterAtStart(instr->left()); |
| - LOperand* right = UseRegisterAtStart(instr->right()); |
| - LCmpObjectEq* result = new LCmpObjectEq(left, right); |
| - return DefineAsRegister(result); |
| +LInstruction* LChunkBuilder::DoCompareObjectEqAndBranch( |
| + HCompareObjectEqAndBranch* instr) { |
| + return new LCmpObjectEqAndBranch(UseRegisterAtStart(instr->left()), |
| + UseRegisterAtStart(instr->right())); |
| } |
| -LInstruction* LChunkBuilder::DoCompareConstantEq( |
| - HCompareConstantEq* instr) { |
| - LOperand* left = UseRegisterAtStart(instr->value()); |
| - return DefineAsRegister(new LCmpConstantEq(left)); |
| +LInstruction* LChunkBuilder::DoCompareConstantEqAndBranch( |
| + HCompareConstantEqAndBranch* instr) { |
| + return new LCmpConstantEqAndBranch(UseRegisterAtStart(instr->value())); |
| } |
| -LInstruction* LChunkBuilder::DoIsNull(HIsNull* instr) { |
| +LInstruction* LChunkBuilder::DoIsNullAndBranch(HIsNullAndBranch* instr) { |
| ASSERT(instr->value()->representation().IsTagged()); |
| - LOperand* value = UseRegisterAtStart(instr->value()); |
| - |
| - return DefineAsRegister(new LIsNull(value)); |
| + return new LIsNullAndBranch(UseRegisterAtStart(instr->value())); |
| } |
| -LInstruction* LChunkBuilder::DoIsObject(HIsObject* instr) { |
| +LInstruction* LChunkBuilder::DoIsObjectAndBranch(HIsObjectAndBranch* instr) { |
| ASSERT(instr->value()->representation().IsTagged()); |
| - LOperand* value = UseRegisterAtStart(instr->value()); |
| - |
| - return DefineAsRegister(new LIsObject(value)); |
| + LOperand* temp = TempRegister(); |
| + return new LIsObjectAndBranch(UseRegisterAtStart(instr->value()), temp); |
| } |
| -LInstruction* LChunkBuilder::DoIsSmi(HIsSmi* instr) { |
| +LInstruction* LChunkBuilder::DoIsSmiAndBranch(HIsSmiAndBranch* instr) { |
| ASSERT(instr->value()->representation().IsTagged()); |
| - LOperand* value = UseAtStart(instr->value()); |
| - |
| - return DefineAsRegister(new LIsSmi(value)); |
| + return new LIsSmiAndBranch(Use(instr->value())); |
| } |
| -LInstruction* LChunkBuilder::DoIsUndetectable(HIsUndetectable* instr) { |
| +LInstruction* LChunkBuilder::DoIsUndetectableAndBranch( |
| + HIsUndetectableAndBranch* instr) { |
| ASSERT(instr->value()->representation().IsTagged()); |
| - LOperand* value = UseRegisterAtStart(instr->value()); |
| - |
| - return DefineAsRegister(new LIsUndetectable(value)); |
| + return new LIsUndetectableAndBranch(UseRegisterAtStart(instr->value()), |
| + TempRegister()); |
| } |
| -LInstruction* LChunkBuilder::DoHasInstanceType(HHasInstanceType* instr) { |
| +LInstruction* LChunkBuilder::DoHasInstanceTypeAndBranch( |
| + HHasInstanceTypeAndBranch* instr) { |
| ASSERT(instr->value()->representation().IsTagged()); |
| - LOperand* value = UseRegisterAtStart(instr->value()); |
| - |
| - return DefineAsRegister(new LHasInstanceType(value)); |
| + return new LHasInstanceTypeAndBranch(UseRegisterAtStart(instr->value())); |
| } |
| @@ -1568,19 +1477,19 @@ |
| } |
| -LInstruction* LChunkBuilder::DoHasCachedArrayIndex( |
| - HHasCachedArrayIndex* instr) { |
| +LInstruction* LChunkBuilder::DoHasCachedArrayIndexAndBranch( |
| + HHasCachedArrayIndexAndBranch* instr) { |
| ASSERT(instr->value()->representation().IsTagged()); |
| - LOperand* value = UseRegister(instr->value()); |
| - |
| - return DefineAsRegister(new LHasCachedArrayIndex(value)); |
| + return new LHasCachedArrayIndexAndBranch( |
| + UseRegisterAtStart(instr->value())); |
| } |
| -LInstruction* LChunkBuilder::DoClassOfTest(HClassOfTest* instr) { |
| - ASSERT(instr->value()->representation().IsTagged()); |
| - LOperand* value = UseTempRegister(instr->value()); |
| - return DefineSameAsFirst(new LClassOfTest(value)); |
| +LInstruction* LChunkBuilder::DoClassOfTestAndBranch( |
| + HClassOfTestAndBranch* instr) { |
| + ASSERT(compare->value()->representation().IsTagged()); |
| + return new LClassOfTestAndBranch(UseTempRegister(instr->value()), |
| + TempRegister()); |
| } |
| @@ -2169,13 +2078,14 @@ |
| } |
| -LInstruction* LChunkBuilder::DoTypeofIs(HTypeofIs* instr) { |
| - return DefineSameAsFirst(new LTypeofIs(UseRegister(instr->value()))); |
| +LInstruction* LChunkBuilder::DoTypeofIsAndBranch(HTypeofIsAndBranch* instr) { |
| + return new LTypeofIsAndBranch(UseTempRegister(instr->value())); |
| } |
| -LInstruction* LChunkBuilder::DoIsConstructCall(HIsConstructCall* instr) { |
| - return DefineAsRegister(new LIsConstructCall()); |
| +LInstruction* LChunkBuilder::DoIsConstructCallAndBranch( |
| + HIsConstructCallAndBranch* instr) { |
| + return new LIsConstructCallAndBranch(TempRegister()); |
| } |