Index: src/compiler/instruction-selector.cc |
diff --git a/src/compiler/instruction-selector.cc b/src/compiler/instruction-selector.cc |
index bd3bfd73c9a7969a9dca3412945bb486d507b27d..157509310ba844c974dbe1aa8b35f96f7f79f1e0 100644 |
--- a/src/compiler/instruction-selector.cc |
+++ b/src/compiler/instruction-selector.cc |
@@ -853,8 +853,17 @@ void InstructionSelector::VisitParameter(Node* node) { |
void InstructionSelector::VisitPhi(Node* node) { |
// TODO(bmeurer): Emit a PhiInstruction here. |
- for (InputIter i = node->inputs().begin(); i != node->inputs().end(); ++i) { |
- MarkAsUsed(*i); |
+ PhiInstruction* phi = new (instruction_zone()) |
+ PhiInstruction(instruction_zone(), sequence()->GetVirtualRegister(node)); |
+ sequence()->InstructionBlockAt(current_block_->GetRpoNumber())->AddPhi(phi); |
+ Node::Inputs inputs = node->inputs(); |
+ size_t j = 0; |
+ for (Node::Inputs::iterator iter(inputs.begin()); iter != inputs.end(); |
+ ++iter, ++j) { |
+ MarkAsUsed(*iter); |
+ // TODO(mstarzinger): Use a ValueInputIterator instead. |
+ if (j >= current_block_->PredecessorCount()) continue; |
+ phi->operands().push_back(sequence()->GetVirtualRegister(*iter)); |
} |
} |