https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65832
Richard Biener changed:
What|Removed |Added
CC||mirq-gccboogs at rere dot
qmqm.pl
---
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65832
--- Comment #6 from Richard Biener ---
Testcase simulating all qi vector cases the vectorizer may create
char a[1024];
char b[1024];
void foobar (int s)
{
for (int i = 0; i < 16; ++i)
{
b[i] = a[s*i];
}
}
void foo (int s)
{
f
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65832
--- Comment #5 from Richard Biener ---
On a related note, store_constructor handles VECTOR_TYPE constructors through
the vec_init optab but that doesn't work for vector elements:
/* Don't use vec_init if some elements have VECTOR_TYP
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65832
Richard Biener changed:
What|Removed |Added
CC||uros at gcc dot gnu.org
--- Comment #4
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65832
--- Comment #3 from Richard Biener ---
Another example where the vectorizer thinks vectorization is profitable:
#define N 16
unsigned int out[N];
unsigned int in[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
__attribute__ ((noinline)) int
main
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65832
--- Comment #2 from Richard Biener ---
typedef unsigned char v16qi __attribute__((vector_size(16)));
v16qi baz (int i0, int i1, int i2, int i3,
int i10, int i11, int i12, int i13,
int i20, int i21, int i22, int i23,
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65832
--- Comment #1 from Richard Biener ---
typedef int v4si __attribute__((vector_size(16)));
v4si bar (int *i, int *j, int *k, int *l)
{
return (v4si) { *i, *j, *k, *l };
}
looks reasonable (no spills at least, stray move for the return value).