diff options
author | Martin Jambor <mjambor@suse.cz> | 2011-12-13 16:43:36 +0100 |
---|---|---|
committer | Martin Jambor <jamborm@gcc.gnu.org> | 2011-12-13 16:43:36 +0100 |
commit | 0318fc774964ac07f2bc1c9672cfa75b5355501b (patch) | |
tree | 670453af2b7524fe40540cabd07ebc53c4e144dc /gcc | |
parent | 9170437b040010ea0d5cad5a8d73f0307117fd13 (diff) | |
download | gcc-0318fc774964ac07f2bc1c9672cfa75b5355501b.zip gcc-0318fc774964ac07f2bc1c9672cfa75b5355501b.tar.gz gcc-0318fc774964ac07f2bc1c9672cfa75b5355501b.tar.bz2 |
re PR tree-optimization/51362 (ICE: SIGFPE (division by zero) in good_cloning_opportunity_p at ipa-cp.c:2401)
2011-12-13 Martin Jambor <mjambor@suse.cz>
PR tree-optimization/51362
* ipa-cp.c (estimate_local_effects): When estimated size of a
specialized clone is zero, bump it to one.
* testsuite/gcc.dg/ipa/pr51362.c: New test.
From-SVN: r182288
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/ipa-cp.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/ipa/pr51362.c | 22 |
4 files changed, 41 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a710764..3b28a5d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-12-13 Martin Jambor <mjambor@suse.cz> + + PR tree-optimization/51362 + * ipa-cp.c (estimate_local_effects): When estimated size of a + specialized clone is zero, bump it to one. + 2011-12-13 Richard Guenther <rguenther@suse.de> PR lto/48354 diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c index 1c5a582..2a82df1 100644 --- a/gcc/ipa-cp.c +++ b/gcc/ipa-cp.c @@ -1409,6 +1409,14 @@ estimate_local_effects (struct cgraph_node *node) + devirtualization_time_bonus (node, known_csts, known_binfos) + removable_params_cost + emc; + gcc_checking_assert (size >=0); + /* The inliner-heuristics based estimates may think that in certain + contexts some functions do not have any size at all but we want + all specializations to have at least a tiny cost, not least not to + divide by zero. */ + if (size == 0) + size = 1; + if (dump_file && (dump_flags & TDF_DETAILS)) { fprintf (dump_file, " - estimates for value "); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 35230eb..e5fa8ba 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-12-13 Martin Jambor <mjambor@suse.cz> + + PR tree-optimization/51362 + * gcc.dg/ipa/pr51362.c: New test. + 2011-12-13 Uros Bizjak <ubizjak@gmail.com> PR testsuite/51524 diff --git a/gcc/testsuite/gcc.dg/ipa/pr51362.c b/gcc/testsuite/gcc.dg/ipa/pr51362.c new file mode 100644 index 0000000..e57dd56 --- /dev/null +++ b/gcc/testsuite/gcc.dg/ipa/pr51362.c @@ -0,0 +1,22 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fipa-cp -fipa-cp-clone" } */ + +int +baz (void) +{ + return 0; +} + +int make_mess; + +__attribute__ ((noinline)) +int bar (int x, int (*f) (void)) +{ + return f (); +} + +int +foo (void) +{ + return bar (1, baz); +} |