]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/51583 (One more missing force_gimple_operand in SRA)
authorMartin Jambor <mjambor@suse.cz>
Mon, 19 Dec 2011 16:47:28 +0000 (17:47 +0100)
committerMartin Jambor <jamborm@gcc.gnu.org>
Mon, 19 Dec 2011 16:47:28 +0000 (17:47 +0100)
2011-12-19  Martin Jambor  <mjambor@suse.cz>

PR tree-optimization/51583
* tree-sra.c (load_assign_lhs_subreplacements): Call
force_gimple_operand_gsi when necessary also in case of no
corresponding replacement on the RHS.

* testsuite/gcc.dg/tree-ssa/pr51583.c: New test.

From-SVN: r182488

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

index 4539e4edf34c308919d32b948b1877f7d3575615..40403b9fed715bd5d35d506e04a3b26af1751fd9 100644 (file)
@@ -1,3 +1,10 @@
+2011-12-19  Martin Jambor  <mjambor@suse.cz>
+
+       PR tree-optimization/51583
+       * tree-sra.c (load_assign_lhs_subreplacements): Call
+       force_gimple_operand_gsi when necessary also in case of no
+       corresponding replacement on the RHS.
+
 2011-12-16  Eric Botcazou  <ebotcazou@adacore.com>
 
        * config/sparc/sparc.md (UNSPEC_FRAME_BLOCKAGE): New constant.
index 2d37cba75c9f9a3401c1827eb2b063f4b5203363..6071d1f609b496721538383fd29f56f1488f4c72 100644 (file)
@@ -1,3 +1,8 @@
+2011-12-19  Martin Jambor  <mjambor@suse.cz>
+
+       PR tree-optimization/51583
+       * gcc.dg/tree-ssa/pr51583.c: New test.
+
 2011-12-16  Jason Merrill  <jason@redhat.com>
 
        PR c++/51416
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr51583.c b/gcc/testsuite/gcc.dg/tree-ssa/pr51583.c
new file mode 100644 (file)
index 0000000..2c4ec47
--- /dev/null
@@ -0,0 +1,34 @@
+/* { dg-do compile } */
+/* { dg-options "-O1" } */
+
+typedef __complex__ double Value;
+
+union U
+{
+  Value v;
+  char c[sizeof(Value)];
+};
+
+struct S
+{
+  union U u;
+  int i,j;
+};
+
+Value gv;
+int gi, gj;
+
+Value foo (void)
+{
+  struct S s,t;
+
+  t.i = gi;
+  t.j = gj;
+  t.u.v = gv;
+  t.u.c[0] = 0;
+
+  s = t;
+  __imag__ s.u.v += s.i;
+
+  return s.u.v;
+}
index cb91dc4129a3123b24b0d17f65b0678de0269f43..756fe74bd52555359f859b1ccc48738ec9818700 100644 (file)
@@ -2655,6 +2655,9 @@ load_assign_lhs_subreplacements (struct access *lacc, struct access *top_racc,
              else
                rhs = build_ref_for_model (loc, top_racc->base, offset, lacc,
                                            new_gsi, true);
+             if (lacc->grp_partial_lhs)
+               rhs = force_gimple_operand_gsi (new_gsi, rhs, true, NULL_TREE,
+                                               false, GSI_NEW_STMT);
            }
 
          stmt = gimple_build_assign (get_access_replacement (lacc), rhs);