Looping Through LLVM's New Loop Vectorizer

Posted by Michael Larabel on December 08, 2012

Premiering with LLVM 3.2, which will debut later this month, is an automatic loop vectorizer. I've already delivered benchmarks of LLVM's new automatic loop vectorizer, but here's more details on this new LLVM compiler feature.

The LLVM Loop Vectorizer is the second vectorizer for the compiler infrastructure after its Basic Block Vectorizer for dealing with straight-line code. The Loop Vectorizer is meant to widen instructions in an original loop for operating on multiple consecutive loop iterations. As mentioned in the earlier Phoronix articles on the subject, this feature isn't enabled by default with the forthcoming LLVM 3.2 but can be flipped on via the -mllvm -vectorize-loops compiler switches.

On the LLVM Blog is a new posting from yesterday that goes into detail about LLVM's Loop Vectorizer. The posting also mentions that for the LLVM 3.3 release in 2013 they will be aiming to have this vectorizer enabled by default. The blog post covers a few examples of how LLVM can now vectorize different complex loops.

The post also shares that there's more work going forward:

The Loop Vectorizer is a target independent IR-level optimization that depends on target-specific information from the different backends. It needs to select the optimal vector width and to decide if vectorization is worthwhile. Users can force a certain vector width using the command line flag "-mllvm -force-vector-width=X", where X is the number of vector elements. At the moment, only the X86 backend provides detailed cost information, while other targets use a less accurate method.

The work on the Loop Vectorizer is not complete and the vectorizer has a long way to go. We plan to add additional vectorization features such as automatic alignment of buffers, vectorization of function calls and support for user pragmas. We also plan to improve the quality of the generated code.
Read about this new LLVM 3.2 feature at blog.llvm.org. Also to be found in this month's LLVM/Clang/DragonEgg 3.2 release is better PowerPC compiler support, Polly improvements, and much more.

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. Wayland's Weston Gets Output Scaling Support
  2. Raspberry Pi Gets New Wayland Weston Renderer
  3. Debian GNU/Hurd 2013 Release Brings New Packages
  4. Intel Ultrabook Performance Is Faster With Mesa 9.2
  5. Hot Relocation HDD To SSD Support For Btrfs
  6. Phoronix Test Suite 4.6.0 "Utsira" Released
  7. New Intel X.Org Driver Supports All Of Haswell
  8. SQLite Now Faster With Memory Mapped I/O
  9. Microsoft Releases Skype For Linux 4.2, Has Bug-Fixes
  10. Qt For Tizen Launches, Based On Qt 5.1
  11. KTAP Released For Linux Kernel Dynamic Tracing
Latest Forum Talk
  1. Fedora 18 Comes To ARMv6, Raspberry Pi
  2. Wayland's Weston Gets Output Scaling Support
  3. gnome 3.8 in RHEL7?
  4. Handbrake 0.9.9 Supports OpenCL Offloading
  5. Qt For Tizen Launches, Based On Qt 5.1
  6. Humble Indie Bundle Finally Sells Out
  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