diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2013-05-05 11:29:14 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2013-05-05 11:29:14 +0000 |
commit | 391f5a6e2173caf64eaf5354750d61f2030b0d0c (patch) | |
tree | 09f74d27858bf3f2f3708edc22b9c013fc3b0758 /llvm/lib/CodeGen/InlineSpiller.cpp | |
parent | 8c02c98259365e9a7fa3de05a4f0037225b3572c (diff) | |
download | bcm5719-llvm-391f5a6e2173caf64eaf5354750d61f2030b0d0c.tar.gz bcm5719-llvm-391f5a6e2173caf64eaf5354750d61f2030b0d0c.zip |
InlineSpiller: Remove quadratic behavior.
No functionality change.
llvm-svn: 181149
Diffstat (limited to 'llvm/lib/CodeGen/InlineSpiller.cpp')
-rw-r--r-- | llvm/lib/CodeGen/InlineSpiller.cpp | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/llvm/lib/CodeGen/InlineSpiller.cpp b/llvm/lib/CodeGen/InlineSpiller.cpp index c6d1a18dbd0..35295fe8588 100644 --- a/llvm/lib/CodeGen/InlineSpiller.cpp +++ b/llvm/lib/CodeGen/InlineSpiller.cpp @@ -955,18 +955,21 @@ void InlineSpiller::reMaterializeAll() { Edit->eliminateDeadDefs(DeadDefs, RegsToSpill); // Get rid of deleted and empty intervals. - for (unsigned i = RegsToSpill.size(); i != 0; --i) { - unsigned Reg = RegsToSpill[i-1]; - if (!LIS.hasInterval(Reg)) { - RegsToSpill.erase(RegsToSpill.begin() + (i - 1)); + unsigned ResultPos = 0; + for (unsigned i = 0, e = RegsToSpill.size(); i != e; ++i) { + unsigned Reg = RegsToSpill[i]; + if (!LIS.hasInterval(Reg)) continue; - } + LiveInterval &LI = LIS.getInterval(Reg); - if (!LI.empty()) + if (LI.empty()) { + Edit->eraseVirtReg(Reg); continue; - Edit->eraseVirtReg(Reg); - RegsToSpill.erase(RegsToSpill.begin() + (i - 1)); + } + + RegsToSpill[ResultPos++] = Reg; } + RegsToSpill.erase(RegsToSpill.begin() + ResultPos, RegsToSpill.end()); DEBUG(dbgs() << RegsToSpill.size() << " registers to spill after remat.\n"); } |