IR: Use remove_if for Instruction::dropUnknownMetadata()

Technically the operations are different -- the old logic moved items
from the back into the opened-up slots, instead of the usual
`remove_if()` logic of a slow and a fast iterator -- but unless a
profile tells us otherwise I prefer the simpler logic here.  Regardless,
there shouldn't be an observable function change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235767 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Duncan P. N. Exon Smith committed 2015-04-24 20:23:44 +00:00
1 parent d8c574a5a4
commit 9cd7a4b72d
1 file changed
+7 -15
+7 -15
View File
@@ -1007,22 +1007,14 @@ void Instruction::dropUnknownMetadata(ArrayRef<unsigned> KnownIDs) {
}
auto &Info = InstructionMetadata[this];
unsigned I;
unsigned E;
// Walk the array and drop any metadata we don't know.
for (I = 0, E = Info.size(); I != E;) {
if (KnownSet.count(Info[I].first)) {
++I;
continue;
}
Info.erase(std::remove_if(
Info.begin(), Info.end(),
[&KnownSet](const std::pair<unsigned, TrackingMDNodeRef> &I) {
return !KnownSet.count(I.first);
}),
Info.end());
Info[I] = std::move(Info.back());
Info.pop_back();
--E;
}
assert(E == Info.size());
if (E == 0) {
if (Info.empty()) {
// Drop our entry at the store.
InstructionMetadata.erase(this);
setHasMetadataHashEntry(false);