R600: Fix a potential iterator invalidation issue.
authorBenjamin Kramer <benny.kra@googlemail.com>
Fri, 7 Jun 2013 16:13:49 +0000 (16:13 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Fri, 7 Jun 2013 16:13:49 +0000 (16:13 +0000)
As a bonus this reduces the loop from O(n^2) to O(n).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@183532 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/R600/R600OptimizeVectorRegisters.cpp

index 9d237bb7a049ba25a9504619c9103f1bc465a894..0c123a101e7b20108aac1942ed638a31bba6818e 100644 (file)
@@ -198,11 +198,9 @@ MachineInstr *R600VectorRegMerger::RebuildVector(
         .addReg(SubReg)
         .addImm(Chan);
     UpdatedRegToChan[SubReg] = Chan;
-    for (std::vector<unsigned>::iterator RemoveIt = UpdatedUndef.begin(),
-        RemoveE = UpdatedUndef.end(); RemoveIt != RemoveE; ++ RemoveIt) {
-      if (*RemoveIt == Chan)
-        UpdatedUndef.erase(RemoveIt);
-    }
+    UpdatedUndef.erase(
+        std::remove(UpdatedUndef.begin(), UpdatedUndef.end(), Chan),
+        UpdatedUndef.end());
     DEBUG(dbgs() << "    ->"; Tmp->dump(););
     (void)Tmp;
     SrcVec = DstReg;