This is a small extract from a benchmark. It shows that -O1 -ftree-loop-linear
generates a couple
of empty loops, and incorrect behavior.
/* main.c */
#include <stdio.h>
extern void init();
double mid_wts[8][35];
double in_pats[1][35];
double do_mid_forward(int patt)
{
double sum;
int neurode, i;
for (neurode=0;neurode<8; neurode++)
{
sum = 0.0;
for (i=0; i<35; i++)
{
sum += mid_wts[neurode][i]*in_pats[patt][i];
}
sum = 1.0/(1.0+sum);
}
return sum;
}
double value;
main()
{
init();
printf(" %e\n", do_mid_forward (0));
}
/* init.c */
extern double mid_wts[8][35];
extern double in_pats[1][35];
double value;
void init()
{
int i;
int neurode;
value=(double)1.0 - (double) 0.5;
for (neurode = 0; neurode<8; neurode++)
for (i=0; i<35; i++)
mid_wts[neurode][i] = value;
for (i=0; i<35; i++)
in_pats[0][i] = 1.234;
}
% cc -c -O0 init.c
% cc -O1 -ftree-loop-linear main.c init.o
% ./a.out
-2.384238e+11
Assembly file for ppc-darwin shows a couple of do-nothing empty loops.
Remove -ftree-loop-linear and program behaves correctly.
--
Summary: -ftree-loop-linear doesn't work right in small loop
Product: gcc
Version: 4.0.0
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: tree-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: fjahanian at apple dot com
CC: gcc-bugs at gcc dot gnu dot org
GCC build triplet: powerpc-apple-darwin
GCC host triplet: powerpc-apple-darwin
GCC target triplet: powerpc-apple-darwin
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20256