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

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

Issue 533773002: Fix missing visitation of effect inputs to loads and stores. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | 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 "src/base/bits.h" 7 #include "src/base/bits.h"
8 #include "src/compiler/common-operator.h" 8 #include "src/compiler/common-operator.h"
9 #include "src/compiler/graph-inl.h" 9 #include "src/compiler/graph-inl.h"
10 #include "src/compiler/node-properties-inl.h" 10 #include "src/compiler/node-properties-inl.h"
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 PrintInfo(output); 181 PrintInfo(output);
182 TRACE((" to ")); 182 TRACE((" to "));
183 PrintInfo(use); 183 PrintInfo(use);
184 TRACE(("\n")); 184 TRACE(("\n"));
185 Node* n = changer_->GetRepresentationFor(input, output, use); 185 Node* n = changer_->GetRepresentationFor(input, output, use);
186 node->ReplaceInput(index, n); 186 node->ReplaceInput(index, n);
187 } 187 }
188 } 188 }
189 } 189 }
190 190
191 void ProcessEffect(Node* node) {
titzer 2014/09/03 09:03:57 Can we make this ProcessRemainingInputs(Node*, int
Michael Starzinger 2014/09/03 10:49:58 Done.
192 DCHECK_EQ(1, OperatorProperties::GetEffectInputCount(node->op()));
193 Enqueue(NodeProperties::GetEffectInput(node)); // Effect input: just visit
194 }
195
191 // The default, most general visitation case. For {node}, process all value, 196 // The default, most general visitation case. For {node}, process all value,
192 // context, effect, and control inputs, assuming that value inputs should have 197 // context, effect, and control inputs, assuming that value inputs should have
193 // {kRepTagged} representation and can observe all output values {kTypeAny}. 198 // {kRepTagged} representation and can observe all output values {kTypeAny}.
194 void VisitInputs(Node* node) { 199 void VisitInputs(Node* node) {
195 InputIter i = node->inputs().begin(); 200 InputIter i = node->inputs().begin();
196 for (int j = OperatorProperties::GetValueInputCount(node->op()); j > 0; 201 for (int j = OperatorProperties::GetValueInputCount(node->op()); j > 0;
197 ++i, j--) { 202 ++i, j--) {
198 ProcessInput(node, i.index(), kMachAnyTagged); // Value inputs 203 ProcessInput(node, i.index(), kMachAnyTagged); // Value inputs
199 } 204 }
200 for (int j = OperatorProperties::GetContextInputCount(node->op()); j > 0; 205 for (int j = OperatorProperties::GetContextInputCount(node->op()); j > 0;
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after
522 break; 527 break;
523 } 528 }
524 case IrOpcode::kStringAdd: { 529 case IrOpcode::kStringAdd: {
525 VisitBinop(node, kMachAnyTagged, kMachAnyTagged); 530 VisitBinop(node, kMachAnyTagged, kMachAnyTagged);
526 if (lower()) lowering->DoStringAdd(node); 531 if (lower()) lowering->DoStringAdd(node);
527 break; 532 break;
528 } 533 }
529 case IrOpcode::kLoadField: { 534 case IrOpcode::kLoadField: {
530 FieldAccess access = FieldAccessOf(node->op()); 535 FieldAccess access = FieldAccessOf(node->op());
531 ProcessInput(node, 0, changer_->TypeForBasePointer(access)); 536 ProcessInput(node, 0, changer_->TypeForBasePointer(access));
537 ProcessEffect(node);
532 SetOutput(node, access.machine_type); 538 SetOutput(node, access.machine_type);
533 if (lower()) lowering->DoLoadField(node); 539 if (lower()) lowering->DoLoadField(node);
534 break; 540 break;
535 } 541 }
536 case IrOpcode::kStoreField: { 542 case IrOpcode::kStoreField: {
537 FieldAccess access = FieldAccessOf(node->op()); 543 FieldAccess access = FieldAccessOf(node->op());
538 ProcessInput(node, 0, changer_->TypeForBasePointer(access)); 544 ProcessInput(node, 0, changer_->TypeForBasePointer(access));
539 ProcessInput(node, 1, access.machine_type); 545 ProcessInput(node, 1, access.machine_type);
546 ProcessEffect(node);
540 SetOutput(node, 0); 547 SetOutput(node, 0);
541 if (lower()) lowering->DoStoreField(node); 548 if (lower()) lowering->DoStoreField(node);
542 break; 549 break;
543 } 550 }
544 case IrOpcode::kLoadElement: { 551 case IrOpcode::kLoadElement: {
545 ElementAccess access = ElementAccessOf(node->op()); 552 ElementAccess access = ElementAccessOf(node->op());
546 ProcessInput(node, 0, changer_->TypeForBasePointer(access)); 553 ProcessInput(node, 0, changer_->TypeForBasePointer(access));
547 ProcessInput(node, 1, kMachInt32); // element index 554 ProcessInput(node, 1, kMachInt32); // element index
555 ProcessEffect(node);
548 SetOutput(node, access.machine_type); 556 SetOutput(node, access.machine_type);
549 if (lower()) lowering->DoLoadElement(node); 557 if (lower()) lowering->DoLoadElement(node);
550 break; 558 break;
551 } 559 }
552 case IrOpcode::kStoreElement: { 560 case IrOpcode::kStoreElement: {
553 ElementAccess access = ElementAccessOf(node->op()); 561 ElementAccess access = ElementAccessOf(node->op());
554 ProcessInput(node, 0, changer_->TypeForBasePointer(access)); 562 ProcessInput(node, 0, changer_->TypeForBasePointer(access));
555 ProcessInput(node, 1, kMachInt32); // element index 563 ProcessInput(node, 1, kMachInt32); // element index
556 ProcessInput(node, 2, access.machine_type); 564 ProcessInput(node, 2, access.machine_type);
565 ProcessEffect(node);
557 SetOutput(node, 0); 566 SetOutput(node, 0);
558 if (lower()) lowering->DoStoreElement(node); 567 if (lower()) lowering->DoStoreElement(node);
559 break; 568 break;
560 } 569 }
561 570
562 //------------------------------------------------------------------ 571 //------------------------------------------------------------------
563 // Machine-level operators. 572 // Machine-level operators.
564 //------------------------------------------------------------------ 573 //------------------------------------------------------------------
565 case IrOpcode::kLoad: { 574 case IrOpcode::kLoad: {
566 // TODO(titzer): machine loads/stores need to know BaseTaggedness!? 575 // TODO(titzer): machine loads/stores need to know BaseTaggedness!?
567 MachineType tBase = kRepTagged; 576 MachineType tBase = kRepTagged;
568 MachineType machine_type = OpParameter<MachineType>(node); 577 MachineType machine_type = OpParameter<MachineType>(node);
569 ProcessInput(node, 0, tBase); // pointer or object 578 ProcessInput(node, 0, tBase); // pointer or object
570 ProcessInput(node, 1, kMachInt32); // index 579 ProcessInput(node, 1, kMachInt32); // index
580 ProcessEffect(node);
571 SetOutput(node, machine_type); 581 SetOutput(node, machine_type);
572 break; 582 break;
573 } 583 }
574 case IrOpcode::kStore: { 584 case IrOpcode::kStore: {
575 // TODO(titzer): machine loads/stores need to know BaseTaggedness!? 585 // TODO(titzer): machine loads/stores need to know BaseTaggedness!?
576 MachineType tBase = kRepTagged; 586 MachineType tBase = kRepTagged;
577 StoreRepresentation rep = OpParameter<StoreRepresentation>(node); 587 StoreRepresentation rep = OpParameter<StoreRepresentation>(node);
578 ProcessInput(node, 0, tBase); // pointer or object 588 ProcessInput(node, 0, tBase); // pointer or object
579 ProcessInput(node, 1, kMachInt32); // index 589 ProcessInput(node, 1, kMachInt32); // index
580 ProcessInput(node, 2, rep.machine_type); 590 ProcessInput(node, 2, rep.machine_type);
591 ProcessEffect(node);
581 SetOutput(node, 0); 592 SetOutput(node, 0);
582 break; 593 break;
583 } 594 }
584 case IrOpcode::kWord32Shr: 595 case IrOpcode::kWord32Shr:
585 // We output unsigned int32 for shift right because JavaScript. 596 // We output unsigned int32 for shift right because JavaScript.
586 return VisitBinop(node, kRepWord32, kRepWord32 | kTypeUint32); 597 return VisitBinop(node, kRepWord32, kRepWord32 | kTypeUint32);
587 case IrOpcode::kWord32And: 598 case IrOpcode::kWord32And:
588 case IrOpcode::kWord32Or: 599 case IrOpcode::kWord32Or:
589 case IrOpcode::kWord32Xor: 600 case IrOpcode::kWord32Xor:
590 case IrOpcode::kWord32Shl: 601 case IrOpcode::kWord32Shl:
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
853 jsgraph()->UndefinedConstant()); 864 jsgraph()->UndefinedConstant());
854 node->set_op(machine()->WordEqual()); 865 node->set_op(machine()->WordEqual());
855 node->ReplaceInput(0, call); 866 node->ReplaceInput(0, call);
856 node->ReplaceInput(1, jsgraph()->SmiConstant(EQUAL)); 867 node->ReplaceInput(1, jsgraph()->SmiConstant(EQUAL));
857 } 868 }
858 869
859 870
860 } // namespace compiler 871 } // namespace compiler
861 } // namespace internal 872 } // namespace internal
862 } // namespace v8 873 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698