[PING][PATCH] Don't mark offload symbols with force_output in ltrans
Richard Biener
rguenther@suse.de
Mon Feb 15 09:07:00 GMT 2016
On Mon, 15 Feb 2016, Tom de Vries wrote:
> [ was: [PING][PATCH] Mark symbols in offload tables with force_output in
> read_offload_tables ]
>
> On 08/02/16 14:20, Tom de Vries wrote:
> > On 26/01/16 14:01, Ilya Verbin wrote:
> > > On Tue, Jan 26, 2016 at 13:21:57 +0100, Tom de Vries wrote:
> > > > On 25/01/16 14:27, Ilya Verbin wrote:
> > > > > On Tue, Jan 05, 2016 at 15:56:15 +0100, Tom de Vries wrote:
> > > > > > > diff --git a/gcc/lto-cgraph.c b/gcc/lto-cgraph.c
> > > > > > > index 62e5454..cdaee41 100644
> > > > > > > --- a/gcc/lto-cgraph.c
> > > > > > > +++ b/gcc/lto-cgraph.c
> > > > > > > @@ -1911,6 +1911,11 @@ input_offload_tables (void)
> > > > > > > tree fn_decl
> > > > > > > = lto_file_decl_data_get_fn_decl (file_data,
> > > > > > > decl_index);
> > > > > > > vec_safe_push (offload_funcs, fn_decl);
> > > > > > > +
> > > > > > > + /* Prevent IPA from removing fn_decl as unreachable,
> > > > > > > since there
> > > > > > > + may be no refs from the parent function to child_fn in
> > > > > > > offload
> > > > > > > + LTO mode. */
> > > > > > > + cgraph_node::get (fn_decl)->mark_force_output ();
> > > > > > > }
> > > > > > > else if (tag == LTO_symtab_variable)
> > > > > > > {
> > > > > > > @@ -1918,6 +1923,10 @@ input_offload_tables (void)
> > > > > > > tree var_decl
> > > > > > > = lto_file_decl_data_get_var_decl (file_data,
> > > > > > > decl_index);
> > > > > > > vec_safe_push (offload_vars, var_decl);
> > > > > > > +
> > > > > > > + /* Prevent IPA from removing var_decl as unused, since
> > > > > > > there
> > > > > > > + may be no refs to var_decl in offload LTO mode. */
> > > > > > > + varpool_node::get (var_decl)->force_output = 1;
> > > > > > > }
> > > > >
> > > > > This doesn't work when there is more than one LTO partition, because
> > > > > only first
> > > > > partition contains full offload table to maintain correct order, but
> > > > > cgraph and
> > > > > varpool nodes aren't necessarily created for the first partition.
> > > > > To reproduce:
> > > > >
> > > > > $ make check-target-libgomp RUNTESTFLAGS="c.exp=for-*
> > > > > --target_board=unix/-flto"
> > > > > FAIL: libgomp.c/for-3.c (internal compiler error)
> > > > > FAIL: libgomp.c/for-5.c (internal compiler error)
> > > > > FAIL: libgomp.c/for-6.c (internal compiler error)
> > > > > $ make check-target-libgomp RUNTESTFLAGS="c++.exp=for-*
> > > > > --target_board=unix/-flto"
> > > > > FAIL: libgomp.c++/for-11.C (internal compiler error)
> > > > > FAIL: libgomp.c++/for-13.C (internal compiler error)
> > > > > FAIL: libgomp.c++/for-14.C (internal compiler error)
> > > >
> > > > This works for me.
> > > >
> > > > OK for trunk?
> > > >
> > > > Thanks,
> > > > - Tom
> > > >
> > >
> > > > Check that cgraph/varpool_node exists before use in input_offload_tables
> > > >
> > > > 2016-01-26 Tom de Vries <tom@codesourcery.com>
> > > >
> > > > * lto-cgraph.c (input_offload_tables): Check that
> > > > cgraph/varpool_node
> > > > exists before use.
> > >
> > > In this case they will be not marked as force_output in other
> > > partitions (except
> > > the first one).
> >
> > AFAIU, that's not the case.
> >
> > If we're splitting up lto compilation over partitions, it means we're
> > first calling lto1 in WPA mode. We'll read in all offload tables, and
> > mark all symbols with force_output, and when writing out the partitions,
> > we'll write the offload symbols out with force_output set.
> >
> > This updated patch only does the force_output marking for offload
> > symbols in WPA or LTO. It's not necessary in LTRANS mode.
> >
> > Bootstrapped and reg-tested on x86_64.
> >
> > Build for nvidia accelerator and reg-tested libgomp with various lto
> > settings.
> >
> > OK for trunk, stage4?
> >
>
> Ping. Original submission here:
> https://gcc.gnu.org/ml/gcc-patches/2016-02/msg00549.html .
Ok.
Richhard.
> Thanks,
> - Tom
>
> > 0006-Don-t-mark-offload-symbols-with-force_output-in-ltrans.patch
> >
> >
> > Don't mark offload symbols with force_output in ltrans
> >
> > 2016-02-08 Tom de Vries <tom@codesourcery.com>
> >
> > PR lto/69655
> > * lto-cgraph.c (input_offload_tables): Add and handle bool parameter
> > do_force_output.
> > * lto-streamer.h (input_offload_tables): Add and handle bool
> > parameter.
> >
> > * lto.c (read_cgraph_and_symbols): Call input_offload_tables with
> > argument.
> >
> > ---
> > gcc/lto-cgraph.c | 8 +++++---
> > gcc/lto-streamer.h | 2 +-
> > gcc/lto/lto.c | 2 +-
> > 3 files changed, 7 insertions(+), 5 deletions(-)
> >
> > diff --git a/gcc/lto-cgraph.c b/gcc/lto-cgraph.c
> > index 0634779..95c446d 100644
> > --- a/gcc/lto-cgraph.c
> > +++ b/gcc/lto-cgraph.c
> > @@ -1885,7 +1885,7 @@ input_symtab (void)
> > target code, and store them into OFFLOAD_FUNCS and OFFLOAD_VARS. */
> >
> > void
> > -input_offload_tables (void)
> > +input_offload_tables (bool do_force_output)
> > {
> > struct lto_file_decl_data **file_data_vec = lto_get_file_decl_data ();
> > struct lto_file_decl_data *file_data;
> > @@ -1915,7 +1915,8 @@ input_offload_tables (void)
> > /* Prevent IPA from removing fn_decl as unreachable, since there
> > may be no refs from the parent function to child_fn in
> > offload
> > LTO mode. */
> > - cgraph_node::get (fn_decl)->mark_force_output ();
> > + if (do_force_output)
> > + cgraph_node::get (fn_decl)->mark_force_output ();
> > }
> > else if (tag == LTO_symtab_variable)
> > {
> > @@ -1926,7 +1927,8 @@ input_offload_tables (void)
> >
> > /* Prevent IPA from removing var_decl as unused, since there
> > may be no refs to var_decl in offload LTO mode. */
> > - varpool_node::get (var_decl)->force_output = 1;
> > + if (do_force_output)
> > + varpool_node::get (var_decl)->force_output = 1;
> > }
> > else
> > fatal_error (input_location,
> > diff --git a/gcc/lto-streamer.h b/gcc/lto-streamer.h
> > index 0cb200e..f391161 100644
> > --- a/gcc/lto-streamer.h
> > +++ b/gcc/lto-streamer.h
> > @@ -915,7 +915,7 @@ bool lto_symtab_encoder_encode_initializer_p
> > (lto_symtab_encoder_t,
> > void output_symtab (void);
> > void input_symtab (void);
> > void output_offload_tables (void);
> > -void input_offload_tables (void);
> > +void input_offload_tables (bool);
> > bool referenced_from_other_partition_p (struct ipa_ref_list *,
> > lto_symtab_encoder_t);
> > bool reachable_from_other_partition_p (struct cgraph_node *,
> > diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c
> > index ecec1bc..2736c5c 100644
> > --- a/gcc/lto/lto.c
> > +++ b/gcc/lto/lto.c
> > @@ -2855,7 +2855,7 @@ read_cgraph_and_symbols (unsigned nfiles, const char
> > **fnames)
> > /* Read the symtab. */
> > input_symtab ();
> >
> > - input_offload_tables ();
> > + input_offload_tables (!flag_ltrans);
> >
> > /* Store resolutions into the symbol table. */
> >
> >
>
>
--
Richard Biener <rguenther@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)
More information about the Gcc-patches
mailing list