Index: src/compiler/instruction-selector.cc |
diff --git a/src/compiler/instruction-selector.cc b/src/compiler/instruction-selector.cc |
index a91b7db12689f665e9884601dbbe36a5c61f3487..840b75a5588208a45dd0cec090801ca395497189 100644 |
--- a/src/compiler/instruction-selector.cc |
+++ b/src/compiler/instruction-selector.cc |
@@ -457,6 +457,7 @@ void InstructionSelector::VisitBlock(BasicBlock* block) { |
// up". |
size_t current_node_end = instructions_.size(); |
VisitNode(node); |
+ // TODO(turbofan): only reverse if > 1 instruction emitted. |
std::reverse(instructions_.begin() + current_node_end, instructions_.end()); |
} |
@@ -536,6 +537,8 @@ MachineType InstructionSelector::GetMachineType(Node* node) { |
return kMachAnyTagged; |
case IrOpcode::kParameter: |
return linkage()->GetParameterType(OpParameter<int>(node)); |
+ case IrOpcode::kOsrValue: |
+ return kMachAnyTagged; |
case IrOpcode::kPhi: |
return OpParameter<MachineType>(node); |
case IrOpcode::kProjection: |
@@ -674,6 +677,8 @@ void InstructionSelector::VisitNode(Node* node) { |
MarkAsRepresentation(type, node); |
return VisitParameter(node); |
} |
+ case IrOpcode::kOsrValue: |
+ return VisitOsrValue(node); |
case IrOpcode::kPhi: { |
MachineType type = OpParameter<MachineType>(node); |
MarkAsRepresentation(type, node); |
@@ -958,6 +963,14 @@ void InstructionSelector::VisitParameter(Node* node) { |
} |
+void InstructionSelector::VisitOsrValue(Node* node) { |
+ OperandGenerator g(this); |
+ int index = OpParameter<int>(node); |
+ Emit(kArchNop, g.DefineAsLocation(node, linkage()->GetOsrValueLocation(index), |
+ kMachAnyTagged)); |
+} |
+ |
+ |
void InstructionSelector::VisitPhi(Node* node) { |
const int input_count = node->op()->ValueInputCount(); |
PhiInstruction* phi = new (instruction_zone()) |