Hello!

2011-10-23  Uros Bizjak  <ubiz...@gmail.com>

        * config/i386/sse.md (sseintprefix): Rename from gthrfirstp.
        (<avx_avx2>_maskload<ssemodesuffix><avxsizesuffix>): Delete expander.
        (<avx_avx2>_maskload<ssemodesuffix><avxsizesuffix>) Merge insn
        pattern from *avx2_maskload<ssemodesuffix><avxsizesuffix> and
        *avx_maskload<ssemodesuffix><avxsizesuffix> using V48_AVX mode
        iterator.  Use sseintprefix mode attribute.
        (<avx_avx2>_maskstore<ssemodesuffix><avxsizesuffix>): Delete expander.
        (<avx_avx2>_maskstore<ssemodesuffix><avxsizesuffix>) Merge insn
        pattern from *avx2_maskstore<ssemodesuffix><avxsizesuffix> and
        *avx_maskstore<ssemodesuffix><avxsizesuffix> using V48_AVX mode
        iterator.  Use sseintprefix mode attribute.
        (*avx2_gathersi<mode>) Use sseintprefix and ssemodesuffix mode
        attributes.
        (*avx2_gatherdi<mode>): Ditto.
        (*avx2_gatherdi<mode>256): Ditto.
        (VI48_AVX2): Remove mode iterator.
        (gthrlastfp): Remove mode attribute.

Bootstrapped and regression tested on x86_64-pc-linux-gnu, committed
to mainline SVN.

Uros.
Index: sse.md
===================================================================
--- sse.md      (revision 180339)
+++ sse.md      (working copy)
@@ -125,9 +125,6 @@
    (V8SI "TARGET_AVX2") V4SI
    (V4DI "TARGET_AVX2") V2DI])
 
-(define_mode_iterator VI48_AVX2
-  [V8SI V4SI V4DI V2DI])
-
 (define_mode_iterator VI4SD_AVX2
   [V4SI V4DI])
 
@@ -246,8 +243,7 @@
    (V8SI "V8SI") (V4DI "V4DI")
    (V4SI "V4SI") (V2DI "V2DI")
    (V16HI "V16HI") (V8HI "V8HI")
-   (V32QI "V32QI") (V16QI "V16QI")
-  ])
+   (V32QI "V32QI") (V16QI "V16QI")])
 
 ;; Mapping of vector modes to a vector mode of double size
 (define_mode_attr ssedoublevecmode
@@ -277,6 +273,13 @@
    (V8SF "8") (V4DF "4")
    (V4SF "4") (V2DF "2")])
 
+;; SSE prefix for integer vector modes
+(define_mode_attr sseintprefix
+  [(V2DI "p") (V2DF "")
+   (V4DI "p") (V4DF "")
+   (V4SI "p") (V4SF "")
+   (V8SI "p") (V8SF "")])
+
 ;; SSE scalar suffix for vector modes
 (define_mode_attr ssescalarmodesuffix
   [(SF "ss") (DF "sd")
@@ -319,16 +322,6 @@
                       (V4DI "V4DI") (V4DF "V4DI")
                       (V4SI "V2DI") (V4SF "V2DI")
                       (V8SI "V4DI") (V8SF "V4DI")])
-(define_mode_attr gthrfirstp
-                     [(V2DI "p") (V2DF "")
-                      (V4DI "p") (V4DF "")
-                      (V4SI "p") (V4SF "")
-                      (V8SI "p") (V8SF "")])
-(define_mode_attr gthrlastp
-                     [(V2DI "q") (V2DF "pd")
-                      (V4DI "q") (V4DF "pd")
-                      (V4SI "d") (V4SF "ps")
-                      (V8SI "d") (V8SF "ps")])
 
 (define_mode_iterator FMAMODE [SF DF V4SF V2DF V8SF V4DF])
 
@@ -12275,77 +12268,33 @@
    (set_attr "prefix" "vex")
    (set_attr "mode" "OI")])
 
-(define_expand "<avx_avx2>_maskload<ssemodesuffix><avxsizesuffix>"
-  [(set (match_operand:V48_AVX2 0 "register_operand" "")
+(define_insn "<avx_avx2>_maskload<ssemodesuffix><avxsizesuffix>"
+  [(set (match_operand:V48_AVX2 0 "register_operand" "=x")
        (unspec:V48_AVX2
-         [(match_operand:<sseintvecmode> 2 "register_operand" "")
-          (match_operand:V48_AVX2 1 "memory_operand" "")]
+         [(match_operand:<sseintvecmode> 2 "register_operand" "x")
+          (match_operand:V48_AVX2 1 "memory_operand" "m")]
          UNSPEC_MASKMOV))]
-  "TARGET_AVX")
-
-(define_insn "*avx2_maskload<ssemodesuffix><avxsizesuffix>"
-  [(set (match_operand:VI48_AVX2 0 "register_operand" "=x")
-       (unspec:VI48_AVX2
-         [(match_operand:<sseintvecmode> 1 "register_operand" "x")
-          (match_operand:VI48_AVX2 2 "memory_operand" "m")]
-         UNSPEC_MASKMOV))]
-  "TARGET_AVX2"
-  "vpmaskmov<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}"
+  "TARGET_AVX"
+  "v<sseintprefix>maskmov<ssemodesuffix>\t{%1, %2, %0|%0, %2, %1}"
   [(set_attr "type" "sselog1")
    (set_attr "prefix_extra" "1")
    (set_attr "prefix" "vex")
    (set_attr "mode" "<sseinsnmode>")])
 
-(define_insn "*avx_maskload<ssemodesuffix><avxsizesuffix>"
-  [(set (match_operand:VF 0 "register_operand" "=x")
-       (unspec:VF
-         [(match_operand:<sseintvecmode> 1 "register_operand" "x")
-          (match_operand:VF 2 "memory_operand" "m")]
-         UNSPEC_MASKMOV))]
-  "TARGET_AVX"
-  "vmaskmov<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}"
-  [(set_attr "type" "sselog1")
-   (set_attr "prefix_extra" "1")
-   (set_attr "prefix" "vex")
-   (set_attr "mode" "<MODE>")])
-
-(define_expand "<avx_avx2>_maskstore<ssemodesuffix><avxsizesuffix>"
-  [(set (match_operand:V48_AVX2 0 "memory_operand" "")
+(define_insn "<avx_avx2>_maskstore<ssemodesuffix><avxsizesuffix>"
+  [(set (match_operand:V48_AVX2 0 "memory_operand" "=m")
        (unspec:V48_AVX2
-         [(match_operand:<sseintvecmode> 1 "register_operand" "")
-          (match_operand:V48_AVX2 2 "register_operand" "")
-          (match_dup 0)]
-         UNSPEC_MASKMOV))]
-  "TARGET_AVX")
-
-(define_insn "*avx2_maskstore<ssemodesuffix><avxsizesuffix>"
-  [(set (match_operand:VI48_AVX2 0 "memory_operand" "=m")
-       (unspec:VI48_AVX2
          [(match_operand:<sseintvecmode> 1 "register_operand" "x")
-          (match_operand:VI48_AVX2 2 "register_operand" "x")
+          (match_operand:V48_AVX2 2 "register_operand" "x")
           (match_dup 0)]
          UNSPEC_MASKMOV))]
-  "TARGET_AVX2"
-  "vpmaskmov<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}"
+  "TARGET_AVX"
+  "v<sseintprefix>maskmov<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}"
   [(set_attr "type" "sselog1")
    (set_attr "prefix_extra" "1")
    (set_attr "prefix" "vex")
    (set_attr "mode" "<sseinsnmode>")])
 
-(define_insn "*avx_maskstore<ssemodesuffix><avxsizesuffix>"
-  [(set (match_operand:VF 0 "memory_operand" "=m")
-       (unspec:VF
-         [(match_operand:<sseintvecmode> 1 "register_operand" "x")
-          (match_operand:VF 2 "register_operand" "x")
-          (match_dup 0)]
-         UNSPEC_MASKMOV))]
-  "TARGET_AVX"
-  "vmaskmov<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}"
-  [(set_attr "type" "sselog1")
-   (set_attr "prefix_extra" "1")
-   (set_attr "prefix" "vex")
-   (set_attr "mode" "<MODE>")])
-
 (define_insn_and_split "avx_<castmode><avxsizesuffix>_<castmode>"
   [(set (match_operand:AVX256MODE2P 0 "nonimmediate_operand" "=x,m")
        (unspec:AVX256MODE2P
@@ -12810,7 +12759,7 @@
          UNSPEC_GATHER))
    (clobber (match_scratch:VEC_GATHER_MODE 1 "=&x"))]
   "TARGET_AVX2"
-  "v<gthrfirstp>gatherd<gthrlastp>\t{%1, (%3, %4, %p6), %0|%0, (%3, %4, %p6), 
%1}"
+  "v<sseintprefix>gatherd<ssemodesuffix>\t{%1, (%3, %4, %p6), %0|%0, (%3, %4, 
%p6), %1}"
   [(set_attr "type" "ssemov")
    (set_attr "prefix" "vex")
    (set_attr "mode" "<sseinsnmode>")])
@@ -12840,7 +12789,7 @@
          UNSPEC_GATHER))
    (clobber (match_scratch:AVXMODE48P_DI 1 "=&x"))]
   "TARGET_AVX2"
-  "v<gthrfirstp>gatherq<gthrlastp>\t{%1, (%3, %4, %p6), %0|%0, (%3, %4, %p6), 
%1}"
+  "v<sseintprefix>gatherq<ssemodesuffix>\t{%1, (%3, %4, %p6), %0|%0, (%3, %4, 
%p6), %1}"
   [(set_attr "type" "ssemov")
    (set_attr "prefix" "vex")
    (set_attr "mode" "<sseinsnmode>")])
@@ -12872,7 +12821,7 @@
          UNSPEC_GATHER)) 
    (clobber (match_scratch:VI4F_128 1 "=&x"))]
   "TARGET_AVX2"
-  "v<gthrfirstp>gatherq<gthrlastp>\t{%1, (%3, %4, %p6), %0|%0, (%3, %4, %p6), 
%1}"
+  "v<sseintprefix>gatherq<ssemodesuffix>\t{%1, (%3, %4, %p6), %0|%0, (%3, %4, 
%p6), %1}"
   [(set_attr "type" "ssemov")
    (set_attr "prefix" "vex")
    (set_attr "mode" "<sseinsnmode>")])

Reply via email to