Hello,
I have the loop below and I want to pass to gcc that src1 and src2 never
alias with dst; so I used the restrict keyword as below; however I still
see that there are dependence edges between dst and src1 and src2 in
the DDG created by SMS and I wonder how can I resolve this.
(I used GCC -v167637 and compiled for powerpc)
Thanks,
Revital
Original version:
void foo(unsigned char ***dst,
unsigned char *src1,
unsigned char *src2, int row)
{
int x;
for( x = 0; x < 100; x+=1)
{
dst[0][row][x] = ( src1[x] * src2[x]);
}
}
version 1 with restrict:
void foo(unsigned char ***__restrict__ dst,
unsigned char *__restrict__ src1,
unsigned char *__restrict__ src2, int row)
{
int x;
for( x = 0; x < 100; x+=1)
{
dst[0][row][x] = ( src1[x] * src2[x]);
}
}
version 2 with restrict:
void
foo(unsigned char *** __restrict__ dst,
unsigned char * __restrict__ src1,
unsigned char * __restrict__ src2, int row)
{
int x;
unsigned char **__restrict__ dst1 = dst[0];
unsigned char * __restrict__ dst2 = dst1[row];
for( x = 0; x < 100; x+=1)
{
dst2[x] = (src1[x] * src2[x]);
}
}