Hello!

My recent patch [1] exposed problem with avx_h<plusminus_insn>v4df3
AVX pattern. The pattern is defined in a wrong way, since the
components of the result should not cross 128bit lane boundary. This
is the cause of failures is [2]:

FAIL: gcc.target/i386/avx-vhaddpd-256-1.c execution test
FAIL: gcc.target/i386/avx-vhsubpd-256-1.c execution test

2012-03-29  Uros Bizjak  <ubiz...@gmail.com>

        * config/i386/sse.md (avx_h<plusminus_insn>v4df3): Fix results
        crossing 128bit lane boundary.

Patch was bootstrapped and regression tested on x86_64-pc-linux-gnu
AVX target. Patch was committed to mainline, will be committed to all
release branches.

BTW: It looks that the x86 testsuite is not effective enough, these
types of problems should be detected before new patterns are
introduced to the .md files.

[1] http://gcc.gnu.org/ml/gcc-patches/2012-03/msg01819.html
[2] http://gcc.gnu.org/ml/gcc-testresults/2012-03/msg03370.html

Uros.
Index: sse.md
===================================================================
--- sse.md      (revision 185973)
+++ sse.md      (working copy)
@@ -1175,15 +1175,15 @@
                (parallel [(const_int 0)]))
              (vec_select:DF (match_dup 1) (parallel [(const_int 1)])))
            (plusminus:DF
-             (vec_select:DF (match_dup 1) (parallel [(const_int 2)]))
-             (vec_select:DF (match_dup 1) (parallel [(const_int 3)]))))
-         (vec_concat:V2DF
-           (plusminus:DF
              (vec_select:DF
                (match_operand:V4DF 2 "nonimmediate_operand" "xm")
                (parallel [(const_int 0)]))
-             (vec_select:DF (match_dup 2) (parallel [(const_int 1)])))
+             (vec_select:DF (match_dup 2) (parallel [(const_int 1)]))))
+         (vec_concat:V2DF
            (plusminus:DF
+             (vec_select:DF (match_dup 1) (parallel [(const_int 2)]))
+             (vec_select:DF (match_dup 1) (parallel [(const_int 3)])))
+           (plusminus:DF
              (vec_select:DF (match_dup 2) (parallel [(const_int 2)]))
              (vec_select:DF (match_dup 2) (parallel [(const_int 3)]))))))]
   "TARGET_AVX"

Reply via email to