OSDN Git Service

2009-11-27 Martin Jambor <mjambor@suse.cz>
authorjamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 27 Nov 2009 22:34:40 +0000 (22:34 +0000)
committerjamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 27 Nov 2009 22:34:40 +0000 (22:34 +0000)
PR middle-end/42006
* tree-sra.c (get_replaced_param_substitute): Call create_tmp_var
instead of create_tmp_var.  Set DECL_GIMPLE_REG_P to one manually
for vector and complex types.
(get_adjustment_for_base): Describe return value in the comment.

* testsuite/gcc.c-torture/execute/pr42006.c: New test.

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

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/pr42006.c [new file with mode: 0644]
gcc/tree-sra.c

index ac3240c..02faa00 100644 (file)
@@ -1,3 +1,11 @@
+2009-11-27  Martin Jambor  <mjambor@suse.cz>
+
+       PR middle-end/42006
+       * tree-sra.c (get_replaced_param_substitute): Call create_tmp_var
+       instead of create_tmp_var.  Set DECL_GIMPLE_REG_P to one manually
+       for vector and complex types.
+       (get_adjustment_for_base): Describe return value in the comment.
+
 2009-11-27  Nick Clifton  <nickc@redhat.com>
 
        * longlong.h (count_leading_zeros): Define macro for stormy16
index 80ad4c2..e938d3c 100644 (file)
@@ -1,3 +1,8 @@
+2009-11-27  Martin Jambor  <mjambor@suse.cz>
+
+       PR middle-end/42006
+       * gcc.c-torture/execute/pr42006.c: New test.
+
 2009-11-27  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/38656
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr42006.c b/gcc/testsuite/gcc.c-torture/execute/pr42006.c
new file mode 100644 (file)
index 0000000..f40fc17
--- /dev/null
@@ -0,0 +1,33 @@
+extern void abort (void);
+
+static unsigned int
+my_add(unsigned int si1, unsigned int si2)
+{
+  return (si1 > (50-si2)) ? si1 : (si1 + si2);
+}
+
+static unsigned int
+my_shift(unsigned int left, unsigned int right)
+{
+  return  (right > 100) ? left : (left >> right);
+}
+
+static int func_4(unsigned int p_6)
+{
+  int count = 0;
+  for (p_6 = 1; p_6 < 3; p_6 = my_add(p_6, 1))
+    {
+      if (count++ > 1)
+       abort ();
+
+      if (my_shift(p_6, p_6))
+       return 0;
+    }
+  return 0;
+}
+
+int main(void)
+{
+  func_4(0);
+  return 0;
+}
index 5203685..34c0d3d 100644 (file)
@@ -3478,7 +3478,10 @@ get_replaced_param_substitute (struct ipa_parm_adjustment *adj)
     {
       char *pretty_name = make_fancy_name (adj->base);
 
-      repl = make_rename_temp (TREE_TYPE (adj->base), "ISR");
+      repl = create_tmp_var (TREE_TYPE (adj->base), "ISR");
+      if (TREE_CODE (TREE_TYPE (repl)) == COMPLEX_TYPE
+         || TREE_CODE (TREE_TYPE (repl)) == VECTOR_TYPE)
+       DECL_GIMPLE_REG_P (repl) = 1;
       DECL_NAME (repl) = get_identifier (pretty_name);
       obstack_free (&name_obstack, pretty_name);
 
@@ -3516,7 +3519,8 @@ get_adjustment_for_base (ipa_parm_adjustment_vec adjustments, tree base)
 /* Callback for scan_function.  If the statement STMT defines an SSA_NAME of a
    parameter which is to be removed because its value is not used, replace the
    SSA_NAME with a one relating to a created VAR_DECL and replace all of its
-   uses too.  DATA is a pointer to an adjustments vector.  */
+   uses too and return true (update_stmt is then issued for the statement by
+   the caller).  DATA is a pointer to an adjustments vector.  */
 
 static bool
 replace_removed_params_ssa_names (gimple stmt, void *data)