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.
This commit is contained in:
liuhongt 2025-03-17 22:47:11 -07:00
parent c3a211c932
commit 62a6cafd7f
2 changed files with 13 additions and 1 deletions

View file

@ -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))

View file

@ -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;
}