ipa-inline.c (can_inline_edge_p): Look into DECL_STRUCT_FUNCTION of original nodes if...
* ipa-inline.c (can_inline_edge_p): Look into DECL_STRUCT_FUNCTION of original nodes if we are dealing with virtual clones. From-SVN: r176739
This commit is contained in:
parent
3d02ae6520
commit
264b47b0b9
2 changed files with 20 additions and 8 deletions
|
@ -1,3 +1,8 @@
|
|||
2011-07-25 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* ipa-inline.c (can_inline_edge_p): Look into DECL_STRUCT_FUNCTION of
|
||||
original nodes if we are dealing with virtual clones.
|
||||
|
||||
2011-07-25 Bernd Schmidt <bernds@codesourcery.com>
|
||||
|
||||
* common/config/c6x/c6x-common.c: New file.
|
||||
|
|
|
@ -238,9 +238,20 @@ can_inline_edge_p (struct cgraph_edge *e, bool report)
|
|||
{
|
||||
bool inlinable = true;
|
||||
enum availability avail;
|
||||
struct cgraph_node *callee = cgraph_function_or_thunk_node (e->callee, &avail);
|
||||
struct cgraph_node *callee
|
||||
= cgraph_function_or_thunk_node (e->callee, &avail);
|
||||
tree caller_tree = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (e->caller->decl);
|
||||
tree callee_tree = callee ? DECL_FUNCTION_SPECIFIC_OPTIMIZATION (callee->decl) : NULL;
|
||||
tree callee_tree
|
||||
= callee ? DECL_FUNCTION_SPECIFIC_OPTIMIZATION (callee->decl) : NULL;
|
||||
struct function *caller_cfun = DECL_STRUCT_FUNCTION (e->caller->decl);
|
||||
struct function *callee_cfun
|
||||
= callee ? DECL_STRUCT_FUNCTION (callee->decl) : NULL;
|
||||
|
||||
if (!caller_cfun && e->caller->clone_of)
|
||||
caller_cfun = DECL_STRUCT_FUNCTION (e->caller->clone_of->decl);
|
||||
|
||||
if (!callee_cfun && callee && callee->clone_of)
|
||||
callee_cfun = DECL_STRUCT_FUNCTION (callee->clone_of->decl);
|
||||
|
||||
gcc_assert (e->inline_failed);
|
||||
|
||||
|
@ -277,12 +288,8 @@ can_inline_edge_p (struct cgraph_edge *e, bool report)
|
|||
caller cannot.
|
||||
FIXME: this is obviously wrong for LTO where STRUCT_FUNCTION is missing.
|
||||
Move the flag into cgraph node or mirror it in the inline summary. */
|
||||
else if (DECL_STRUCT_FUNCTION (callee->decl)
|
||||
&& DECL_STRUCT_FUNCTION
|
||||
(callee->decl)->can_throw_non_call_exceptions
|
||||
&& !(DECL_STRUCT_FUNCTION (e->caller->decl)
|
||||
&& DECL_STRUCT_FUNCTION
|
||||
(e->caller->decl)->can_throw_non_call_exceptions))
|
||||
else if (callee_cfun && callee_cfun->can_throw_non_call_exceptions
|
||||
&& !(caller_cfun && caller_cfun->can_throw_non_call_exceptions))
|
||||
{
|
||||
e->inline_failed = CIF_NON_CALL_EXCEPTIONS;
|
||||
inlinable = false;
|
||||
|
|
Loading…
Add table
Reference in a new issue