ifcvt: remove obsolete SUBREG handling in noce_convert_multiple_sets

This code used to handle SUBREG for register replacement when ifcvt
was doing the replacements manually. This special handling is not
needed anymore because simplify_replace_rtx is used for the
replacements and it properly handles these cases.

gcc/ChangeLog:

	* ifcvt.cc (noce_convert_multiple_sets_1): Remove old code.

Signed-off-by: Philipp Tomsich <philipp.tomsich@vrull.eu>
This commit is contained in:
Manolis Tsamis 2023-11-21 10:05:02 +01:00 committed by Philipp Tomsich
parent 990769a343
commit 9d912820d0

View file

@ -3492,44 +3492,6 @@ noce_convert_multiple_sets_1 (struct noce_if_info *if_info,
if (if_info->then_else_reversed)
std::swap (old_val, new_val);
/* We allow simple lowpart register subreg SET sources in
bb_ok_for_noce_convert_multiple_sets. Be careful when processing
sequences like:
(set (reg:SI r1) (reg:SI r2))
(set (reg:HI r3) (subreg:HI (r1)))
For the second insn new_val or old_val (r1 in this example) will be
taken from the temporaries and have the wider mode which will not
match with the mode of the other source of the conditional move, so
we'll end up trying to emit r4:HI = cond ? (r1:SI) : (r3:HI).
Wrap the two cmove operands into subregs if appropriate to prevent
that. */
if (!CONSTANT_P (new_val)
&& GET_MODE (new_val) != GET_MODE (temp))
{
machine_mode src_mode = GET_MODE (new_val);
machine_mode dst_mode = GET_MODE (temp);
if (!partial_subreg_p (dst_mode, src_mode))
{
end_sequence ();
return false;
}
new_val = lowpart_subreg (dst_mode, new_val, src_mode);
}
if (!CONSTANT_P (old_val)
&& GET_MODE (old_val) != GET_MODE (temp))
{
machine_mode src_mode = GET_MODE (old_val);
machine_mode dst_mode = GET_MODE (temp);
if (!partial_subreg_p (dst_mode, src_mode))
{
end_sequence ();
return false;
}
old_val = lowpart_subreg (dst_mode, old_val, src_mode);
}
/* Try emitting a conditional move passing the backend the
canonicalized comparison. The backend is then able to
recognize expressions like