On Sat, Jun 20, 2026 at 6:04 AM H.J. Lu <[email protected]> wrote:
>
> Use integer CONST_VECTOR:
>
> (const_vector:V2SI [
> (const_int 1073741824 [0x40000000]) repeated x2
> ])
>
> instead of
>
> (const_vector:V2SF [
> (const_int 1073741824 [0x40000000]) repeated x2
> ])
>
> to load FP CONST_VECTOR converted from const_int:
>
> (insn 25 24 27 2 (set (subreg:SI (reg/v:SF 144 [ d ]) 0)
> (const_int 1073741824 [0x40000000])) "x.c":4:18 100 {*movsi_internal}
> (nil))
> ...
> (insn 90 88 91 2 (set (reg:V2SF 202 [ _15 ])
> (vec_duplicate:V2SF (reg/v:SF 144 [ d ]))) "x.c":4:5 2137
> {*vec_dupv2sf}
> (expr_list:REG_DEAD (reg/v:SF 144 [ d ])
> (nil)))
>
> into GPR:
>
> (insn 90 88 91 2 (set (subreg:DI (reg:V2SF 202 [ _15 ]) 0)
> (const_int 4611686019501129728 [0x4000000040000000]))
> "x.c":4:5 99 {*movdi_internal}
> (expr_list:REG_DEAD (reg/v:SF 144 [ d ])
> (nil)))
>
> gcc/
>
> PR target/125895
> * config/i386/i386-features.cc (pass_x86_cse::x86_cse): Use
> integer CONST_VECTOR to load FP CONST_VECTOR converted from
> const_int.
>
> gcc/testsuite/
>
> PR target/125895
> * gcc.target/i386/pr125895.c: New test.
>
> --
> H.J.
+ gcc_assert (load->size <= UNITS_PER_WORD);
+ machine_mode imode = GET_MODE_INNER (mode);
+ switch (imode)
+ {
+ case BFmode:
+ case HFmode:
+ imode = HImode;
+ break;
+
+ case SFmode:
+ imode = SImode;
+ break;
+
+ case DFmode:
+ imode = DImode;
+ break;
+
+ default:
+ gcc_unreachable ();
+ }
int_mode_for_mode ?
Uros.