diff options
author | Andrew MacLeod <amacleod@redhat.com> | 2021-11-29 12:00:26 -0500 |
---|---|---|
committer | Andrew MacLeod <amacleod@redhat.com> | 2021-12-01 09:10:41 -0500 |
commit | cb137e85720654e41db370d952df226654e576a6 (patch) | |
tree | ff745db58975e7fe175f1fbfb61587ead4ca5677 /gcc | |
parent | a7fede6704dd207fb32b97bc30f945acc7b953c5 (diff) | |
download | gcc-cb137e85720654e41db370d952df226654e576a6.zip gcc-cb137e85720654e41db370d952df226654e576a6.tar.gz gcc-cb137e85720654e41db370d952df226654e576a6.tar.bz2 |
Also pre-process PHIs in range-of-stmt.
PR tree-optimization/103464
* gimple-range.cc (gimple_ranger::prefill_name): Process phis also.
(gimple_ranger::prefill_stmt_dependencies): Ditto.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/gimple-range.cc | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/gcc/gimple-range.cc b/gcc/gimple-range.cc index 178a470..c8431a71 100644 --- a/gcc/gimple-range.cc +++ b/gcc/gimple-range.cc @@ -333,7 +333,7 @@ gimple_ranger::prefill_name (irange &r, tree name) if (!gimple_range_ssa_p (name)) return; gimple *stmt = SSA_NAME_DEF_STMT (name); - if (!gimple_range_handler (stmt)) + if (!gimple_range_handler (stmt) && !is_a<gphi *> (stmt)) return; bool current; @@ -356,8 +356,8 @@ gimple_ranger::prefill_stmt_dependencies (tree ssa) gimple *stmt = SSA_NAME_DEF_STMT (ssa); gcc_checking_assert (stmt && gimple_bb (stmt)); - // Only pre-process range-ops. - if (!gimple_range_handler (stmt)) + // Only pre-process range-ops and phis. + if (!gimple_range_handler (stmt) && !is_a<gphi *> (stmt)) return; // Mark where on the stack we are starting. @@ -401,13 +401,22 @@ gimple_ranger::prefill_stmt_dependencies (tree ssa) print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM); } - gcc_checking_assert (gimple_range_handler (stmt)); - tree op = gimple_range_operand2 (stmt); - if (op) - prefill_name (r, op); - op = gimple_range_operand1 (stmt); - if (op) - prefill_name (r, op); + gphi *phi = dyn_cast <gphi *> (stmt); + if (phi) + { + for (unsigned x = 0; x < gimple_phi_num_args (phi); x++) + prefill_name (r, gimple_phi_arg_def (phi, x)); + } + else + { + gcc_checking_assert (gimple_range_handler (stmt)); + tree op = gimple_range_operand2 (stmt); + if (op) + prefill_name (r, op); + op = gimple_range_operand1 (stmt); + if (op) + prefill_name (r, op); + } } if (idx) tracer.trailer (idx, "ROS ", false, ssa, r); |