| 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 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 207 FindOverlap = false; | 207 FindOverlap = false; |
| 208 SizeT NumVars = 0; | 208 SizeT NumVars = 0; |
| 209 const VarList &Vars = Func->getVariables(); | 209 const VarList &Vars = Func->getVariables(); |
| 210 | 210 |
| 211 // Iterate across all instructions and record the begin and end of the live | 211 // Iterate across all instructions and record the begin and end of the live |
| 212 // range for each variable that is pre-colored or infinite weight. | 212 // range for each variable that is pre-colored or infinite weight. |
| 213 CfgVector<InstNumberT> LRBegin(Vars.size(), Inst::NumberSentinel); | 213 CfgVector<InstNumberT> LRBegin(Vars.size(), Inst::NumberSentinel); |
| 214 CfgVector<InstNumberT> LREnd(Vars.size(), Inst::NumberSentinel); | 214 CfgVector<InstNumberT> LREnd(Vars.size(), Inst::NumberSentinel); |
| 215 DefUseErrorList DefsWithoutUses, UsesBeforeDefs; | 215 DefUseErrorList DefsWithoutUses, UsesBeforeDefs; |
| 216 for (CfgNode *Node : Func->getNodes()) { | 216 for (CfgNode *Node : Func->getNodes()) { |
| 217 for (Inst &Inst : Node->getInsts()) { | 217 for (Inst &Instr : Node->getInsts()) { |
| 218 if (Inst.isDeleted()) | 218 if (Instr.isDeleted()) |
| 219 continue; | 219 continue; |
| 220 FOREACH_VAR_IN_INST(Var, Inst) { | 220 FOREACH_VAR_IN_INST(Var, Instr) { |
| 221 if (Var->isRematerializable()) | 221 if (Var->isRematerializable()) |
| 222 continue; | 222 continue; |
| 223 if (Var->getIgnoreLiveness()) | 223 if (Var->getIgnoreLiveness()) |
| 224 continue; | 224 continue; |
| 225 if (Var->hasReg() || Var->mustHaveReg()) { | 225 if (Var->hasReg() || Var->mustHaveReg()) { |
| 226 SizeT VarNum = Var->getIndex(); | 226 SizeT VarNum = Var->getIndex(); |
| 227 LREnd[VarNum] = Inst.getNumber(); | 227 LREnd[VarNum] = Instr.getNumber(); |
| 228 if (!Var->getIsArg() && LRBegin[VarNum] == Inst::NumberSentinel) | 228 if (!Var->getIsArg() && LRBegin[VarNum] == Inst::NumberSentinel) |
| 229 UsesBeforeDefs.push_back(VarNum); | 229 UsesBeforeDefs.push_back(VarNum); |
| 230 } | 230 } |
| 231 } | 231 } |
| 232 if (const Variable *Var = Inst.getDest()) { | 232 if (const Variable *Var = Instr.getDest()) { |
| 233 if (!Var->isRematerializable() && !Var->getIgnoreLiveness() && | 233 if (!Var->isRematerializable() && !Var->getIgnoreLiveness() && |
| 234 (Var->hasReg() || Var->mustHaveReg())) { | 234 (Var->hasReg() || Var->mustHaveReg())) { |
| 235 if (LRBegin[Var->getIndex()] == Inst::NumberSentinel) { | 235 if (LRBegin[Var->getIndex()] == Inst::NumberSentinel) { |
| 236 LRBegin[Var->getIndex()] = Inst.getNumber(); | 236 LRBegin[Var->getIndex()] = Instr.getNumber(); |
| 237 ++NumVars; | 237 ++NumVars; |
| 238 } | 238 } |
| 239 } | 239 } |
| 240 } | 240 } |
| 241 } | 241 } |
| 242 } | 242 } |
| 243 | 243 |
| 244 Unhandled.reserve(NumVars); | 244 Unhandled.reserve(NumVars); |
| 245 UnhandledPrecolored.reserve(NumVars); | 245 UnhandledPrecolored.reserve(NumVars); |
| 246 for (SizeT i = 0; i < Vars.size(); ++i) { | 246 for (SizeT i = 0; i < Vars.size(); ++i) { |
| (...skipping 781 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1028 Str << "\n"; | 1028 Str << "\n"; |
| 1029 } | 1029 } |
| 1030 Str << "++++++ Inactive:\n"; | 1030 Str << "++++++ Inactive:\n"; |
| 1031 for (const Variable *Item : Inactive) { | 1031 for (const Variable *Item : Inactive) { |
| 1032 dumpLiveRange(Item, Func); | 1032 dumpLiveRange(Item, Func); |
| 1033 Str << "\n"; | 1033 Str << "\n"; |
| 1034 } | 1034 } |
| 1035 } | 1035 } |
| 1036 | 1036 |
| 1037 } // end of namespace Ice | 1037 } // end of namespace Ice |
| OLD | NEW |