[LLVMbugs] [Bug 18086] New: Implement Pragma Vectorize - Choice/Parameters

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Thu Nov 28 15:31:50 PST 2013


            Bug ID: 18086
           Summary: Implement Pragma Vectorize - Choice/Parameters
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: Loop Optimizer
          Assignee: unassignedbugs at nondot.org
          Reporter: renato.golin at linaro.org
                CC: llvmbugs at cs.uiuc.edu
    Classification: Unclassified

Implementing pragmas to control vectorization is important to work around
deficiencies in the compiler, language or to create specific tests without
confusing boilerplate or specific target defined.

These pragmas are also great for probing what the compiler is able to do, and
to pick and chose widths and unroll factors that the compiler gets the cost
wrong. Hopefully, users will use them to report improvements to the compiler.

The simplest vectorization pragmas to implement:

#pragma vectorize enable/disable

Simply turns the vectorizer on/off on that loop. This doesn't guarantee that
the loop will get vectorized if it's not legal, but it will enable the
vectorizer even if the optimization level is too low or if the cost model
thinks it's a bad idea.

#pragma vectorize width(4)

for (i = 0; i < N; ++i) {
  A[i] = B[i];
for (i = 0; i < N; i +=4) {
  A[i:i+3] = B[i:i+3];

#pragma vectorize unroll(2)

for (i = 0; i < N; ++i) {
  A[i] = B[i];
for (i = 0; i < N; i +=2) {
  A[i] = B[i];
  A[i+1] = B[i+1];

Ultimately, the pragmas need to trigger warnings to the user, explaining why,
if some of the instructions could not be followed, for instance if:

- The target doesn't support the specified width
- The loop cannot be vectorized because of memory dependencies

You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20131128/a1c86eb3/attachment.html>

More information about the llvm-bugs mailing list