From 62fb67d77a7a68c5cfa7d78d751817b68ea78a87 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Thu, 23 Jul 2015 13:33:43 +0000 Subject: [PATCH] gimple-fold.c (fold_gimple_cond): Do not require folding results to pass valid_gimple_rhs_p. 2015-07-23 Richard Biener * gimple-fold.c (fold_gimple_cond): Do not require folding results to pass valid_gimple_rhs_p. * tree-cfg.h (fold_cond_expr_cond): Remove. * tree-cfg.c (fold_cond_expr_cond): Likewise. (make_edges): Do not call it. * tree-inline.c (tree_function_versioning): Likewise. From-SVN: r226109 --- gcc/ChangeLog | 12 +++++++++++- gcc/gimple-fold.c | 2 +- gcc/tree-cfg.c | 45 --------------------------------------------- gcc/tree-cfg.h | 1 - gcc/tree-inline.c | 1 - 5 files changed, 12 insertions(+), 49 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 81c60beeba6..f5bb227c338 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2015-07-23 Richard Biener + + * gimple-fold.c (fold_gimple_cond): Do not require folding + results to pass valid_gimple_rhs_p. + * tree-cfg.h (fold_cond_expr_cond): Remove. + * tree-cfg.c (fold_cond_expr_cond): Likewise. + (make_edges): Do not call it. + * tree-inline.c (tree_function_versioning): Likewise. + 2015-07-23 Tom de Vries * tree-parloops.c (gather_scalar_reductions): Add arg to call to @@ -8,7 +17,8 @@ (vect_is_simple_reduction, vect_force_simple_reduction): Add and pass need_wrapping_integral_overflow parameter. (vectorizable_reduction): Add arg to call to vect_is_simple_reduction. - * tree-vectorizer.h (vect_force_simple_reduction): Add parameter to decl. + * tree-vectorizer.h (vect_force_simple_reduction): Add parameter to + decl. 2015-07-23 Yuri Rumyantsev diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c index e19700de2ab..2909c42ef19 100644 --- a/gcc/gimple-fold.c +++ b/gcc/gimple-fold.c @@ -546,7 +546,7 @@ fold_gimple_cond (gcond *stmt) if (result) { STRIP_USELESS_TYPE_CONVERSION (result); - if (is_gimple_condexpr (result) && valid_gimple_rhs_p (result)) + if (is_gimple_condexpr (result)) { gimple_cond_set_condition_from_tree (stmt, result); return true; diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index d97b8240f22..66f999e3c42 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -606,48 +606,6 @@ create_bb (void *h, void *e, basic_block after) Edge creation ---------------------------------------------------------------------------*/ -/* Fold COND_EXPR_COND of each COND_EXPR. */ - -void -fold_cond_expr_cond (void) -{ - basic_block bb; - - FOR_EACH_BB_FN (bb, cfun) - { - gimple stmt = last_stmt (bb); - - if (stmt && gimple_code (stmt) == GIMPLE_COND) - { - gcond *cond_stmt = as_a (stmt); - location_t loc = gimple_location (stmt); - tree cond; - bool zerop, onep; - - fold_defer_overflow_warnings (); - cond = fold_binary_loc (loc, gimple_cond_code (cond_stmt), - boolean_type_node, - gimple_cond_lhs (cond_stmt), - gimple_cond_rhs (cond_stmt)); - if (cond) - { - zerop = integer_zerop (cond); - onep = integer_onep (cond); - } - else - zerop = onep = false; - - fold_undefer_overflow_warnings (zerop || onep, - stmt, - WARN_STRICT_OVERFLOW_CONDITIONAL); - if (zerop) - gimple_cond_make_false (cond_stmt); - else if (onep) - gimple_cond_make_true (cond_stmt); - } - } -} - /* If basic block BB has an abnormal edge to a basic block containing IFN_ABNORMAL_DISPATCHER internal call, return that the dispatcher's basic block, otherwise return NULL. */ @@ -1000,9 +958,6 @@ make_edges (void) XDELETE (bb_to_omp_idx); free_omp_regions (); - - /* Fold COND_EXPR_COND of each COND_EXPR. */ - fold_cond_expr_cond (); } /* Add SEQ after GSI. Start new bb after GSI, and created further bbs as diff --git a/gcc/tree-cfg.h b/gcc/tree-cfg.h index af58c80559d..6c4b1d9b241 100644 --- a/gcc/tree-cfg.h +++ b/gcc/tree-cfg.h @@ -31,7 +31,6 @@ extern void gt_pch_nx (edge_def *e, gt_pointer_operator, void *); extern void init_empty_tree_cfg_for_function (struct function *); extern void init_empty_tree_cfg (void); -extern void fold_cond_expr_cond (void); extern void start_recording_case_labels (void); extern void end_recording_case_labels (void); extern basic_block label_to_block_fn (struct function *, tree); diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 374b2463b73..e1ceea41710 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -5847,7 +5847,6 @@ tree_function_versioning (tree old_decl, tree new_decl, fold_marked_statements (0, id.statements_to_fold); delete id.statements_to_fold; - fold_cond_expr_cond (); delete_unreachable_blocks_update_callgraph (&id); if (id.dst_node->definition) cgraph_edge::rebuild_references (); -- 2.30.2