[Bug middle-end/78306] [CilkPlus] "inlining failed in call to always_inline ‘memset’: function not inlinable" with -fcilkplus
rguenther at suse dot de
gcc-bugzilla@gcc.gnu.org
Tue Nov 15 12:23:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78306
--- Comment #4 from rguenther at suse dot de <rguenther at suse dot de> ---
On Mon, 14 Nov 2016, iblue at gmx dot net wrote:
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78306
>
> --- Comment #2 from Markus Fenske <iblue at gmx dot net> ---
> Thanks for the suggested workaround. Moving all the always_inline functions
> into a wrapper was no option, because it's not just memset but my code relies
> on avx intrinsics and would be dead slow if I would need a function all for
> every instruction.
>
> So I just removed the cilk sections in ipa-inline-analysis.c and ipa-inline.c
> and compiled my code with gcc-trunk. It compiles and produces the same results
> as with icc and clang.
>
> I'm not an expert in gcc code, but I would propose this patch to solve the
> issue:
>
> Index: gcc/ipa-inline-analysis.c
> ===================================================================
> --- gcc/ipa-inline-analysis.c (revision 242386)
> +++ gcc/ipa-inline-analysis.c (working copy)
> @@ -1507,9 +1507,6 @@
> e->inline_failed = CIF_BODY_NOT_AVAILABLE;
> else if (callee->local.redefined_extern_inline)
> e->inline_failed = CIF_REDEFINED_EXTERN_INLINE;
> - else if (cfun && fn_contains_cilk_spawn_p (cfun))
> - /* We can't inline if the function is spawing a function. */
> - e->inline_failed = CIF_CILK_SPAWN;
> else
> e->inline_failed = CIF_FUNCTION_NOT_CONSIDERED;
> gcc_checking_assert (!e->call_stmt_cannot_inline_p
> Index: gcc/ipa-inline.c
> ===================================================================
> --- gcc/ipa-inline.c (revision 242386)
> +++ gcc/ipa-inline.c (working copy)
> @@ -368,11 +368,6 @@
> e->inline_failed = CIF_FUNCTION_NOT_INLINABLE;
> inlinable = false;
> }
> - else if (inline_summaries->get (caller)->contains_cilk_spawn)
> - {
> - e->inline_failed = CIF_CILK_SPAWN;
> - inlinable = false;
> - }
> /* Don't inline a function with mismatched sanitization attributes. */
> else if (!sanitize_attrs_match_for_inline_p (caller->decl, callee->decl))
> {
Bootstrapped and tested on x86_64-unknown-linux-gnu (I expect that
->contains_cilk_spawn might be completely dead).
Richard.
More information about the Gcc-bugs
mailing list