[LLVMdev] Missed vectorization opportunities?
mats petersson
mats at planetcatfish.com
Wed Apr 22 04:16:33 PDT 2015
In your first case, I fail to see what the obvious vectorisation would
be - you are reading one and writing one of the every other element -
that is not very easy to made into vectorized operatioons - have you
tried writing code for that, and confirmed that it's actually better
than just straight loop?
--
Mats
On 22 April 2015 at 12:01, Vaivaswatha N <vaivaswatha at yahoo.co.in> wrote:
> Hi,
>
> I am trying to understand the limitations of the current vectorizer, and
> came upon these test cases that fail to get vectorized.
>
> 1. loop1 below (note the increment by 2) fails to get vectorized because the
> access a[j+1] is considered to wrap around (the corresponding SCEV doesn't
> have nsw/nuw set) and hence isStridedPtr() in LoopAccessAnalysis.cpp return
> false.
>
> #define SIZE 100000
> void loop1 (float a[SIZE])
> {
> long t, j;
> float cc = 23, dd = 34, ee = 233;
> #pragma clang loop vectorize(enable)
> for (j = 1; j < SIZE-1; j += 2) {
> float x;
> x = a[j+1] + ee;
> x = x / dd;
> x = (cc + x) / dd;
> a[j] = x + 2 ;
> }
> }
>
> 2. Of the two loops below, the loop "works" gets vectorized, while the loop
> "fails" does not get vectorized.
> #define SIZE 10000
> int a[SIZE+4] = {};
> void works(unsigned long m, unsigned long n)
> {
> long j;
> // SCEV can compute the exit value for this loop
> for (j = m; j < n+1; j += 1) {
> a[j] = a[j+1] + 2;
> }
> }
> void fails(unsigned long m, unsigned long n)
> {
> long j;
> // SCEV cannot compute the exit value for this loop
> for (j = m; j <= n; j += 1) {
> a[j] = a[j+1] + 2;
> }
> }
>
> The only difference between the two loops is the loop exit condition, both
> semantically same. Scalar Evolution is unable to determine the exit value of
> the second loop, leading to the vectorizer failing to vectorize. It seemed
> to me that this is due to ScalarEvolution::SimplifyICmpOperands failing to
> canonicalize the corresponding ICMP_ULE instruction.
>
> Thanks,
>
> - Vaivaswatha
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
More information about the llvm-dev
mailing list