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.