diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2016-01-28 09:43:49 -0800 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2016-01-28 09:50:06 -0800 |
commit | 96d528678b07f069b35a9f81595219f14a9c7892 (patch) | |
tree | b45989f84be48c35fb0b427c8ec8263ff7d412e7 | |
parent | 7d34463128b2c12480ea33aa81d162a706f8e5d2 (diff) | |
download | gcc-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.md | 3 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr69530.c | 11 |
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; +} |