diff options
author | Richard Guenther <rguenther@suse.de> | 2011-09-01 11:46:08 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2011-09-01 11:46:08 +0000 |
commit | 4e71066d7ed30ff6582ba01d1cb319787bf1ac5a (patch) | |
tree | de79a98229582fd910a363d796804b194a844d10 /gcc/tree-cfg.c | |
parent | dbe36d674a7e0916981fbb8728d4c31d26e84462 (diff) | |
download | gcc-4e71066d7ed30ff6582ba01d1cb319787bf1ac5a.zip gcc-4e71066d7ed30ff6582ba01d1cb319787bf1ac5a.tar.gz gcc-4e71066d7ed30ff6582ba01d1cb319787bf1ac5a.tar.bz2 |
expr.c (expand_expr_real_2): Move COND_EXPR and VEC_COND_EXPR handling here, from ...
2011-08-31 Richard Guenther <rguenther@suse.de>
* expr.c (expand_expr_real_2): Move COND_EXPR and VEC_COND_EXPR
handling here, from ...
(expand_expr_real_1): ... here.
* gimple-pretty-print.c (dump_ternary_rhs): Handle COND_EXPR
and VEC_COND_EXPR.
* gimple.c (gimple_rhs_class_table): Make COND_EXPR and VEC_COND_EXPR
a GIMPLE_TERNARY_RHS.
* tree-cfg.c (verify_gimple_assign_ternary): Handle COND_EXPR
and VEC_COND_EXPR here ...
(verify_gimple_assign_single): ... not here.
* gimple-fold.c (fold_gimple_assign): Move COND_EXPR folding.
* tree-object-size.c (cond_expr_object_size): Adjust.
(collect_object_sizes_for): Likewise.
* tree-scalar-evolution.c (interpret_expr): Don't handle
ternary RHSs.
* tree-ssa-forwprop.c (forward_propagate_into_cond): Fix and
simplify.
(ssa_forward_propagate_and_combine): Adjust.
* tree-ssa-loop-im.c (move_computations_stmt): Build the COND_EXPR
as ternary.
* tree-ssa-threadedge.c (fold_assignment_stmt): Adjust.
* tree-vect-loop.c (vect_is_simple_reduction_1): Likewise.
* tree-vect-stmt.c (vectorizable_condition): Likewise.
* tree-vrp.c (extract_range_from_cond_expr): Likewise.
(extract_range_from_assignment): Likewise.
From-SVN: r178408
Diffstat (limited to 'gcc/tree-cfg.c')
-rw-r--r-- | gcc/tree-cfg.c | 32 |
1 files changed, 15 insertions, 17 deletions
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index bcb8ba9..62e2da0 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -3668,7 +3668,8 @@ verify_gimple_assign_ternary (gimple stmt) return true; } - if (!is_gimple_val (rhs1) + if (((rhs_code == VEC_COND_EXPR || rhs_code == COND_EXPR) + ? !is_gimple_condexpr (rhs1) : !is_gimple_val (rhs1)) || !is_gimple_val (rhs2) || !is_gimple_val (rhs3)) { @@ -3711,6 +3712,19 @@ verify_gimple_assign_ternary (gimple stmt) } break; + case COND_EXPR: + case VEC_COND_EXPR: + if (!useless_type_conversion_p (lhs_type, rhs2_type) + || !useless_type_conversion_p (lhs_type, rhs3_type)) + { + error ("type mismatch in conditional expression"); + debug_generic_expr (lhs_type); + debug_generic_expr (rhs2_type); + debug_generic_expr (rhs3_type); + return true; + } + break; + case DOT_PROD_EXPR: case REALIGN_LOAD_EXPR: /* FIXME. */ @@ -3827,26 +3841,10 @@ verify_gimple_assign_single (gimple stmt) } return res; - case COND_EXPR: - if (!is_gimple_reg (lhs) - || (!is_gimple_reg (TREE_OPERAND (rhs1, 0)) - && !COMPARISON_CLASS_P (TREE_OPERAND (rhs1, 0))) - || (!is_gimple_reg (TREE_OPERAND (rhs1, 1)) - && !is_gimple_min_invariant (TREE_OPERAND (rhs1, 1))) - || (!is_gimple_reg (TREE_OPERAND (rhs1, 2)) - && !is_gimple_min_invariant (TREE_OPERAND (rhs1, 2)))) - { - error ("invalid COND_EXPR in gimple assignment"); - debug_generic_stmt (rhs1); - return true; - } - return res; - case CONSTRUCTOR: case OBJ_TYPE_REF: case ASSERT_EXPR: case WITH_SIZE_EXPR: - case VEC_COND_EXPR: /* FIXME. */ return res; |