diff options
-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; +} |