aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-threadedge.cc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2023-04-18 17:26:57 +0200
committerRichard Biener <rguenther@suse.de>2023-04-24 09:35:38 +0200
commit60bf26a412a9ec2b467c04fac1dfacef2ef09c6d (patch)
treecd47590228fd0a2c9832b783373a4290605a2133 /gcc/tree-ssa-threadedge.cc
parent28c06d0ed134d7d325da101e7e4230067cebeab3 (diff)
downloadgcc-60bf26a412a9ec2b467c04fac1dfacef2ef09c6d.zip
gcc-60bf26a412a9ec2b467c04fac1dfacef2ef09c6d.tar.gz
gcc-60bf26a412a9ec2b467c04fac1dfacef2ef09c6d.tar.bz2
This replaces uses of last_stmt where we do not require debug skipping
There are quite some cases which want to access the control stmt ending a basic-block. Since there cannot be debug stmts after such stmt there's no point in using last_stmt which skips debug stmts and can be a compile-time hog for larger testcases. * gimple-ssa-split-paths.cc (is_feasible_trace): Avoid last_stmt. * graphite-scop-detection.cc (single_pred_cond_non_loop_exit): Likewise. * ipa-fnsummary.cc (set_cond_stmt_execution_predicate): Likewise. (set_switch_stmt_execution_predicate): Likewise. (phi_result_unknown_predicate): Likewise. * ipa-prop.cc (compute_complex_ancestor_jump_func): Likewise. (ipa_analyze_indirect_call_uses): Likewise. * predict.cc (predict_iv_comparison): Likewise. (predict_extra_loop_exits): Likewise. (predict_loops): Likewise. (tree_predict_by_opcode): Likewise. * gimple-predicate-analysis.cc (predicate::init_from_control_deps): Likewise. * gimple-pretty-print.cc (dump_implicit_edges): Likewise. * tree-ssa-phiopt.cc (tree_ssa_phiopt_worker): Likewise. (replace_phi_edge_with_variable): Likewise. (two_value_replacement): Likewise. (value_replacement): Likewise. (minmax_replacement): Likewise. (spaceship_replacement): Likewise. (cond_removal_in_builtin_zero_pattern): Likewise. * tree-ssa-reassoc.cc (maybe_optimize_range_tests): Likewise. * tree-ssa-sccvn.cc (vn_phi_eq): Likewise. (vn_phi_lookup): Likewise. (vn_phi_insert): Likewise. * tree-ssa-structalias.cc (compute_points_to_sets): Likewise. * tree-ssa-threadbackward.cc (back_threader::maybe_thread_block): Likewise. (back_threader_profitability::possibly_profitable_path_p): Likewise. * tree-ssa-threadedge.cc (jump_threader::thread_outgoing_edges): Likewise. * tree-switch-conversion.cc (pass_convert_switch::execute): Likewise. (pass_lower_switch<O0>::execute): Likewise. * tree-tailcall.cc (tree_optimize_tail_calls_1): Likewise. * tree-vect-loop-manip.cc (vect_loop_versioning): Likewise. * tree-vect-slp.cc (vect_slp_function): Likewise. * tree-vect-stmts.cc (cfun_returns): Likewise. * tree-vectorizer.cc (vect_loop_vectorized_call): Likewise. (vect_loop_dist_alias_call): Likewise.
Diffstat (limited to 'gcc/tree-ssa-threadedge.cc')
-rw-r--r--gcc/tree-ssa-threadedge.cc4
1 files changed, 1 insertions, 3 deletions
diff --git a/gcc/tree-ssa-threadedge.cc b/gcc/tree-ssa-threadedge.cc
index 3805d92..72a7d4d 100644
--- a/gcc/tree-ssa-threadedge.cc
+++ b/gcc/tree-ssa-threadedge.cc
@@ -1193,7 +1193,6 @@ void
jump_threader::thread_outgoing_edges (basic_block bb)
{
int flags = (EDGE_IGNORE | EDGE_COMPLEX | EDGE_ABNORMAL);
- gimple *last;
if (!flag_thread_jumps)
return;
@@ -1204,8 +1203,7 @@ jump_threader::thread_outgoing_edges (basic_block bb)
will be traversed when the incoming edge from BB is traversed. */
if (single_succ_to_potentially_threadable_block (bb))
thread_across_edge (single_succ_edge (bb));
- else if ((last = last_stmt (bb))
- && gimple_code (last) == GIMPLE_COND
+ else if (safe_is_a <gcond *> (*gsi_last_bb (bb))
&& EDGE_COUNT (bb->succs) == 2
&& (EDGE_SUCC (bb, 0)->flags & flags) == 0
&& (EDGE_SUCC (bb, 1)->flags & flags) == 0)