Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/compiler/instruction-selector.h" | 5 #include "src/compiler/instruction-selector.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "src/compiler/instruction-selector-impl.h" | 9 #include "src/compiler/instruction-selector-impl.h" |
| 10 #include "src/compiler/node-matchers.h" | 10 #include "src/compiler/node-matchers.h" |
| (...skipping 712 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 723 } | 723 } |
| 724 } | 724 } |
| 725 switch (node->opcode()) { | 725 switch (node->opcode()) { |
| 726 case IrOpcode::kStart: | 726 case IrOpcode::kStart: |
| 727 case IrOpcode::kLoop: | 727 case IrOpcode::kLoop: |
| 728 case IrOpcode::kEnd: | 728 case IrOpcode::kEnd: |
| 729 case IrOpcode::kBranch: | 729 case IrOpcode::kBranch: |
| 730 case IrOpcode::kIfTrue: | 730 case IrOpcode::kIfTrue: |
| 731 case IrOpcode::kIfFalse: | 731 case IrOpcode::kIfFalse: |
| 732 case IrOpcode::kIfSuccess: | 732 case IrOpcode::kIfSuccess: |
| 733 case IrOpcode::kIfException: | |
| 734 case IrOpcode::kSwitch: | 733 case IrOpcode::kSwitch: |
| 735 case IrOpcode::kIfValue: | 734 case IrOpcode::kIfValue: |
| 736 case IrOpcode::kIfDefault: | 735 case IrOpcode::kIfDefault: |
| 737 case IrOpcode::kEffectPhi: | 736 case IrOpcode::kEffectPhi: |
| 738 case IrOpcode::kMerge: | 737 case IrOpcode::kMerge: |
| 739 // No code needed for these graph artifacts. | 738 // No code needed for these graph artifacts. |
| 740 return; | 739 return; |
| 740 case IrOpcode::kIfException: | |
| 741 return VisitIfException(node); | |
|
Benedikt Meurer
2015/03/10 09:42:08
MarkAsReference is missing.
Michael Starzinger
2015/03/31 11:58:44
Done.
| |
| 741 case IrOpcode::kFinish: | 742 case IrOpcode::kFinish: |
| 742 return MarkAsReference(node), VisitFinish(node); | 743 return MarkAsReference(node), VisitFinish(node); |
| 743 case IrOpcode::kParameter: { | 744 case IrOpcode::kParameter: { |
| 744 MachineType type = linkage()->GetParameterType(OpParameter<int>(node)); | 745 MachineType type = linkage()->GetParameterType(OpParameter<int>(node)); |
| 745 MarkAsRepresentation(type, node); | 746 MarkAsRepresentation(type, node); |
| 746 return VisitParameter(node); | 747 return VisitParameter(node); |
| 747 } | 748 } |
| 748 case IrOpcode::kOsrValue: | 749 case IrOpcode::kOsrValue: |
| 749 return MarkAsReference(node), VisitOsrValue(node); | 750 return MarkAsReference(node), VisitOsrValue(node); |
| 750 case IrOpcode::kPhi: { | 751 case IrOpcode::kPhi: { |
| (...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1035 | 1036 |
| 1036 void InstructionSelector::VisitParameter(Node* node) { | 1037 void InstructionSelector::VisitParameter(Node* node) { |
| 1037 OperandGenerator g(this); | 1038 OperandGenerator g(this); |
| 1038 int index = OpParameter<int>(node); | 1039 int index = OpParameter<int>(node); |
| 1039 Emit(kArchNop, | 1040 Emit(kArchNop, |
| 1040 g.DefineAsLocation(node, linkage()->GetParameterLocation(index), | 1041 g.DefineAsLocation(node, linkage()->GetParameterLocation(index), |
| 1041 linkage()->GetParameterType(index))); | 1042 linkage()->GetParameterType(index))); |
| 1042 } | 1043 } |
| 1043 | 1044 |
| 1044 | 1045 |
| 1046 void InstructionSelector::VisitIfException(Node* node) { | |
| 1047 OperandGenerator g(this); | |
| 1048 Node* call = node->InputAt(0); | |
| 1049 DCHECK_EQ(IrOpcode::kCall, call->opcode()); | |
| 1050 const CallDescriptor* descriptor = OpParameter<const CallDescriptor*>(call); | |
| 1051 Emit(kArchNop, g.DefineAsLocation(node, descriptor->GetReturnLocation(0), | |
| 1052 descriptor->GetReturnType(0))); | |
| 1053 } | |
| 1054 | |
| 1055 | |
| 1045 void InstructionSelector::VisitOsrValue(Node* node) { | 1056 void InstructionSelector::VisitOsrValue(Node* node) { |
| 1046 OperandGenerator g(this); | 1057 OperandGenerator g(this); |
| 1047 int index = OpParameter<int>(node); | 1058 int index = OpParameter<int>(node); |
| 1048 Emit(kArchNop, g.DefineAsLocation(node, linkage()->GetOsrValueLocation(index), | 1059 Emit(kArchNop, g.DefineAsLocation(node, linkage()->GetOsrValueLocation(index), |
| 1049 kMachAnyTagged)); | 1060 kMachAnyTagged)); |
| 1050 } | 1061 } |
| 1051 | 1062 |
| 1052 | 1063 |
| 1053 void InstructionSelector::VisitPhi(Node* node) { | 1064 void InstructionSelector::VisitPhi(Node* node) { |
| 1054 const int input_count = node->op()->ValueInputCount(); | 1065 const int input_count = node->op()->ValueInputCount(); |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1271 MachineOperatorBuilder::Flags | 1282 MachineOperatorBuilder::Flags |
| 1272 InstructionSelector::SupportedMachineOperatorFlags() { | 1283 InstructionSelector::SupportedMachineOperatorFlags() { |
| 1273 return MachineOperatorBuilder::Flag::kNoFlags; | 1284 return MachineOperatorBuilder::Flag::kNoFlags; |
| 1274 } | 1285 } |
| 1275 | 1286 |
| 1276 #endif // !V8_TURBOFAN_BACKEND | 1287 #endif // !V8_TURBOFAN_BACKEND |
| 1277 | 1288 |
| 1278 } // namespace compiler | 1289 } // namespace compiler |
| 1279 } // namespace internal | 1290 } // namespace internal |
| 1280 } // namespace v8 | 1291 } // namespace v8 |
| OLD | NEW |