This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
LNO optimizing out operations it shouldn't?
- From: Timothy J.Wood <tjw at omnigroup dot com>
- To: gcc at gcc dot gnu dot org
- Date: Thu, 17 Jun 2004 20:25:56 -0700
- Subject: LNO optimizing out operations it shouldn't?
I just built up LNO for the first time last night and was surprised
at its behavior with a simple example (based on one of the
tree-ssa-vect tests):
#define VECTOR_SIZE 512
typedef float afloat __attribute__ ((__aligned__(16)));
extern void check(const afloat * __restrict__ x, const afloat *
__restrict__ y, const afloat * __restrict__ out);
void mul(const afloat * __restrict__ x, const afloat * __restrict__ y,
afloat * __restrict__ out)
{
unsigned int i;
for (i = 0; i < VECTOR_SIZE; i++)
out[i] = x[i] * y[i];
//check(x,y,out);
}
build with:
$PREFIX/bin/gcc -O2 -ftree-vectorize -fdump-tree-vect-stats -maltivec
-S test.c -o test.s
I get the following on Darwin:
.text
.align 2
.align 2
.globl _mul
_mul:
li r0,128
mtctr r0
L2:
bdnz L2
blr
If I remove the comment on the call to 'check', real code to do the
'*' gets emitted. This seems like a pretty obvious case, and in fact I
see that tree-ssa-vect-1.c has this same sort of 'call to non-existant'
function (and of course many of the other test have checking to verify
the results...).
This this seems obvious, but I don't see anything in bugzilla.
-tim