On Mon, Jan 20, 2014 at 05:07:18PM +0100, Jan Hubicka wrote:
> So I guess we can not modify giplifier to output
>         foo (&a.buf);
>         a.buf[6] = 1;
>         a.buf[7] = 8;
>         a = {CLOBBER};
> 
> instead of
> 
>     try
>       { 
>         foo (&a.buf);
>         a.buf[6] = 1;
>         a.buf[7] = 8;
>       }
>     finally
>       { 
>         a = {CLOBBER};
>       }
> 
> Whenever A is just CLOBBER because we care about dead store over the possible 
> EH path?

Yes.  Say, this could be surrounded by some try/catch, if we do it the first
way, a would be still considered live across the EH path to whatever catches
it.

The EH optimizations involving cleanups with only clobbers in them are that
if at the end of the cleanup after only CLOBBER stmts you would rethrow the 
exception
externally, then the clobber isn't needed and the whole cleanup can be
removed.  And, if it rethrows somewhere internally, we can move the clobber
stmts to the landing pad of wherever it would be caught.

        Jakub

Reply via email to