On Fri, Jun 5, 2026 at 12:38 PM Jakub Jelinek <[email protected]> wrote:
>
> Hi!
>
> The following testcase ICEs since r6-6060-gacf93f1edc9 aka PR68991 fix.
> THe problem is that the commit has changed the predicates on
> *<ssse3_avx2>_pmulhrsw<mode>3<mask_name> pattern from nonimmediate_operand
> to vector_operand but kept the old predicates on the corresponding
> expanders. With TARGET_AVX that makes no difference (so I've left
> the <ssse3_avx2>_pmulhrsw<mode>3_mask expander as is, that is only
> TARGET_AVX512BW && TARGET_AVX512VL), but without it if there is unaligned
> memory the expander can just expand it as memory without forcing into REG
> while the pattern will not match.
>
> Ok for trunk and backports?
>
> 2026-06-05 Jakub Jelinek <[email protected]>
>
> PR target/125611
> * config/i386/sse.md (<ssse3_avx2>_pmulhrsw<mode>3, smulhrs<mode>3):
> Use vector_operand instead of nonimmediate_operand.
>
> * gcc.target/i386/ssse3-pr125611.c: New test.
OK.
Thanks,
Uros.
>
> --- gcc/config/i386/sse.md.jj 2026-06-04 08:24:37.600028720 +0200
> +++ gcc/config/i386/sse.md 2026-06-05 12:17:44.943183249 +0200
> @@ -23463,9 +23463,9 @@ (define_expand "<ssse3_avx2>_pmulhrsw<mo
> (lshiftrt:<ssedoublemode>
> (mult:<ssedoublemode>
> (sign_extend:<ssedoublemode>
> - (match_operand:PMULHRSW 1 "nonimmediate_operand"))
> + (match_operand:PMULHRSW 1 "vector_operand"))
> (sign_extend:<ssedoublemode>
> - (match_operand:PMULHRSW 2 "nonimmediate_operand")))
> + (match_operand:PMULHRSW 2 "vector_operand")))
> (const_int 14))
> (match_dup 3))
> (const_int 1))))]
> @@ -23483,9 +23483,9 @@ (define_expand "smulhrs<mode>3"
> (lshiftrt:<ssedoublemode>
> (mult:<ssedoublemode>
> (sign_extend:<ssedoublemode>
> - (match_operand:VI2_AVX2_AVX512BW 1
> "nonimmediate_operand"))
> + (match_operand:VI2_AVX2_AVX512BW 1 "vector_operand"))
> (sign_extend:<ssedoublemode>
> - (match_operand:VI2_AVX2_AVX512BW 2
> "nonimmediate_operand")))
> + (match_operand:VI2_AVX2_AVX512BW 2 "vector_operand")))
> (const_int 14))
> (match_dup 3))
> (const_int 1))))]
> --- gcc/testsuite/gcc.target/i386/ssse3-pr125611.c.jj 2026-06-05
> 12:29:37.571729579 +0200
> +++ gcc/testsuite/gcc.target/i386/ssse3-pr125611.c 2026-06-05
> 12:28:50.773350351 +0200
> @@ -0,0 +1,12 @@
> +/* PR target/125611 */
> +/* { dg-do compile } */
> +/* { dg-options "-O2 -mssse3 -mno-sse4.1" } */
> +
> +typedef __attribute__((__vector_size__(16))) short V;
> +struct __attribute__((__packed__)) { V v[4]; } *u;
> +
> +void
> +foo (void)
> +{
> + u->v[2] &= __builtin_ia32_pmulhrsw128 (u->v[0], u->v[1]);
> +}
>
> Jakub
>