diff options
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/riscv/riscv.c | 8 |
2 files changed, 13 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b2acae1..c4af56f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-01-15 Andrew Waterman <andrew@sifive.com> + + * config/riscv/riscv.c (riscv_rtx_costs) <MULT>: Increase cost if + !TARGET_MUL. + <UDIV>: Increase cost if !TARGET_DIV. + 2018-01-15 Segher Boessenkool <segher@kernel.crashing.org> * 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 d260c0e..19a01e0 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); |