https://gcc.gnu.org/bugzilla/show_bug.cgi?id=127352

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |uros at gcc dot gnu.org

--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
This is when trying to split
(insn 313 311 314 36 (parallel [
            (set (reg:TI 36 r8 [orig:118 b_lsm.27 ] [118])
                (and:TI (subreg:TI (reg:SI 36 r8 [orig:107 f ] [107]) 0)
                    (const_int 15 [0xf])))
            (clobber (reg:CC 17 flags))
        ]) 734 {*andti3_doubleword}
     (nil))
insn during split2 pass (i.e. after RA).
It is IMHO ok to have there the paradoxical subreg, because the other AND
operand
has all zeros in the high part.
split_double_mode has
          /* simplify_gen_subreg will return NULL RTX for the
             high half of the paradoxical subreg. */
          hi_half[num] = tmp ? tmp : gen_reg_rtx (half_mode);
Wonder if that gen_reg_rtx (half_mode) shouldn't be CONST0_RTX (half_mode) or
can_create_pseudo_p () ? gen_reg_rtx (half_mode) : CONST0_RTX (half_mode).
For high half of paradoxical subreg, we can choose anything, and all zeros will
be usually cheapest.

Reply via email to