re PR middle-end/36326 (gimplification of aggregate copies introduces extra aggregate...
authorRichard Guenther <rguenther@suse.de>
Wed, 3 Dec 2008 15:10:03 +0000 (15:10 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 3 Dec 2008 15:10:03 +0000 (15:10 +0000)
2008-12-03  Richard Guenther  <rguenther@suse.de>

PR middle-end/36326
* gimplify.c (is_gimple_mem_or_call_rhs): Remove work-around for
non-BLKmode types.

* gcc.dg/tree-ssa/pr36326.c: New testcase.

From-SVN: r142396

gcc/ChangeLog
gcc/gimplify.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/pr36326.c [new file with mode: 0644]

index 03da741d592374bb349abe540ccfc39bb50e02c0..1f1c0315979164d7473e97ecd8b38814a0c31dc5 100644 (file)
@@ -1,3 +1,9 @@
+2008-12-03  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/36326
+       * gimplify.c (is_gimple_mem_or_call_rhs): Remove work-around for
+       non-BLKmode types.
+
 2008-12-03  Tomas Bily  <tbily@suse.cz>
 
         PR middle-end/38250
index 20003137554ba61ce7c0367e0587794d7bb0fb4d..09f130ecc7e5861684a9c371de0efbded705e01e 100644 (file)
@@ -656,13 +656,8 @@ static bool
 is_gimple_mem_or_call_rhs (tree t)
 {
   /* If we're dealing with a renamable type, either source or dest must be
-     a renamed variable.  Also force a temporary if the type doesn't need
-     to be stored in memory, since it's cheap and prevents erroneous
-     tailcalls (PR 17526).  */
-  if (is_gimple_reg_type (TREE_TYPE (t))
-      || (TYPE_MODE (TREE_TYPE (t)) != BLKmode
-         && (TREE_CODE (t) != CALL_EXPR
-              || ! aggregate_value_p (t, t))))
+     a renamed variable.  */
+  if (is_gimple_reg_type (TREE_TYPE (t)))
     return is_gimple_val (t);
   else
     return is_gimple_formal_tmp_or_call_rhs (t);
index f12dbdb41a345d11601fa220da543e2d145ae3ea..c9364f8f94fd7ff1cb35f4362fe88854cec82605 100644 (file)
@@ -1,3 +1,8 @@
+2008-12-03  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/36326
+       * gcc.dg/tree-ssa/pr36326.c: New testcase.
+
 2008-12-03  Jakub Jelinek  <jakub@redhat.com>
 
        PR tree-optimization/37716
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr36326.c b/gcc/testsuite/gcc.dg/tree-ssa/pr36326.c
new file mode 100644 (file)
index 0000000..0611f7d
--- /dev/null
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-fdump-tree-gimple" } */
+
+union X { int i; double x; };
+
+int foo (union X *p)
+{
+  union X x = *p;
+  return x.x;
+}
+
+/* { dg-final { scan-tree-dump-not "x.0" "gimple" } } */
+/* { dg-final { cleanup-tree-dump "gimple" } } */