-
- Downloads
LoongArch: Add ftint{,rm,rp}.{w,l}.{s,d} instructions
This allows to optimize the following builtins if -fno-math-errno: - __builtin_lrint{,f} - __builtin_lfloor{,f} - __builtin_lceil{,f} Inspired by https://gcc.gnu.org/pipermail/gcc-patches/2022-November/605287.html. ANYFI is added so the compiler won't try ftint.l.s if -mfpu=32. If we simply used GPR here an ICE would be triggered with __builtin_lrintf and -mfpu=32. ftint{rm,rp} instructions may raise inexact exception, so they can't be used if -fno-trapping-math -fno-fp-int-builtin-inexact. Note that the .w.{s,d} variants are not tested because we don't support ILP32 for now. gcc/ChangeLog: * config/loongarch/loongarch.md (UNSPEC_FTINT): New unspec. (UNSPEC_FTINTRM): Likewise. (UNSPEC_FTINTRP): Likewise. (LRINT): New define_int_iterator. (lrint_pattern): New define_int_attr. (lrint_submenmonic): Likewise. (lrint_allow_inexact): Likewise. (ANYFI): New define_mode_iterator. (lrint<ANYF><ANYFI>): New instruction template. gcc/testsuite/ChangeLog: * gcc.target/loongarch/ftint.c: New test. * gcc.target/loongarch/ftint-no-inexact.c: New test.
Showing
- gcc/config/loongarch/loongarch.md 34 additions, 0 deletionsgcc/config/loongarch/loongarch.md
- gcc/testsuite/gcc.target/loongarch/ftint-no-inexact.c 44 additions, 0 deletionsgcc/testsuite/gcc.target/loongarch/ftint-no-inexact.c
- gcc/testsuite/gcc.target/loongarch/ftint.c 44 additions, 0 deletionsgcc/testsuite/gcc.target/loongarch/ftint.c
Loading
Please register or sign in to comment