Uros Bizjak <[email protected]> 于2026年9月11日周五 17:22写道: > > On Fri, Sep 11, 2026 at 10:50 AM Hongyu Wang <[email protected]> wrote: > > > > Hi, > > > > The unordered compares (UNLT, UNLE, UNGT, UNGE and UNEQ) must not raise > > FE_INVALID on a quiet NaN. AVX and AVX512 have an imm8 encoding for the > > quiet _UQ predicate of each, so just select it. > > > > Legacy SSE2 has only 8 predicates and can express UNGE/UNGT/UNLT/UNLE > > only as the signaling NLT/NLE. So reject those four codes in the packed > > FP vec_cmp expanders under trapping math and NaNs are honored. > > > > Bootstrapped & regtested under x86_64-pc-linux-gnu. Ok for trunk? > > > > gcc/ChangeLog: > > > > PR target/127177 > > * config/i386/i386-expand.cc (ix86_fp_cmp_code_to_pcmp_immediate): > > Return the _UQ predicate immediates for UNLE, UNLT, UNGE, UNGT and > > UNEQ. > > * config/i386/i386.cc (ix86_print_operand):Likewise to print the > > _uq suffixed AVX predicates for these codes. > > * config/i386/predicates.md (ix86_fp_vec_cmp_operator): New > > predicate. > > * config/i386/sse.md (vec_cmp<mode><sseintvecmodelower>): Use the > > new predicate for the VF_128 compare. > > * config/i386/mmx.md (vec_cmpv2sfv2si): Likewise. > > > > gcc/testsuite/ChangeLog: > > > > PR target/127177 > > * gcc.target/i386/pr127177-1.c: New test. > > * gcc.target/i386/pr127177-2.c: Likewise. > > * gcc.target/i386/pr127177-3.c: Likewise. > > * gcc.target/i386/pr127177-4.c: Likewise. > > * gcc.target/i386/pr127177-5.c: Likewise. > > > +;; SSE2 doesn't have quiet vector compare for LT/LE/GT/GE, so > > +;; disable them under trapping-math or HONOR_NANS. > > + > > +(define_predicate "ix86_fp_vec_cmp_operator" > > + (and (match_operand 0 "comparison_operator") > > + (ior (not (match_code "unlt,unle,ungt,unge")) > > + (match_test "TARGET_AVX > > + || !flag_trapping_math > > + || !HONOR_NANS (GET_MODE (XEXP (op, 0)))")))) > > FYI, binary operators (ior, and, ...) can have multiple inputs in > define_predicate, so: > > (ior (not (match_code "...")) > (match_test "TARGET_AVX") > (not (match_test "flag_trapping_math")) > (not (match_test "HONOR_NANS (...)"))) >
Indeed, updated in the attached patch. > Uros.
0001-i386-Don-t-turn-quiet-FP-comparisons-into-signaling-.patch
Description: Binary data
