This is the mail archive of the
mailing list for the GCC project.
Re: SRA: don't drop clobbers
- From: Marc Glisse <marc dot glisse at inria dot fr>
- To: Richard Biener <richard dot guenther at gmail dot com>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Mon, 7 Jul 2014 11:32:10 +0200 (CEST)
- Subject: Re: SRA: don't drop clobbers
- Authentication-results: sourceware.org; auth=none
- References: <alpine dot DEB dot 2 dot 02 dot 1406282350110 dot 31815 at stedding dot saclay dot inria dot fr> <alpine dot DEB dot 2 dot 02 dot 1406300119080 dot 8326 at stedding dot saclay dot inria dot fr> <CAFiYyc3VuRhVBOhELM=_X5YYBuL3X5CRdPt0WC3M+DzOaDe4nQ at mail dot gmail dot com>
On Mon, 7 Jul 2014, Richard Biener wrote:
On Mon, Jun 30, 2014 at 1:38 AM, Marc Glisse <firstname.lastname@example.org> wrote:
with this patch on top of
we finally warn for the testcase of PR 60517.
The new function is copied from init_subtree_with_zero right above. I guess
it might be possible to merge them into a single function, if desired. I
don't understand the debug stuff, but hopefully by keeping the functions
similar enough it shouldn't be too broken.
When we see a clobber during scalarization, instead of dropping it, we add a
clobber to the new variable, which the previous patch turns into an SSA_NAME
with a default def. Then either we reach uninit and warn, or the variable
appears in a PHI and CCP optimizes.
What's the point of a clobber of sth that was scalarized away? So ...
can you please explain in more detail?
The main idea of these patches is that when we read from a place that was
clobbered, instead of dropping the clobber and reading what was there
before, we can use a variable with a default definition to mark that the
content is undefined. This enables both warnings and optimizations.
The previous patch makes update_ssa handle replacing clobbers with default
definitions when a variable doesn't have its address taken anymore. When
SRA scalarizes, it creates a new variable and relies on update_ssa to
finish the job. So I am inserting a clobber on the new variable so that
update_ssa knows to use a default definition.
The new function needs a comment.
Indeed, I'll add one once the conversation on the first patch converges.