aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorliuhongt <hongtao.liu@intel.com>2025-03-17 22:47:11 -0700
committerliuhongt <hongtao.liu@intel.com>2025-03-19 23:33:34 -0700
commit62a6cafd7f55c6e88a9780b91039257572038535 (patch)
treedccdcd242b761d7ebfeb20183ea32a3c54315da4
parentc3a211c9329cbd4380820e5350f224aa04ba0071 (diff)
downloadgcc-62a6cafd7f55c6e88a9780b91039257572038535.zip
gcc-62a6cafd7f55c6e88a9780b91039257572038535.tar.gz
gcc-62a6cafd7f55c6e88a9780b91039257572038535.tar.bz2
Use ix86_fp_comparison_operator in cbranchbf4 to avoid ICE.
*jcc only supports ix86_fp_comparison_operator for CCFP, when comparison code is LT, there's an ICE. W/o AVX10.2, it's ok since do_compare_rtx_and_jump will transform LT to GT, but w/ AVX10.2 it goes directly into ix86_expand_branch which doesn't handle it. Use ix86_fp_comparison_operator in cbranchbf4. gcc/ChangeLog: PR target/117452 * config/i386/i386.md (cbranchbf4): Use ix86_fp_comparison_operator instead of comparison_operator. gcc/testsuite/ChangeLog: * gcc.target/i386/pr117452.c: New test.
-rw-r--r--gcc/config/i386/i386.md2
-rw-r--r--gcc/testsuite/gcc.target/i386/pr117452.c12
2 files changed, 13 insertions, 1 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index b1cd523..8c7beaf 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -1812,7 +1812,7 @@
(compare:CC (match_operand:BF 1 "cmp_fp_expander_operand")
(match_operand:BF 2 "cmp_fp_expander_operand")))
(set (pc) (if_then_else
- (match_operator 0 "comparison_operator"
+ (match_operator 0 "ix86_fp_comparison_operator"
[(reg:CC FLAGS_REG)
(const_int 0)])
(label_ref (match_operand 3))
diff --git a/gcc/testsuite/gcc.target/i386/pr117452.c b/gcc/testsuite/gcc.target/i386/pr117452.c
new file mode 100644
index 0000000..4042b4f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr117452.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-march=x86-64-v3 -mavx10.2 -Ofast" } */
+
+__bf16 b;
+int x;
+
+void
+foo ()
+{
+ if (x < b)
+ x = 0;
+}