]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
i386: Fix *vec_extractv2sf_1 and *vec_extractv2sf_1 shufps alternative [PR93828]
authorUros Bizjak <ubizjak@gmail.com>
Thu, 20 Feb 2020 20:58:57 +0000 (21:58 +0100)
committerUros Bizjak <ubizjak@gmail.com>
Thu, 20 Feb 2020 20:58:57 +0000 (21:58 +0100)
shufps moves two of the four packed single-precision floating-point values
from *destination* operand (first operand) into the low quadword of the
destination operand.  Match source operand to the destination.

PR target/93828
* config/i386/mmx.md (*vec_extractv2sf_1): Match source operand
to destination operand for shufps alternative.
(*vec_extractv2si_1): Ditto.

gcc/ChangeLog
gcc/config/i386/mmx.md

index 9680a1afb4058f60f3a722c0c575275f95699f4f..a9042799a97da050d5cad37934b99cda7338a56f 100644 (file)
@@ -1,3 +1,10 @@
+2020-02-20  Uroš Bizjak  <ubizjak@gmail.com>
+
+       PR target/93828
+       * config/i386/mmx.md (*vec_extractv2sf_1): Match source operand
+       to destination operand for shufps alternative.
+       (*vec_extractv2si_1): Ditto.
+
 2020-02-20  H.J. Lu  <hongjiu.lu@intel.com>
 
        Backport from master
index b566cc8002023cd489f16d04979373b37741264d..15e4c84b54fa2d42690cbbf2462cbac68af100bb 100644 (file)
 (define_insn "*vec_extractv2sf_1"
   [(set (match_operand:SF 0 "nonimmediate_operand"     "=y,x,x,y,x,f,r")
        (vec_select:SF
-         (match_operand:V2SF 1 "nonimmediate_operand" " 0,x,x,o,o,o,o")
+         (match_operand:V2SF 1 "nonimmediate_operand" " 0,x,0,o,o,o,o")
          (parallel [(const_int 1)])))]
   "TARGET_MMX && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
   "@
    punpckhdq\t%0, %0
    %vmovshdup\t{%1, %0|%0, %1}
-   shufps\t{$0xe5, %1, %0|%0, %1, 0xe5}
+   shufps\t{$0xe5, %0, %0|%0, %0, 0xe5}
    #
    #
    #
 (define_insn "*vec_extractv2si_1"
   [(set (match_operand:SI 0 "nonimmediate_operand"     "=y,x,x,y,x,r")
        (vec_select:SI
-         (match_operand:V2SI 1 "nonimmediate_operand" " 0,x,x,o,o,o")
+         (match_operand:V2SI 1 "nonimmediate_operand" " 0,x,0,o,o,o")
          (parallel [(const_int 1)])))]
   "TARGET_MMX && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
   "@
    punpckhdq\t%0, %0
    %vpshufd\t{$0xe5, %1, %0|%0, %1, 0xe5}
-   shufps\t{$0xe5, %1, %0|%0, %1, 0xe5}
+   shufps\t{$0xe5, %0, %0|%0, %0, 0xe5}
    #
    #
    #"