diff options
author | Jan Hubicka <hubicka@ucw.cz> | 2017-07-16 18:10:58 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2017-07-16 16:10:58 +0000 |
commit | 5fa396ad6cd48bc44e6754096fe71febc2a77983 (patch) | |
tree | 8b2c0f4ba184b9d1af37e1f345be3b518d3f6101 /gcc/emit-rtl.c | |
parent | 519087cf749bd002784f09f0ca6f74215fbf5bbc (diff) | |
download | gcc-5fa396ad6cd48bc44e6754096fe71febc2a77983.zip gcc-5fa396ad6cd48bc44e6754096fe71febc2a77983.tar.gz gcc-5fa396ad6cd48bc44e6754096fe71febc2a77983.tar.bz2 |
profile-count.h (profile_probability::from_reg_br_prob_note, [...]): New functions.
* profile-count.h (profile_probability::from_reg_br_prob_note,
profile_probability::to_reg_br_prob_note): New functions.
* doc/rtl.texi (REG_BR_PROB_NOTE): Update documentation.
* reg-notes.h (REG_BR_PROB, REG_BR_PRED): Update docs.
* predict.c (probability_reliable_p): Update.
(edge_probability_reliable_p): Update.
(br_prob_note_reliable_p): Update.
(invert_br_probabilities): Update.
(add_reg_br_prob_note): New function.
(combine_predictions_for_insn): Update.
* asan.c (asan_clear_shadow): Update.
* cfgbuild.c (compute_outgoing_frequencies): Update.
* cfgrtl.c (force_nonfallthru_and_redirect): Update.
(update_br_prob_note): Update.
(rtl_verify_edges): Update.
(purge_dead_edges): Update.
(fixup_reorder_chain): Update.
* emit-rtl.c (try_split): Update.
* ifcvt.c (cond_exec_process_insns): Update.
(cond_exec_process_if_block): Update.
(dead_or_predicable): Update.
* internal-fn.c (expand_addsub_overflow): Update.
(expand_neg_overflow): Update.
(expand_mul_overflow): Update.
* loop-doloop.c (doloop_modify): Update.
* loop-unroll.c (compare_and_jump_seq): Update.
* optabs.c (emit_cmp_and_jump_insn_1): Update.
* predict.h: Update.
* reorg.c (mostly_true_jump): Update.
* rtl.h: Update.
* config/aarch64/aarch64.c (aarch64_emit_unlikely_jump): Update.
* config/alpha/alpha.c (emit_unlikely_jump): Update.
* config/arc/arc.c: (emit_unlikely_jump): Update.
* config/arm/arm.c: (emit_unlikely_jump): Update.
* config/bfin/bfin.c (cbranch_predicted_taken_p): Update.
* config/frv/frv.c (frv_print_operand_jump_hint): Update.
* config/i386/i386.c (ix86_expand_split_stack_prologue): Update.
(ix86_print_operand): Update.
(ix86_split_fp_branch): Update.
(predict_jump): Update.
* config/ia64/ia64.c (ia64_print_operand): Update.
* config/mmix/mmix.c (mmix_print_operand): Update.
* config/powerpcspe/powerpcspe.c (output_cbranch): Update.
(rs6000_expand_split_stack_prologue): Update.
* config/rs6000/rs6000.c: Update.
* config/s390/s390.c (s390_expand_vec_strlen): Update.
(s390_expand_vec_movstr): Update.
(s390_expand_cs_tdsi): Update.
(s390_expand_split_stack_prologue): Update.
* config/sh/sh.c (sh_print_operand): Update.
(expand_cbranchsi4): Update.
(expand_cbranchdi4): Update.
* config/sparc/sparc.c (output_v9branch): Update.
* config/spu/spu.c (get_branch_target): Update.
(ea_load_store_inline): Update.
* config/tilegx/tilegx.c (cbranch_predicted_p): Update.
* config/tilepro/tilepro.c: Update.
* gcc.dg/predict-8.c: Update.
From-SVN: r250239
Diffstat (limited to 'gcc/emit-rtl.c')
-rw-r--r-- | gcc/emit-rtl.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index 041f2a7..2bc5d56 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -59,6 +59,7 @@ along with GCC; see the file COPYING3. If not see #include "rtl-iter.h" #include "stor-layout.h" #include "opts.h" +#include "predict.h" struct target_rtl default_target_rtl; #if SWITCHABLE_TARGET @@ -190,9 +191,8 @@ static reg_attrs *get_reg_attrs (tree, int); static rtx gen_const_vector (machine_mode, int); static void copy_rtx_if_shared_1 (rtx *orig); -/* Probability of the conditional branch currently proceeded by try_split. - Set to -1 otherwise. */ -int split_branch_probability = -1; +/* Probability of the conditional branch currently proceeded by try_split. */ +profile_probability split_branch_probability; /* Returns a hash code for X (which is a really a CONST_INT). */ @@ -3662,7 +3662,7 @@ try_split (rtx pat, rtx_insn *trial, int last) rtx_insn *before, *after; rtx note; rtx_insn *seq, *tem; - int probability; + profile_probability probability; rtx_insn *insn_last, *insn; int njumps = 0; rtx_insn *call_insn = NULL; @@ -3673,12 +3673,16 @@ try_split (rtx pat, rtx_insn *trial, int last) if (any_condjump_p (trial) && (note = find_reg_note (trial, REG_BR_PROB, 0))) - split_branch_probability = XINT (note, 0); + split_branch_probability + = profile_probability::from_reg_br_prob_note (XINT (note, 0)); + else + split_branch_probability = profile_probability::uninitialized (); + probability = split_branch_probability; seq = split_insns (pat, trial); - split_branch_probability = -1; + split_branch_probability = profile_probability::uninitialized (); if (!seq) return trial; @@ -3709,7 +3713,7 @@ try_split (rtx pat, rtx_insn *trial, int last) CROSSING_JUMP_P (insn) = CROSSING_JUMP_P (trial); mark_jump_label (PATTERN (insn), insn, 0); njumps++; - if (probability != -1 + if (probability.initialized_p () && any_condjump_p (insn) && !find_reg_note (insn, REG_BR_PROB, 0)) { @@ -3718,7 +3722,7 @@ try_split (rtx pat, rtx_insn *trial, int last) is responsible for this step using split_branch_probability variable. */ gcc_assert (njumps == 1); - add_int_reg_note (insn, REG_BR_PROB, probability); + add_reg_br_prob_note (insn, probability); } } } |