diff options
author | liuhongt <hongtao.liu@intel.com> | 2021-09-22 15:03:36 +0800 |
---|---|---|
committer | liuhongt <hongtao.liu@intel.com> | 2021-09-23 17:05:01 +0800 |
commit | cb8d916eef53327d922f5301bc2ce29735fb7e24 (patch) | |
tree | 1a33c8dd4286c41be0072b643fcc6e335a284be5 | |
parent | 0d39eb28fd2ab00306bd7c0a87b6c0ed615b5d12 (diff) | |
download | gcc-cb8d916eef53327d922f5301bc2ce29735fb7e24.zip gcc-cb8d916eef53327d922f5301bc2ce29735fb7e24.tar.gz gcc-cb8d916eef53327d922f5301bc2ce29735fb7e24.tar.bz2 |
AVX512FP16: Add expander for rint/nearbyinthf2.
gcc/ChangeLog:
* config/i386/i386.md (rinthf2): New expander.
(nearbyinthf2): New expander.
gcc/testsuite/ChangeLog:
* gcc.target/i386/avx512fp16-builtin-round-1.c: Add new testcase.
-rw-r--r-- | gcc/config/i386/i386.md | 22 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/avx512fp16-builtin-round-1.c | 14 |
2 files changed, 36 insertions, 0 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 60d8776..4b13a59 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -18287,6 +18287,17 @@ (set_attr "znver1_decode" "vector") (set_attr "mode" "XF")]) +(define_expand "rinthf2" + [(match_operand:HF 0 "register_operand") + (match_operand:HF 1 "nonimmediate_operand")] + "TARGET_AVX512FP16" +{ + emit_insn (gen_sse4_1_roundhf2 (operands[0], + operands[1], + GEN_INT (ROUND_MXCSR))); + DONE; +}) + (define_expand "rint<mode>2" [(use (match_operand:MODEF 0 "register_operand")) (use (match_operand:MODEF 1 "nonimmediate_operand"))] @@ -18320,6 +18331,17 @@ "TARGET_USE_FANCY_MATH_387 && !flag_trapping_math") +(define_expand "nearbyinthf2" + [(match_operand:HF 0 "register_operand") + (match_operand:HF 1 "nonimmediate_operand")] + "TARGET_AVX512FP16" +{ + emit_insn (gen_sse4_1_roundhf2 (operands[0], + operands[1], + GEN_INT (ROUND_MXCSR | ROUND_NO_EXC))); + DONE; +}) + (define_expand "nearbyint<mode>2" [(use (match_operand:MODEF 0 "register_operand")) (use (match_operand:MODEF 1 "nonimmediate_operand"))] diff --git a/gcc/testsuite/gcc.target/i386/avx512fp16-builtin-round-1.c b/gcc/testsuite/gcc.target/i386/avx512fp16-builtin-round-1.c index 3cab152..a1c6636 100644 --- a/gcc/testsuite/gcc.target/i386/avx512fp16-builtin-round-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512fp16-builtin-round-1.c @@ -25,7 +25,21 @@ f4 (_Float16 x) return __builtin_roundevenf16 (x); } +_Float16 +f5 (_Float16 x) +{ + return __builtin_rintf16 (x); +} + +_Float16 +f6 (_Float16 x) +{ + return __builtin_nearbyintf16 (x); +} + /* { dg-final { scan-assembler-times "vrndscalesh\[ \\t\]+\\\$11\[^\n\r\]*xmm\[0-9\]" 1 } } */ /* { dg-final { scan-assembler-times "vrndscalesh\[ \\t\]+\\\$10\[^\n\r\]*xmm\[0-9\]" 1 } } */ /* { dg-final { scan-assembler-times "vrndscalesh\[ \\t\]+\\\$9\[^\n\r\]*xmm\[0-9\]" 1 } } */ /* { dg-final { scan-assembler-times "vrndscalesh\[ \\t\]+\\\$8\[^\n\r\]*xmm\[0-9\]" 1 } } */ +/* { dg-final { scan-assembler-times "vrndscalesh\[ \\t\]+\\\$4\[^\n\r\]*xmm\[0-9\]" 1 } } */ +/* { dg-final { scan-assembler-times "vrndscalesh\[ \\t\]+\\\$12\[^\n\r\]*xmm\[0-9\]" 1 } } */ |