aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2019-08-02 17:46:02 +0200
committerUros Bizjak <uros@gcc.gnu.org>2019-08-02 17:46:02 +0200
commitf04bffb04a4dae3e1a1f87f53c4591fc48bb8058 (patch)
treeed6e12926b05644e4d6207c30b3ba18fd12b8d2f /gcc
parent06b4c6d2732c76d8660af53d52c0092505e87ea7 (diff)
downloadgcc-f04bffb04a4dae3e1a1f87f53c4591fc48bb8058.zip
gcc-f04bffb04a4dae3e1a1f87f53c4591fc48bb8058.tar.gz
gcc-f04bffb04a4dae3e1a1f87f53c4591fc48bb8058.tar.bz2
re PR tree-optimization/91201 (SIMD not generated for horizontal sum of bytes in array)
PR target/91201 * config/i386/sse.md (*vec_extractv16qi_zext): New insn pattern. testsuite/ChangeLog: PR target/91201 * gcc.target/i386/sse4_1-pr91201.c: New test. From-SVN: r274018
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/i386/sse.md19
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/i386/sse4_1-pr91201.c12
4 files changed, 41 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6c1372e..e63e09d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2019-08-02 Uroš Bizjak <ubizjak@gmail.com>
+
+ PR target/91201
+ * config/i386/sse.md (*vec_extractv16qi_zext): New insn pattern.
+
2019-08-02 Alexander Monakov <amonakov@ispras.ru>
* tree-ssa-loop-im.c (sort_bbs_in_loop_postorder_cmp): Simplify casts
diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
index 56a8915..3391724 100644
--- a/gcc/config/i386/sse.md
+++ b/gcc/config/i386/sse.md
@@ -14970,6 +14970,25 @@
(set_attr "prefix" "maybe_vex")
(set_attr "mode" "TI")])
+(define_insn "*vec_extractv16qi_zext"
+ [(set (match_operand:HI 0 "register_operand" "=r,r")
+ (zero_extend:HI
+ (vec_select:QI
+ (match_operand:V16QI 1 "register_operand" "x,v")
+ (parallel
+ [(match_operand:SI 2 "const_0_to_15_operand")]))))]
+ "TARGET_SSE4_1"
+ "@
+ %vpextrb\t{%2, %1, %k0|%k0, %1, %2}
+ vpextrb\t{%2, %1, %k0|%k0, %1, %2}"
+ [(set_attr "isa" "*,avx512bw")
+ (set_attr "type" "sselog1")
+ (set_attr "prefix_data16" "1")
+ (set_attr "prefix_extra" "1")
+ (set_attr "length_immediate" "1")
+ (set_attr "prefix" "maybe_vex")
+ (set_attr "mode" "TI")])
+
(define_insn "*vec_extract<mode>_mem"
[(set (match_operand:<ssescalarmode> 0 "register_operand" "=r")
(vec_select:<ssescalarmode>
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 00d664f..45d941d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2019-08-02 Uroš Bizjak <ubizjak@gmail.com>
+
+ PR target/91201
+ * gcc.target/i386/sse4_1-pr91201.c: New test.
+
2019-08-02 Marek Polacek <polacek@redhat.com>
PR c++/91230 - wrong error with __PRETTY_FUNCTION__ and generic lambda.
diff --git a/gcc/testsuite/gcc.target/i386/sse4_1-pr91201.c b/gcc/testsuite/gcc.target/i386/sse4_1-pr91201.c
new file mode 100644
index 0000000..095d18e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/sse4_1-pr91201.c
@@ -0,0 +1,12 @@
+/* PR tree-optimization/91201 */
+/* { dg-do compile } */
+/* { dg-options "-Os -msse4.1 -masm=att" } */
+/* { dg-final { scan-assembler-not "\tmovzb(w|l)" } } */
+
+typedef unsigned char V __attribute__((vector_size (16)));
+
+unsigned short
+foo (V x)
+{
+ return x[0];
+}