> From: Dipesh Sharma <[email protected]>
> Sent: Monday, July 20, 2026 2:25 AM
> 
> diff --git a/gcc/config/i386/i386-expand.cc b/gcc/config/i386/i386-expand.cc
> index aea2ac7b31a..e9b9b2c9ff5 100644
> --- a/gcc/config/i386/i386-expand.cc
> +++ b/gcc/config/i386/i386-expand.cc
> @@ -13572,6 +13575,12 @@ ix86_expand_args_builtin (const struct
> builtin_description *d,
>               error ("the last argument must be a 5-bit immediate");
>               return const0_rtx;
> 
> +           case CODE_FOR_vunpackbv16qi_mask:
> +           case CODE_FOR_vunpackbv32qi_mask:
> +           case CODE_FOR_vunpackbv64qi_mask:
> +             error ("the last argument must be a 5-bit immediate in range
> 8-63");
> +             return const0_rtx;
> +

We could check more strictly here with more logic here, i.e.,

          if ((icode == CODE_FOR_avx10_2_vunpackbv16qi_mask)
              || (icode == CODE_FOR_avx10_2_vunpackbv32qi_mask)
              || (icode == CODE_FOR_avx10_2_vunpackbv64qi_mask))
            {
              char val = INTVAL (op);
              if ((val & 0xc0)
                  || (!(val & 0x18))
                  || ((val & 0x02) && ((val & 0x1c) != 0x08))
                  || ((val & 0x01) && (((val & 0x1c) >> 2) > 0x4)))
                {
                  error ("the last argument must not use reserved value 
immediate");
                  return const0_rtx;
                }
            }

I put them in default, but maybe putting in case like your handle is better.
You could still keep a less strict operand predicate in pattern since all the 
call
need to pass i386-expand.cc.

> diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
> index 6fd38e9273b..901da35bef9 100644
> --- a/gcc/config/i386/sse.md
> +++ b/gcc/config/i386/sse.md
> @@ -34528,3 +34530,150 @@
> 
> +;; VPMOVSSDB - Symmetric signed saturation narrow (32-bit to 8-bit)
> +
> +(define_mode_iterator VPMOVSSDB_PART [V4SI V8SI])
> +(define_mode_iterator VPMOVSSDB_MODES [V4SI V8SI V16SI])
> +(define_mode_attr pmovssdb_out
> +  [(V4SI "V4QI") (V8SI "V8QI") (V16SI "V16QI")])
> +(define_mode_attr pmovssdb_pad
> +  [(V4SI "V12QI") (V8SI "V8QI")])
> +(define_mode_attr pmovssdbmask
> +  [(V4SI "QI") (V8SI "QI") (V16SI "HI")])
> +
> +(define_insn "*vpmovssdb<mode>"

It is actually a symmetric truncate, could you refer to other truncate
pattern to refine your naming (maybe something like
avx10_2_sym_truncatev4siv4qi2) and patterns? At least make it clearer
to maintain just like I mentioned previously.

Thx,
Haochen

Reply via email to