summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2016-01-28 09:43:49 -0800
committerH.J. Lu <hjl.tools@gmail.com>2016-01-28 09:50:06 -0800
commit96d528678b07f069b35a9f81595219f14a9c7892 (patch)
treeb45989f84be48c35fb0b427c8ec8263ff7d412e7
parent7d34463128b2c12480ea33aa81d162a706f8e5d2 (diff)
downloadgcc-hjl/pr69530/master.tar.gz
Call true_regnum to check for SSE registershjl/pr69530/master
LRA may generate (set (subreg:TI (reg/v:V2TI 21 xmm0 [orig:92 v32u128_0 ] [92]) 0) (mem/c:TI (plus:DI (reg/f:DI 7 sp) (const_int -56 [0xffffffffffffffc8])) [2 %sfp+-32 S16 A256])) We should call true_regnum to check for SSE registers. gcc/ PR target/69530 * config/i386/i386.md (TI splitter): Call true_regnum to check for SSE registers. gcc/testsuite/ PR target/69530 * gcc.target/i386/pr69530.c: New test.
-rw-r--r--gcc/config/i386/i386.md3
-rw-r--r--gcc/testsuite/gcc.target/i386/pr69530.c11
2 files changed, 13 insertions, 1 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 79c5f1a740c..a7fafa2266c 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -2119,7 +2119,8 @@
[(set (match_operand:TI 0 "nonimmediate_operand")
(match_operand:TI 1 "general_operand"))]
"reload_completed
- && !SSE_REG_P (operands[0]) && !SSE_REG_P (operands[1])"
+ && !SSE_REGNO_P (true_regnum (operands[0]))
+ && !SSE_REGNO_P (true_regnum (operands[1]))"
[(const_int 0)]
"ix86_split_long_move (operands); DONE;")
diff --git a/gcc/testsuite/gcc.target/i386/pr69530.c b/gcc/testsuite/gcc.target/i386/pr69530.c
new file mode 100644
index 00000000000..9146d1daf53
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr69530.c
@@ -0,0 +1,11 @@
+/* { dg-do compile { target int128 } } */
+/* { dg-options "-O -fno-forward-propagate -fno-split-wide-types -mavx " } */
+
+typedef unsigned __int128 v32u128 __attribute__ ((vector_size (32)));
+
+v32u128
+foo (v32u128 v32u128_0)
+{
+ v32u128_0[0] *= v32u128_0[1];
+ return v32u128_0;
+}