From 587aa06343905910d85ff1980cad0e3be57984b1 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Tue, 14 Apr 2009 13:50:18 +0000 Subject: [PATCH] tree-cfg.c (verify_gimple_assign_unary): Adjust vector code verification. 2000-04-14 Richard Guenther * 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 | 14 ++++++++ gcc/matrix-reorg.c | 5 +-- gcc/omp-low.c | 5 +-- gcc/tree-cfg.c | 67 +++++++++++++++++++++----------------- gcc/tree-vect-loop-manip.c | 9 ++--- 5 files changed, 62 insertions(+), 38 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3e08e2b81a29..de5f66bb8b8b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,17 @@ +2000-04-14 Richard Guenther + + * 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 * config/rs6000/rs6000-c.c: generate defines if rs6000_xilinx_fpu: diff --git a/gcc/matrix-reorg.c b/gcc/matrix-reorg.c index 8f71be538180..26b04d63ebb3 100644 --- a/gcc/matrix-reorg.c +++ b/gcc/matrix-reorg.c @@ -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); diff --git a/gcc/omp-low.c b/gcc/omp-low.c index b0066ed18906..be0153fea424 100644 --- a/gcc/omp-low.c +++ b/gcc/omp-low.c @@ -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); diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 2255ea1cedbb..6c5eb87d6444 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -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; diff --git a/gcc/tree-vect-loop-manip.c b/gcc/tree-vect-loop-manip.c index 0edcccb686a8..ae578f099fc6 100644 --- a/gcc/tree-vect-loop-manip.c +++ b/gcc/tree-vect-loop-manip.c @@ -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; }