]> granicus.if.org Git - clang/commit
Revert r372082 "[Clang] Pragma vectorize_width() implies vectorize(enable)"
authorHans Wennborg <hans@hanshq.net>
Wed, 18 Sep 2019 13:41:51 +0000 (13:41 +0000)
committerHans Wennborg <hans@hanshq.net>
Wed, 18 Sep 2019 13:41:51 +0000 (13:41 +0000)
commit44ed889c4d3e0667301d43daef28abec604effba
treefb15bff0503be04159c443be338a8e1abfe05e45
parentdea5f9524dfcb55235c0a6469791b4dc84acac37
Revert r372082 "[Clang] Pragma vectorize_width() implies vectorize(enable)"

This broke the Chromium build. Consider the following code:

  float ScaleSumSamples_C(const float* src, float* dst, float scale, int width) {
    float fsum = 0.f;
    int i;
  #if defined(__clang__)
  #pragma clang loop vectorize_width(4)
  #endif
    for (i = 0; i < width; ++i) {
      float v = *src++;
      fsum += v * v;
      *dst++ = v * scale;
    }
    return fsum;
  }

Compiling at -Oz, Clang  now warns:

  $ clang++ -target x86_64 -Oz -c /tmp/a.cc
  /tmp/a.cc:1:7: 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]

this suggests it's not actually enabling vectorization hard enough.

At -Os it asserts instead:

  $ build.release/bin/clang++ -target x86_64 -Os -c /tmp/a.cc
  clang-10: /work/llvm.monorepo/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:2734: void
  llvm::InnerLoopVectorizer::emitMemRuntimeChecks(llvm::Loop*, llvm::BasicBlock*): Assertion `
  !BB->getParent()->hasOptSize() && "Cannot emit memory checks when optimizing for size"' failed.

Of course neither of these are what the developer expected from the pragma.

> Specifying the vectorization width was supposed to implicitly enable
> vectorization, except that it wasn't really doing this. It was only
> setting the vectorize.width metadata, but not vectorize.enable.
>
> This should fix PR27643.
>
> Differential Revision: https://reviews.llvm.org/D66290

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@372225 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/CGLoopInfo.cpp
test/CodeGenCXX/pragma-loop-predicate.cpp
test/CodeGenCXX/pragma-loop.cpp