https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101876

--- Comment #2 from Marius Hillenbrand <mhillen at linux dot ibm.com> ---
Narrowed down what triggers the issue after experimenting with another example:
when the pragma sets 'vx' before the typedef, then the resulting type
definition appears broken. when enabling 'vx' only after the typedef, then the
example compiles successfully.

updated example:

#ifdef BROKEN
#pragma GCC target("arch=z13") // note: z13 implies vx
#else
#pragma GCC target("arch=z13,no-vx") // ... so turn off 'vx' again
#endif

#include <vecintrin.h>

typedef unsigned long long v2di __attribute__((vector_size(16)));

#ifndef BROKEN
#pragma GCC target("vx")
#endif

v2di foo(char *ptr) {
    v2di v = *(v2di *)ptr;
    v = vec_permi(v, v, 0);
    return v;
}

Compile fails
gcc -march=z10 -O3 -DBROKEN -c -S -o- example.c
but succeeds without -DBROKEN

Reply via email to