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.
