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

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

Issue 2280613002: Revert of [turbofan] Insert dummy values when changing from None type. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 3 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-scheduler.cc ('k') | src/compiler/machine-operator.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/base/adapters.h" 9 #include "src/base/adapters.h"
10 #include "src/compiler/instruction-selector-impl.h" 10 #include "src/compiler/instruction-selector-impl.h"
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 } 343 }
344 344
345 345
346 namespace { 346 namespace {
347 347
348 enum class FrameStateInputKind { kAny, kStackSlot }; 348 enum class FrameStateInputKind { kAny, kStackSlot };
349 349
350 InstructionOperand OperandForDeopt(OperandGenerator* g, Node* input, 350 InstructionOperand OperandForDeopt(OperandGenerator* g, Node* input,
351 FrameStateInputKind kind, 351 FrameStateInputKind kind,
352 MachineRepresentation rep) { 352 MachineRepresentation rep) {
353 if (rep == MachineRepresentation::kNone) {
354 return g->TempImmediate(FrameStateDescriptor::kImpossibleValue);
355 }
356
357 switch (input->opcode()) { 353 switch (input->opcode()) {
358 case IrOpcode::kInt32Constant: 354 case IrOpcode::kInt32Constant:
359 case IrOpcode::kInt64Constant: 355 case IrOpcode::kInt64Constant:
360 case IrOpcode::kNumberConstant: 356 case IrOpcode::kNumberConstant:
361 case IrOpcode::kFloat32Constant: 357 case IrOpcode::kFloat32Constant:
362 case IrOpcode::kFloat64Constant: 358 case IrOpcode::kFloat64Constant:
363 case IrOpcode::kHeapConstant: 359 case IrOpcode::kHeapConstant:
364 return g->UseImmediate(input); 360 return g->UseImmediate(input);
365 case IrOpcode::kObjectState: 361 case IrOpcode::kObjectState:
366 UNREACHABLE(); 362 UNREACHABLE();
367 break; 363 break;
368 default: 364 default:
369 switch (kind) { 365 if (rep == MachineRepresentation::kNone) {
370 case FrameStateInputKind::kStackSlot: 366 return g->TempImmediate(FrameStateDescriptor::kImpossibleValue);
371 return g->UseUniqueSlot(input); 367 } else {
372 case FrameStateInputKind::kAny: 368 switch (kind) {
373 // Currently deopts "wrap" other operations, so the deopt's inputs 369 case FrameStateInputKind::kStackSlot:
374 // are potentially needed untill the end of the deoptimising code. 370 return g->UseUniqueSlot(input);
375 return g->UseAnyAtEnd(input); 371 case FrameStateInputKind::kAny:
372 // Currently deopts "wrap" other operations, so the deopt's inputs
373 // are potentially needed untill the end of the deoptimising code.
374 return g->UseAnyAtEnd(input);
375 }
376 } 376 }
377 } 377 }
378 UNREACHABLE(); 378 UNREACHABLE();
379 return InstructionOperand(); 379 return InstructionOperand();
380 } 380 }
381 381
382 382
383 class StateObjectDeduplicator { 383 class StateObjectDeduplicator {
384 public: 384 public:
385 explicit StateObjectDeduplicator(Zone* zone) : objects_(zone) {} 385 explicit StateObjectDeduplicator(Zone* zone) : objects_(zone) {}
(...skipping 674 matching lines...) Expand 10 before | Expand all | Expand 10 after
1060 case IrOpcode::kChangeFloat32ToFloat64: 1060 case IrOpcode::kChangeFloat32ToFloat64:
1061 return MarkAsFloat64(node), VisitChangeFloat32ToFloat64(node); 1061 return MarkAsFloat64(node), VisitChangeFloat32ToFloat64(node);
1062 case IrOpcode::kChangeInt32ToFloat64: 1062 case IrOpcode::kChangeInt32ToFloat64:
1063 return MarkAsFloat64(node), VisitChangeInt32ToFloat64(node); 1063 return MarkAsFloat64(node), VisitChangeInt32ToFloat64(node);
1064 case IrOpcode::kChangeUint32ToFloat64: 1064 case IrOpcode::kChangeUint32ToFloat64:
1065 return MarkAsFloat64(node), VisitChangeUint32ToFloat64(node); 1065 return MarkAsFloat64(node), VisitChangeUint32ToFloat64(node);
1066 case IrOpcode::kChangeFloat64ToInt32: 1066 case IrOpcode::kChangeFloat64ToInt32:
1067 return MarkAsWord32(node), VisitChangeFloat64ToInt32(node); 1067 return MarkAsWord32(node), VisitChangeFloat64ToInt32(node);
1068 case IrOpcode::kChangeFloat64ToUint32: 1068 case IrOpcode::kChangeFloat64ToUint32:
1069 return MarkAsWord32(node), VisitChangeFloat64ToUint32(node); 1069 return MarkAsWord32(node), VisitChangeFloat64ToUint32(node);
1070 case IrOpcode::kImpossibleToWord32:
1071 return MarkAsWord32(node), VisitImpossibleToWord32(node);
1072 case IrOpcode::kImpossibleToWord64:
1073 return MarkAsWord64(node), VisitImpossibleToWord64(node);
1074 case IrOpcode::kImpossibleToFloat32:
1075 return MarkAsFloat32(node), VisitImpossibleToFloat32(node);
1076 case IrOpcode::kImpossibleToFloat64:
1077 return MarkAsFloat64(node), VisitImpossibleToFloat64(node);
1078 case IrOpcode::kImpossibleToTagged:
1079 MarkAsRepresentation(MachineType::PointerRepresentation(), node);
1080 return VisitImpossibleToTagged(node);
1081 case IrOpcode::kImpossibleToBit:
1082 return MarkAsWord32(node), VisitImpossibleToBit(node);
1070 case IrOpcode::kFloat64SilenceNaN: 1083 case IrOpcode::kFloat64SilenceNaN:
1071 MarkAsFloat64(node); 1084 MarkAsFloat64(node);
1072 if (CanProduceSignalingNaN(node->InputAt(0))) { 1085 if (CanProduceSignalingNaN(node->InputAt(0))) {
1073 return VisitFloat64SilenceNaN(node); 1086 return VisitFloat64SilenceNaN(node);
1074 } else { 1087 } else {
1075 return EmitIdentity(node); 1088 return EmitIdentity(node);
1076 } 1089 }
1077 case IrOpcode::kTruncateFloat64ToUint32: 1090 case IrOpcode::kTruncateFloat64ToUint32:
1078 return MarkAsWord32(node), VisitTruncateFloat64ToUint32(node); 1091 return MarkAsWord32(node), VisitTruncateFloat64ToUint32(node);
1079 case IrOpcode::kTruncateFloat32ToInt32: 1092 case IrOpcode::kTruncateFloat32ToInt32:
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
1300 return MarkAsSimd128(node), VisitCreateInt32x4(node); 1313 return MarkAsSimd128(node), VisitCreateInt32x4(node);
1301 case IrOpcode::kInt32x4ExtractLane: 1314 case IrOpcode::kInt32x4ExtractLane:
1302 return MarkAsWord32(node), VisitInt32x4ExtractLane(node); 1315 return MarkAsWord32(node), VisitInt32x4ExtractLane(node);
1303 default: 1316 default:
1304 V8_Fatal(__FILE__, __LINE__, "Unexpected operator #%d:%s @ node #%d", 1317 V8_Fatal(__FILE__, __LINE__, "Unexpected operator #%d:%s @ node #%d",
1305 node->opcode(), node->op()->mnemonic(), node->id()); 1318 node->opcode(), node->op()->mnemonic(), node->id());
1306 break; 1319 break;
1307 } 1320 }
1308 } 1321 }
1309 1322
1323 void InstructionSelector::VisitImpossibleToWord32(Node* node) {
1324 OperandGenerator g(this);
1325 Emit(kArchImpossible, g.DefineAsConstant(node, Constant(0)));
1326 }
1327
1328 void InstructionSelector::VisitImpossibleToWord64(Node* node) {
1329 OperandGenerator g(this);
1330 Emit(kArchImpossible,
1331 g.DefineAsConstant(node, Constant(static_cast<int64_t>(0))));
1332 }
1333
1334 void InstructionSelector::VisitImpossibleToFloat32(Node* node) {
1335 OperandGenerator g(this);
1336 Emit(kArchImpossible, g.DefineAsConstant(node, Constant(0.0f)));
1337 }
1338
1339 void InstructionSelector::VisitImpossibleToFloat64(Node* node) {
1340 OperandGenerator g(this);
1341 Emit(kArchImpossible, g.DefineAsConstant(node, Constant(0.0)));
1342 }
1343
1344 void InstructionSelector::VisitImpossibleToBit(Node* node) {
1345 OperandGenerator g(this);
1346 Emit(kArchImpossible, g.DefineAsConstant(node, Constant(0)));
1347 }
1348
1349 void InstructionSelector::VisitImpossibleToTagged(Node* node) {
1350 OperandGenerator g(this);
1351 #if V8_TARGET_ARCH_64_BIT
1352 Emit(kArchImpossible,
1353 g.DefineAsConstant(node, Constant(static_cast<int64_t>(0))));
1354 #else // V8_TARGET_ARCH_64_BIT
1355 Emit(kArchImpossible, g.DefineAsConstant(node, Constant(0)));
1356 #endif // V8_TARGET_ARCH_64_BIT
1357 }
1358
1310 void InstructionSelector::VisitLoadStackPointer(Node* node) { 1359 void InstructionSelector::VisitLoadStackPointer(Node* node) {
1311 OperandGenerator g(this); 1360 OperandGenerator g(this);
1312 Emit(kArchStackPointer, g.DefineAsRegister(node)); 1361 Emit(kArchStackPointer, g.DefineAsRegister(node));
1313 } 1362 }
1314 1363
1315 void InstructionSelector::VisitLoadFramePointer(Node* node) { 1364 void InstructionSelector::VisitLoadFramePointer(Node* node) {
1316 OperandGenerator g(this); 1365 OperandGenerator g(this);
1317 Emit(kArchFramePointer, g.DefineAsRegister(node)); 1366 Emit(kArchFramePointer, g.DefineAsRegister(node));
1318 } 1367 }
1319 1368
(...skipping 712 matching lines...) Expand 10 before | Expand all | Expand 10 after
2032 return new (instruction_zone()) FrameStateDescriptor( 2081 return new (instruction_zone()) FrameStateDescriptor(
2033 instruction_zone(), state_info.type(), state_info.bailout_id(), 2082 instruction_zone(), state_info.type(), state_info.bailout_id(),
2034 state_info.state_combine(), parameters, locals, stack, 2083 state_info.state_combine(), parameters, locals, stack,
2035 state_info.shared_info(), outer_state); 2084 state_info.shared_info(), outer_state);
2036 } 2085 }
2037 2086
2038 2087
2039 } // namespace compiler 2088 } // namespace compiler
2040 } // namespace internal 2089 } // namespace internal
2041 } // namespace v8 2090 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/instruction-scheduler.cc ('k') | src/compiler/machine-operator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698