http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44194
--- Comment #21 from Easwaran Raman <eraman at google dot com> 2011-06-15
20:34:32 UTC ---
The DSE patch still leaves 2 redundant stores. The following patch will enable
DSE to remove those two stores. Does this look ok?
Index: gcc/testsuite/gcc.dg/pr44194-1.c
===================================================================
--- gcc/testsuite/gcc.dg/pr44194-1.c (revision 175082)
+++ gcc/testsuite/gcc.dg/pr44194-1.c (working copy)
@@ -13,5 +13,5 @@ void func() {
struct ints s = foo();
bar(s.a, s.b);
}
-/* { dg-final { scan-rtl-dump "global deletions = 2" "dse1" } } */
+/* { dg-final { scan-rtl-dump "global deletions = 4" "dse1" } } */
/* { dg-final { cleanup-rtl-dump "dse1" } } */
Index: gcc/calls.c
===================================================================
--- gcc/calls.c (revision 175081)
+++ gcc/calls.c (working copy)
@@ -3005,8 +3005,9 @@ expand_call (tree exp, rtx target, int ignore)
tree nt = build_qualified_type (rettype,
(TYPE_QUALS (rettype)
| TYPE_QUAL_CONST));
-
+ tree target_expr = create_tmp_reg (rettype, NULL);
target = assign_temp (nt, 0, 1, 1);
+ set_mem_expr (target, target_expr);
}
if (! rtx_equal_p (target, valreg))