[llvm] r208286 - Revert "SCEV: Use I = vector<>.erase(I) to iterate and delete at the same time"
Benjamin Kramer
benny.kra at gmail.com
Thu May 8 13:16:17 PDT 2014
On 08.05.2014, at 09:55, Tobias Grosser <tobias at grosser.es> wrote:
> Author: grosser
> Date: Thu May 8 02:55:34 2014
> New Revision: 208286
>
> URL: http://llvm.org/viewvc/llvm-project?rev=208286&view=rev
> Log:
> Revert "SCEV: Use I = vector<>.erase(I) to iterate and delete at the same time"
>
> as committed in r208282. The original commit was incorrect.
This looks like a perfect candidate for std::remove_if. It also avoids the O(n^2) behavior you get by calling erase on a vector in a loop.
- Ben
>
> Modified:
> llvm/trunk/lib/Analysis/ScalarEvolution.cpp
>
> Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolution.cpp?rev=208286&r1=208285&r2=208286&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Analysis/ScalarEvolution.cpp (original)
> +++ llvm/trunk/lib/Analysis/ScalarEvolution.cpp Thu May 8 02:55:34 2014
> @@ -7223,9 +7223,12 @@ static void findArrayDimensionsRec(Scala
> Terms[I] = Q;
> }
>
> - for (auto I = Terms.begin(), E = Terms.end(); I != E; I++)
> - if (isa<SCEVConstant>(*I))
> - I = Terms.erase(I);
> + // Remove all SCEVConstants.
> + for (unsigned I = 0; I < Terms.size();)
> + if (isa<SCEVConstant>(Terms[I]))
> + Terms.erase(Terms.begin() + I);
> + else
> + ++I;
>
> if (Terms.size() > 0)
> findArrayDimensionsRec(SE, Terms, Sizes, Zero, One);
>
>
> _______________________________________________
> 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