gcc/ChangeLog: * config/i386/i386.md (cstore<mode>4): Extend from MODEF to MODEFH.
gcc/testsuite/ChangeLog: * gcc.target/i386/avx512fp16-builtin-fpcompare-1.c: New test. * gcc.target/i386/avx512fp16-builtin-fpcompare-2.c: New test. --- gcc/config/i386/i386.md | 4 +- .../i386/avx512fp16-builtin-fpcompare-1.c | 40 +++++++++++++++++++ .../i386/avx512fp16-builtin-fpcompare-2.c | 29 ++++++++++++++ 3 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/avx512fp16-builtin-fpcompare-1.c create mode 100644 gcc/testsuite/gcc.target/i386/avx512fp16-builtin-fpcompare-2.c diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 247a6e489ef..5f45c4ff583 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -1524,8 +1524,8 @@ (define_expand "cbranch<mode>4" (define_expand "cstore<mode>4" [(set (reg:CC FLAGS_REG) - (compare:CC (match_operand:MODEF 2 "cmp_fp_expander_operand") - (match_operand:MODEF 3 "cmp_fp_expander_operand"))) + (compare:CC (match_operand:MODEFH 2 "cmp_fp_expander_operand") + (match_operand:MODEFH 3 "cmp_fp_expander_operand"))) (set (match_operand:QI 0 "register_operand") (match_operator 1 "ix86_fp_comparison_operator" [(reg:CC FLAGS_REG) diff --git a/gcc/testsuite/gcc.target/i386/avx512fp16-builtin-fpcompare-1.c b/gcc/testsuite/gcc.target/i386/avx512fp16-builtin-fpcompare-1.c new file mode 100644 index 00000000000..62115f15f30 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx512fp16-builtin-fpcompare-1.c @@ -0,0 +1,40 @@ +/* { dg-do compile } */ +/* { dg-options "-Ofast -mavx512fp16" } */ + +int +f1 (_Float16 x, _Float16 y) +{ + return x > y; +} + +int +f2 (_Float16 x, _Float16 y) +{ + return x < y; +} + +/* { dg-final { scan-assembler-times "seta" 2 } } */ + +int +f3 (_Float16 x, _Float16 y) +{ + return x >= y; +} + +int +f4 (_Float16 x, _Float16 y) +{ + return x <= y; +} + +/* { dg-final { scan-assembler-times "setnb" 2 } } */ + +int +f5 (_Float16 x, _Float16 y) +{ + return __builtin_isunordered (x, y); +} + +/* { dg-final { scan-assembler-not "vcvtsh2s\[sd\]" } } */ +/* { dg-final { scan-assembler-times "xorl" 5 } } */ +/* { dg-final { scan-assembler-times "vcomish\[^\n\r\]*xmm\[0-9\]" 4 } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx512fp16-builtin-fpcompare-2.c b/gcc/testsuite/gcc.target/i386/avx512fp16-builtin-fpcompare-2.c new file mode 100644 index 00000000000..150c351e784 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx512fp16-builtin-fpcompare-2.c @@ -0,0 +1,29 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mfpmath=sse -mavx512fp16" } */ + +int +foo (_Float16 y) +{ + return __builtin_isinf (y); +} + +int +foo2 (_Float16 y) +{ + return __builtin_isfinite (y); +} + +int +foo3 (_Float16 y) +{ + return __builtin_signbit(y); +} + +int +foo4 (_Float16 y) +{ + return __builtin_isnormal (y); +} + +/* { dg-final { scan-assembler-not "vcvtsh2s\[sd\]" } } */ +/* { dg-final { scan-assembler-times "vucomish\[^\n\r\]*xmm\[0-9\]" 4 } } */ -- 2.18.1