From ff3cc569b2d3ba49fe6e2dc07ad761b5d9431c8a Mon Sep 17 00:00:00 2001 From: Andrew Waterman Date: Tue, 16 Jan 2018 03:03:09 +0000 Subject: [PATCH] RISC-V: Increase mult/div cost if not implemented in hardware. 2018-01-15 Andrew Waterman gcc/ * config/riscv/riscv.c (riscv_rtx_costs) : Increase cost if !TARGET_MUL. : Increase cost if !TARGET_DIV. From-SVN: r256722 --- gcc/ChangeLog | 6 ++++++ gcc/config/riscv/riscv.c | 8 +++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b2acae1c1e1..c4af56fc340 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-01-15 Andrew Waterman + + * config/riscv/riscv.c (riscv_rtx_costs) : Increase cost if + !TARGET_MUL. + : Increase cost if !TARGET_DIV. + 2018-01-15 Segher Boessenkool * config/rs6000/rs6000.md (define_attr "type"): Remove delayed_cr. diff --git a/gcc/config/riscv/riscv.c b/gcc/config/riscv/riscv.c index d260c0ebae1..19a01e0825a 100644 --- a/gcc/config/riscv/riscv.c +++ b/gcc/config/riscv/riscv.c @@ -1615,6 +1615,9 @@ riscv_rtx_costs (rtx x, machine_mode mode, int outer_code, int opno ATTRIBUTE_UN case MULT: if (float_mode_p) *total = tune_info->fp_mul[mode == DFmode]; + else if (!TARGET_MUL) + /* Estimate the cost of a library call. */ + *total = COSTS_N_INSNS (speed ? 32 : 6); else if (GET_MODE_SIZE (mode) > UNITS_PER_WORD) *total = 3 * tune_info->int_mul[0] + COSTS_N_INSNS (2); else if (!speed) @@ -1635,7 +1638,10 @@ riscv_rtx_costs (rtx x, machine_mode mode, int outer_code, int opno ATTRIBUTE_UN case UDIV: case UMOD: - if (speed) + if (!TARGET_DIV) + /* Estimate the cost of a library call. */ + *total = COSTS_N_INSNS (speed ? 32 : 6); + else if (speed) *total = tune_info->int_div[mode == DImode]; else *total = COSTS_N_INSNS (1); -- 2.30.2