c: Fix compile time hog in c_genericize [PR107127]
The complex multiplications result in deeply nested set of many SAVE_EXPRs, which takes even on fast machines over 5 minutes to walk. This patch fixes that by using walk_tree_without_duplicates where it is instant. 2022-11-23 Andrew Pinski <apinski@marvell.com> Jakub Jelinek <jakub@redhat.com> PR c/107127 * c-gimplify.cc (c_genericize): Use walk_tree_without_duplicates instead of walk_tree for c_genericize_control_r. * gcc.dg/pr107127.c: New test.
This commit is contained in:
parent
c087fe834b
commit
8a0fce6a51
2 changed files with 14 additions and 2 deletions
|
@ -572,8 +572,8 @@ c_genericize (tree fndecl)
|
|||
bc_state_t save_state;
|
||||
push_cfun (DECL_STRUCT_FUNCTION (fndecl));
|
||||
save_bc_state (&save_state);
|
||||
walk_tree (&DECL_SAVED_TREE (fndecl), c_genericize_control_r,
|
||||
NULL, NULL);
|
||||
walk_tree_without_duplicates (&DECL_SAVED_TREE (fndecl),
|
||||
c_genericize_control_r, NULL);
|
||||
restore_bc_state (&save_state);
|
||||
pop_cfun ();
|
||||
}
|
||||
|
|
12
gcc/testsuite/gcc.dg/pr107127.c
Normal file
12
gcc/testsuite/gcc.dg/pr107127.c
Normal file
|
@ -0,0 +1,12 @@
|
|||
/* PR c/107127 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "" } */
|
||||
|
||||
int *v;
|
||||
|
||||
_Complex double
|
||||
foo (_Complex double a, double b, double c)
|
||||
{
|
||||
return v[0] / ((((c * (0 - 0 / a + 699.0 + 7.05 - 286.0 - +-4.65 + 1.57 + 0) * 0.1 - 3.28 + 4.22 + 0.1)) * b + 5.06)
|
||||
* 1.23 * 8.0 * 12.0 * 16.0 * 2.0 * 2.0 * 0.25 * 0.125 * 18.2 * -15.25 * 0.0001
|
||||
* 42.0 * 0.012 - 8.45 + 0 + 88.0 + 6.96 + 867.0 + 9.10 - 7.04 * -1.0);
|
Loading…
Add table
Reference in a new issue