https://gcc.gnu.org/bugzilla/show_bug.cgi?id=127177
Hongtao Liu <liuhongt at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |liuhongt at gcc dot gnu.org
--- Comment #5 from Hongtao Liu <liuhongt at gcc dot gnu.org> ---
gcc/doc/generic.texi:1629-1641 — the UNLT_EXPR / UNLE_EXPR / UNGT_EXPR /
UNGE_EXPR / UNEQ_EXPR entry:
These nodes represent the unordered comparison operators. […] For example,
UNLT_EXPR returns true if either operand is an IEEE NaN or the first operand is
less than the second. **All these operations are guaranteed not to generate a
floating point exception.**
Assume rtx unge should be same as UNGE_EXPR, but ix86_print_operand generate
nlt for unge, it should be nlt_uq.
4499 /* FALLTHRU */
4500 case UNGE:
4501 fputs ("nlt", file);
4502 break;
4503 case GT:
4504 if (TARGET_AVX)
4505 {
4506 fputs ("gt", file);
4507 break;
4508 }
4509 /* FALLTHRU */
4510 case UNGT:
4511 fputs ("nle", file);
4512 break;
4513 case ORDERED:
4514 fputs ("ord", file);
4515 break;
4516 default:
pre-avx x86 doesn't support nlt_uq, it means below operator may need to be
adjusted by swaping unge qith ge, ungt with gt?
1561(define_predicate "sse_comparison_operator"
1562 (ior (match_code "eq,ne,lt,le,unordered,unge,ungt,ordered")
1563 (and (match_test "TARGET_AVX")
1564 (match_code "ge,gt,uneq,unle,unlt,ltgt"))))