diff options
author | Richard Guenther <rguenther@suse.de> | 2010-01-26 12:29:09 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2010-01-26 12:29:09 +0000 |
commit | 7f657dde6f3fff3ed52f89a110caaad27fc1f996 (patch) | |
tree | 2263c0e6cd79ee509ff9633ef13494172efecf8d /gcc | |
parent | ec80da28b6bb82771044cf4c1120d24d30902873 (diff) | |
download | gcc-7f657dde6f3fff3ed52f89a110caaad27fc1f996.zip gcc-7f657dde6f3fff3ed52f89a110caaad27fc1f996.tar.gz gcc-7f657dde6f3fff3ed52f89a110caaad27fc1f996.tar.bz2 |
re PR tree-optimization/42250 (segfault in ipa-type-escape.c for several cpu2000 tests)
2010-01-26 Richard Guenther <rguenther@suse.de>
PR tree-optimization/42250
* ipa-type-escape.c (type_escape_execute): Do not analyze clones.
* gcc.dg/pr42250.c: New testcase.
From-SVN: r156244
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/ipa-type-escape.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr42250.c | 68 |
4 files changed, 79 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b97384a..da237e7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2010-01-26 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/42250 + * ipa-type-escape.c (type_escape_execute): Do not analyze clones. + 2010-01-26 Jakub Jelinek <jakub@redhat.com> PR fortran/42866 diff --git a/gcc/ipa-type-escape.c b/gcc/ipa-type-escape.c index 0c8d229..8d9f261 100644 --- a/gcc/ipa-type-escape.c +++ b/gcc/ipa-type-escape.c @@ -1984,7 +1984,7 @@ type_escape_execute (void) they may cause a type variable to escape. */ for (node = cgraph_nodes; node; node = node->next) - if (node->analyzed) + if (node->analyzed && !node->clone_of) analyze_function (node); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d0a4de2..3cdaee3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-01-26 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/42250 + * gcc.dg/pr42250.c: New testcase. + 2010-01-25 Arnaud Charlet <charlet@adacore.com> * gnat.dg/array_bounds_test.adb: New test. diff --git a/gcc/testsuite/gcc.dg/pr42250.c b/gcc/testsuite/gcc.dg/pr42250.c new file mode 100644 index 0000000..d3d4bb7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr42250.c @@ -0,0 +1,68 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fipa-type-escape" } */ + +extern double log10 (double __x); +extern double ceil (double __x); +extern double floor (double __x); +extern void free (void *__ptr); +extern void *my_malloc (unsigned int); +extern int num_rr_nodes; +static float get_cblock_trans (int *num_inputs_to_cblock, + int max_inputs_to_cblock, + float trans_cblock_to_lblock_buf, + float trans_sram_bit); +static float trans_per_mux (int num_inputs, float trans_sram_bit); +void +count_routing_transistors (int num_switch, float R_minW_nmos, + float R_minW_pmos) +{ + int *num_inputs_to_cblock; + int iswitch, i, j, iseg, max_inputs_to_cblock; + float input_cblock_trans; + const float trans_sram_bit = 6.; + float trans_cblock_to_lblock_buf; + input_cblock_trans = + get_cblock_trans (num_inputs_to_cblock, max_inputs_to_cblock, + trans_cblock_to_lblock_buf, trans_sram_bit); +} + +static float +get_cblock_trans (int *num_inputs_to_cblock, int max_inputs_to_cblock, + float trans_cblock_to_lblock_buf, float trans_sram_bit) +{ + float *trans_per_cblock; + float trans_count; + int i, num_inputs; + + trans_per_cblock = + (float *) my_malloc ((max_inputs_to_cblock + 1) * sizeof (float)); + for (i = 1; i <= max_inputs_to_cblock; i++) + trans_per_cblock[i] = + trans_per_mux (i, trans_sram_bit) + trans_cblock_to_lblock_buf; + for (i = 0; i < num_rr_nodes; i++) + { + num_inputs = num_inputs_to_cblock[i]; + trans_count += trans_per_cblock[num_inputs]; + } + free (trans_per_cblock); + return (trans_count); +} + +static float +trans_per_mux (int num_inputs, float trans_sram_bit) +{ + int nlevels, ilevel, current_inps; + float ntrans = 0; + + if (num_inputs <= 1) + return (0); + nlevels = ceil (log10 (num_inputs) / log10 (2.) - 0.00001); + current_inps = num_inputs; + for (ilevel = 1; ilevel <= nlevels; ilevel++) + { + ntrans += 2 * floor (current_inps / 2.); + current_inps = ceil (current_inps / 2.); + } + ntrans += trans_sram_bit * nlevels; + return (ntrans); +} |