On Mon, Mar 9, 2026 at 5:50 AM Jakub Jelinek <[email protected]> wrote:
>
> On Mon, Mar 09, 2026 at 05:27:42AM -0700, H.J. Lu wrote:
> > --- a/gcc/config/i386/i386-features.cc
> > +++ b/gcc/config/i386/i386-features.cc
> > @@ -3331,9 +3331,26 @@ ix86_place_single_vector_set (rtx dest, rtx src, 
> > bitmap bbs,
> >        rtx inner_scalar = load->val;
> >        /* Set the source in (vec_duplicate:V4SI (reg:SI 99)).  */
> >        rtx reg = XEXP (src, 0);
> > -      if ((REG_P (inner_scalar) || MEM_P (inner_scalar))
> > -       && GET_MODE (reg) != GET_MODE (inner_scalar))
> > -     inner_scalar = gen_rtx_SUBREG (GET_MODE (reg), inner_scalar, 0);
> > +      machine_mode reg_mode = GET_MODE (reg);
> > +      if (reg_mode != GET_MODE (inner_scalar))
> > +     {
> > +       if (REG_P (inner_scalar) || MEM_P (inner_scalar))
> > +         inner_scalar = gen_rtx_SUBREG (GET_MODE (reg), inner_scalar,
> > +                                        0);
> > +       else if (!SCALAR_INT_MODE_P (reg_mode))
> > +         {
> > +           /* For non-int load with integer constant, generate
> > +
> > +              (set (subreg:SI (reg/v:SF 105 [ f ]) 0)
> > +                   (const_int 1313486336 [0x4e4a3600]))
> > +
> > +            */
> > +           gcc_assert (CONST_INT_P (inner_scalar));
> > +           unsigned int bits = GET_MODE_BITSIZE (reg_mode);
> > +           machine_mode mode = int_mode_for_size (bits, 0).require ();
> > +           reg = gen_rtx_SUBREG (mode, reg, 0);
>
> I think handling const0_rtx the way you did in the other patch and only
> doing this for other constants would be better.
>
>         Jakub

Fixed in the v3 patch.


-- 
H.J.

Reply via email to