OSDN Git Service

* config/i386/sse.md (sseintprefix): Rename from gthrfirstp.
authoruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 23 Oct 2011 18:43:11 +0000 (18:43 +0000)
committeruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 23 Oct 2011 18:43:11 +0000 (18:43 +0000)
(<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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180344 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/i386/sse.md
gcc/testsuite/ChangeLog

index 0c884cc..0386102 100644 (file)
@@ -1,3 +1,23 @@
+2011-10-23  Uros Bizjak  <ubizjak@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.
+
 2011-10-23  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/50810
@@ -40,7 +60,7 @@
 2011-10-23  Uros Bizjak  <ubizjak@gmail.com>
 
        PR target/50788
-       * config/i386/sse.md (avx2_maskload<ssemodesuffix><avxsizesuffix>):
+       * config/i386/sse.md (<avx_avx2>_maskload<ssemodesuffix><avxsizesuffix>):
        Remove (match_dup 0).
        (*avx2_maskload<ssemodesuffix><avxsizesuffix>): New insn pattern.
        (*avx_maskload<ssemodesuffix><avxsizesuffix>): Ditto.
index e8ac0fe..dcb2d4b 100644 (file)
    (V8SI "TARGET_AVX2") V4SI
    (V4DI "TARGET_AVX2") V2DI])
 
-(define_mode_iterator VI48_AVX2
-  [V8SI V4SI V4DI V2DI])
-
 (define_mode_iterator VI4SD_AVX2
   [V4SI V4DI])
 
    (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
    (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")
                       (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])
 
    (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" "")]
-         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}"
-  [(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")]
+         [(match_operand:<sseintvecmode> 2 "register_operand" "x")
+          (match_operand:V48_AVX2 1 "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" "")
-       (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_dup 0)]
-         UNSPEC_MASKMOV))]
-  "TARGET_AVX2"
-  "vpmaskmov<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}"
+  "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_maskstore<ssemodesuffix><avxsizesuffix>"
-  [(set (match_operand:VF 0 "memory_operand" "=m")
-       (unspec:VF
+(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" "x")
-          (match_operand:VF 2 "register_operand" "x")
+          (match_operand:V48_AVX2 2 "register_operand" "x")
           (match_dup 0)]
          UNSPEC_MASKMOV))]
   "TARGET_AVX"
-  "vmaskmov<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}"
+  "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" "<MODE>")])
+   (set_attr "mode" "<sseinsnmode>")])
 
 (define_insn_and_split "avx_<castmode><avxsizesuffix>_<castmode>"
   [(set (match_operand:AVX256MODE2P 0 "nonimmediate_operand" "=x,m")
          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>")])
          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>")])
          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>")])
index 036da06..0393eec 100644 (file)
@@ -12,7 +12,7 @@
 2011-10-23  Uros Bizjak  <ubizjak@gmail.com>
 
        PR target/50788
-       * testsuite/gcc.target/i386/pr50788.c: New test.
+       * gcc.target/i386/pr50788.c: New test.
 
 2011-10-23  Ira Rosen  <ira.rosen@linaro.org>