re PR middle-end/78306 ([CilkPlus] "inlining failed in call to always_inline ‘memset’: function not inlinable" with -fcilkplus)
2016-11-17 Richard Biener <rguenther@suse.de> PR tree-optimization/78306 * ipa-inline-analysis.c (initialize_inline_failed): Do not inhibit inlining if function calls cilk_spawn. (can_inline_edge_p): Likewise. * gcc.dg/cilk-plus/pr78306.c: New testcase. From-SVN: r242537
This commit is contained in:
parent
f829413178
commit
8ce3fee51b
5 changed files with 42 additions and 8 deletions
|
@ -1,3 +1,10 @@
|
|||
2016-11-17 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/78306
|
||||
* ipa-inline-analysis.c (initialize_inline_failed): Do not
|
||||
inhibit inlining if function calls cilk_spawn.
|
||||
(can_inline_edge_p): Likewise.
|
||||
|
||||
2016-11-17 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR middle-end/78305
|
||||
|
|
|
@ -1507,9 +1507,6 @@ initialize_inline_failed (struct cgraph_edge *e)
|
|||
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
|
||||
|
|
|
@ -368,11 +368,6 @@ can_inline_edge_p (struct cgraph_edge *e, bool report,
|
|||
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))
|
||||
{
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2016-11-17 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/78306
|
||||
* gcc.dg/cilk-plus/pr78306.c: New testcase.
|
||||
|
||||
2016-11-17 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR middle-end/78305
|
||||
|
|
30
gcc/testsuite/gcc.dg/cilk-plus/pr78306.c
Normal file
30
gcc/testsuite/gcc.dg/cilk-plus/pr78306.c
Normal file
|
@ -0,0 +1,30 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-options "-O2 -fcilkplus" } */
|
||||
|
||||
#define _FORTIFY_SOURCE 2
|
||||
#include <string.h>
|
||||
|
||||
int sum(int low, int high)
|
||||
{
|
||||
if(low == high) {
|
||||
return low;
|
||||
}
|
||||
|
||||
int mid = low + (high-low)/2;
|
||||
int a = _Cilk_spawn sum(low, mid);
|
||||
int b = sum(mid+1, high);
|
||||
|
||||
// Some very expensive computation here
|
||||
int foo[64];
|
||||
memset(foo, 0, 64*sizeof(int)); // <--- Fails
|
||||
|
||||
_Cilk_sync;
|
||||
|
||||
return a+b;
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
if (sum(0, 100) != 5050)
|
||||
__builtin_abort ();
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue