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

--- Comment #1 from jbeulich at suse dot com ---
Actually, while trying to determine if there's any kind of workaround for the
actual code where the prior example was derived from, I found that this can be
further simplified:

typedef float __attribute__((mode(SF), vector_size(16))) vec_t;

extern vec_t src, inv;

void init(vec_t *x, unsigned i) {
        (*x)[i] = (i & 1 ? inv : src)[i];
}

Producing a somewhat different stack trace:

$ gccver=11.2.0-base gccx -Wall -W -Os -msse2 -c simd-test2.c
during GIMPLE pass: pre
simd-test2.c: In function ‘init’:
simd-test2.c:8:6: internal compiler error: Segmentation fault
    8 | void init(vec_t *x, unsigned i) {
      |      ^~~~
0x877d21a crash_signal
        /usr/local/src/gcc-11.2.0/gcc/toplev.c:327
0x88d39c5 pre_expr_DFS
        /usr/local/src/gcc-11.2.0/gcc/tree-ssa-pre.c:825
0x88d3e45 sorted_array_from_bitmap_set
        /usr/local/src/gcc-11.2.0/gcc/tree-ssa-pre.c:906
0x88d409f clean
        /usr/local/src/gcc-11.2.0/gcc/tree-ssa-pre.c:2009
0x88da33d compute_antic
        /usr/local/src/gcc-11.2.0/gcc/tree-ssa-pre.c:2519
0x88da33d execute
        /usr/local/src/gcc-11.2.0/gcc/tree-ssa-pre.c:4386

Reply via email to