]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
tree-cfg.c (verify_gimple_assign_unary): Adjust vector code verification.
authorRichard Guenther <rguenther@suse.de>
Tue, 14 Apr 2009 13:50:18 +0000 (13:50 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 14 Apr 2009 13:50:18 +0000 (13:50 +0000)
2000-04-14  Richard Guenther  <rguenther@suse.de>

* tree-cfg.c (verify_gimple_assign_unary): Adjust vector code
verification.
(verify_gimple_assign_binary): Likewise.  Handle shifts and
rotates correctly.
(verify_gimple_phi): Print the mismatched argument position.
* tree-vect-loop-manip.c (vect_update_ivs_after_vectorizer):
Fix types.
(vect_update_init_of_dr): Likewise.
* matrix-reorg.c (transform_access_sites): Do what the
comment suggests.
* omp-low.c (expand_omp_atomic_pipeline): Use the correct types.

From-SVN: r146035

gcc/ChangeLog
gcc/matrix-reorg.c
gcc/omp-low.c
gcc/tree-cfg.c
gcc/tree-vect-loop-manip.c

index 3e08e2b81a2938750201dfe2a4bfd2455941cd8c..de5f66bb8b8bf59b7c586bf0a785e133d15b56e8 100644 (file)
@@ -1,3 +1,17 @@
+2000-04-14  Richard Guenther  <rguenther@suse.de>
+
+       * tree-cfg.c (verify_gimple_assign_unary): Adjust vector code
+       verification.
+       (verify_gimple_assign_binary): Likewise.  Handle shifts and
+       rotates correctly.
+       (verify_gimple_phi): Print the mismatched argument position.
+       * tree-vect-loop-manip.c (vect_update_ivs_after_vectorizer):
+       Fix types.
+       (vect_update_init_of_dr): Likewise.
+       * matrix-reorg.c (transform_access_sites): Do what the
+       comment suggests.
+       * omp-low.c (expand_omp_atomic_pipeline): Use the correct types.
+
 2009-04-13  Michael Eager <eager@eagercon.com>
 
        * config/rs6000/rs6000-c.c: generate defines if rs6000_xilinx_fpu:
index 8f71be5381802e24bb0a38132aff135ad14f2230..26b04d63ebb382f5419d22b8cea925234131f5fe 100644 (file)
@@ -1865,8 +1865,9 @@ transform_access_sites (void **slot, void *data ATTRIBUTE_UNUSED)
                    tmp = create_tmp_var (TREE_TYPE (lhs), "new");
                    add_referenced_var (tmp);
                    rhs = gimple_assign_rhs1 (acc_info->stmt);
-                   new_stmt = gimple_build_assign (tmp,
-                                                   TREE_OPERAND (rhs, 0));
+                   rhs = fold_convert (TREE_TYPE (tmp),
+                                       TREE_OPERAND (rhs, 0));
+                   new_stmt = gimple_build_assign (tmp, rhs);
                    tmp = make_ssa_name (tmp, new_stmt);
                    gimple_assign_set_lhs (new_stmt, tmp);
                    gsi = gsi_for_stmt (acc_info->stmt);
index b0066ed18906d415fa24027015d0b6fcc2606009..be0153fea424482e6beee22ebb7e230504541f9d 100644 (file)
@@ -5074,7 +5074,8 @@ expand_omp_atomic_pipeline (basic_block load_bb, basic_block store_bb,
   /* Build the compare&swap statement.  */
   new_storedi = build_call_expr (cmpxchg, 3, iaddr, loadedi, storedi);
   new_storedi = force_gimple_operand_gsi (&si,
-                                         fold_convert (itype, new_storedi),
+                                         fold_convert (TREE_TYPE (loadedi),
+                                                       new_storedi),
                                          true, NULL_TREE,
                                          true, GSI_SAME_STMT);
 
@@ -5082,7 +5083,7 @@ expand_omp_atomic_pipeline (basic_block load_bb, basic_block store_bb,
     old_vali = loadedi;
   else
     {
-      old_vali = create_tmp_var (itype, NULL);
+      old_vali = create_tmp_var (TREE_TYPE (loadedi), NULL);
       if (gimple_in_ssa_p (cfun))
        add_referenced_var (old_vali);
       stmt = gimple_build_assign (old_vali, loadedi);
index 2255ea1cedbbae3051432d44ce31df216c30c6bf..6c5eb87d64443aee8c8737e740aa3ea2ece5699b 100644 (file)
@@ -3411,23 +3411,23 @@ verify_gimple_assign_unary (gimple stmt)
         return false;
       }
 
-    case TRUTH_NOT_EXPR:
-      {
-      }
+    case VEC_UNPACK_HI_EXPR:
+    case VEC_UNPACK_LO_EXPR:
+    case REDUC_MAX_EXPR:
+    case REDUC_MIN_EXPR:
+    case REDUC_PLUS_EXPR:
+    case VEC_UNPACK_FLOAT_HI_EXPR:
+    case VEC_UNPACK_FLOAT_LO_EXPR:
+      /* FIXME.  */
+      return false;
 
+    case TRUTH_NOT_EXPR:
     case NEGATE_EXPR:
     case ABS_EXPR:
     case BIT_NOT_EXPR:
     case PAREN_EXPR:
     case NON_LVALUE_EXPR:
     case CONJ_EXPR:
-    case REDUC_MAX_EXPR:
-    case REDUC_MIN_EXPR:
-    case REDUC_PLUS_EXPR:
-    case VEC_UNPACK_HI_EXPR:
-    case VEC_UNPACK_LO_EXPR:
-    case VEC_UNPACK_FLOAT_HI_EXPR:
-    case VEC_UNPACK_FLOAT_LO_EXPR:
       break;
 
     default:
@@ -3498,17 +3498,21 @@ verify_gimple_assign_binary (gimple stmt)
 
     case LSHIFT_EXPR:
     case RSHIFT_EXPR:
-      if (FIXED_POINT_TYPE_P (rhs1_type)
-         && INTEGRAL_TYPE_P (rhs2_type)
-         && useless_type_conversion_p (lhs_type, rhs1_type))
-       return false;
-      /* Fall through.  */
-
     case LROTATE_EXPR:
     case RROTATE_EXPR:
       {
-       if (!INTEGRAL_TYPE_P (rhs1_type)
-           || !INTEGRAL_TYPE_P (rhs2_type)
+       /* Shifts and rotates are ok on integral types, fixed point
+          types and integer vector types.  */
+       if ((!INTEGRAL_TYPE_P (rhs1_type)
+            && !FIXED_POINT_TYPE_P (rhs1_type)
+            && !(TREE_CODE (rhs1_type) == VECTOR_TYPE
+                 && TREE_CODE (TREE_TYPE (rhs1_type)) == INTEGER_TYPE))
+           || (!INTEGRAL_TYPE_P (rhs2_type)
+               /* Vector shifts of vectors are also ok.  */
+               && !(TREE_CODE (rhs1_type) == VECTOR_TYPE
+                    && TREE_CODE (TREE_TYPE (rhs1_type)) == INTEGER_TYPE
+                    && TREE_CODE (rhs2_type) == VECTOR_TYPE
+                    && TREE_CODE (TREE_TYPE (rhs2_type)) == INTEGER_TYPE))
            || !useless_type_conversion_p (lhs_type, rhs1_type))
          {
            error ("type mismatch in shift expression");
@@ -3614,6 +3618,20 @@ verify_gimple_assign_binary (gimple stmt)
        break;
       }
 
+    case WIDEN_SUM_EXPR:
+    case WIDEN_MULT_EXPR:
+    case VEC_WIDEN_MULT_HI_EXPR:
+    case VEC_WIDEN_MULT_LO_EXPR:
+    case VEC_PACK_TRUNC_EXPR:
+    case VEC_PACK_SAT_EXPR:
+    case VEC_PACK_FIX_TRUNC_EXPR:
+    case VEC_EXTRACT_EVEN_EXPR:
+    case VEC_EXTRACT_ODD_EXPR:
+    case VEC_INTERLEAVE_HIGH_EXPR:
+    case VEC_INTERLEAVE_LOW_EXPR:
+      /* FIXME.  */
+      return false;
+
     case MULT_EXPR:
     case TRUNC_DIV_EXPR:
     case CEIL_DIV_EXPR:
@@ -3630,17 +3648,6 @@ verify_gimple_assign_binary (gimple stmt)
     case BIT_IOR_EXPR:
     case BIT_XOR_EXPR:
     case BIT_AND_EXPR:
-    case WIDEN_SUM_EXPR:
-    case WIDEN_MULT_EXPR:
-    case VEC_WIDEN_MULT_HI_EXPR:
-    case VEC_WIDEN_MULT_LO_EXPR:
-    case VEC_PACK_TRUNC_EXPR:
-    case VEC_PACK_SAT_EXPR:
-    case VEC_PACK_FIX_TRUNC_EXPR:
-    case VEC_EXTRACT_EVEN_EXPR:
-    case VEC_EXTRACT_ODD_EXPR:
-    case VEC_INTERLEAVE_HIGH_EXPR:
-    case VEC_INTERLEAVE_LOW_EXPR:
       /* Continue with generic binary expression handling.  */
       break;
 
@@ -3905,7 +3912,7 @@ verify_gimple_phi (gimple stmt)
        }
       if (!useless_type_conversion_p (type, TREE_TYPE (arg)))
        {
-         error ("Incompatible types in PHI argument");
+         error ("Incompatible types in PHI argument %u", i);
          debug_generic_stmt (type);
          debug_generic_stmt (TREE_TYPE (arg));
          return true;
index 0edcccb686a83c9dbf467b2e0577502bfeb062f8..ae578f099fc6bc0008dfa75d1fe1824aeac9be85 100644 (file)
@@ -1639,9 +1639,9 @@ vect_update_ivs_after_vectorizer (loop_vec_info loop_vinfo, tree niters,
       if (POINTER_TYPE_P (TREE_TYPE (init_expr)))
        ni = fold_build2 (POINTER_PLUS_EXPR, TREE_TYPE (init_expr), 
                          init_expr, 
-                         fold_convert (sizetype, 
-                                       fold_build2 (MULT_EXPR, TREE_TYPE (niters),
-                                                    niters, step_expr)));
+                         fold_build2 (MULT_EXPR, sizetype,
+                                      fold_convert (sizetype, niters),
+                                      step_expr));
       else
        ni = fold_build2 (PLUS_EXPR, TREE_TYPE (init_expr),
                          fold_build2 (MULT_EXPR, TREE_TYPE (init_expr),
@@ -1926,7 +1926,8 @@ vect_update_init_of_dr (struct data_reference *dr, tree niters)
   niters = fold_build2 (MULT_EXPR, sizetype,
                        fold_convert (sizetype, niters),
                        fold_convert (sizetype, DR_STEP (dr)));
-  offset = fold_build2 (PLUS_EXPR, sizetype, offset, niters);
+  offset = fold_build2 (PLUS_EXPR, sizetype,
+                       fold_convert (sizetype, offset), niters);
   DR_OFFSET (dr) = offset;
 }