Hi!
I've merged today gomp-4_0-branch from the trunk, but I'm seeing various
regressions.
The ICEs look like (e.g. on libgomp.c/simd-1.c (and other simd tests):
0xadf61a crash_signal
../../gcc/toplev.c:335
0x571a0e tree_check2(tree_node*, char const*, int, char const*, tree_code,
tree_code)
../../gcc/tree.h:2667
0x8f5424 ipa_get_callee_param_type
../../gcc/ipa-prop.c:1513
0x8f5662 ipa_compute_jump_functions_for_edge
../../gcc/ipa-prop.c:1561
0x8f5c20 ipa_compute_jump_functions
../../gcc/ipa-prop.c:1649
0x8f7337 ipa_analyze_node(cgraph_node*)
../../gcc/ipa-prop.c:2169
0x10e85d0 ipcp_generate_summary
../../gcc/ipa-cp.c:3624
The problem is in ipa_get_callee_param_type:
1509 int n;
1510 tree type = (e->callee
1511 ? TREE_TYPE (e->callee->symbol.decl)
1512 : gimple_call_fntype (e->call_stmt));
1513 tree t = TYPE_ARG_TYPES (type);
e->call_stmt in this case is an internal builtin function, and
builtin internal functions don't have a fntype:
static inline tree
gimple_call_fntype (const_gimple gs)
{
GIMPLE_CHECK (gs, GIMPLE_CALL);
if (gimple_call_internal_p (gs))
return NULL_TREE;
return gs->gimple_call.u.fntype;
}
The following patch fixes this. Is this ok? I don't see ever that
it would be worth to try to do anything with internal calls, especially
when they are all magic.
2013-09-13 Jakub Jelinek <[email protected]>
* ipa-prop.c (ipa_compute_jump_functions_for_edge): Return early
for internal calls.
--- gcc/ipa-prop.c.jj 2013-09-13 16:48:54.000000000 +0200
+++ gcc/ipa-prop.c 2013-09-13 17:28:28.086058903 +0200
@@ -1551,6 +1551,8 @@ ipa_compute_jump_functions_for_edge (str
return;
vec_safe_grow_cleared (args->jump_functions, arg_num);
+ if (gimple_call_internal_p (call))
+ return;
if (ipa_func_spec_opts_forbid_analysis_p (cs->caller))
return;
Jakub