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

Reply via email to