LLVM Gets An Automatic Loop Vectorizer

Posted by Michael Larabel on October 26, 2012

A loop vectorizer has been committed to LLVM 3.2 that's capable of automatically vectorizing small loops.

After a few weeks of discussions about a new loop vectorizer for LLVM, Apple's Nadav Rotem shared this week that a new implementation has been committed.

While it's been committed, the feature is currently disabled by default and when using the Clang C/C++ front-end the -mllvm -vectorize switches must be set for turning on this automatic loop vectorizer.

Nadav mentions, "The loop vectorizer is far from being 'ready', and this feature should be considered as 'highly experimental'. The work on the loop vectorizer had just began, and there is lots of work ahead...We currently know of a number of areas where we can improve. At the moment the vectorizer will vectorize anything it can, because we do not have a 'cost-model' to estimate the profitability of vectorization. Implementing a cost model is a high-priority for us, and until this is ready you should expect to see slowdowns on many loops. Another area which we need to improve is the memory dependence check. At the moment we have a very basic memory legality check which can be improved. Additionally, there are a number of cases where we generate poor vector code or suffer from a phase-rdering problem. Once we solve these problems we can continue to implement additional features."

The recent LLVM loop vectorizer discussions began in this thread at the beginning of October. "We are starting to work on an LLVM loop vectorizer. There's number of different projects that already vectorize LLVM IR. For example Hal's BB-Vectorizer, Intel's OpenCL Vectorizer, Polly, ISPC, AnySL, just to name a few. I think that it would be great if we could collaborate on the areas that are shared between the different projects. I think that refactoring LLVM in away that would expose target information to IR-level transformations would be a good way to start. Vectorizers, as well as other IR-level transformations, require target-specific information, such as the cost of different instruction or the availability of certain features. Currently, llvm-based vectorizers do not make use of this information, or just hard-code target information. A loop vectorizer would need target information. After we have some basic target information infrastructure in place we can start discussing the vectorizer itself."

LLVM 3.2 is planned for release in mid-December.

Discuss this article in our forums, IRC channel, or email the author. You can also follow our content via RSS and on social networks like Facebook, Identi.ca, and Twitter (@Phoronix and @MichaelLarabel). Subscribe to Phoronix Premium to view our content without advertisements, view entire articles on a single page, and experience other benefits.
Latest Hardware Reviews
  1. Sumo Lounge Emperor
  2. Gallium3D Continues Improving OpenGL For Older Radeon GPUs
  3. 15-Way Open vs. Closed Source NVIDIA/AMD Linux GPU Comparison
  4. Nouveau vs. NVIDIA Linux Comparison Shows Shortcomings
Latest Software Articles
  1. Intel Linux OpenGL Driver Leading Over Apple OS X
  2. The Cost Of Ubuntu Disk Encryption
  3. Btrfs vs. EXT4 vs. XFS vs. F2FS On Linux 3.10
  4. AMD Radeon R600 GPU LLVM 3.3 Back-End Testing
Latest Linux News
  1. New NVIDIA Linux Driver Supports The GeForce GTX 780
  2. Chrome 28 To Offer More Speed Improvements
  3. Digia Announces "Boot To Qt" Project
  4. X.Org Libraries Hit By Round Of Security Issues
  5. Wayland's Weston Gets Output Scaling Support
  6. Raspberry Pi Gets New Wayland Weston Renderer
  7. Debian GNU/Hurd 2013 Release Brings New Packages
  8. Intel Ultrabook Performance Is Faster With Mesa 9.2
  9. Hot Relocation HDD To SSD Support For Btrfs
  10. Phoronix Test Suite 4.6.0 "Utsira" Released
  11. New Intel X.Org Driver Supports All Of Haswell
Latest Forum Talk
  1. Raspberry Pi Gets New Wayland Weston Renderer
  2. Digia Announces "Boot To Qt" Project
  3. Radeon 7770 Can't reclock crash kernel
  4. X.Org Libraries Hit By Round Of Security Issues
  5. Xserver 1.14 support will arrive with Catalyst...
  6. Radeon HD 7850 Catalyst wine performance
  1. Computers
  2. Display Drivers
  3. Graphics Cards
  4. Motherboards
  5. Peripherals
  6. Processors
  7. Software
  8. Operating Systems
  9. All Articles
  1. Linux Benchmarking
  2. OpenBenchmarking.org
  3. Phoronix Test Suite