[llvm] r183532 - R600: Fix a potential iterator invalidation issue.
Vincent Lejeune
vljn at ovi.com
Fri Jun 7 09:27:40 PDT 2013
Hi,
I initially wrote the code almost like this way, using std::find instead of
std::remove (because there is at most one element that is equal to chan in UpdatedUndef) but
I got memory corruption error in some llvm IR.
Vincent
----- Mail original -----
> De : Benjamin Kramer <benny.kra at googlemail.com>
> À : llvm-commits at cs.uiuc.edu
> Cc :
> Envoyé le : Vendredi 7 juin 2013 18h13
> Objet : [llvm] r183532 - R600: Fix a potential iterator invalidation issue.
>
> Author: d0k
> Date: Fri Jun 7 11:13:49 2013
> New Revision: 183532
>
> URL: http://llvm.org/viewvc/llvm-project?rev=183532&view=rev
> Log:
> R600: Fix a potential iterator invalidation issue.
>
> As a bonus this reduces the loop from O(n^2) to O(n).
>
> Modified:
> llvm/trunk/lib/Target/R600/R600OptimizeVectorRegisters.cpp
>
> Modified: llvm/trunk/lib/Target/R600/R600OptimizeVectorRegisters.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/R600/R600OptimizeVectorRegisters.cpp?rev=183532&r1=183531&r2=183532&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/R600/R600OptimizeVectorRegisters.cpp (original)
> +++ llvm/trunk/lib/Target/R600/R600OptimizeVectorRegisters.cpp Fri Jun 7
> 11:13:49 2013
> @@ -198,11 +198,9 @@ MachineInstr *R600VectorRegMerger::Rebui
> .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;
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
More information about the llvm-commits
mailing list