Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(510)

Side by Side Diff: src/compiler/instruction-selector.cc

Issue 989123003: [turbofan] Project exception value out of calls. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Addressed comments. Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/compiler/instruction-selector.h ('k') | src/compiler/opcodes.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 578 matching lines...) Expand 10 before | Expand all | Expand 10 after
589 } 589 }
590 } 590 }
591 switch (node->opcode()) { 591 switch (node->opcode()) {
592 case IrOpcode::kStart: 592 case IrOpcode::kStart:
593 case IrOpcode::kLoop: 593 case IrOpcode::kLoop:
594 case IrOpcode::kEnd: 594 case IrOpcode::kEnd:
595 case IrOpcode::kBranch: 595 case IrOpcode::kBranch:
596 case IrOpcode::kIfTrue: 596 case IrOpcode::kIfTrue:
597 case IrOpcode::kIfFalse: 597 case IrOpcode::kIfFalse:
598 case IrOpcode::kIfSuccess: 598 case IrOpcode::kIfSuccess:
599 case IrOpcode::kIfException:
600 case IrOpcode::kSwitch: 599 case IrOpcode::kSwitch:
601 case IrOpcode::kIfValue: 600 case IrOpcode::kIfValue:
602 case IrOpcode::kIfDefault: 601 case IrOpcode::kIfDefault:
603 case IrOpcode::kEffectPhi: 602 case IrOpcode::kEffectPhi:
604 case IrOpcode::kMerge: 603 case IrOpcode::kMerge:
605 // No code needed for these graph artifacts. 604 // No code needed for these graph artifacts.
606 return; 605 return;
606 case IrOpcode::kIfException:
607 return MarkAsReference(node), VisitIfException(node);
607 case IrOpcode::kFinish: 608 case IrOpcode::kFinish:
608 return MarkAsReference(node), VisitFinish(node); 609 return MarkAsReference(node), VisitFinish(node);
609 case IrOpcode::kParameter: { 610 case IrOpcode::kParameter: {
610 MachineType type = linkage()->GetParameterType(OpParameter<int>(node)); 611 MachineType type = linkage()->GetParameterType(OpParameter<int>(node));
611 MarkAsRepresentation(type, node); 612 MarkAsRepresentation(type, node);
612 return VisitParameter(node); 613 return VisitParameter(node);
613 } 614 }
614 case IrOpcode::kOsrValue: 615 case IrOpcode::kOsrValue:
615 return MarkAsReference(node), VisitOsrValue(node); 616 return MarkAsReference(node), VisitOsrValue(node);
616 case IrOpcode::kPhi: { 617 case IrOpcode::kPhi: {
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after
962 963
963 void InstructionSelector::VisitParameter(Node* node) { 964 void InstructionSelector::VisitParameter(Node* node) {
964 OperandGenerator g(this); 965 OperandGenerator g(this);
965 int index = OpParameter<int>(node); 966 int index = OpParameter<int>(node);
966 Emit(kArchNop, 967 Emit(kArchNop,
967 g.DefineAsLocation(node, linkage()->GetParameterLocation(index), 968 g.DefineAsLocation(node, linkage()->GetParameterLocation(index),
968 linkage()->GetParameterType(index))); 969 linkage()->GetParameterType(index)));
969 } 970 }
970 971
971 972
973 void InstructionSelector::VisitIfException(Node* node) {
974 OperandGenerator g(this);
975 Node* call = node->InputAt(0);
976 DCHECK_EQ(IrOpcode::kCall, call->opcode());
977 const CallDescriptor* descriptor = OpParameter<const CallDescriptor*>(call);
978 Emit(kArchNop, g.DefineAsLocation(node, descriptor->GetReturnLocation(0),
979 descriptor->GetReturnType(0)));
980 }
981
982
972 void InstructionSelector::VisitOsrValue(Node* node) { 983 void InstructionSelector::VisitOsrValue(Node* node) {
973 OperandGenerator g(this); 984 OperandGenerator g(this);
974 int index = OpParameter<int>(node); 985 int index = OpParameter<int>(node);
975 Emit(kArchNop, g.DefineAsLocation(node, linkage()->GetOsrValueLocation(index), 986 Emit(kArchNop, g.DefineAsLocation(node, linkage()->GetOsrValueLocation(index),
976 kMachAnyTagged)); 987 kMachAnyTagged));
977 } 988 }
978 989
979 990
980 void InstructionSelector::VisitPhi(Node* node) { 991 void InstructionSelector::VisitPhi(Node* node) {
981 const int input_count = node->op()->ValueInputCount(); 992 const int input_count = node->op()->ValueInputCount();
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
1183 MachineOperatorBuilder::Flags 1194 MachineOperatorBuilder::Flags
1184 InstructionSelector::SupportedMachineOperatorFlags() { 1195 InstructionSelector::SupportedMachineOperatorFlags() {
1185 return MachineOperatorBuilder::Flag::kNoFlags; 1196 return MachineOperatorBuilder::Flag::kNoFlags;
1186 } 1197 }
1187 1198
1188 #endif // !V8_TURBOFAN_BACKEND 1199 #endif // !V8_TURBOFAN_BACKEND
1189 1200
1190 } // namespace compiler 1201 } // namespace compiler
1191 } // namespace internal 1202 } // namespace internal
1192 } // namespace v8 1203 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/instruction-selector.h ('k') | src/compiler/opcodes.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698