break;
}
- // If all arguments were equivalences, use the equivalence ranges as no
- // arguments were processed.
- if (r.undefined_p () && !equiv_range.undefined_p ())
- r = equiv_range;
-
- // If the PHI boils down to a single effective argument, look at it.
- if (single_arg)
- {
- // Symbolic arguments can be equivalences.
- if (gimple_range_ssa_p (single_arg))
- {
- // Only allow the equivalence if the PHI definition does not
- // dominate any incoming edge for SINGLE_ARG.
- // See PR 108139 and 109462.
- basic_block bb = gimple_bb (phi);
- if (!dom_info_available_p (CDI_DOMINATORS))
- single_arg = NULL;
- else
- for (x = 0; x < gimple_phi_num_args (phi); x++)
- if (gimple_phi_arg_def (phi, x) == single_arg
- && dominated_by_p (CDI_DOMINATORS,
- gimple_phi_arg_edge (phi, x)->src,
- bb))
- {
- single_arg = NULL;
- break;
- }
- if (single_arg)
- src.register_relation (phi, VREL_EQ, phi_def, single_arg);
- }
- else if (src.get_operand (arg_range, single_arg)
- && arg_range.singleton_p ())
- {
- // Numerical arguments that are a constant can be returned as
- // the constant. This can help fold later cases where even this
- // constant might have been UNDEFINED via an unreachable edge.
- r = arg_range;
- return true;
- }
- }
+ // If all arguments were equivalences, use the equivalence ranges as no
+ // arguments were processed.
+ if (r.undefined_p () && !equiv_range.undefined_p ())
+ r = equiv_range;
+
+ // If the PHI boils down to a single effective argument, look at it.
+ if (single_arg)
+ {
+ // Symbolic arguments can be equivalences.
+ if (gimple_range_ssa_p (single_arg))
+ {
+ // Only allow the equivalence if the PHI definition does not
+ // dominate any incoming edge for SINGLE_ARG.
+ // See PR 108139 and 109462.
+ basic_block bb = gimple_bb (phi);
+ if (!dom_info_available_p (CDI_DOMINATORS))
+ single_arg = NULL;
+ else
+ for (x = 0; x < gimple_phi_num_args (phi); x++)
+ if (gimple_phi_arg_def (phi, x) == single_arg
+ && dominated_by_p (CDI_DOMINATORS,
+ gimple_phi_arg_edge (phi, x)->src,
+ bb))
+ {
+ single_arg = NULL;
+ break;
+ }
+ if (single_arg)
+ src.register_relation (phi, VREL_EQ, phi_def, single_arg);
+ }
+ else if (src.get_operand (arg_range, single_arg)
+ && arg_range.singleton_p ())
+ {
+ // Numerical arguments that are a constant can be returned as
+ // the constant. This can help fold later cases where even this
+ // constant might have been UNDEFINED via an unreachable edge.
+ r = arg_range;
+ return true;
+ }
+ }
bool loop_info_p = false;
// If SCEV is available, query if this PHI has any known values.