On 6/20/23 00:59, Richard Biener via Gcc-patches wrote:
DSE isn't good at identifying program points that end lifetime
of variables that are not associated with virtual operands.  But
at least for those that end basic-blocks we can handle the simple
case where this ending is in the same basic-block as the definition
we want to elide.  That should catch quite some common cases already.

Bootstrapped and tested on x86_64-unknown-linux-gnu.

As you can see from the testcase I had to adjust this possibly can
lead to more severe issues when one forgets a return (the C++ frontend
places builtin_unreachable () there).  I'm still planning to push
this improvement unless I hear objections.

Thanks,
Richard.

        * tree-ssa-dse.cc (dse_classify_store): When we found
        no defs and the basic-block with the original definition
        ends in __builtin_unreachable[_trap] the store is dead.

        * gcc.dg/tree-ssa/ssa-dse-47.c: New testcase.
        * c-c++-common/asan/pr106558.c: Avoid undefined behavior
        due to missing return.
I thought during the introduction of erroneous path isolation that we concluded stores, calls and such had observable side effects that must be preserved, even when we hit a block that leads to __builtin_unreachable.

Don't get me wrong, I'm all for removing the memory references if it's safe to do so.

Jeff

Reply via email to