OSDN Git Service

2009-04-27 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 27 Apr 2009 15:50:05 +0000 (15:50 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 27 Apr 2009 15:50:05 +0000 (15:50 +0000)
PR middle-end/39928
* gimplify.c (gimplify_expr): If we are required to create
a temporary make sure it ends up as register.

* gcc.c-torture/compile/pr39928-1.c: New testcase.
* gcc.c-torture/compile/pr39928-2.c: Likewise.

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

gcc/ChangeLog
gcc/gimplify.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr39928-1.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/compile/pr39928-2.c [new file with mode: 0644]

index b8bf343..8913e38 100644 (file)
@@ -1,3 +1,9 @@
+2009-04-27  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/39928
+       * gimplify.c (gimplify_expr): If we are required to create
+       a temporary make sure it ends up as register.
+
 2009-04-27  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR target/39903
index f831e47..d886784 100644 (file)
@@ -7184,7 +7184,12 @@ gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
        /* The postqueue might change the value of the expression between
           the initialization and use of the temporary, so we can't use a
           formal temp.  FIXME do we care?  */
-       *expr_p = get_initialized_tmp_var (*expr_p, pre_p, post_p);
+       {
+         *expr_p = get_initialized_tmp_var (*expr_p, pre_p, post_p);
+         if (TREE_CODE (TREE_TYPE (*expr_p)) == COMPLEX_TYPE
+             || TREE_CODE (TREE_TYPE (*expr_p)) == VECTOR_TYPE)
+           DECL_GIMPLE_REG_P (*expr_p) = 1;
+       }
       else
        *expr_p = get_formal_tmp_var (*expr_p, pre_p);
     }
index 9579635..79b0ea1 100644 (file)
@@ -1,3 +1,9 @@
+2009-04-27  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/39928
+       * gcc.c-torture/compile/pr39928-1.c: New testcase.
+       * gcc.c-torture/compile/pr39928-2.c: Likewise.
+
 2009-04-27  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR target/39903
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr39928-1.c b/gcc/testsuite/gcc.c-torture/compile/pr39928-1.c
new file mode 100644 (file)
index 0000000..3bee438
--- /dev/null
@@ -0,0 +1,8 @@
+typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__));
+extern __m128 _mm_sub_ps (__m128 __A, __m128 __B);
+extern __m128 _mm_mul_ps (__m128 __A, __m128 __B);
+__m128
+vq_nbest(const __m128 *codebook, __m128 d, __m128 in)
+{
+  return _mm_sub_ps(d, _mm_mul_ps(in, *codebook++));
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr39928-2.c b/gcc/testsuite/gcc.c-torture/compile/pr39928-2.c
new file mode 100644 (file)
index 0000000..6f0d30c
--- /dev/null
@@ -0,0 +1,8 @@
+typedef _Complex float __m128;
+extern __m128 _mm_sub_ps (__m128 __A, __m128 __B);
+extern __m128 _mm_mul_ps (__m128 __A, __m128 __B);
+__m128
+vq_nbest(const __m128 *codebook, __m128 d, __m128 in)
+{
+  return _mm_sub_ps(d, _mm_mul_ps(in, *codebook++));
+}