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.
This commit is contained in:
parent
0db5f48848
commit
7875e8dc83
@ -91,11 +91,8 @@ condition_info::record_phi_mapping (edge e, mapping_vec *vec)
|
|||||||
gsi_next (&gsi))
|
gsi_next (&gsi))
|
||||||
{
|
{
|
||||||
gphi *phi = gsi.phi ();
|
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_provided */
|
||||||
0, /* properties_destroyed */
|
0, /* properties_destroyed */
|
||||||
0, /* todo_flags_start */
|
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
|
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 ())
|
if (!all_candidates.is_empty ())
|
||||||
{
|
{
|
||||||
free_dominance_info (CDI_DOMINATORS);
|
free_dominance_info (CDI_DOMINATORS);
|
||||||
mark_virtual_operands_for_renaming (fun);
|
return TODO_cleanup_cfg;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
19
gcc/testsuite/gcc.dg/tree-ssa/pr98455.c
Normal file
19
gcc/testsuite/gcc.dg/tree-ssa/pr98455.c
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/* PR tree-optimization/98455 */
|
||||||
|
/* { dg-do compile } */
|
||||||
|
/* { dg-options "-O1 -fno-tree-dce --param case-values-threshold=1" } */
|
||||||
|
|
||||||
|
void
|
||||||
|
n4 (int io, int vb)
|
||||||
|
{
|
||||||
|
double uc[2] = { 1.0, 2.0, };
|
||||||
|
|
||||||
|
if (io == 0)
|
||||||
|
uc[0] = 0.0;
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
if (io == 0)
|
||||||
|
if (vb == 0)
|
||||||
|
uc[0] = uc[1];
|
||||||
|
else if (vb == 1)
|
||||||
|
uc[1] = 0.0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user