http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50317
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> 2011-09-07 14:21:51 UTC --- The first difference is in fre1, just a better optimization: @@ -22,7 +22,7 @@ foo (int i) p$1_9 = &j; # DEBUG p$1 => p$1_9 D.2704_2 = p$0_10; - D.2705_3 = *D.2704_2; + D.2705_3 = i.0_1; D.2706_4 = p$1_9; D.2707_5 = i.0_1; D.2703_6 = D.2705_3 + D.2707_5; In *.mergephi1 the difference is still pretty minor: @@ -19,8 +19,7 @@ foo (int i) j = i.0_1; # DEBUG p$0 => &i # DEBUG p$1 => &j - D.2705_3 = i; - D.2703_6 = i.0_1 + D.2705_3; + D.2703_6 = i.0_1 + i.0_1; return D.2703_6; } but in *.cddce1 the j variable is removed altogether: <bb 2>: i.0_1 = i; - j = i.0_1; # DEBUG p$0 => &i # DEBUG p$1 => &j - D.2705_3 = i; - D.2703_6 = i.0_1 + D.2705_3; + D.2703_6 = i.0_1 + i.0_1; return D.2703_6; } in r175915 the j variable would survive in the IL until *.alias where it was determined not address taken, gimplified and DEBUG j => j_11 added and during copyprop2 the debug stmt was adjusted after j_11 removal.