OSDN Git Service

2008-01-21 Alon Dayan <alond@il.ibm.com>
authorolga <olga@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 21 Jan 2008 09:07:12 +0000 (09:07 +0000)
committerolga <olga@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 21 Jan 2008 09:07:12 +0000 (09:07 +0000)
    Olga Golovanevsky  <olga@il.ibm.com>

PR tree-optimization/34701
* gcc.dg/struct/wo_prof_array_field.c: New test.

2008-01-21  Alon Dayan  <alond@il.ibm.com>
    Olga Golovanevsky  <olga@il.ibm.com>

PR tree-optimization/34701
* ipa-struct-reorg.c (gen_size): Fix the malloc parameter calculation
when the structure size is not a power of 2.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@131689 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/ipa-struct-reorg.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/struct/wo_prof_array_field.c [new file with mode: 0644]

index f061381..28474dd 100644 (file)
@@ -1,3 +1,10 @@
+2008-01-21  Alon Dayan  <alond@il.ibm.com>
+           Olga Golovanevsky  <olga@il.ibm.com>
+       
+       PR tree-optimization/34701
+       * ipa-struct-reorg.c (gen_size): Fix the malloc parameter calculation
+       when the structure size is not a power of 2.
+
 2008-01-20  Kenneth Zadeck <zadeck@naturalbridge.com>
 
        * doc/install.texi: Add doc for --enable-checking=df.
index be60a21..0619576 100644 (file)
@@ -623,7 +623,12 @@ gen_size (tree num, tree type, tree *res)
     add_referenced_var (*res);
 
   if (exact_log2 (struct_size_int) == -1)
-    new_stmt = build_gimple_modify_stmt (num, struct_size);
+    {
+      tree size = build_int_cst (TREE_TYPE (num), struct_size_int);
+      new_stmt = build_gimple_modify_stmt (*res, build2 (MULT_EXPR,
+                                                        TREE_TYPE (num),
+                                                        num, size));
+    }
   else
     {
       tree C = build_int_cst (TREE_TYPE (num), exact_log2 (struct_size_int));
index f3e4f01..1fda4f9 100644 (file)
@@ -1,3 +1,9 @@
+2008-01-21  Alon Dayan  <alond@il.ibm.com>
+           Olga Golovanevsky  <olga@il.ibm.com>
+
+       PR tree-optimization/34701
+       * gcc.dg/struct/wo_prof_array_field.c: New test.
+       
 2008-01-20  Paolo Carlini  <pcarlini@suse.de>
 
         PR c++/34891
diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_array_field.c b/gcc/testsuite/gcc.dg/struct/wo_prof_array_field.c
new file mode 100644 (file)
index 0000000..1c41de5
--- /dev/null
@@ -0,0 +1,27 @@
+/* { dg-do compile } */
+/* { dg-do run } */
+
+#include <stdlib.h>
+typedef struct basic
+{
+  int a;
+  int b[10];
+} type_struct;
+
+type_struct *str1;
+
+int main()
+{
+  int i;
+
+  str1 = malloc (10 * sizeof (type_struct));
+
+  for (i=0; i<=9; i++)
+    str1[i].a = str1[i].b[0];
+
+  return 0;
+}
+
+/*--------------------------------------------------------------------------*/
+/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" } } */
+/* { dg-final { cleanup-ipa-dump "*" } } */