diff options
author | liuhongt <hongtao.liu@intel.com> | 2025-03-17 22:47:11 -0700 |
---|---|---|
committer | liuhongt <hongtao.liu@intel.com> | 2025-03-19 23:33:34 -0700 |
commit | 62a6cafd7f55c6e88a9780b91039257572038535 (patch) | |
tree | dccdcd242b761d7ebfeb20183ea32a3c54315da4 | |
parent | c3a211c9329cbd4380820e5350f224aa04ba0071 (diff) | |
download | gcc-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.md | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr117452.c | 12 |
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; +} |