Vincent says the element is at most once in the vector, so we don't need a full std...
authorBenjamin Kramer <benny.kra@googlemail.com>
Fri, 7 Jun 2013 18:18:12 +0000 (18:18 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Fri, 7 Jun 2013 18:18:12 +0000 (18:18 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@183541 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/R600/R600OptimizeVectorRegisters.cpp

index 0c123a101e7b20108aac1942ed638a31bba6818e..726cfbcdf3ee2fedad5f247976870f4e9c2df25e 100644 (file)
@@ -198,9 +198,13 @@ MachineInstr *R600VectorRegMerger::RebuildVector(
         .addReg(SubReg)
         .addImm(Chan);
     UpdatedRegToChan[SubReg] = Chan;
-    UpdatedUndef.erase(
-        std::remove(UpdatedUndef.begin(), UpdatedUndef.end(), Chan),
-        UpdatedUndef.end());
+    std::vector<unsigned>::iterator ChanPos =
+        std::find(UpdatedUndef.begin(), UpdatedUndef.end(), Chan);
+    if (ChanPos != UpdatedUndef.end())
+      UpdatedUndef.erase(ChanPos);
+    assert(std::find(UpdatedUndef.begin(), UpdatedUndef.end(), Chan) ==
+               UpdatedUndef.end() &&
+           "UpdatedUndef shouldn't contain Chan more than once!");
     DEBUG(dbgs() << "    ->"; Tmp->dump(););
     (void)Tmp;
     SrcVec = DstReg;