http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55862



--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> 2013-01-04 
11:59:42 UTC ---

For BB 7 we iterate between



(gdb) call debug_bitmap_set (old)

debug[0] := { {mem_ref<0B>,addr_expr<&g>}@.MEM_7 (0018), {plus_expr,g.0_18,1}

(0031), {plus_expr,g.4_37,1} (0046), {mem_ref<0B>,addr_expr<&b>}@.MEM_7 (0049),

{pointer_plus_expr,pretmp_45,4} (0050) }

(gdb) call debug_bitmap_set (((bb_value_sets_t) ((block)->aux))->antic_in)

debug[0] := { p_25 (0024), {mem_ref<0B>,addr_expr<&g>}@.MEM_7 (0018),

{plus_expr,g.0_18,1} (0031), {plus_expr,g.4_37,1} (0046),

{mem_ref<0B>,addr_expr<&b>}@.MEM_7 (0049), {pointer_plus_expr,pretmp_45,4}

(0050) }



(gdb) call debug_bitmap_set (old)

debug[0] := { p_25 (0024), {mem_ref<0B>,addr_expr<&g>}@.MEM_7 (0018),

{plus_expr,g.0_18,1} (0031), {plus_expr,g.4_37,1} (0046),

{mem_ref<0B>,addr_expr<&b>}@.MEM_7 (0049), {pointer_plus_expr,pretmp_45,4}

(0050) }

(gdb) call debug_bitmap_set (((bb_value_sets_t) ((block)->aux))->antic_in)

debug[0] := { {mem_ref<0B>,addr_expr<&g>}@.MEM_7 (0018), {plus_expr,g.0_18,1}

(0031), {plus_expr,g.4_37,1} (0046), {mem_ref<0B>,addr_expr<&b>}@.MEM_7 (0049),

{pointer_plus_expr,pretmp_45,4} (0050) }



(gdb) call debug_bitmap_set (old)

debug[0] := { {mem_ref<0B>,addr_expr<&g>}@.MEM_7 (0018), {plus_expr,g.0_18,1}

(0031), {plus_expr,g.4_37,1} (0046), {mem_ref<0B>,addr_expr<&b>}@.MEM_7 (0049),

{pointer_plus_expr,pretmp_45,4} (0050) }

(gdb) call debug_bitmap_set (((bb_value_sets_t) ((block)->aux))->antic_in)

debug[0] := { p_25 (0024), {mem_ref<0B>,addr_expr<&g>}@.MEM_7 (0018),

{plus_expr,g.0_18,1} (0031), {plus_expr,g.4_37,1} (0046),

{mem_ref<0B>,addr_expr<&b>}@.MEM_7 (0049), {pointer_plus_expr,pretmp_45,4}

(0050) }



The CFG is quite complicated ... easier to read testcase:



int g, a, *b;



void f(void)

{

  int *p;



  if(g)

    {

      int **k = &p;



      for(; g; p++)

        for(a = 0; a < 1; a++)

          {

            int *c = p;

label2:

            if(a < 1)

              *c = 0;

          }



      goto label1;



      while(g++)

        for(*b = 0; *b; b++)

          label1:

              ;

    }



  goto label2;

}



I have a patch.

Reply via email to