sse.md (vector modes -> vec_extract* splitter): Use explicit subreg RTX with operand 1.
authorUros Bizjak <ubizjak@gmail.com>
Mon, 6 Feb 2017 19:46:51 +0000 (20:46 +0100)
committerUros Bizjak <uros@gcc.gnu.org>
Mon, 6 Feb 2017 19:46:51 +0000 (20:46 +0100)
* config/i386/sse.md (vector modes -> vec_extract* splitter): Use
explicit subreg RTX with operand 1.  Use VECTOR_MODE_P predicate
to simplify split condition.

From-SVN: r245217

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

index 51b48591a719659bf8f7821f7f91354c7388d364..a29c20e35cae3ebbfa606ddde347be1015ee9a9e 100644 (file)
@@ -1,3 +1,9 @@
+2017-02-06  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/sse.md (vector modes -> vec_extract* splitter): Use
+       explicit subreg RTX with operand 1.  Use VECTOR_MODE_P predicate
+       to simplify split condition.
+
 2017-02-06  Jakub Jelinek  <jakub@redhat.com>
 
        * omp-expand.c (oxpand_omp_atomic_fetch_op,
index a19c8f2bc2e05d6ff80750f703047907c8ef88ad..1654890fc4e0dc832f0d248a348b9e97f2f9cc87 100644 (file)
 ;; vector modes into vec_extract*.
 (define_split
   [(set (match_operand:SWI48x 0 "nonimmediate_operand")
-       (match_operand:SWI48x 1 "register_operand"))]
+       (subreg:SWI48x (match_operand 1 "register_operand") 0))]
   "can_create_pseudo_p ()
-   && SUBREG_P (operands[1])
-   && REG_P (SUBREG_REG (operands[1]))
-   && (GET_MODE_CLASS (GET_MODE (SUBREG_REG (operands[1]))) == MODE_VECTOR_INT
-       || (GET_MODE_CLASS (GET_MODE (SUBREG_REG (operands[1])))
-          == MODE_VECTOR_FLOAT))
-   && SUBREG_BYTE (operands[1]) == 0
-   && TARGET_SSE
-   && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (operands[1]))) == 16
-       || (GET_MODE_SIZE (GET_MODE (SUBREG_REG (operands[1]))) == 32
-          && TARGET_AVX)
-       || (GET_MODE_SIZE (GET_MODE (SUBREG_REG (operands[1]))) == 64
-          && TARGET_AVX512F))
+   && REG_P (operands[1])
+   && VECTOR_MODE_P (GET_MODE (operands[1]))
+   && ((TARGET_SSE && GET_MODE_SIZE (GET_MODE (operands[1])) == 16)
+       || (TARGET_AVX && GET_MODE_SIZE (GET_MODE (operands[1])) == 32)
+       || (TARGET_AVX512F && GET_MODE_SIZE (GET_MODE (operands[1])) == 64))
    && (<MODE>mode == SImode || TARGET_64BIT || MEM_P (operands[0]))"
   [(set (match_dup 0) (vec_select:SWI48x (match_dup 1)
                                         (parallel [(const_int 0)])))]
 {
   rtx tmp;
-  operands[1] = SUBREG_REG (operands[1]);
+
   switch (GET_MODE_SIZE (GET_MODE (operands[1])))
     {
     case 64: