From c512f3a475837c5f5cd895a8513e3c3c9ba03648 Mon Sep 17 00:00:00 2001 From: uros Date: Sun, 23 Oct 2011 18:43:11 +0000 Subject: [PATCH 1/1] * config/i386/sse.md (sseintprefix): Rename from gthrfirstp. (_maskload): Delete expander. (_maskload) Merge insn pattern from *avx2_maskload and *avx_maskload using V48_AVX mode iterator. Use sseintprefix mode attribute. (_maskstore): Delete expander. (_maskstore) Merge insn pattern from *avx2_maskstore and *avx_maskstore using V48_AVX mode iterator. Use sseintprefix mode attribute. (*avx2_gathersi) Use sseintprefix and ssemodesuffix mode attributes. (*avx2_gatherdi): Ditto. (*avx2_gatherdi256): 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 | 22 +++++++++++- gcc/config/i386/sse.md | 95 ++++++++++++------------------------------------- gcc/testsuite/ChangeLog | 2 +- 3 files changed, 44 insertions(+), 75 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0c884cc3cad..038610281eb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,23 @@ +2011-10-23 Uros Bizjak + + * config/i386/sse.md (sseintprefix): Rename from gthrfirstp. + (_maskload): Delete expander. + (_maskload) Merge insn + pattern from *avx2_maskload and + *avx_maskload using V48_AVX mode + iterator. Use sseintprefix mode attribute. + (_maskstore): Delete expander. + (_maskstore) Merge insn + pattern from *avx2_maskstore and + *avx_maskstore using V48_AVX mode + iterator. Use sseintprefix mode attribute. + (*avx2_gathersi) Use sseintprefix and ssemodesuffix mode + attributes. + (*avx2_gatherdi): Ditto. + (*avx2_gatherdi256): Ditto. + (VI48_AVX2): Remove mode iterator. + (gthrlastfp): Remove mode attribute. + 2011-10-23 Paolo Carlini PR c++/50810 @@ -40,7 +60,7 @@ 2011-10-23 Uros Bizjak PR target/50788 - * config/i386/sse.md (avx2_maskload): + * config/i386/sse.md (_maskload): Remove (match_dup 0). (*avx2_maskload): New insn pattern. (*avx_maskload): Ditto. diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index e8ac0fe2461..dcb2d4ba110 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -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,76 +12268,32 @@ (set_attr "prefix" "vex") (set_attr "mode" "OI")]) -(define_expand "_maskload" - [(set (match_operand:V48_AVX2 0 "register_operand" "") +(define_insn "_maskload" + [(set (match_operand:V48_AVX2 0 "register_operand" "=x") (unspec:V48_AVX2 - [(match_operand: 2 "register_operand" "") - (match_operand:V48_AVX2 1 "memory_operand" "")] - UNSPEC_MASKMOV))] - "TARGET_AVX") - -(define_insn "*avx2_maskload" - [(set (match_operand:VI48_AVX2 0 "register_operand" "=x") - (unspec:VI48_AVX2 - [(match_operand: 1 "register_operand" "x") - (match_operand:VI48_AVX2 2 "memory_operand" "m")] - UNSPEC_MASKMOV))] - "TARGET_AVX2" - "vpmaskmov\t{%2, %1, %0|%0, %1, %2}" - [(set_attr "type" "sselog1") - (set_attr "prefix_extra" "1") - (set_attr "prefix" "vex") - (set_attr "mode" "")]) - -(define_insn "*avx_maskload" - [(set (match_operand:VF 0 "register_operand" "=x") - (unspec:VF - [(match_operand: 1 "register_operand" "x") - (match_operand:VF 2 "memory_operand" "m")] + [(match_operand: 2 "register_operand" "x") + (match_operand:V48_AVX2 1 "memory_operand" "m")] UNSPEC_MASKMOV))] "TARGET_AVX" - "vmaskmov\t{%2, %1, %0|%0, %1, %2}" - [(set_attr "type" "sselog1") - (set_attr "prefix_extra" "1") - (set_attr "prefix" "vex") - (set_attr "mode" "")]) - -(define_expand "_maskstore" - [(set (match_operand:V48_AVX2 0 "memory_operand" "") - (unspec:V48_AVX2 - [(match_operand: 1 "register_operand" "") - (match_operand:V48_AVX2 2 "register_operand" "") - (match_dup 0)] - UNSPEC_MASKMOV))] - "TARGET_AVX") - -(define_insn "*avx2_maskstore" - [(set (match_operand:VI48_AVX2 0 "memory_operand" "=m") - (unspec:VI48_AVX2 - [(match_operand: 1 "register_operand" "x") - (match_operand:VI48_AVX2 2 "register_operand" "x") - (match_dup 0)] - UNSPEC_MASKMOV))] - "TARGET_AVX2" - "vpmaskmov\t{%2, %1, %0|%0, %1, %2}" + "vmaskmov\t{%1, %2, %0|%0, %2, %1}" [(set_attr "type" "sselog1") (set_attr "prefix_extra" "1") (set_attr "prefix" "vex") (set_attr "mode" "")]) -(define_insn "*avx_maskstore" - [(set (match_operand:VF 0 "memory_operand" "=m") - (unspec:VF +(define_insn "_maskstore" + [(set (match_operand:V48_AVX2 0 "memory_operand" "=m") + (unspec:V48_AVX2 [(match_operand: 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\t{%2, %1, %0|%0, %1, %2}" + "vmaskmov\t{%2, %1, %0|%0, %1, %2}" [(set_attr "type" "sselog1") (set_attr "prefix_extra" "1") (set_attr "prefix" "vex") - (set_attr "mode" "")]) + (set_attr "mode" "")]) (define_insn_and_split "avx__" [(set (match_operand:AVX256MODE2P 0 "nonimmediate_operand" "=x,m") @@ -12810,7 +12759,7 @@ UNSPEC_GATHER)) (clobber (match_scratch:VEC_GATHER_MODE 1 "=&x"))] "TARGET_AVX2" - "vgatherd\t{%1, (%3, %4, %p6), %0|%0, (%3, %4, %p6), %1}" + "vgatherd\t{%1, (%3, %4, %p6), %0|%0, (%3, %4, %p6), %1}" [(set_attr "type" "ssemov") (set_attr "prefix" "vex") (set_attr "mode" "")]) @@ -12840,7 +12789,7 @@ UNSPEC_GATHER)) (clobber (match_scratch:AVXMODE48P_DI 1 "=&x"))] "TARGET_AVX2" - "vgatherq\t{%1, (%3, %4, %p6), %0|%0, (%3, %4, %p6), %1}" + "vgatherq\t{%1, (%3, %4, %p6), %0|%0, (%3, %4, %p6), %1}" [(set_attr "type" "ssemov") (set_attr "prefix" "vex") (set_attr "mode" "")]) @@ -12872,7 +12821,7 @@ UNSPEC_GATHER)) (clobber (match_scratch:VI4F_128 1 "=&x"))] "TARGET_AVX2" - "vgatherq\t{%1, (%3, %4, %p6), %0|%0, (%3, %4, %p6), %1}" + "vgatherq\t{%1, (%3, %4, %p6), %0|%0, (%3, %4, %p6), %1}" [(set_attr "type" "ssemov") (set_attr "prefix" "vex") (set_attr "mode" "")]) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 036da06e5e1..0393eec3da9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -12,7 +12,7 @@ 2011-10-23 Uros Bizjak PR target/50788 - * testsuite/gcc.target/i386/pr50788.c: New test. + * gcc.target/i386/pr50788.c: New test. 2011-10-23 Ira Rosen -- 2.11.0