https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97821
Bug ID: 97821
Summary: wrong code with -ftree-vectorize at -O1 on
x86_64-pc-linux-gnu
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: zhendong.su at inf dot ethz.ch
Target Milestone: ---
The code is valid, but it is hard to reduce, so still quite large.
[509] % gcctk -v
Using built-in specs.
COLLECT_GCC=gcctk
COLLECT_LTO_WRAPPER=/local/suz-local/software/local/gcc-trunk/libexec/gcc/x86_64-pc-linux-gnu/11.0.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../gcc-trunk/configure --disable-bootstrap
--prefix=/local/suz-local/software/local/gcc-trunk --enable-languages=c,c++
--disable-werror --enable-multilib --with-system-zlib
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 11.0.0 20201113 (experimental) [master revision
54896b10dbe:c3a97a9df4b:a514934a0565255276adaa4fbd4aa35579ec33c6] (GCC)
[510] %
[510] % gcctk -O1 small.c; ./a.out
00005030-170
[511] % gcctk -O1 -ftree-vectorize small.c; ./a.out
00005030-176
[512] %
[512] % cat small.c
int printf (const char *, ...);
static unsigned a, f, v;
int b, h, aa, ab, ac, ad, ae, y, z, af;
static long c, m, t, ag, ah = 3;
static signed d;
static char e, ai;
static short g, j = 1, o, w;
int *i, *s;
long long l;
static int *n;
char p;
static int q;
static int r;
static int u;
short x;
long long *aj = &l;
static signed ak;
static volatile unsigned al = 5;
static volatile short am = 1;
int *an(int *ao, int *ap) { return ap; }
static int aq() {
int ar[] = {2, 2, 2, 2, 2, 2};
short *as = &x;
int at[] = {0, 1, 0, 1};
int au = ab = 0;
for (; m <= 1; m++) {
int av = 0, k, aw = e && u, ax = aw || ag;
int **ay = &n;
for (; ab; ab++)
ac = 0;
for (; ac; ac++)
am;
u &&am;
short az = am || a ^ w;
unsigned bc = am & w | am || ag;
ba:
aw = u;
i = 0;
for (; i; i++)
b = a;
printf("0");
if (p) {
printf("%ld", ag);
continue;
}
if (ag) {
printf("7");
e = w | ag<e> c < ax;
}
if (w) {
printf("%d", u);
goto bb;
}
if (u)
printf("%d", e);
s = &k;
u = aw;
t = 0;
for (; t <= 1; t++)
*ay = an(&au, &av);
e++;
}
for (; r >= 0;)
for (; ag <= 5;) {
signed bd[6];
int be = 0, bf = am % al;
for (; be < 6; be++)
bd[0] = 9;
h = 0;
for (; h <= 5; h++)
*aj = *as = aa;
for (; w; w = d)
;
short bg = d + j ^ e + r;
al % am;
int bi = bg & al >> am;
am ^ al;
am / al;
am &al;
al;
am / al;
if (c)
if (q) {
be = 0;
for (; be; be++)
z = 0;
}
am;
int bj = 0;
if (m || q) {
bh:
l = ad = c;
int bm = al || q;
al;
al;
char bn = al || q;
al;
al;
bm = q;
ae = a;
bk:
ai = h || q > d;
ag = d;
al;
al;
printf("%d", q);
if (a > 1)
break;
if (q)
printf("%d", d);
if (q) {
printf("3");
h = d | bm > q;
goto bk;
}
if (!ai || al && 0) {
printf("%d", d);
al;
printf("%d", a);
goto bb;
}
d = al;
printf("%lld", l);
m = q;
if (ak) {
printf("%ld", c);
ad = c & q;
}
if (!ah) {
printf("%d", q);
goto bh;
}
}
if (c)
s = &bj;
m = q = d && c;
r = ~(e / j & al > r);
f |= d = al;
v |= am;
al / al ^ am;
ak = am + al | al;
am / al + al ^ am;
j = am;
al;
bb:
if (c)
g++;
a = q || e & d;
am || al;
am;
am;
am;
al &am;
am;
am;
bl:
am;
if (q) {
printf("%d", q);
a = q - am;
goto bl;
}
am;
printf("%d", d);
m = q & am;
am;
printf("%d", a);
if (d < -41) {
printf("%ld", ag);
goto ba;
}
h = *n;
printf("3");
c = e / d;
printf("%ld", m);
d = d << q / ag;
o = 2;
for (; o; o++)
i = &be;
x = m = e;
printf("%d", r) && (ah = r) || (d = ak && e);
printf("%d", ak);
if (!bf) {
printf("%d", e);
*as = a;
i = n;
bi = ak / am > r;
*n = 0;
for (; n; n++)
;
}
y = bi;
}
return 0;
}
int main() {
for (; af < 6; af++) {
d = 8;
aq();
}
printf("%d\n", h);
return 0;
}