diff options
author | Juergen Ributzka <juergen@apple.com> | 2015-07-09 17:11:15 +0000 |
---|---|---|
committer | Juergen Ributzka <juergen@apple.com> | 2015-07-09 17:11:15 +0000 |
commit | c014920a89f39e9606e42ced600ef70caaca64c1 (patch) | |
tree | 770b2fa60e0440c00dfb3d038e290228d3a94d51 /lib/CodeGen/StackMaps.cpp | |
parent | fd5ef9d20c2d5ed13c1dc7040ecbb1e233583b06 (diff) |
[StackMap] Use lambdas to specify the sort and erase conditions. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241823 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/StackMaps.cpp')
-rw-r--r-- | lib/CodeGen/StackMaps.cpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/lib/CodeGen/StackMaps.cpp b/lib/CodeGen/StackMaps.cpp index 5fe17a1889b..116eef66c58 100644 --- a/lib/CodeGen/StackMaps.cpp +++ b/lib/CodeGen/StackMaps.cpp @@ -248,10 +248,15 @@ StackMaps::parseRegisterLiveOutMask(const uint32_t *Mask) const { // We don't need to keep track of a register if its super-register is already // in the list. Merge entries that refer to the same dwarf register and use // the maximum size that needs to be spilled. - std::sort(LiveOuts.begin(), LiveOuts.end()); - for (LiveOutVec::iterator I = LiveOuts.begin(), E = LiveOuts.end(); I != E; - ++I) { - for (LiveOutVec::iterator II = std::next(I); II != E; ++II) { + + std::sort(LiveOuts.begin(), LiveOuts.end(), + [](const LiveOutReg &LHS, const LiveOutReg &RHS) { + // Only sort by the dwarf register number. + return LHS.DwarfRegNum < RHS.DwarfRegNum; + }); + + for (auto I = LiveOuts.begin(), E = LiveOuts.end(); I != E; ++I) { + for (auto II = std::next(I); II != E; ++II) { if (I->DwarfRegNum != II->DwarfRegNum) { // Skip all the now invalid entries. I = --II; @@ -260,12 +265,15 @@ StackMaps::parseRegisterLiveOutMask(const uint32_t *Mask) const { I->Size = std::max(I->Size, II->Size); if (TRI->isSuperRegister(I->Reg, II->Reg)) I->Reg = II->Reg; - II->MarkInvalid(); + II->Reg = 0; // mark for deletion. } } + LiveOuts.erase( - std::remove_if(LiveOuts.begin(), LiveOuts.end(), LiveOutReg::IsInvalid), + std::remove_if(LiveOuts.begin(), LiveOuts.end(), + [](const LiveOutReg &LO) { return LO.Reg == 0; }), LiveOuts.end()); + return LiveOuts; } |