diff --git a/gcc/config/riscv/generic-ooo.md b/gcc/config/riscv/generic-ooo.md index 6cf3463cc42d8c546968323360889a848e839b88..ae9430e47598956b5fe833d790c5c0cc4d31fb4d 100644 --- a/gcc/config/riscv/generic-ooo.md +++ b/gcc/config/riscv/generic-ooo.md @@ -145,6 +145,12 @@ "generic_ooo_issue,generic_ooo_fxu") ;; Assume float division and sqrt are not pipelined. +(define_insn_reservation "generic_ooo_float_div_half" 10 + (and (eq_attr "tune" "generic_ooo") + (and (eq_attr "type" "fdiv,fsqrt") + (eq_attr "mode" "HF"))) + "generic_ooo_issue,generic_ooo_fxu,generic_ooo_div,generic_ooo_div*3") + (define_insn_reservation "generic_ooo_float_div_single" 12 (and (eq_attr "tune" "generic_ooo") (and (eq_attr "type" "fdiv,fsqrt") diff --git a/gcc/testsuite/gcc.target/riscv/pr118170.c b/gcc/testsuite/gcc.target/riscv/pr118170.c new file mode 100644 index 0000000000000000000000000000000000000000..306ff888aebdaf03035a390206da08c3f739c4bf --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/pr118170.c @@ -0,0 +1,9 @@ +/* { dg-do "compile" } */ +/* { dg-options "-O2 -mcpu=tt-ascalon-d8" } */ +_Float16 f; + +void +foo () +{ + f /= 3; +}