New user self-registration is disabled due to spam. For an account please email bugs-admin@lists.llvm.org with your e-mail address and full name.

Bug 40546 - omp simd reduction "loop not vectorized" warning for a simple loop that even seems vectorized
Summary: omp simd reduction "loop not vectorized" warning for a simple loop that even ...
Status: RESOLVED FIXED
Alias: None
Product: new-bugs
Classification: Unclassified
Component: new bugs (show other bugs)
Version: 8.0
Hardware: PC Linux
: P normal
Assignee: Unassigned LLVM Bugs
URL:
Keywords:
Depends on:
Blocks: release-8.0.0
  Show dependency tree
 
Reported: 2019-01-31 06:49 PST by Tomas Kalibera
Modified: 2019-02-05 04:52 PST (History)
5 users (show)

See Also:
Fixed By Commit(s): r353082


Attachments
compile with -fopenmp -O2 (192 bytes, text/x-csrc)
2019-01-31 06:49 PST, Tomas Kalibera
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Tomas Kalibera 2019-01-31 06:49:32 PST
Created attachment 21411 [details]
compile with -fopenmp -O2

clang8 emits warning

"loop not vectorized: the optimizer was unable to perform the requested transformation; the transformation might be disabled or specified as part of an unsupported transformation ordering [-Wpass-failed=transform-warning]"

for the following example, when compiled with "-fopenmp -O2". The generated code is, however, vectorized and is almost identical to the code generated by clang7, which does not emit the warning. The same problem as in clang8 is in the current clang9 (and the emitted code is identical). clang6 produces similar code, vectorizes the loop, and does not emit the warning, either.

The warning is generated twice when compiling the example, with identical texts and code locations, and counted as "2 warnings". 

int maybeNotFinite(double *x, unsigned n)
{
    double s = 0;

    #pragma omp simd reduction(+:s)
    for (unsigned i = 0; i < n; i++)
        s += x[i];
    return !finite(s);
}

tested on Ubuntu 18.04.1 with clang from apt.llvm.org
clang version 8.0.0-svn352547-1~exp1~20190130015936.13 (branches/release_80)
clang version 7.0.1-svn348686-1~exp1~20190113235231.54 (branches/release_70)
clang version 9.0.0-svn352666-1~exp1+0~20190130204444.773~1.gbp5cc800 (trunk)

and on clang from Ubuntu 18.04.1
clang version 6.0.0-1ubuntu2 (tags/RELEASE_600/final)
Comment 1 Michael Kruse 2019-01-31 11:59:15 PST
LoopVectorize adds llvm.loop.isvectorized, but leaves llvm.loop.vectorize.enable which is reported (for the vectorized loop and the fallback). The function hasVectorizeTransformation considers this, but with different priorization. Working on it.
Comment 2 Michael Kruse 2019-01-31 13:41:43 PST
Thanks for the report. See https://reviews.llvm.org/D57542 for a fix.

We should consider this for clang-8 as well.
Comment 3 Hans Wennborg 2019-02-05 04:52:22 PST
(In reply to Michael Kruse from comment #2)
> Thanks for the report. See https://reviews.llvm.org/D57542 for a fix.
> 
> We should consider this for clang-8 as well.

Merged the fix in r353166, thanks.