diff options
author | Richard Guenther <rguenther@suse.de> | 2009-04-14 13:50:18 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2009-04-14 13:50:18 +0000 |
commit | 587aa06343905910d85ff1980cad0e3be57984b1 (patch) | |
tree | 3c14db1949615dbf483ab6fcfa12f3ac5e829397 /gcc | |
parent | 58277f48923ae8fed82265aa5e7ded8f84528ae7 (diff) | |
download | gcc-587aa06343905910d85ff1980cad0e3be57984b1.zip gcc-587aa06343905910d85ff1980cad0e3be57984b1.tar.gz gcc-587aa06343905910d85ff1980cad0e3be57984b1.tar.bz2 |
tree-cfg.c (verify_gimple_assign_unary): Adjust vector code verification.
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 14 | ||||
-rw-r--r-- | gcc/matrix-reorg.c | 5 | ||||
-rw-r--r-- | gcc/omp-low.c | 5 | ||||
-rw-r--r-- | gcc/tree-cfg.c | 67 | ||||
-rw-r--r-- | gcc/tree-vect-loop-manip.c | 9 |
5 files changed, 62 insertions, 38 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3e08e2b..de5f66b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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: diff --git a/gcc/matrix-reorg.c b/gcc/matrix-reorg.c index 8f71be5..26b04d6 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 b0066ed..be0153f 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 2255ea1..6c5eb87 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 0edcccb..ae578f09 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; } |