On Mon, 20 Jul 2026, Hongtao Liu wrote:
> On Thu, Jul 16, 2026 at 9:26 PM Richard Biener <[email protected]> wrote:
> >
> > The following makes sure to honor v2df_reduction_prefer_haddpd
> > when expanding reduc_plus_scal_V2DF via ix86_expand_reduc.
> >
> > There is test coverage in gcc.target/i386/pr54400.c
> >
> > Bootstrap and regtest running on x86_64-unknown-linux-gnu.
> >
> > OK?
> >
> > Thanks,
> > Richard.
> >
> > PR target/126271
> > * config/i386/i386-expand.cc (ix86_expand_reduc): Honor
> > TARGET_V2DF_REDUCTION_PREFER_HADDPD and expand via
> > gen_sse3_haddv2df3.
> > ---
> > gcc/config/i386/i386-expand.cc | 9 +++++++++
> > 1 file changed, 9 insertions(+)
> >
> > diff --git a/gcc/config/i386/i386-expand.cc b/gcc/config/i386/i386-expand.cc
> > index a448e470f73..0cd4a72256e 100644
> > --- a/gcc/config/i386/i386-expand.cc
> > +++ b/gcc/config/i386/i386-expand.cc
> > @@ -20079,6 +20079,15 @@ ix86_expand_reduc (rtx (*fn) (rtx, rtx, rtx), rtx
> > dest, rtx in)
> > return;
> > }
> >
> > + /* SSE3 has haddpd, some targets prefer that over movhlpd plus add. */
> > + if (TARGET_SSE3
> > + && TARGET_V2DF_REDUCTION_PREFER_HADDPD
> > + && mode == V2DFmode)
> Please also add fn == gen_addv2df3 since REDUC_SSE_SMINMAX_MODE also
> has V2DFmode.
Ah, I missed that. Will fix, re-test and push.
Thanks,
Richard.
> 4029;; Modes handled by reduc_sm{in,ax}* patterns.
> 4030(define_mode_iterator REDUC_SSE_SMINMAX_MODE
> 4031 [(V8HF "TARGET_AVX512FP16 && TARGET_AVX512VL")
> 4032 (V4SF "TARGET_SSE") (V2DF "TARGET_SSE")
> 4033 (V4SI "TARGET_SSE2") (V8HI "TARGET_SSE2") (V16QI "TARGET_SSE2")
> 4034 (V2DI "TARGET_SSE4_2")])
> 4035
> 4036(define_expand "reduc_<code>_scal_<mode>"
> 4037 [(smaxmin:REDUC_SSE_SMINMAX_MODE
> 4038 (match_operand:<ssescalarmode> 0 "register_operand")
> 4039 (match_operand:REDUC_SSE_SMINMAX_MODE 1 "register_operand"))]
> 4040 ""
> 4041{
> 4042 rtx tmp = gen_reg_rtx (<MODE>mode);
> 4043 ix86_expand_reduc (gen_<code><mode>3, tmp, operands[1]);
> 4044 emit_insn (gen_vec_extract<mode><ssescalarmodelower>
> (operands[0], tmp,
> 4045
> const0_rtx));
> 4046 DONE;
> 4047})
>
>
> Others LGTM.
> > + {
> > + emit_insn (gen_sse3_haddv2df3 (dest, in, in));
> > + return;
> > + }
> > +
> > for (i = GET_MODE_BITSIZE (mode);
> > i > GET_MODE_UNIT_BITSIZE (mode);
> > i >>= 1)
> > --
> > 2.51.0
>
>
>
>
--
Richard Biener <[email protected]>
SUSE Software Solutions Germany GmbH,
Frankenstrasse 146, 90461 Nuernberg, Germany;
GF: Jochen Jaser, Andrew McDonald, Abhinav Puri; (HRB 36809, AG Nuernberg)