llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
29.01k stars 11.96k forks source link

Clang punts on vectorization and issues incorrect diagnostic #33472

Open jeffhammond opened 7 years ago

jeffhammond commented 7 years ago
Bugzilla Link 34125
Version 4.0
OS MacOS X
Attachments make command output, archive containing reproducer
CC @hfinkel,@jeffhammond

Extended Description

Clang claims the reason it does not vectorize star[45] is because the trip count cannot be determined, but the trip count determination is identical in star[123], which are vectorized.

./stencil_tbb.hpp:63:7: remark: loop not vectorized: could not determine number of loop iterations [-Rpass-analysis] for (auto j=r.cols().begin(); j!=r.cols().end(); ++j ) { ^

As best I can tell, the issue is that the loop bodies for star[45] are too large. Functions with 12 or fewer terms are vectorized whereas those with 16 or more are not.

jeffhammond commented 7 years ago

I use Clang 4.0.1 from Homebrew:

$ /usr/local/Cellar/llvm/4.0.1/bin/clang++ --version clang version 4.0.1 (tags/RELEASE_401/final) Target: x86_64-apple-darwin16.7.0 Thread model: posix InstalledDir: /usr/local/Cellar/llvm/4.0.1/bin