tree-vect-generic.c (expand_vector_divmod): For even/odd widening multiply, put even...
authorJakub Jelinek <jakub@redhat.com>
Fri, 29 Jun 2012 20:26:51 +0000 (22:26 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 29 Jun 2012 20:26:51 +0000 (22:26 +0200)
* tree-vect-generic.c (expand_vector_divmod): For even/odd
widening multiply, put even always as first argument to
VEC_PERM_EXPR.

From-SVN: r189082

gcc/ChangeLog
gcc/tree-vect-generic.c

index 32e8ce2515b529b7794152bca48359786aaa286e..0c77b1d4b56d9a57b36cceb87552be43979ed58d 100644 (file)
@@ -1,3 +1,9 @@
+2012-06-29  Jakub Jelinek  <jakub@redhat.com>
+
+       * tree-vect-generic.c (expand_vector_divmod): For even/odd
+       widening multiply, put even always as first argument to
+       VEC_PERM_EXPR.
+
 2012-06-29  Richard Henderson  <rth@redhat.com>
 
        * tree-vect-generic.c: Include target.h.
index 89d8bae99c7fafcada37814445fa6c8a02140dac..37fa5e3665ff6e44792681746b3911cc7483bcf2 100644 (file)
@@ -457,7 +457,7 @@ expand_vector_divmod (gimple_stmt_iterator *gsi, tree type, tree op0,
   optab op;
   tree *vec;
   unsigned char *sel = NULL;
-  tree cur_op, mhi, mlo, mulcst, perm_mask, wider_type, tem, decl_e, decl_o;
+  tree cur_op, m1, m2, mulcst, perm_mask, wider_type, tem, decl_e, decl_o;
 
   if (prec > HOST_BITS_PER_WIDE_INT)
     return NULL_TREE;
@@ -843,35 +843,32 @@ expand_vector_divmod (gimple_stmt_iterator *gsi, tree type, tree op0,
          gimple call;
 
          call = gimple_build_call (decl_e, 2, cur_op, mulcst);
-         mhi = create_tmp_reg (wider_type, NULL);
-         add_referenced_var (mhi);
-         mhi = make_ssa_name (mhi, call);
-         gimple_call_set_lhs (call, mhi);
+         m1 = create_tmp_reg (wider_type, NULL);
+         add_referenced_var (m1);
+         m1 = make_ssa_name (m1, call);
+         gimple_call_set_lhs (call, m1);
          gsi_insert_seq_before (gsi, call, GSI_SAME_STMT);
 
          call = gimple_build_call (decl_o, 2, cur_op, mulcst);
-         mlo = create_tmp_reg (wider_type, NULL);
-         add_referenced_var (mlo);
-         mlo = make_ssa_name (mlo, call);
-         gimple_call_set_lhs (call, mlo);
+         m2 = create_tmp_reg (wider_type, NULL);
+         add_referenced_var (m2);
+         m2 = make_ssa_name (m2, call);
+         gimple_call_set_lhs (call, m2);
          gsi_insert_seq_before (gsi, call, GSI_SAME_STMT);
        }
       else
        {
-         mhi = gimplify_build2 (gsi, VEC_WIDEN_MULT_HI_EXPR, wider_type,
-                                cur_op, mulcst);
-         mlo = gimplify_build2 (gsi, VEC_WIDEN_MULT_LO_EXPR, wider_type,
-                                cur_op, mulcst);
+         m1 = gimplify_build2 (gsi, BYTES_BIG_ENDIAN ? VEC_WIDEN_MULT_HI_EXPR
+                                                     : VEC_WIDEN_MULT_LO_EXPR,
+                               wider_type, cur_op, mulcst);
+         m2 = gimplify_build2 (gsi, BYTES_BIG_ENDIAN ? VEC_WIDEN_MULT_LO_EXPR
+                                                     : VEC_WIDEN_MULT_HI_EXPR,
+                               wider_type, cur_op, mulcst);
        }
 
-      mhi = gimplify_build1 (gsi, VIEW_CONVERT_EXPR, type, mhi);
-      mlo = gimplify_build1 (gsi, VIEW_CONVERT_EXPR, type, mlo);
-      if (BYTES_BIG_ENDIAN)
-       cur_op = gimplify_build3 (gsi, VEC_PERM_EXPR, type, mhi, mlo,
-                                 perm_mask);
-      else
-       cur_op = gimplify_build3 (gsi, VEC_PERM_EXPR, type, mlo, mhi,
-                                 perm_mask);
+      m1 = gimplify_build1 (gsi, VIEW_CONVERT_EXPR, type, m1);
+      m2 = gimplify_build1 (gsi, VIEW_CONVERT_EXPR, type, m2);
+      cur_op = gimplify_build3 (gsi, VEC_PERM_EXPR, type, m1, m2, perm_mask);
     }
 
   switch (mode)