]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/42250 (segfault in ipa-type-escape.c for several cpu2000...
authorRichard Guenther <rguenther@suse.de>
Tue, 26 Jan 2010 12:29:09 +0000 (12:29 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 26 Jan 2010 12:29:09 +0000 (12:29 +0000)
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

gcc/ChangeLog
gcc/ipa-type-escape.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr42250.c [new file with mode: 0644]

index b97384aa2acfdf9b77201f812a026887b84640d9..da237e7e57d1d5478295cbc8c1b281493ba5a90a 100644 (file)
@@ -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
index 0c8d229f3cff738fda745f2398967b59e069f20e..8d9f26114d36066322ddbcd5ce5375b25a6d6e47 100644 (file)
@@ -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);
 
 
index d0a4de2315bf9fe309dff63ef43a976558129013..3cdaee3ea39820e9330c4b5d2f69248699e1f382 100644 (file)
@@ -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 (file)
index 0000000..d3d4bb7
--- /dev/null
@@ -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);
+}