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

Side by Side Diff: src/IceInst.cpp

Issue 691693003: Subzero: Improve the representation and handling of the FakeKill instruction. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Add an assert Created 6 years, 1 month 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/IceInst.h ('k') | src/IceOperand.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 //===- subzero/src/IceInst.cpp - High-level instruction implementation ----===// 1 //===- subzero/src/IceInst.cpp - High-level instruction implementation ----===//
2 // 2 //
3 // The Subzero Code Generator 3 // The Subzero Code Generator
4 // 4 //
5 // This file is distributed under the University of Illinois Open Source 5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details. 6 // License. See LICENSE.TXT for details.
7 // 7 //
8 //===----------------------------------------------------------------------===// 8 //===----------------------------------------------------------------------===//
9 // 9 //
10 // This file implements the Inst class, primarily the various 10 // This file implements the Inst class, primarily the various
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after
447 } 447 }
448 448
449 InstFakeUse::InstFakeUse(Cfg *Func, Variable *Src) 449 InstFakeUse::InstFakeUse(Cfg *Func, Variable *Src)
450 : InstHighLevel(Func, Inst::FakeUse, 1, NULL) { 450 : InstHighLevel(Func, Inst::FakeUse, 1, NULL) {
451 assert(Src); 451 assert(Src);
452 addSource(Src); 452 addSource(Src);
453 } 453 }
454 454
455 InstFakeKill::InstFakeKill(Cfg *Func, const VarList &KilledRegs, 455 InstFakeKill::InstFakeKill(Cfg *Func, const VarList &KilledRegs,
456 const Inst *Linked) 456 const Inst *Linked)
457 : InstHighLevel(Func, Inst::FakeKill, KilledRegs.size(), NULL), 457 : InstHighLevel(Func, Inst::FakeKill, 0, NULL), KilledRegs(KilledRegs),
458 Linked(Linked) { 458 Linked(Linked) {}
459 for (Variable *Var : KilledRegs)
460 addSource(Var);
461 }
462 459
463 // ======================== Dump routines ======================== // 460 // ======================== Dump routines ======================== //
464 461
465 void Inst::dumpDecorated(const Cfg *Func) const { 462 void Inst::dumpDecorated(const Cfg *Func) const {
466 Ostream &Str = Func->getContext()->getStrDump(); 463 Ostream &Str = Func->getContext()->getStrDump();
467 if (!Func->getContext()->isVerbose(IceV_Deleted) && 464 if (!Func->getContext()->isVerbose(IceV_Deleted) &&
468 (isDeleted() || isRedundantAssign())) 465 (isDeleted() || isRedundantAssign()))
469 return; 466 return;
470 if (Func->getContext()->isVerbose(IceV_InstNumbers)) { 467 if (Func->getContext()->isVerbose(IceV_InstNumbers)) {
471 char buf[30]; 468 char buf[30];
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
723 Str << ", " << FalseOp->getType() << " "; 720 Str << ", " << FalseOp->getType() << " ";
724 FalseOp->dump(Func); 721 FalseOp->dump(Func);
725 } 722 }
726 723
727 void InstUnreachable::dump(const Cfg *Func) const { 724 void InstUnreachable::dump(const Cfg *Func) const {
728 Ostream &Str = Func->getContext()->getStrDump(); 725 Ostream &Str = Func->getContext()->getStrDump();
729 Str << "unreachable"; 726 Str << "unreachable";
730 } 727 }
731 728
732 void InstFakeDef::emit(const Cfg *Func) const { 729 void InstFakeDef::emit(const Cfg *Func) const {
730 // Go ahead and "emit" these for now, since they are relatively
731 // rare.
733 Ostream &Str = Func->getContext()->getStrEmit(); 732 Ostream &Str = Func->getContext()->getStrEmit();
734 Str << "\t# "; 733 Str << "\t# ";
735 getDest()->emit(Func); 734 getDest()->emit(Func);
736 Str << " = def.pseudo "; 735 Str << " = def.pseudo ";
737 emitSources(Func); 736 emitSources(Func);
738 } 737 }
739 738
740 void InstFakeDef::dump(const Cfg *Func) const { 739 void InstFakeDef::dump(const Cfg *Func) const {
741 Ostream &Str = Func->getContext()->getStrDump(); 740 Ostream &Str = Func->getContext()->getStrDump();
742 dumpDest(Func); 741 dumpDest(Func);
743 Str << " = def.pseudo "; 742 Str << " = def.pseudo ";
744 dumpSources(Func); 743 dumpSources(Func);
745 } 744 }
746 745
747 void InstFakeUse::emit(const Cfg *Func) const { 746 void InstFakeUse::emit(const Cfg *Func) const { (void)Func; }
748 Ostream &Str = Func->getContext()->getStrEmit();
749 Str << "\t# ";
750 Str << "use.pseudo ";
751 emitSources(Func);
752 }
753 747
754 void InstFakeUse::dump(const Cfg *Func) const { 748 void InstFakeUse::dump(const Cfg *Func) const {
755 Ostream &Str = Func->getContext()->getStrDump(); 749 Ostream &Str = Func->getContext()->getStrDump();
756 Str << "use.pseudo "; 750 Str << "use.pseudo ";
757 dumpSources(Func); 751 dumpSources(Func);
758 } 752 }
759 753
760 void InstFakeKill::emit(const Cfg *Func) const { 754 void InstFakeKill::emit(const Cfg *Func) const { (void)Func; }
761 Ostream &Str = Func->getContext()->getStrEmit();
762 Str << "\t# ";
763 if (Linked->isDeleted())
764 Str << "// ";
765 Str << "kill.pseudo ";
766 emitSources(Func);
767 }
768 755
769 void InstFakeKill::dump(const Cfg *Func) const { 756 void InstFakeKill::dump(const Cfg *Func) const {
770 Ostream &Str = Func->getContext()->getStrDump(); 757 Ostream &Str = Func->getContext()->getStrDump();
771 if (Linked->isDeleted()) 758 if (Linked->isDeleted())
772 Str << "// "; 759 Str << "// ";
773 Str << "kill.pseudo "; 760 Str << "kill.pseudo ";
774 dumpSources(Func); 761 bool First = true;
762 for (Variable *Var : KilledRegs) {
763 if (!First)
764 Str << ", ";
765 First = false;
766 Var->dump(Func);
767 }
775 } 768 }
776 769
777 void InstTarget::dump(const Cfg *Func) const { 770 void InstTarget::dump(const Cfg *Func) const {
778 Ostream &Str = Func->getContext()->getStrDump(); 771 Ostream &Str = Func->getContext()->getStrDump();
779 Str << "[TARGET] "; 772 Str << "[TARGET] ";
780 Inst::dump(Func); 773 Inst::dump(Func);
781 } 774 }
782 775
783 } // end of namespace Ice 776 } // end of namespace Ice
OLDNEW
« no previous file with comments | « src/IceInst.h ('k') | src/IceOperand.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698