This code used to handle register replacement issues with SUBREG before
simplify_replace_rtx was introduced. This should not be needed anymore as
new_val has the correct mode and that should be preserved by
simplify_replace_rtx.

gcc/ChangeLog:

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

Signed-off-by: Manolis Tsamis <manolis.tsa...@vrull.eu>
---

(no changes since v1)

 gcc/ifcvt.cc | 38 --------------------------------------
 1 file changed, 38 deletions(-)

diff --git a/gcc/ifcvt.cc b/gcc/ifcvt.cc
index ecc0cbabef9..3b4b873612c 100644
--- a/gcc/ifcvt.cc
+++ b/gcc/ifcvt.cc
@@ -3449,44 +3449,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);
-       }
-
       /* We have identified swap-style idioms before.  A normal
         set will need to be a cmov while the first instruction of a swap-style
         idiom can be a regular move.  This helps with costing.  */
-- 
2.34.1

Reply via email to