Consider the following short program. If it is compiled MyFunc1 is vectorized 
but MyFunc2 is not. Both fuctions differ only in the empty loop, which is a 
comment in MyMunc2. My compiler is the latest gcc41 snapshot (20050618)

Michael Cieslinski


double MyFunc1 (int size)
{
    int len = size + 1;
    double Data[16] = {0};
//    for (int i=3; i<len; i++) {}  // empty loop

    for (int i=0; i<len; i++)
        Data[i] = Data[i]>=0 ? Data[i] : -Data[i];

    return Data[1];
}

double MyFunc2 (int size)
{
    int len = size + 1;
    double Data[16] = {0};
    for (int i=3; i<len; i++) {}  // empty loop

    for (int i=0; i<len; i++)
        Data[i] = Data[i]>=0 ? Data[i] : -Data[i];

    return Data[1];
}

Output from gcc:
g++41c -O2 -ftree-vectorize -c vec-test.cpp -ftree-vectorizer-verbose=5

vec-test.cpp:7: note: accesses have the same alignment.
vec-test.cpp:7: note: LOOP VECTORIZED.
vec-test.cpp:1: note: vectorized 1 loops in function.

vec-test.cpp:17: note: not vectorized: unsupported data-type
vec-test.cpp:19: note: not vectorized: number of iterations cannot be computed.
vec-test.cpp:13: note: vectorized 0 loops in function.

g++41c -v
Using built-in specs.
Target: x86_64-unknown-linux-gnu
Configured with: ../gcc-4.1-20050618/configure --prefix=/usr/local/gcc41c --
program-suffix=41c --with-arch=opteron --enable-languages=c,c++ --enable-
checking
Thread model: posix
gcc version 4.1.0 20050618 (experimental)

-- 
           Summary: tree vectorizer depends on context
           Product: gcc
           Version: 4.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: tree-optimization
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: micis at gmx dot de
                CC: gcc-bugs at gcc dot gnu dot org
 GCC build triplet: x86_64-unknown-linux-gnu
  GCC host triplet: x86_64-unknown-linux-gnu
GCC target triplet: x86_64-unknown-linux-gnu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22184

Reply via email to