aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-if-to-switch.cc
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2021-01-12 13:40:44 +0100
committerMartin Liska <mliska@suse.cz>2021-01-13 11:33:28 +0100
commit7875e8dc831f30eec7203e090a209efe4c01a27d (patch)
tree48b1f10b1e11157c58ca1bad0181aa2f339acec9 /gcc/gimple-if-to-switch.cc
parent0db5f48848632cc571022b2c700ddcf69264f433 (diff)
downloadgcc-7875e8dc831f30eec7203e090a209efe4c01a27d.zip
gcc-7875e8dc831f30eec7203e090a209efe4c01a27d.tar.gz
gcc-7875e8dc831f30eec7203e090a209efe4c01a27d.tar.bz2
if-to-switch: fix also virtual phis
gcc/ChangeLog: PR tree-optimization/98455 * gimple-if-to-switch.cc (condition_info::record_phi_mapping): Record also virtual PHIs. (pass_if_to_switch::execute): Return TODO_cleanup_cfg only conditionally. gcc/testsuite/ChangeLog: PR tree-optimization/98455 * gcc.dg/tree-ssa/pr98455.c: New test.
Diffstat (limited to 'gcc/gimple-if-to-switch.cc')
-rw-r--r--gcc/gimple-if-to-switch.cc11
1 files changed, 4 insertions, 7 deletions
diff --git a/gcc/gimple-if-to-switch.cc b/gcc/gimple-if-to-switch.cc
index 560753d..1712fc4 100644
--- a/gcc/gimple-if-to-switch.cc
+++ b/gcc/gimple-if-to-switch.cc
@@ -91,11 +91,8 @@ condition_info::record_phi_mapping (edge e, mapping_vec *vec)
gsi_next (&gsi))
{
gphi *phi = gsi.phi ();
- if (!virtual_operand_p (gimple_phi_result (phi)))
- {
- tree arg = PHI_ARG_DEF_FROM_EDGE (phi, e);
- vec->safe_push (std::make_pair (phi, arg));
- }
+ tree arg = PHI_ARG_DEF_FROM_EDGE (phi, e);
+ vec->safe_push (std::make_pair (phi, arg));
}
}
@@ -470,7 +467,7 @@ const pass_data pass_data_if_to_switch =
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
- TODO_cleanup_cfg | TODO_update_ssa /* todo_flags_finish */
+ TODO_update_ssa /* todo_flags_finish */
};
class pass_if_to_switch : public gimple_opt_pass
@@ -575,7 +572,7 @@ pass_if_to_switch::execute (function *fun)
if (!all_candidates.is_empty ())
{
free_dominance_info (CDI_DOMINATORS);
- mark_virtual_operands_for_renaming (fun);
+ return TODO_cleanup_cfg;
}
return 0;