summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorolga <olga@138bc75d-0d04-0410-961f-82ee72b054a4>2008-01-21 09:07:12 +0000
committerolga <olga@138bc75d-0d04-0410-961f-82ee72b054a4>2008-01-21 09:07:12 +0000
commitf25ba2cf7d7b1ff2e3ad85d3d4454f9a266b59f1 (patch)
tree0e7ce94084774885f2271b72843dc3ab47004225 /gcc
parent2d7085a5deeb287fd0313c4e10a1cff9e338ada1 (diff)
downloadgcc-f25ba2cf7d7b1ff2e3ad85d3d4454f9a266b59f1.tar.gz
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-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/ipa-struct-reorg.c7
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.dg/struct/wo_prof_array_field.c27
4 files changed, 46 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f0613812b1e..28474ddf8a3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/ipa-struct-reorg.c b/gcc/ipa-struct-reorg.c
index be60a21e46f..0619576e732 100644
--- a/gcc/ipa-struct-reorg.c
+++ b/gcc/ipa-struct-reorg.c
@@ -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));
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index f3e4f010812..1fda4f9b2d1 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 00000000000..1c41de5bc3c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/struct/wo_prof_array_field.c
@@ -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 "*" } } */