summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;
+}