On Tue, 26 Jan 2016, Tom de Vries wrote:
> On 25/01/16 14:27, Ilya Verbin wrote:
> > Hi!
> >
> > 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?
Ok.
Thanks,
Richard.