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).