aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorliuhongt <hongtao.liu@intel.com>2022-12-06 13:21:04 +0800
committerliuhongt <hongtao.liu@intel.com>2022-12-07 09:19:47 +0800
commitda7fb32d403759daefefc79dc251d2437c1b638c (patch)
treeb80dcfdbd44838e699b0293d7d2c85e302f04ea1
parentd2e782cb99c3116c389d6a9565678c4ffe267777 (diff)
downloadgcc-da7fb32d403759daefefc79dc251d2437c1b638c.zip
gcc-da7fb32d403759daefefc79dc251d2437c1b638c.tar.gz
gcc-da7fb32d403759daefefc79dc251d2437c1b638c.tar.bz2
Fix ICE due to condition mismatch between expander and define_insn.
ice.i:7:1: error: unrecognizable insn: 7 | } | ^ (insn 7 6 8 2 (set (reg:V2SF 84 [ vect__3.8 ]) (unspec:V2SF [ (reg:V2SF 86 [ vect__1.7 ]) (const_int 11 [0xb]) ] UNSPEC_ROUND)) "ice.i":5:14 -1 (nil)) during RTL pass: vregs gcc/ChangeLog: PR target/107970 * config/i386/mmx.md (btruncv2sf2): Add TARGET_MMX_WITH_SSE to the condition. gcc/testsuite/ChangeLog: * gcc.target/i386/pr107970.c: New test.
-rw-r--r--gcc/config/i386/mmx.md3
-rw-r--r--gcc/testsuite/gcc.target/i386/pr107970.c10
2 files changed, 12 insertions, 1 deletions
diff --git a/gcc/config/i386/mmx.md b/gcc/config/i386/mmx.md
index 63aff287..c3afc6b 100644
--- a/gcc/config/i386/mmx.md
+++ b/gcc/config/i386/mmx.md
@@ -1709,7 +1709,8 @@
[(match_operand:V2SF 1 "register_operand")
(match_dup 2)]
UNSPEC_ROUND))]
- "TARGET_SSE4_1 && !flag_trapping_math"
+ "TARGET_SSE4_1 && !flag_trapping_math
+ && TARGET_MMX_WITH_SSE"
"operands[2] = GEN_INT (ROUND_TRUNC | ROUND_NO_EXC);")
(define_insn "*mmx_roundv2sf2"
diff --git a/gcc/testsuite/gcc.target/i386/pr107970.c b/gcc/testsuite/gcc.target/i386/pr107970.c
new file mode 100644
index 0000000..1fbbb14
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr107970.c
@@ -0,0 +1,10 @@
+/* { dg-do compile { target ia32 } } */
+/* { dg-options "-Ofast -m3dnow -msse4.1" } */
+
+float *foo_p;
+
+void
+foo(float *__restrict q) {
+ foo_p[0] = __builtin_truncf(q[0]);
+ foo_p[1] = __builtin_truncf(q[1]);
+}