re PR tree-optimization/24365 (statement makes a memory store with complex)
authorAndrew Pinski <pinskia@physics.uc.edu>
Fri, 13 Jan 2006 14:30:08 +0000 (14:30 +0000)
committerAndrew Pinski <pinskia@gcc.gnu.org>
Fri, 13 Jan 2006 14:30:08 +0000 (06:30 -0800)
2006-01-13  Andrew Pinski  <pinskia@physics.uc.edu>

        PR tree-opt/24365
        * tree-inline.c (declare_return_variable): If the return variable
        was marked as a non gimple complex, set the return slot variable
        to be a non gimple comple variable.

2006-01-13  Andrew Pinski  <pinskia@physics.uc.edu>

        PR tree-opt/24365
        * g++.dg/opt/complex5.C: New test.

From-SVN: r109667

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/opt/complex5.C [new file with mode: 0644]
gcc/tree-inline.c

index 29510559ded9a944ea4589899b08eb3523764a57..42e8a7a5ab2a6c835b69f54f79f50fc9d3de54fa 100644 (file)
@@ -1,3 +1,10 @@
+2006-01-13  Andrew Pinski  <pinskia@physics.uc.edu>
+
+       PR tree-opt/24365
+       * tree-inline.c (declare_return_variable): If the return variable
+       was marked as a non gimple complex, set the return slot variable
+       to be a non gimple comple variable.
+
 2006-01-13  Richard Guenther  <rguenther@suse.de>
 
        * builtins.c (expand_builtin_sincos): New function.
index e1cbca66b14a429e38b20a3a2037cec51c6d3a47..593db14ca5477f1d440e969256266805c4c6d18e 100644 (file)
@@ -1,3 +1,8 @@
+2006-01-13  Andrew Pinski  <pinskia@physics.uc.edu>
+
+       PR tree-opt/24365
+       * g++.dg/opt/complex5.C: New test.
+
 2006-01-13  Richard Guenther  <rguenther@suse.de>
 
        * gcc.target/i386/387-9.c: New testcase.
diff --git a/gcc/testsuite/g++.dg/opt/complex5.C b/gcc/testsuite/g++.dg/opt/complex5.C
new file mode 100644 (file)
index 0000000..0da0738
--- /dev/null
@@ -0,0 +1,16 @@
+// PR 24365
+// { dg-do compile }
+// { dg-options "-O2" }
+
+typedef __complex__ double cdouble;
+inline cdouble to_complex(double r) {
+  cdouble z;
+  __real__ z = r;
+  return z;
+}
+cdouble elt_zero() {
+  cdouble a = to_complex(0.0);
+  a+=1.0;
+  return a;
+}
+
index be38fc937e11734692ae9a79d9d9d743dfd4cc2a..fd3f159f0b1de3df5f0b1dcaaf16e2bd8e3816a3 100644 (file)
@@ -1233,6 +1233,10 @@ declare_return_variable (inline_data *id, tree return_slot_addr,
        var = return_slot_addr;
       else
        var = build_fold_indirect_ref (return_slot_addr);
+      if (TREE_CODE (TREE_TYPE (result)) == COMPLEX_TYPE
+         && !DECL_COMPLEX_GIMPLE_REG_P (result)
+         && DECL_P (var))
+       DECL_COMPLEX_GIMPLE_REG_P (var) = 0;
       use = NULL;
       goto done;
     }