http://gcc.gnu.org/bugzilla/show_bug.cgi?id=61034
--- Comment #8 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Marc Glisse from comment #7) > (In reply to rguent...@suse.de from comment #6) > > that's a conditional assignment AFAICS > > Ah, you are right of course. It shouldn't be conditional, but it will take a > VRP pass to notice that. If I schedule another FRE right after VRP1, things > optimize nicely, and after some cleanup by DOM+DSE, DCE2 can remove all > malloc+free. However, if I don't add this extra FRE pass, we somehow don't > manage. Note that in the PRE dump, with just your patch (no extra pass), I > see: > > pretmp_92 = 1; > _235 = pretmp_92; > if (_235 == 0) > > and these conditions seem to be what prevents us from finishing the job. Yeah. Looks somewhat tricky, but I'll play with it. Meanwhile testing a proper patch for the first issue.