aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2017-02-06 20:46:51 +0100
committerUros Bizjak <uros@gcc.gnu.org>2017-02-06 20:46:51 +0100
commit6f26f15f136506e40bb7a3a4f1cd5ca171322928 (patch)
tree7e33af951f13b8f811f2fb26879e284f973efef2 /gcc
parentdc06356ab8e628d54dbfe1f4c7a8c39aea6a06aa (diff)
downloadgcc-6f26f15f136506e40bb7a3a4f1cd5ca171322928.zip
gcc-6f26f15f136506e40bb7a3a4f1cd5ca171322928.tar.gz
gcc-6f26f15f136506e40bb7a3a4f1cd5ca171322928.tar.bz2
sse.md (vector modes -> vec_extract* splitter): Use explicit subreg RTX with operand 1.
* 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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/i386/sse.md21
2 files changed, 13 insertions, 14 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 51b4859..a29c20e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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,
diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
index a19c8f2..1654890 100644
--- a/gcc/config/i386/sse.md
+++ b/gcc/config/i386/sse.md
@@ -13669,26 +13669,19 @@
;; 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: