https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120310
--- Comment #3 from Richard Biener ---
(In reply to Jakub Jelinek from comment #2)
> Guess one case is when tree DSE removes all stores to some automatic
> addressable variable, in that case it would be nice to populate debug stmts
> to all those removed locs and state what values it had there.
> Another case is where DSE keeps some stores to it and removes others.
> If it removes the last store before the var goes out of scope, perhaps
> adding debug stmt for that is fine too, but not sure what to do in case it
> removes a store because it is overwritten by a later store, say
> void qux (int *);
> void
> baz (void)
> {
> int a = 42;
> a = 43;
> qux (&a);
> }
> Because there dse1 does
># DEBUG BEGIN_STMT
> - a = 42;
># DEBUG BEGIN_STMT
>a = 43;
> and if we add # DEBUG a => 42 we'd need to add some debug stmt to say from
> this point on, value of a is in the a variable. Not sure if # DEBUG a => a
> would do it or if we'd need something else.
Since 'a' is still in memory we do not need any # DEBUG stmts for 'a', only
when there's a time where 'a' does not reflect the value in the abstract
machine - like for example when applying loop store motion, then inside
the loop we'd technically need debug stmts. Of course I have no idea
how that will work in the end on the consumer side.
So for the original DSE issue:
a = 1; <-- DSEd
...
a = 2; <-- kept
# DEBUG a = 1
...
a = 2;
do we correctly track stores to 'a' here and get correct location lists?
IIRC the patched from Richard S. simply kept the stores?