| OLD | NEW |
| 1 //===- subzero/src/IceCfgNode.cpp - Basic block (node) implementation -----===// | 1 //===- subzero/src/IceCfgNode.cpp - Basic block (node) 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 CfgNode class, including the complexities | 10 // This file implements the CfgNode class, including the complexities |
| (...skipping 793 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 804 } | 804 } |
| 805 | 805 |
| 806 // ======================== Dump routines ======================== // | 806 // ======================== Dump routines ======================== // |
| 807 | 807 |
| 808 namespace { | 808 namespace { |
| 809 | 809 |
| 810 // Helper functions for emit(). | 810 // Helper functions for emit(). |
| 811 | 811 |
| 812 void emitRegisterUsage(Ostream &Str, const Cfg *Func, const CfgNode *Node, | 812 void emitRegisterUsage(Ostream &Str, const Cfg *Func, const CfgNode *Node, |
| 813 bool IsLiveIn, std::vector<SizeT> &LiveRegCount) { | 813 bool IsLiveIn, std::vector<SizeT> &LiveRegCount) { |
| 814 if (!ALLOW_DUMP) |
| 815 return; |
| 814 Liveness *Liveness = Func->getLiveness(); | 816 Liveness *Liveness = Func->getLiveness(); |
| 815 const LivenessBV *Live; | 817 const LivenessBV *Live; |
| 816 if (IsLiveIn) { | 818 if (IsLiveIn) { |
| 817 Live = &Liveness->getLiveIn(Node); | 819 Live = &Liveness->getLiveIn(Node); |
| 818 Str << "\t\t\t\t# LiveIn="; | 820 Str << "\t\t\t\t# LiveIn="; |
| 819 } else { | 821 } else { |
| 820 Live = &Liveness->getLiveOut(Node); | 822 Live = &Liveness->getLiveOut(Node); |
| 821 Str << "\t\t\t\t# LiveOut="; | 823 Str << "\t\t\t\t# LiveOut="; |
| 822 } | 824 } |
| 823 if (!Live->empty()) { | 825 if (!Live->empty()) { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 834 Var->emit(Func); | 836 Var->emit(Func); |
| 835 } | 837 } |
| 836 } | 838 } |
| 837 } | 839 } |
| 838 } | 840 } |
| 839 Str << "\n"; | 841 Str << "\n"; |
| 840 } | 842 } |
| 841 | 843 |
| 842 void emitLiveRangesEnded(Ostream &Str, const Cfg *Func, const Inst *Instr, | 844 void emitLiveRangesEnded(Ostream &Str, const Cfg *Func, const Inst *Instr, |
| 843 std::vector<SizeT> &LiveRegCount) { | 845 std::vector<SizeT> &LiveRegCount) { |
| 846 if (!ALLOW_DUMP) |
| 847 return; |
| 844 bool First = true; | 848 bool First = true; |
| 845 Variable *Dest = Instr->getDest(); | 849 Variable *Dest = Instr->getDest(); |
| 846 if (Dest && Dest->hasReg()) | 850 if (Dest && Dest->hasReg()) |
| 847 ++LiveRegCount[Dest->getRegNum()]; | 851 ++LiveRegCount[Dest->getRegNum()]; |
| 848 for (SizeT I = 0; I < Instr->getSrcSize(); ++I) { | 852 for (SizeT I = 0; I < Instr->getSrcSize(); ++I) { |
| 849 Operand *Src = Instr->getSrc(I); | 853 Operand *Src = Instr->getSrc(I); |
| 850 SizeT NumVars = Src->getNumVars(); | 854 SizeT NumVars = Src->getNumVars(); |
| 851 for (SizeT J = 0; J < NumVars; ++J) { | 855 for (SizeT J = 0; J < NumVars; ++J) { |
| 852 const Variable *Var = Src->getVar(J); | 856 const Variable *Var = Src->getVar(J); |
| 853 if (Var->hasReg()) { | 857 if (Var->hasReg()) { |
| (...skipping 25 matching lines...) Expand all Loading... |
| 879 if (!Src->hasReg()) | 883 if (!Src->hasReg()) |
| 880 Func->getContext()->statsUpdateSpills(); | 884 Func->getContext()->statsUpdateSpills(); |
| 881 } | 885 } |
| 882 } | 886 } |
| 883 } | 887 } |
| 884 } | 888 } |
| 885 | 889 |
| 886 } // end of anonymous namespace | 890 } // end of anonymous namespace |
| 887 | 891 |
| 888 void CfgNode::emit(Cfg *Func) const { | 892 void CfgNode::emit(Cfg *Func) const { |
| 893 if (!ALLOW_DUMP) |
| 894 return; |
| 889 Func->setCurrentNode(this); | 895 Func->setCurrentNode(this); |
| 890 Ostream &Str = Func->getContext()->getStrEmit(); | 896 Ostream &Str = Func->getContext()->getStrEmit(); |
| 891 Liveness *Liveness = Func->getLiveness(); | 897 Liveness *Liveness = Func->getLiveness(); |
| 892 bool DecorateAsm = Liveness && Func->getContext()->getFlags().DecorateAsm; | 898 bool DecorateAsm = Liveness && Func->getContext()->getFlags().DecorateAsm; |
| 893 Str << getAsmName() << ":\n"; | 899 Str << getAsmName() << ":\n"; |
| 894 std::vector<SizeT> LiveRegCount(Func->getTarget()->getNumRegisters()); | 900 std::vector<SizeT> LiveRegCount(Func->getTarget()->getNumRegisters()); |
| 895 if (DecorateAsm) | 901 if (DecorateAsm) |
| 896 emitRegisterUsage(Str, Func, this, true, LiveRegCount); | 902 emitRegisterUsage(Str, Func, this, true, LiveRegCount); |
| 897 | 903 |
| 898 for (InstPhi *Phi : Phis) { | 904 for (InstPhi *Phi : Phis) { |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 936 if (I->isDeleted()) | 942 if (I->isDeleted()) |
| 937 continue; | 943 continue; |
| 938 if (I->isRedundantAssign()) | 944 if (I->isRedundantAssign()) |
| 939 continue; | 945 continue; |
| 940 I->emitIAS(Func); | 946 I->emitIAS(Func); |
| 941 updateStats(Func, I); | 947 updateStats(Func, I); |
| 942 } | 948 } |
| 943 } | 949 } |
| 944 | 950 |
| 945 void CfgNode::dump(Cfg *Func) const { | 951 void CfgNode::dump(Cfg *Func) const { |
| 952 if (!ALLOW_DUMP) |
| 953 return; |
| 946 Func->setCurrentNode(this); | 954 Func->setCurrentNode(this); |
| 947 Ostream &Str = Func->getContext()->getStrDump(); | 955 Ostream &Str = Func->getContext()->getStrDump(); |
| 948 Liveness *Liveness = Func->getLiveness(); | 956 Liveness *Liveness = Func->getLiveness(); |
| 949 if (Func->getContext()->isVerbose(IceV_Instructions)) { | 957 if (Func->getContext()->isVerbose(IceV_Instructions)) { |
| 950 Str << getName() << ":\n"; | 958 Str << getName() << ":\n"; |
| 951 } | 959 } |
| 952 // Dump list of predecessor nodes. | 960 // Dump list of predecessor nodes. |
| 953 if (Func->getContext()->isVerbose(IceV_Preds) && !InEdges.empty()) { | 961 if (Func->getContext()->isVerbose(IceV_Preds) && !InEdges.empty()) { |
| 954 Str << " // preds = "; | 962 Str << " // preds = "; |
| 955 bool First = true; | 963 bool First = true; |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1012 if (!First) | 1020 if (!First) |
| 1013 Str << ", "; | 1021 Str << ", "; |
| 1014 First = false; | 1022 First = false; |
| 1015 Str << "%" << I->getName(); | 1023 Str << "%" << I->getName(); |
| 1016 } | 1024 } |
| 1017 Str << "\n"; | 1025 Str << "\n"; |
| 1018 } | 1026 } |
| 1019 } | 1027 } |
| 1020 | 1028 |
| 1021 } // end of namespace Ice | 1029 } // end of namespace Ice |
| OLD | NEW |