diff options
author | amodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-07-08 03:02:27 +0000 |
---|---|---|
committer | amodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-07-08 03:02:27 +0000 |
commit | 5ae4887dccf204e60ec92f302c92a6d3dce73c2c (patch) | |
tree | 53f49dedf673ef5042d1e6f2ea443c7106b2c8ce /gcc/expmed.c | |
parent | 9ef16211c2c2d8888c3242b454edcca167246aef (diff) | |
download | gcc-5ae4887dccf204e60ec92f302c92a6d3dce73c2c.tar.gz |
* target.def (rtx_costs): Remove "code" param, add "mode".
* rtl.h (rtx_cost, get_full_rtx_cost): Update prototype.
(set_src_cost, get_full_set_src_cost): Likewise. Move later in file.
(set_rtx_cost, get_full_set_rtx_cost): Move later in file.
* rtlanal.c (rtx_cost): Add "mode" parameter. Update targetm.rtx_costs
call. Track mode when given in rtx.
(get_full_rtx_cost): Add "mode" parameter. Update rtx_cost calls.
(default_address_cost): Pass Pmode to rtx_cost.
(insn_rtx_cost): Pass dest mode of set to set_src_cost.
* cprop.c (try_replace_reg): Ensure set_rtx_cost is not called
with NULL set.
* cse.c (COST, COST_IN): Add MODE param. Update all uses.
(notreg_cost): Add mode param. Use it.
* gcse.c (want_to_gcse_p): Delete forward declaration. Add
mode param and pass to set_src_cost. Update all calls.
(hash_scan_set): Formatting.
* hooks.c (hook_bool_rtx_int_int_int_intp_bool_false): Delete.
(hook_bool_rtx_mode_int_int_intp_bool_false): New function.
* hooks.h: Ditto.
* expmed.c (init_expmed_one_conv, init_expmed_one_mode,
init_expmed, expand_mult, mult_by_coeff_cost, expand_smod_pow2,
emit_store_flag): Update set_src_cost and rtx_cost calls.
* auto-inc-dec.c (attempt_change): Likewise.
* calls.c (precompute_register_parameters): Likewise.
* combine.c (expand_compound_operation, make_extraction,
force_to_mode, distribute_and_simplify_rtx): Likewise.
* dojump.c (prefer_and_bit_test): Likewise.
* dse.c (find_shift_sequence): Likewise.
* expr.c (compress_float_constant): Likewise.
* fwprop.c (should_replace_address, try_fwprop_subst): Likewise.
* ifcvt.c (noce_try_sign_mask): Likewise.
* loop-doloop.c (doloop_optimize): Likewise.
* loop-invariant.c (create_new_invariant): Likewise.
* lower-subreg.c (shift_cost, compute_costs): Likewise.
* optabs.c (avoid_expensive_constant, prepare_cmp_insn,
lshift_cheap_p): Likewise.
* postreload.c (reload_cse_simplify_set, reload_cse_simplify_operands,
try_replace_in_use, reload_cse_move2add): Likewise.
* reload1.c (calculate_elim_costs_all_insns, note_reg_elim_costly):
Likewise.
* simplify-rtx.c (simplify_binary_operation_1): Likewise.
* tree-ssa-loop-ivopts.c (computation_cost): Likewise.
* tree-ssa-reassoc.c (optimize_range_tests_to_bit_test): Likewise.
* tree-switch-conversion.c (emit_case_bit_tests): Likewise.
* config/aarch64/aarch64.c (aarch64_rtx_costs): Delete "code" param,
add "mode" param. Use "mode: in place of GET_MODE (x). Pass mode
to rtx_cost calls.
* config/alpha/alpha.c (alpha_rtx_costs): Likewise.
* config/arc/arc.c (arc_rtx_costs): Likewise.
* config/arm/arm.c (arm_rtx_costs): Likewise.
* config/avr/avr.c (avr_rtx_costs, avr_rtx_costs_1): Likewise.
* config/bfin/bfin.c (bfin_rtx_costs): Likewise.
* config/c6x/c6x.c (c6x_rtx_costs): Likewise.
* config/cris/cris.c (cris_rtx_costs): Likewise.
* config/epiphany/epiphany.c (epiphany_rtx_costs): Likewise.
* config/frv/frv.c (frv_rtx_costs): Likewise.
* config/h8300/h8300.c (h8300_rtx_costs): Likewise.
* config/i386/i386.c (ix86_rtx_costs): Likewise.
* config/ia64/ia64.c (ia64_rtx_costs): Likewise.
* config/iq2000/iq2000.c (iq2000_rtx_costs): Likewise.
* config/lm32/lm32.c (lm32_rtx_costs): Likewise.
* config/m32c/m32c.c (m32c_rtx_costs): Likewise.
* config/m32r/m32r.c (m32r_rtx_costs): Likewise.
* config/m68k/m68k.c (m68k_rtx_costs): Likewise.
* config/mcore/mcore.c (mcore_rtx_costs): Likewise.
* config/mep/mep.c (mep_rtx_cost): Likewise.
* config/microblaze/microblaze.c (microblaze_rtx_costs): Likewise.
* config/mips/mips.c (mips_rtx_costs): Likewise.
* config/mmix/mmix.c (mmix_rtx_costs): Likewise.
* config/mn10300/mn10300.c (mn10300_rtx_costs): Likewise.
* config/msp430/msp430.c (msp430_rtx_costs): Likewise.
* config/nds32/nds32-cost.c (nds32_rtx_costs_impl): Likewise.
* config/nds32/nds32-protos.h (nds32_rtx_costs_impl): Likewise.
* config/nds32/nds32.c (nds32_rtx_costs): Likewise.
* config/nios2/nios2.c (nios2_rtx_costs): Likewise.
* config/pa/pa.c (hppa_rtx_costs): Likewise.
* config/pdp11/pdp11.c (pdp11_rtx_costs): Likewise.
* config/rl78/rl78.c (rl78_rtx_costs): Likewise.
* config/rs6000/rs6000.c (rs6000_rtx_costs): Likewise.
* config/s390/s390.c (s390_rtx_costs): Likewise.
* config/sh/sh.c (sh_rtx_costs): Likewise.
* config/sparc/sparc.c (sparc_rtx_costs): Likewise.
* config/spu/spu.c (spu_rtx_costs): Likewise.
* config/stormy16/stormy16.c (xstormy16_rtx_costs): Likewise.
* config/tilegx/tilegx.c (tilegx_rtx_costs): Likewise.
* config/tilepro/tilepro.c (tilepro_rtx_costs): Likewise.
* config/v850/v850.c (v850_rtx_costs): Likewise.
* config/vax/vax.c (vax_rtx_costs): Likewise.
* config/visium/visium.c (visium_rtx_costs): Likewise.
* config/xtensa/xtensa.c (xtensa_rtx_costs): Likewise.
* config/aarch64/aarch64.c (aarch64_rtx_mult_cost): Change type of
"code" param, and pass as outer_code to first rtx_cost call. Pass
mode to rtx_cost calls.
(aarch64_address_cost, aarch64_if_then_else_costs): Update rtx_cost
calls.
(aarch64_rtx_costs_wrapper): Update.
* config/arm/arm.c (arm_rtx_costs_1, arm_size_rtx_costs,
arm_unspec_cost, arm_new_rtx_costs, arm_slowmul_rtx_costs): Update
rtx_cost calls.
* config/avr/avr.c (avr_final_prescan_insn): Update set_src_cost
and rtx_cost calls.
(avr_operand_rtx_cost): Similarly.
(avr_rtx_costs_1): Correct mode passed to avr_operand_rtx_cost
for subexpressions of ZERO_EXTEND, SIGN_EXTEND and COMPARE.
* config/mips/mips.c (mips_stack_address_p): Comment typo.
(mips_binary_cost): Update rtx_cost and set_src_cost calls.
(mips_rtx_costs): Use GET_MODE (x) to detect const_int.
* config/mn10300/mn10300.c (mn10300_address_cost): Pass Pmode to
rtx_cost.
(mn10300_rtx_costs): Correct mode passed to mn10300_address_cost.
* config/rs6000/rs6000.c (rs6000_debug_rtx_costs): Update.
* config/sh/sh.c (and_xor_ior_costs): Update rtx_cost call.
* doc/tm.texi: Regenerate.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@225532 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/expmed.c')
-rw-r--r-- | gcc/expmed.c | 52 |
1 files changed, 29 insertions, 23 deletions
diff --git a/gcc/expmed.c b/gcc/expmed.c index 6fb5807f6e9..b865382e0c3 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -145,7 +145,8 @@ init_expmed_one_conv (struct init_expmed_rtl *all, machine_mode to_mode, which = (to_size < from_size ? all->trunc : all->zext); PUT_MODE (all->reg, from_mode); - set_convert_cost (to_mode, from_mode, speed, set_src_cost (which, speed)); + set_convert_cost (to_mode, from_mode, speed, + set_src_cost (which, to_mode, speed)); } static void @@ -174,15 +175,15 @@ init_expmed_one_mode (struct init_expmed_rtl *all, PUT_MODE (all->zext, mode); PUT_MODE (all->trunc, mode); - set_add_cost (speed, mode, set_src_cost (all->plus, speed)); - set_neg_cost (speed, mode, set_src_cost (all->neg, speed)); - set_mul_cost (speed, mode, set_src_cost (all->mult, speed)); - set_sdiv_cost (speed, mode, set_src_cost (all->sdiv, speed)); - set_udiv_cost (speed, mode, set_src_cost (all->udiv, speed)); + set_add_cost (speed, mode, set_src_cost (all->plus, mode, speed)); + set_neg_cost (speed, mode, set_src_cost (all->neg, mode, speed)); + set_mul_cost (speed, mode, set_src_cost (all->mult, mode, speed)); + set_sdiv_cost (speed, mode, set_src_cost (all->sdiv, mode, speed)); + set_udiv_cost (speed, mode, set_src_cost (all->udiv, mode, speed)); - set_sdiv_pow2_cheap (speed, mode, (set_src_cost (all->sdiv_32, speed) + set_sdiv_pow2_cheap (speed, mode, (set_src_cost (all->sdiv_32, mode, speed) <= 2 * add_cost (speed, mode))); - set_smod_pow2_cheap (speed, mode, (set_src_cost (all->smod_32, speed) + set_smod_pow2_cheap (speed, mode, (set_src_cost (all->smod_32, mode, speed) <= 4 * add_cost (speed, mode))); set_shift_cost (speed, mode, 0, 0); @@ -199,10 +200,13 @@ init_expmed_one_mode (struct init_expmed_rtl *all, XEXP (all->shift, 1) = all->cint[m]; XEXP (all->shift_mult, 1) = all->pow2[m]; - set_shift_cost (speed, mode, m, set_src_cost (all->shift, speed)); - set_shiftadd_cost (speed, mode, m, set_src_cost (all->shift_add, speed)); - set_shiftsub0_cost (speed, mode, m, set_src_cost (all->shift_sub0, speed)); - set_shiftsub1_cost (speed, mode, m, set_src_cost (all->shift_sub1, speed)); + set_shift_cost (speed, mode, m, set_src_cost (all->shift, mode, speed)); + set_shiftadd_cost (speed, mode, m, set_src_cost (all->shift_add, mode, + speed)); + set_shiftsub0_cost (speed, mode, m, set_src_cost (all->shift_sub0, mode, + speed)); + set_shiftsub1_cost (speed, mode, m, set_src_cost (all->shift_sub1, mode, + speed)); } if (SCALAR_INT_MODE_P (mode)) @@ -222,9 +226,9 @@ init_expmed_one_mode (struct init_expmed_rtl *all, XEXP (all->wide_lshr, 1) = GEN_INT (mode_bitsize); set_mul_widen_cost (speed, wider_mode, - set_src_cost (all->wide_mult, speed)); + set_src_cost (all->wide_mult, wider_mode, speed)); set_mul_highpart_cost (speed, mode, - set_src_cost (all->wide_trunc, speed)); + set_src_cost (all->wide_trunc, mode, speed)); } } } @@ -266,7 +270,7 @@ init_expmed (void) for (speed = 0; speed < 2; speed++) { crtl->maybe_hot_insn_p = speed; - set_zero_cost (speed, set_src_cost (const0_rtx, speed)); + set_zero_cost (speed, set_src_cost (const0_rtx, mode, speed)); for (mode = MIN_MODE_INT; mode <= MAX_MODE_INT; mode = (machine_mode)(mode + 1)) @@ -3207,7 +3211,8 @@ expand_mult (machine_mode mode, rtx op0, rtx op1, rtx target, Exclude cost of op0 from max_cost to match the cost calculation of the synth_mult. */ coeff = -(unsigned HOST_WIDE_INT) coeff; - max_cost = (set_src_cost (gen_rtx_MULT (mode, fake_reg, op1), speed) + max_cost = (set_src_cost (gen_rtx_MULT (mode, fake_reg, op1), + mode, speed) - neg_cost (speed, mode)); if (max_cost <= 0) goto skip_synth; @@ -3232,7 +3237,7 @@ expand_mult (machine_mode mode, rtx op0, rtx op1, rtx target, /* Exclude cost of op0 from max_cost to match the cost calculation of the synth_mult. */ - max_cost = set_src_cost (gen_rtx_MULT (mode, fake_reg, op1), speed); + max_cost = set_src_cost (gen_rtx_MULT (mode, fake_reg, op1), mode, speed); if (choose_mult_variant (mode, coeff, &algorithm, &variant, max_cost)) return expand_mult_const (mode, op0, coeff, target, &algorithm, variant); @@ -3273,7 +3278,8 @@ mult_by_coeff_cost (HOST_WIDE_INT coeff, machine_mode mode, bool speed) enum mult_variant variant; rtx fake_reg = gen_raw_REG (mode, LAST_VIRTUAL_REGISTER + 1); - max_cost = set_src_cost (gen_rtx_MULT (mode, fake_reg, fake_reg), speed); + max_cost = set_src_cost (gen_rtx_MULT (mode, fake_reg, fake_reg), + mode, speed); if (choose_mult_variant (mode, coeff, &algorithm, &variant, max_cost)) return algorithm.cost.cost; else @@ -3699,7 +3705,7 @@ expand_smod_pow2 (machine_mode mode, rtx op0, HOST_WIDE_INT d) temp = gen_rtx_LSHIFTRT (mode, result, shift); if (optab_handler (lshr_optab, mode) == CODE_FOR_nothing - || (set_src_cost (temp, optimize_insn_for_speed_p ()) + || (set_src_cost (temp, mode, optimize_insn_for_speed_p ()) > COSTS_N_INSNS (2))) { temp = expand_binop (mode, xor_optab, op0, signmask, @@ -5503,7 +5509,7 @@ emit_store_flag (rtx target, enum rtx_code code, rtx op0, rtx op1, /* For the reverse comparison, use either an addition or a XOR. */ if (want_add - && rtx_cost (GEN_INT (normalizep), PLUS, 1, + && rtx_cost (GEN_INT (normalizep), mode, PLUS, 1, optimize_insn_for_speed_p ()) == 0) { tem = emit_store_flag_1 (subtarget, rcode, op0, op1, mode, 0, @@ -5514,7 +5520,7 @@ emit_store_flag (rtx target, enum rtx_code code, rtx op0, rtx op1, target, 0, OPTAB_WIDEN); } else if (!want_add - && rtx_cost (trueval, XOR, 1, + && rtx_cost (trueval, mode, XOR, 1, optimize_insn_for_speed_p ()) == 0) { tem = emit_store_flag_1 (subtarget, rcode, op0, op1, mode, 0, @@ -5606,7 +5612,7 @@ emit_store_flag (rtx target, enum rtx_code code, rtx op0, rtx op1, /* Again, for the reverse comparison, use either an addition or a XOR. */ if (want_add - && rtx_cost (GEN_INT (normalizep), PLUS, 1, + && rtx_cost (GEN_INT (normalizep), mode, PLUS, 1, optimize_insn_for_speed_p ()) == 0) { tem = emit_store_flag_1 (subtarget, rcode, op0, op1, mode, 0, @@ -5617,7 +5623,7 @@ emit_store_flag (rtx target, enum rtx_code code, rtx op0, rtx op1, target, 0, OPTAB_WIDEN); } else if (!want_add - && rtx_cost (trueval, XOR, 1, + && rtx_cost (trueval, mode, XOR, 1, optimize_insn_for_speed_p ()) == 0) { tem = emit_store_flag_1 (subtarget, rcode, op0, op1, mode, 0, |