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

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

Issue 2266823002: [turbofan] Insert dummy values when changing from None type. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebase 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/s390/code-generator-s390.cc ('k') | src/compiler/typer.cc » ('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/address-map.h" 9 #include "src/address-map.h"
10 #include "src/base/bits.h" 10 #include "src/base/bits.h"
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 if (pushed_unvisited) continue; 304 if (pushed_unvisited) continue;
305 305
306 // Process the top of the stack. 306 // Process the top of the stack.
307 Node* node = current.node; 307 Node* node = current.node;
308 typing_stack_.pop(); 308 typing_stack_.pop();
309 NodeInfo* info = GetInfo(node); 309 NodeInfo* info = GetInfo(node);
310 info->set_visited(); 310 info->set_visited();
311 bool updated = UpdateFeedbackType(node); 311 bool updated = UpdateFeedbackType(node);
312 TRACE(" visit #%d: %s\n", node->id(), node->op()->mnemonic()); 312 TRACE(" visit #%d: %s\n", node->id(), node->op()->mnemonic());
313 VisitNode(node, info->truncation(), nullptr); 313 VisitNode(node, info->truncation(), nullptr);
314 TRACE(" ==> output ");
315 PrintOutputInfo(info);
316 TRACE("\n");
314 if (updated) { 317 if (updated) {
315 for (Node* const user : node->uses()) { 318 for (Node* const user : node->uses()) {
316 if (GetInfo(user)->visited()) { 319 if (GetInfo(user)->visited()) {
317 GetInfo(user)->set_queued(); 320 GetInfo(user)->set_queued();
318 queue_.push(user); 321 queue_.push(user);
319 } 322 }
320 } 323 }
321 } 324 }
322 } 325 }
323 326
324 // Process the revisit queue. 327 // Process the revisit queue.
325 while (!queue_.empty()) { 328 while (!queue_.empty()) {
326 Node* node = queue_.front(); 329 Node* node = queue_.front();
327 queue_.pop(); 330 queue_.pop();
328 NodeInfo* info = GetInfo(node); 331 NodeInfo* info = GetInfo(node);
329 info->set_visited(); 332 info->set_visited();
330 bool updated = UpdateFeedbackType(node); 333 bool updated = UpdateFeedbackType(node);
331 TRACE(" visit #%d: %s\n", node->id(), node->op()->mnemonic()); 334 TRACE(" visit #%d: %s\n", node->id(), node->op()->mnemonic());
332 VisitNode(node, info->truncation(), nullptr); 335 VisitNode(node, info->truncation(), nullptr);
336 TRACE(" ==> output ");
337 PrintOutputInfo(info);
338 TRACE("\n");
333 if (updated) { 339 if (updated) {
334 for (Node* const user : node->uses()) { 340 for (Node* const user : node->uses()) {
335 if (GetInfo(user)->visited()) { 341 if (GetInfo(user)->visited()) {
336 GetInfo(user)->set_queued(); 342 GetInfo(user)->set_queued();
337 queue_.push(user); 343 queue_.push(user);
338 } 344 }
339 } 345 }
340 } 346 }
341 } 347 }
342 } 348 }
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
527 EnqueueInitial(jsgraph_->graph()->end()); 533 EnqueueInitial(jsgraph_->graph()->end());
528 // Process nodes from the queue until it is empty. 534 // Process nodes from the queue until it is empty.
529 while (!queue_.empty()) { 535 while (!queue_.empty()) {
530 Node* node = queue_.front(); 536 Node* node = queue_.front();
531 NodeInfo* info = GetInfo(node); 537 NodeInfo* info = GetInfo(node);
532 queue_.pop(); 538 queue_.pop();
533 info->set_visited(); 539 info->set_visited();
534 TRACE(" visit #%d: %s (trunc: %s)\n", node->id(), node->op()->mnemonic(), 540 TRACE(" visit #%d: %s (trunc: %s)\n", node->id(), node->op()->mnemonic(),
535 info->truncation().description()); 541 info->truncation().description());
536 VisitNode(node, info->truncation(), nullptr); 542 VisitNode(node, info->truncation(), nullptr);
537 TRACE(" ==> output ");
538 PrintOutputInfo(info);
539 TRACE("\n");
540 } 543 }
541 } 544 }
542 545
543 void Run(SimplifiedLowering* lowering) { 546 void Run(SimplifiedLowering* lowering) {
544 RunTruncationPropagationPhase(); 547 RunTruncationPropagationPhase();
545 548
546 RunTypePropagationPhase(); 549 RunTypePropagationPhase();
547 550
548 // Run lowering and change insertion phase. 551 // Run lowering and change insertion phase.
549 TRACE("--{Simplified lowering phase}--\n"); 552 TRACE("--{Simplified lowering phase}--\n");
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after
979 EnqueueInput(node, i, UseInfo::Any()); 982 EnqueueInput(node, i, UseInfo::Any());
980 } 983 }
981 } else if (lower()) { 984 } else if (lower()) {
982 Zone* zone = jsgraph_->zone(); 985 Zone* zone = jsgraph_->zone();
983 ZoneVector<MachineType>* types = 986 ZoneVector<MachineType>* types =
984 new (zone->New(sizeof(ZoneVector<MachineType>))) 987 new (zone->New(sizeof(ZoneVector<MachineType>)))
985 ZoneVector<MachineType>(node->InputCount(), zone); 988 ZoneVector<MachineType>(node->InputCount(), zone);
986 for (int i = 0; i < node->InputCount(); i++) { 989 for (int i = 0; i < node->InputCount(); i++) {
987 Node* input = node->InputAt(i); 990 Node* input = node->InputAt(i);
988 NodeInfo* input_info = GetInfo(input); 991 NodeInfo* input_info = GetInfo(input);
989 MachineType machine_type(input_info->representation(), 992 Type* input_type = TypeOf(input);
990 DeoptValueSemanticOf(TypeOf(input))); 993 MachineRepresentation rep = input_type->IsInhabited()
994 ? input_info->representation()
995 : MachineRepresentation::kNone;
996 MachineType machine_type(rep, DeoptValueSemanticOf(input_type));
991 DCHECK(machine_type.representation() != 997 DCHECK(machine_type.representation() !=
992 MachineRepresentation::kWord32 || 998 MachineRepresentation::kWord32 ||
993 machine_type.semantic() == MachineSemantic::kInt32 || 999 machine_type.semantic() == MachineSemantic::kInt32 ||
994 machine_type.semantic() == MachineSemantic::kUint32); 1000 machine_type.semantic() == MachineSemantic::kUint32);
995 (*types)[i] = machine_type; 1001 (*types)[i] = machine_type;
996 } 1002 }
997 NodeProperties::ChangeOp(node, 1003 NodeProperties::ChangeOp(node,
998 jsgraph_->common()->TypedStateValues(types)); 1004 jsgraph_->common()->TypedStateValues(types));
999 } 1005 }
1000 SetOutput(node, MachineRepresentation::kTagged); 1006 SetOutput(node, MachineRepresentation::kTagged);
(...skipping 2322 matching lines...) Expand 10 before | Expand all | Expand 10 after
3323 isolate(), graph()->zone(), callable.descriptor(), 0, flags, 3329 isolate(), graph()->zone(), callable.descriptor(), 0, flags,
3324 Operator::kNoProperties); 3330 Operator::kNoProperties);
3325 to_number_operator_.set(common()->Call(desc)); 3331 to_number_operator_.set(common()->Call(desc));
3326 } 3332 }
3327 return to_number_operator_.get(); 3333 return to_number_operator_.get();
3328 } 3334 }
3329 3335
3330 } // namespace compiler 3336 } // namespace compiler
3331 } // namespace internal 3337 } // namespace internal
3332 } // namespace v8 3338 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/s390/code-generator-s390.cc ('k') | src/compiler/typer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698