------- Comment #5 from rguenth at gcc dot gnu dot org 2006-08-19 10:15 ------- dce1 removes the store, after fre we have:
find (alistp) { int list[32]; const int * blist; const GLint * blist.0; # BLOCK 2 # PRED: ENTRY (fallthru,exec) if (alistp_2 != 0B) goto <L0>; else goto <L1>; # SUCC: 3 (true,exec) 4 (false,exec) # BLOCK 3 # PRED: 2 (true,exec) <L0>:; blist_3 = alistp_2; goto <bb 5> (<L2>); # SUCC: 5 (fallthru,exec) # BLOCK 4 # PRED: 2 (false,exec) <L1>:; # list_5 = V_MAY_DEF <list_4>; list[3] = 42; blist_6 = &list; # SUCC: 5 (fallthru,exec) # BLOCK 5 # PRED: 3 (fallthru,exec) 4 (fallthru,exec) # blist_1 = PHI <blist_3(3), &list(4)>; <L2>:; blist.0_7 = (const GLint *) blist_1; # SMT.30_9 = V_MAY_DEF <SMT.30_8>; aglChoosePixelFormat (blist.0_7); return; # SUCC: EXIT } and dce possibly gets confused about the blist_1 def (where I wonder why in the phi we have &list and not blist_6 -- ccp propagates &list into the phi). -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28778