Commit dcf4bd63 authored by bmeurer@chromium.org's avatar bmeurer@chromium.org

[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
parent 6a0567a9
......@@ -178,13 +178,8 @@ TARGET_TEST_F(InstructionSelectorTest, ReferenceParameter) {
// Finish.
typedef InstructionSelectorTestWithParam<MachineType>
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<MachineType>
......
......@@ -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<int>(node));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment