OSDN Git Service

2010-04-13 Martin Jambor <mjambor@suse.cz>
authorjamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 13 Apr 2010 13:47:34 +0000 (13:47 +0000)
committerMasaki Muranaka <monaka@monami-software.com>
Sun, 23 May 2010 05:32:07 +0000 (14:32 +0900)
* tree-sra.c (replace_uses_with_default_def_ssa_name): New function.
(sra_modify_assign): Delete stmts loading dead data even if racc has no
children.  Call replace_uses_with_default_def_ssa_name to handle
SSA_NAES on lhs.

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

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

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/sra-9.c
gcc/tree-sra.c

index 70bed3b..3f0d60b 100644 (file)
@@ -1,3 +1,10 @@
+2010-04-13  Martin Jambor  <mjambor@suse.cz>
+
+       * tree-sra.c (replace_uses_with_default_def_ssa_name): New function.
+       (sra_modify_assign): Delete stmts loading dead data even if racc has no
+       children.  Call replace_uses_with_default_def_ssa_name to handle
+       SSA_NAES on lhs.
+
 2010-04-13  Michael Matz  <matz@suse.de>
 
        PR middle-end/43730
index 4357a76..99aff6d 100644 (file)
@@ -1,3 +1,7 @@
+2010-04-13  Martin Jambor  <mjambor@suse.cz>
+
+       * gcc.dg/tree-ssa/sra-9.c: New test.
+
 2010-04-13  Michael Matz  <matz@suse.de>
 
        PR middle-end/43730
index 54f4217..7a810c6 100644 (file)
@@ -16,5 +16,5 @@ int foo (int d)
 }
 
 /* There should be no reference to s.b.  */
-/* { dg-final { scan-tree-dump-times "s\.b" 0 "optimized"} } */
+/* { dg-final { scan-tree-dump-times "s\.b" 0 "optimized"} } */
 /* { dg-final { cleanup-tree-dump "optimized" } } */
index 08c03e1..3540063 100644 (file)
@@ -2522,15 +2522,36 @@ sra_modify_constructor_assign (gimple *stmt, gimple_stmt_iterator *gsi)
 }
 
 /* Create a new suitable default definition SSA_NAME and replace all uses of
-   SSA with it, RACC is access describing the uninitialized part of an
-   aggregate that is being loaded.  */
+   SSA with it.  */
 
 static void
-replace_uses_with_default_def_ssa_name (tree ssa, struct access *racc)
+replace_uses_with_default_def_ssa_name (tree ssa)
 {
-  tree repl, decl;
+  tree repl, decl = SSA_NAME_VAR (ssa);
+  if (TREE_CODE (decl) == PARM_DECL)
+    {
+      tree tmp = create_tmp_var (TREE_TYPE (decl), "SR");
+      if (TREE_CODE (TREE_TYPE (tmp)) == COMPLEX_TYPE
+         || TREE_CODE (TREE_TYPE (tmp)) == VECTOR_TYPE)
+       DECL_GIMPLE_REG_P (tmp) = 1;
+
+      get_var_ann (tmp);
+      add_referenced_var (tmp);
+      repl = make_ssa_name (tmp, gimple_build_nop ());
+      set_default_def (tmp, repl);
+    }
+  else
+    {
+      repl = gimple_default_def (cfun, decl);
+      if (!repl)
+       {
+         repl = make_ssa_name (decl, gimple_build_nop ());
+         set_default_def (decl, repl);
+       }
+    }
 
-  decl = get_unrenamed_access_replacement (racc);
+  replace_uses_by (ssa, repl);
+}
 
   repl = gimple_default_def (cfun, decl);
   if (!repl)
@@ -2724,7 +2745,7 @@ sra_modify_assign (gimple *stmt, gimple_stmt_iterator *gsi)
                                             false, false);
                  gcc_assert (*stmt == gsi_stmt (*gsi));
                  if (TREE_CODE (lhs) == SSA_NAME)
-                   replace_uses_with_default_def_ssa_name (lhs, racc);
+                   replace_uses_with_default_def_ssa_name (lhs);
 
                  unlink_stmt_vdef (*stmt);
                  gsi_remove (gsi, true);