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

--- Comment #11 from Jakub Jelinek <jakub at gcc dot gnu.org> 2011-11-28 
15:32:18 UTC ---
(In reply to comment #10)
> (In reply to comment #8)
> > Perhaps we could drop the var ={v} {CLOBBER} stmts when renaming the var
> > into SSA instead.
> 
> I think your current patch is better, no use in slowing down the SSA renamer,
> there aren't that many points where a var can suddenly become renamed
> when it couldn't before.  I think you should send it to gcc-patches
> independent if it fixes this one or not.

Yeah, I played with it and doing it in the renamer wouldn't be very trivial and
very surprising for various passes if the renamer removes stmts.
Will bootstrap/regtest it.

> > As for gcc47-pr50317-1.patch, the another walk isn't because of the
> > CLOBBERs, what it tries to solve is drop the ADDRESSABLE bit before
> > CDDCE decides to instead optimize all the stores away as unnecessary
> > (the former does the right thing for debug info, the latter does not).
> 
> But conceivably we can have other passes than CDDCE which can remove
> stores, including the last one, so IMO the latter should better be made to
> work.  As in, update_address_taken should purely be an optimization, it should
> never be required for correct operation.

Well, the another scheduled in updates_address_taken wasn't a correctness
issue, just a nice to have thing which improves debug info in that case.  The
debug info isn't incorrect, just less complete (and the regression is in the
debug info quality).

> Okay, so there are multiple ways out:
> 1) accept also TREE_ADDRESSABLES in target_for_debug_bind;
>    why is it rejecting the needs_to_live_in_memory objects?
> 2) drop TREE_ADDRESSABLE for unreferenced variables
>    (remove_unused_locals, but that again should only be an optimization,
>    not a correctness measure)
> 3) Accept variables in DEBUG_BIND unconditionally if they are
>    target_for_debug_bind or not.  Presumably the one creating the debug
>    bind will have known what he was doing.
> 
> I think (3) looks most sensible?

What I have in the last patch is roughly accepting those TREE_ADDRESSABLES in
there while in GIMPLE IL (== 1) ), dropping TREE_ADDRESSABLE in
remove_unused_locals as an optimization (== 2) ) and avoiding creation of the
debug insns during expansion if they don't still satisfy target_for_debug_bind
(correctness issue).

Reply via email to