From: bmeurer@chromium.org Date: Wed, 3 Sep 2014 08:49:21 +0000 (+0000) Subject: [turbofan] Finish nodes are always marked as references. X-Git-Tag: upstream/4.7.83~7180 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=dcf4bd63d0c40b1dd5ccd1fec314b5b20a2c6f4e;p=platform%2Fupstream%2Fv8.git [turbofan] Finish nodes are always marked as references. TEST=compiler-unittests,cctest R=mstarzinger@chromium.org Review URL: https://codereview.chromium.org/533083002 git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23636 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/compiler/instruction-selector-unittest.cc b/src/compiler/instruction-selector-unittest.cc index ad47ba6..36951a4 100644 --- a/src/compiler/instruction-selector-unittest.cc +++ b/src/compiler/instruction-selector-unittest.cc @@ -178,13 +178,8 @@ TARGET_TEST_F(InstructionSelectorTest, ReferenceParameter) { // Finish. -typedef InstructionSelectorTestWithParam - InstructionSelectorFinishTest; - - -TARGET_TEST_P(InstructionSelectorFinishTest, Parameter) { - const MachineType type = GetParam(); - StreamBuilder m(this, type, type); +TARGET_TEST_F(InstructionSelectorTest, Parameter) { + StreamBuilder m(this, kMachAnyTagged, kMachAnyTagged); Node* param = m.Parameter(0); Node* finish = m.NewNode(m.common()->Finish(1), param, m.graph()->start()); m.Return(finish); @@ -205,37 +200,8 @@ TARGET_TEST_P(InstructionSelectorFinishTest, Parameter) { } -TARGET_TEST_P(InstructionSelectorFinishTest, PropagateDoubleness) { - const MachineType type = GetParam(); - StreamBuilder m(this, type, type); - Node* param = m.Parameter(0); - Node* finish = m.NewNode(m.common()->Finish(1), param, m.graph()->start()); - m.Return(finish); - Stream s = m.Build(kAllInstructions); - EXPECT_EQ(s.IsDouble(param->id()), s.IsDouble(finish->id())); -} - - -TARGET_TEST_P(InstructionSelectorFinishTest, PropagateReferenceness) { - const MachineType type = GetParam(); - StreamBuilder m(this, type, type); - Node* param = m.Parameter(0); - Node* finish = m.NewNode(m.common()->Finish(1), param, m.graph()->start()); - m.Return(finish); - Stream s = m.Build(kAllInstructions); - EXPECT_EQ(s.IsReference(param->id()), s.IsReference(finish->id())); -} - - -INSTANTIATE_TEST_CASE_P(InstructionSelectorTest, InstructionSelectorFinishTest, - ::testing::Values(kMachFloat64, kMachInt8, kMachUint8, - kMachInt16, kMachUint16, kMachInt32, - kMachUint32, kMachInt64, kMachUint64, - kMachPtr, kMachAnyTagged)); - - // ----------------------------------------------------------------------------- -// Finish. +// Phi. typedef InstructionSelectorTestWithParam diff --git a/src/compiler/instruction-selector.cc b/src/compiler/instruction-selector.cc index 0e3f341..a530824 100644 --- a/src/compiler/instruction-selector.cc +++ b/src/compiler/instruction-selector.cc @@ -199,11 +199,10 @@ void InstructionSelector::MarkAsDouble(Node* node) { DCHECK(!IsReference(node)); sequence()->MarkAsDouble(node->id()); - // Propagate "doubleness" throughout Finish/Phi nodes. + // Propagate "doubleness" throughout Phi nodes. for (UseIter i = node->uses().begin(); i != node->uses().end(); ++i) { Node* user = *i; switch (user->opcode()) { - case IrOpcode::kFinish: case IrOpcode::kPhi: if (IsDouble(user)) continue; MarkAsDouble(user); @@ -226,11 +225,10 @@ void InstructionSelector::MarkAsReference(Node* node) { DCHECK(!IsDouble(node)); sequence()->MarkAsReference(node->id()); - // Propagate "referenceness" throughout Finish/Phi nodes. + // Propagate "referenceness" throughout Phi nodes. for (UseIter i = node->uses().begin(); i != node->uses().end(); ++i) { Node* user = *i; switch (user->opcode()) { - case IrOpcode::kFinish: case IrOpcode::kPhi: if (IsReference(user)) continue; MarkAsReference(user); @@ -482,7 +480,7 @@ void InstructionSelector::VisitNode(Node* node) { // No code needed for these graph artifacts. return; case IrOpcode::kFinish: - return VisitFinish(node); + return MarkAsReference(node), VisitFinish(node); case IrOpcode::kParameter: { LinkageLocation location = linkage()->GetParameterLocation(OpParameter(node));