Hello,

When trying to compile the following loop with GCC -r164298 with modulo
scheduling pass enabled on PowerPC I get that the inter loop edges
between the memory instructions are created in the DDG although the
following check in ddg.c exists:

static void
add_inter_loop_mem_dep (ddg_ptr g, ddg_node_ptr from, ddg_node_ptr to)
{
  if (!insns_may_alias_p (from->insn, to->insn))
     return;

With GCC -r146278 the edges are not created in the DDG.
Looking more closely into the code I see the following differences in ddg.c
between the GCC versions:

The new version of GCC contains:

add_inter_loop_mem_dep ()  -> ...-> may_alias_p()

while with GCC -r146278:

add_inter_loop_mem_dep () -> ... -> insn_alias_sets_conflict_p()

I do not understand this behavior and I appreciate an explanation.

Thanks,
Revital


void foo( int * __restrict__ dst,  int * __restrict__ src1,
                  int * __restrict__ src2)
{
    int x, y;

   for( x = 0; x < 100; x+=1 )
        {
            dst[x] = ( src1[x] * src2[x] ) ;
        }
}

Reply via email to