[llvm] r327109 - [LV] Fix vectorizer's isUniform() abuse triggers assert in SCEV

Michael Kruse via llvm-commits llvm-commits at lists.llvm.org
Fri Mar 9 09:43:44 PST 2018


The commit is missing the test case pr36311.ll from
reviews.llvm.org/D43536 was this intended?

Michael

2018-03-09 11:31 GMT+01:00 Renato Golin via llvm-commits
<llvm-commits at lists.llvm.org>:
> Author: rengolin
> Date: Fri Mar  9 02:31:31 2018
> New Revision: 327109
>
> URL: http://llvm.org/viewvc/llvm-project?rev=327109&view=rev
> Log:
> [LV] Fix vectorizer's isUniform() abuse triggers assert in SCEV
>
> Fixes PR36311.
>
> See more detailed analysis in
> https://bugs.llvm.org/show_bug.cgi?id=36311.
>
> isUniform() information is recomputed after LV started transforming the
> underlying IR and that triggered an assert in SCEV.
>
> From vectorizer's architectural perspective, such information, while
> still useful in vector code gen, should not be recomputed after the
> start of transforming the LLVM IR. Instead, we should collect and cache
> such information during the analysis phase of LV and use the cached info
> during code gen.
>
> From the symptom perspective, this assert as it stands right now is not
> very useful. Legality already rejected loops that would trigger the
> assert. As such, commenting out the assert is NFC from vectorizer's
> functionality perspective. On top of that, just above the assertion, we
> check for unit-strided load/store or
> gather scatter. Addresses can't be uniform below that check.
>
> From vectorization theory point of view, we don't have to reject all
> cases of stores to uniform addresses. Eventually, we should support
> safe/profitable cases.
>
> This patch resolves the issue by removing the useless assertion that is
> invoking LAA's isUniform() that requires up-to-date DomTree ---- once
> vector code gen starts modifying CFG, we don't have an up-to-date
> DomTree.
>
> Patch by Hideki Saito <hideki.saito at intel.com>.
>
> Modified:
>     llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp
>
> Modified: llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp?rev=327109&r1=327108&r2=327109&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp (original)
> +++ llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp Fri Mar  9 02:31:31 2018
> @@ -3035,8 +3035,6 @@ void InnerLoopVectorizer::vectorizeMemor
>
>    // Handle Stores:
>    if (SI) {
> -    assert(!Legal->isUniform(SI->getPointerOperand()) &&
> -           "We do not allow storing to uniform addresses");
>      setDebugLocFromInst(Builder, SI);
>
>      for (unsigned Part = 0; Part < UF; ++Part) {
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list