On Tue, 6 Mar 2018, Jakub Jelinek wrote:

> On Tue, Mar 06, 2018 at 02:28:40AM -0300, Alexandre Oliva wrote:
> > On Mar  5, 2018, Jakub Jelinek <ja...@redhat.com> wrote:
> > 
> > >   * tree.c (stabilize_reference_1): Return save_expr (e) for
> > >   STATEMENT_LIST even if it doesn't have side-effects.
> > 
> > I'm concerned about codegen differences in case the statement list is
> > created because of debug stmts not present in a nondebug compile.
> > Wouldn't this make the nondebug compile not have a save_expr at all,
> > which would then likely cause different code to be generated with the
> > save_expr in one case and no save_expr in the other?  I guess the
> > compare-debug would have flagged any such differences, so I suppose my
> > concerns are unfounded, and in case they aren't, we'll soon find out ;-)
> > So, no objections from me; thanks for looking into this!
> 
> Yes, I was concerned, but couldn't create a testcase that would fail with
> -fcompare-debug nor the bootstrap has found anything.
> 
> And note that the concerns weren't primarily about the SAVE_EXPRs, but about
> the preexisting gimplification of the STATEMENT_LIST vs. gimplification of
> just the last statement of it, where the former creates retval.N temporary
> and thus if we managed to preserve some retval.M temporary till the final
> dumps, it would be different for -fcompare-debug.  If we ever hit that
> issue, one way out of it would be to gimplify STATEMENT_LIST without
> TREE_SIDE_EFFECTS that contain only some optional DEBUG_BEGIN_STMTs and
> a single other stmt differently, either but not generating the temporary
> at all, or by forcing it to be nameless.
> 
> And SAVE_EXPRs can in theory have the same issue, they use
> get_initialized_tmp_var with !allow_ssa, for ({ 0; }) and similar that
> creates a nameless temporary decl, which is what we want and shouldn't
> affect anything, but if we have say ({ i; }) or ({ &j; }), then those can
> get a name.  So, we'd need to force creation of non-cached (lookup_tmp_var)
> nameless temporary for SAVE_EXPRs that contain the above described
> STATEMENT_LISTs.
> 
> Maybe a better fix if we run into this would be to make create_tmp_var_raw
> create DECL_NAMELESS decls and make sure we don't print names of
> DECL_NAMELESS variables in -fdump-final-insns= dumps?

They are already DECL_IGNORED_P, that should include the effects of
DECL_NAMELESS if I read both documentations in tree.h correctly.

> I mean the fancy names are causing us trouble all the time, e.g. the SRA
> fancy names that later get concatenated to other fancy names and sometimes
> contains uids...

Yeah...  so lets not dump names of DECL_IGNORED_P | DECL_NAMELESS decls.

Richard.

Reply via email to