]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
i386: Extend MOVNTDQ support to cover various packed integer types
authorXiaomei Xue <xuexiaomei@hygon.cn>
Thu, 4 Jun 2026 02:42:12 +0000 (02:42 +0000)
committerKewen Lin <linkw@gcc.gnu.org>
Thu, 4 Jun 2026 02:42:12 +0000 (02:42 +0000)
As the associated mode iterator VI8 shows, MOVNTDQ is only used for
*QI and *DI packed integer modes, this patch extends it to cover *HI
and *SI packed integer modes.

gcc/ChangeLog:

* config/i386/sse.md (define_mode_attr sse2): Add V4SI/V8SI/V16SI/
V8HI/V16HI/V32HI.
(<sse2>_movnt<mode>): Change mode iterator from VI8 to VI_AVX_AVX512F.
(define_mode_iterator STORENT_MODE): Add V4SI/V8SI/V16SI/V8HI/V16HI/
V32HI/V16QI/V32QI/V64QI.

Signed-off-by: Xiaomei Xue <xuexiaomei@hygon.cn>
gcc/config/i386/sse.md

index 21773384973f25ae30e1bfd42cdc6f534e45772c..a632e256e9153ca27171d0bcd3ac393c751f0939 100644 (file)
 
 (define_mode_attr sse2
   [(V16QI "sse2") (V32QI "avx") (V64QI "avx512f")
+   (V8HI "sse2") (V16HI "avx") (V32HI "avx512f")
+   (V4SI "sse2") (V8SI "avx") (V16SI "avx512f")
    (V2DI "sse2") (V4DI "avx") (V8DI "avx512f")])
 
 (define_mode_attr sse3
    (set_attr "mode" "<MODE>")])
 
 (define_insn "<sse2>_movnt<mode>"
-  [(set (match_operand:VI8 0 "memory_operand" "=m")
-       (unspec:VI8 [(match_operand:VI8 1 "register_operand" "v")]
-                   UNSPEC_MOVNT))]
+  [(set (match_operand:VI_AVX_AVX512F 0 "memory_operand" "=m")
+       (unspec:VI_AVX_AVX512F
+         [(match_operand:VI_AVX_AVX512F 1 "register_operand" "v")]
+         UNSPEC_MOVNT))]
   "TARGET_SSE2"
   "%vmovntdq\t{%1, %0|%0, %1}"
   [(set_attr "type" "ssecvt")
 (define_mode_iterator STORENT_MODE
   [(DI "TARGET_SSE2 && TARGET_64BIT") (SI "TARGET_SSE2")
    (SF "TARGET_SSE4A") (DF "TARGET_SSE4A")
-   (V8DI "TARGET_AVX512F") (V4DI "TARGET_AVX") (V2DI "TARGET_SSE2")
    (V16SF "TARGET_AVX512F") (V8SF "TARGET_AVX") V4SF
-   (V8DF "TARGET_AVX512F") (V4DF "TARGET_AVX") (V2DF "TARGET_SSE2")])
+   (V8DF "TARGET_AVX512F") (V4DF "TARGET_AVX") (V2DF "TARGET_SSE2")
+   (V8DI "TARGET_AVX512F") (V4DI "TARGET_AVX") (V2DI "TARGET_SSE2")
+   (V16SI "TARGET_AVX512F") (V8SI "TARGET_AVX") (V4SI "TARGET_SSE2")
+   (V32HI "TARGET_AVX512F") (V16HI "TARGET_AVX") (V8HI "TARGET_SSE2")
+   (V64QI "TARGET_AVX512F") (V32QI "TARGET_AVX") (V16QI "TARGET_SSE2")])
 
 (define_expand "storent<mode>"
   [(set (match_operand:STORENT_MODE 0 "memory_operand")