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

--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
(In reply to Uroš Bizjak from comment #3)
> (In reply to Jakub Jelinek from comment #2)
> > --- gcc/config/i386/sse.md.jj       2026-03-02 20:08:37.596847221 +0100
> > +++ gcc/config/i386/sse.md  2026-03-02 21:43:49.817516970 +0100
> > @@ -7036,7 +7036,7 @@ (define_insn "avx512f_vmfmadd_<mode>_mas
> >       (match_dup 3)
> >       (const_int 1)))]
> >    "TARGET_AVX512F"
> > -  "vfmadd231<ssescalarmodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%},
> > %<iptr>3, %<iptr>2<round_op5>}"
> > +  "vfmadd231<ssescalarmodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%},
> > %<iptr>1, %<iptr>2<round_op5>}"
> 
> <iptr> is not needed anymore because the value is always in a register:
> 
>             (match_operand:VFH_128 1 "<round_nimm_scalar_predicate>" "%v")

There are lots of patterns with 2 <iptr>s:
grep iptr.*iptr *.md 
sse.md:   vfmadd132<ssescalarmodesuffix>\t{<round_op4>%2, %3, %0|%0, %<iptr>3,
%<iptr>2<round_op4>}
sse.md:   vfmadd213<ssescalarmodesuffix>\t{<round_op4>%3, %2, %0|%0, %<iptr>2,
%<iptr>3<round_op4>}"
sse.md:   vfmsub132<ssescalarmodesuffix>\t{<round_op4>%2, %3, %0|%0, %<iptr>3,
%<iptr>2<round_op4>}
sse.md:   vfmsub213<ssescalarmodesuffix>\t{<round_op4>%3, %2, %0|%0, %<iptr>2,
%<iptr>3<round_op4>}"
sse.md:   vfnmadd132<ssescalarmodesuffix>\t{<round_op4>%2, %3, %0|%0, %<iptr>3,
%<iptr>2<round_op4>}
sse.md:   vfnmadd213<ssescalarmodesuffix>\t{<round_op4>%3, %2, %0|%0, %<iptr>2,
%<iptr>3<round_op4>}"
sse.md:   vfnmsub132<ssescalarmodesuffix>\t{<round_op4>%2, %3, %0|%0, %<iptr>3,
%<iptr>2<round_op4>}
sse.md:   vfnmsub213<ssescalarmodesuffix>\t{<round_op4>%3, %2, %0|%0, %<iptr>2,
%<iptr>3<round_op4>}"
sse.md:   vfmadd132<ssescalarmodesuffix>\t{<round_op5>%2, %3,
%0%{%4%}|%0%{%4%}, %<iptr>3, %<iptr>2<round_op5>}
sse.md:   vfmadd213<ssescalarmodesuffix>\t{<round_op5>%3, %2,
%0%{%4%}|%0%{%4%}, %<iptr>2, %<iptr>3<round_op5>}"
sse.md:  "vfmadd231<ssescalarmodesuffix>\t{<round_op5>%2, %1,
%0%{%4%}|%0%{%4%}, %<iptr>1, %<iptr>2<round_op5>}"
sse.md:   vfmadd132<ssescalarmodesuffix>\t{<round_op6>%2, %3,
%0%{%5%}%{z%}|%0%{%5%}%{z%}, %<iptr>3, %<iptr>2<round_op6>}
sse.md:   vfmadd213<ssescalarmodesuffix>\t{<round_op6>%3, %2,
%0%{%5%}%{z%}|%0%{%5%}%{z%}, %<iptr>2, %<iptr>3<round_op6>}"
sse.md:   vfmsub132<ssescalarmodesuffix>\t{<round_op5>%2, %3,
%0%{%4%}|%0%{%4%}, %<iptr>3, %<iptr>2<round_op5>}
sse.md:   vfmsub213<ssescalarmodesuffix>\t{<round_op5>%3, %2,
%0%{%4%}|%0%{%4%}, %<iptr>2, %<iptr>3<round_op5>}"
sse.md:  "vfmsub231<ssescalarmodesuffix>\t{<round_op5>%2, %1,
%0%{%4%}|%0%{%4%}, %<iptr>1, %<iptr>2<round_op5>}"
sse.md:   vfmsub132<ssescalarmodesuffix>\t{<round_op6>%2, %3,
%0%{%5%}%{z%}|%0%{%5%}%{z%}, %<iptr>3, %<iptr>2<round_op6>}
sse.md:   vfmsub213<ssescalarmodesuffix>\t{<round_op6>%3, %2,
%0%{%5%}%{z%}|%0%{%5%}%{z%}, %<iptr>2, %<iptr>3<round_op6>}"
sse.md:   vfnmadd132<ssescalarmodesuffix>\t{<round_op5>%2, %3,
%0%{%4%}|%0%{%4%}, %<iptr>3, %<iptr>2<round_op5>}
sse.md:   vfnmadd213<ssescalarmodesuffix>\t{<round_op5>%3, %2,
%0%{%4%}|%0%{%4%}, %<iptr>2, %<iptr>3<round_op5>}"
sse.md:  "vfnmadd231<ssescalarmodesuffix>\t{<round_op5>%2, %1,
%0%{%4%}|%0%{%4%}, %<iptr>1, %<iptr>2<round_op5>}"
sse.md:   vfnmadd132<ssescalarmodesuffix>\t{<round_op6>%2, %3,
%0%{%5%}%{z%}|%0%{%5%}%{z%}, %<iptr>3, %<iptr>2<round_op6>}
sse.md:   vfnmadd213<ssescalarmodesuffix>\t{<round_op6>%3, %2,
%0%{%5%}%{z%}|%0%{%5%}%{z%}, %<iptr>2, %<iptr>3<round_op6>}"
sse.md:   vfnmsub132<ssescalarmodesuffix>\t{<round_op5>%2, %3,
%0%{%4%}|%0%{%4%}, %<iptr>3, %<iptr>2<round_op5>}
sse.md:   vfnmsub213<ssescalarmodesuffix>\t{<round_op5>%3, %2,
%0%{%4%}|%0%{%4%}, %<iptr>2, %<iptr>3<round_op5>}"
sse.md:  "vfnmsub231<ssescalarmodesuffix>\t{<round_op5>%2, %1,
%0%{%4%}|%0%{%4%}, %<iptr>1, %<iptr>2<round_op5>}"
sse.md:   vfnmsub132<ssescalarmodesuffix>\t{<round_op6>%2, %3,
%0%{%5%}%{z%}|%0%{%5%}%{z%}, %<iptr>3, %<iptr>2<round_op6>}
sse.md:   vfnmsub213<ssescalarmodesuffix>\t{<round_op6>%3, %2,
%0%{%5%}%{z%}|%0%{%5%}%{z%}, %<iptr>2, %<iptr>3<round_op6>}"
sse.md:  "vfmadd<ssescalarmodesuffix>\t{%3, %2, %1, %0|%0, %1, %<iptr>2,
%<iptr>3}"
sse.md:  "vfmsub<ssescalarmodesuffix>\t{%3, %2, %1, %0|%0, %1, %<iptr>2,
%<iptr>3}"
sse.md:  "vfnmadd<ssescalarmodesuffix>\t{%3, %2, %1, %0|%0, %1, %<iptr>2,
%<iptr>3}"
sse.md:  "vfnmsub<ssescalarmodesuffix>\t{%3, %2, %1, %0|%0, %1, %<iptr>2,
%<iptr>3}"

If only one of those needs <iptr> rather than both (and one need to find out
carefully which one), I'd prefer to change that incrementally.

Reply via email to