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

Side by Side Diff: src/compiler/simplified-lowering.cc

Issue 1015423002: [turbofan] Remember types for deoptimization during simplified lowering. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Address review comments Created 5 years, 9 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/opcodes.h ('k') | src/compiler/state-values-utils.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/simplified-lowering.h" 5 #include "src/compiler/simplified-lowering.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/code-factory.h" 10 #include "src/code-factory.h"
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 MachineType use_type = 417 MachineType use_type =
418 static_cast<MachineType>((use & kTypeMask) | output); 418 static_cast<MachineType>((use & kTypeMask) | output);
419 for (Edge const edge : node->input_edges()) { 419 for (Edge const edge : node->input_edges()) {
420 // TODO(titzer): it'd be nice to have distinguished edge kinds here. 420 // TODO(titzer): it'd be nice to have distinguished edge kinds here.
421 ProcessInput(node, edge.index(), values > 0 ? use_type : 0); 421 ProcessInput(node, edge.index(), values > 0 ? use_type : 0);
422 values--; 422 values--;
423 } 423 }
424 } 424 }
425 } 425 }
426 426
427 void VisitStateValues(Node* node) {
428 if (phase_ == PROPAGATE) {
429 for (int i = 0; i < node->InputCount(); i++) {
430 Enqueue(node->InputAt(i), kTypeAny);
431 }
432 } else {
433 Zone* zone = jsgraph_->zone();
434 ZoneVector<MachineType>* types =
435 new (zone->New(sizeof(ZoneVector<MachineType>)))
436 ZoneVector<MachineType>(node->InputCount(), zone);
437 for (int i = 0; i < node->InputCount(); i++) {
438 MachineTypeUnion input_type = GetInfo(node->InputAt(i))->output;
439 (*types)[i] = static_cast<MachineType>(input_type);
440 }
441 node->set_op(jsgraph_->common()->TypedStateValues(types));
442 }
443 SetOutput(node, kMachAnyTagged);
444 }
445
427 const Operator* Int32Op(Node* node) { 446 const Operator* Int32Op(Node* node) {
428 return changer_->Int32OperatorFor(node->opcode()); 447 return changer_->Int32OperatorFor(node->opcode());
429 } 448 }
430 449
431 const Operator* Uint32Op(Node* node) { 450 const Operator* Uint32Op(Node* node) {
432 return changer_->Uint32OperatorFor(node->opcode()); 451 return changer_->Uint32OperatorFor(node->opcode());
433 } 452 }
434 453
435 const Operator* Float64Op(Node* node) { 454 const Operator* Float64Op(Node* node) {
436 return changer_->Float64OperatorFor(node->opcode()); 455 return changer_->Float64OperatorFor(node->opcode());
(...skipping 595 matching lines...) Expand 10 before | Expand all | Expand 10 after
1032 return VisitFloat64Cmp(node); 1051 return VisitFloat64Cmp(node);
1033 case IrOpcode::kFloat64ExtractLowWord32: 1052 case IrOpcode::kFloat64ExtractLowWord32:
1034 case IrOpcode::kFloat64ExtractHighWord32: 1053 case IrOpcode::kFloat64ExtractHighWord32:
1035 return VisitUnop(node, kMachFloat64, kMachInt32); 1054 return VisitUnop(node, kMachFloat64, kMachInt32);
1036 case IrOpcode::kFloat64InsertLowWord32: 1055 case IrOpcode::kFloat64InsertLowWord32:
1037 case IrOpcode::kFloat64InsertHighWord32: 1056 case IrOpcode::kFloat64InsertHighWord32:
1038 return VisitBinop(node, kMachFloat64, kMachInt32, kMachFloat64); 1057 return VisitBinop(node, kMachFloat64, kMachInt32, kMachFloat64);
1039 case IrOpcode::kLoadStackPointer: 1058 case IrOpcode::kLoadStackPointer:
1040 return VisitLeaf(node, kMachPtr); 1059 return VisitLeaf(node, kMachPtr);
1041 case IrOpcode::kStateValues: 1060 case IrOpcode::kStateValues:
1042 for (int i = 0; i < node->InputCount(); i++) { 1061 VisitStateValues(node);
1043 ProcessInput(node, i, kTypeAny);
1044 }
1045 SetOutput(node, kMachAnyTagged);
1046 break; 1062 break;
1047 default: 1063 default:
1048 VisitInputs(node); 1064 VisitInputs(node);
1049 break; 1065 break;
1050 } 1066 }
1051 } 1067 }
1052 1068
1053 void DeferReplacement(Node* node, Node* replacement) { 1069 void DeferReplacement(Node* node, Node* replacement) {
1054 TRACE("defer replacement #%d:%s with #%d:%s\n", node->id(), 1070 TRACE("defer replacement #%d:%s with #%d:%s\n", node->id(),
1055 node->op()->mnemonic(), replacement->id(), 1071 node->op()->mnemonic(), replacement->id(),
(...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after
1594 1610
1595 void SimplifiedLowering::DoStringLessThanOrEqual(Node* node) { 1611 void SimplifiedLowering::DoStringLessThanOrEqual(Node* node) {
1596 node->set_op(machine()->IntLessThanOrEqual()); 1612 node->set_op(machine()->IntLessThanOrEqual());
1597 node->ReplaceInput(0, StringComparison(node, true)); 1613 node->ReplaceInput(0, StringComparison(node, true));
1598 node->ReplaceInput(1, jsgraph()->SmiConstant(EQUAL)); 1614 node->ReplaceInput(1, jsgraph()->SmiConstant(EQUAL));
1599 } 1615 }
1600 1616
1601 } // namespace compiler 1617 } // namespace compiler
1602 } // namespace internal 1618 } // namespace internal
1603 } // namespace v8 1619 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/opcodes.h ('k') | src/compiler/state-values-utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698