OLD | NEW |
1 //===- subzero/src/IceRegAlloc.cpp - Linear-scan implementation -----------===// | 1 //===- subzero/src/IceRegAlloc.cpp - Linear-scan 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 /// \file | 10 /// \file |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 // Iterate across all instructions and record the begin and end of the live | 212 // Iterate across all instructions and record the begin and end of the live |
213 // range for each variable that is pre-colored or infinite weight. | 213 // range for each variable that is pre-colored or infinite weight. |
214 CfgVector<InstNumberT> LRBegin(Vars.size(), Inst::NumberSentinel); | 214 CfgVector<InstNumberT> LRBegin(Vars.size(), Inst::NumberSentinel); |
215 CfgVector<InstNumberT> LREnd(Vars.size(), Inst::NumberSentinel); | 215 CfgVector<InstNumberT> LREnd(Vars.size(), Inst::NumberSentinel); |
216 DefUseErrorList DefsWithoutUses, UsesBeforeDefs; | 216 DefUseErrorList DefsWithoutUses, UsesBeforeDefs; |
217 for (CfgNode *Node : Func->getNodes()) { | 217 for (CfgNode *Node : Func->getNodes()) { |
218 for (Inst &Instr : Node->getInsts()) { | 218 for (Inst &Instr : Node->getInsts()) { |
219 if (Instr.isDeleted()) | 219 if (Instr.isDeleted()) |
220 continue; | 220 continue; |
221 FOREACH_VAR_IN_INST(Var, Instr) { | 221 FOREACH_VAR_IN_INST(Var, Instr) { |
222 if (Var->isRematerializable()) | |
223 continue; | |
224 if (Var->getIgnoreLiveness()) | 222 if (Var->getIgnoreLiveness()) |
225 continue; | 223 continue; |
226 if (Var->hasReg() || Var->mustHaveReg()) { | 224 if (Var->hasReg() || Var->mustHaveReg()) { |
227 SizeT VarNum = Var->getIndex(); | 225 SizeT VarNum = Var->getIndex(); |
228 LREnd[VarNum] = Instr.getNumber(); | 226 LREnd[VarNum] = Instr.getNumber(); |
229 if (!Var->getIsArg() && LRBegin[VarNum] == Inst::NumberSentinel) | 227 if (!Var->getIsArg() && LRBegin[VarNum] == Inst::NumberSentinel) |
230 UsesBeforeDefs.push_back(VarNum); | 228 UsesBeforeDefs.push_back(VarNum); |
231 } | 229 } |
232 } | 230 } |
233 if (const Variable *Var = Instr.getDest()) { | 231 if (const Variable *Var = Instr.getDest()) { |
234 if (!Var->isRematerializable() && !Var->getIgnoreLiveness() && | 232 if (!Var->getIgnoreLiveness() && |
235 (Var->hasReg() || Var->mustHaveReg())) { | 233 (Var->hasReg() || Var->mustHaveReg())) { |
236 if (LRBegin[Var->getIndex()] == Inst::NumberSentinel) { | 234 if (LRBegin[Var->getIndex()] == Inst::NumberSentinel) { |
237 LRBegin[Var->getIndex()] = Instr.getNumber(); | 235 LRBegin[Var->getIndex()] = Instr.getNumber(); |
238 ++NumVars; | 236 ++NumVars; |
239 } | 237 } |
240 } | 238 } |
241 } | 239 } |
242 } | 240 } |
243 } | 241 } |
244 | 242 |
(...skipping 766 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1011 Str << "\n"; | 1009 Str << "\n"; |
1012 } | 1010 } |
1013 Str << "++++++ Inactive:\n"; | 1011 Str << "++++++ Inactive:\n"; |
1014 for (const Variable *Item : Inactive) { | 1012 for (const Variable *Item : Inactive) { |
1015 dumpLiveRange(Item, Func); | 1013 dumpLiveRange(Item, Func); |
1016 Str << "\n"; | 1014 Str << "\n"; |
1017 } | 1015 } |
1018 } | 1016 } |
1019 | 1017 |
1020 } // end of namespace Ice | 1018 } // end of namespace Ice |
OLD | NEW |