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 <t...@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). -- Ilya