2008-12-03 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 3 Dec 2008 15:10:03 +0000 (15:10 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 3 Dec 2008 15:10:03 +0000 (15:10 +0000)
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.

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

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

index 03da741..1f1c031 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 2000313..09f130e 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 f12dbdb..c9364f8 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" } } */