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/ifcvt.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/ifcvt.c')
-rw-r--r-- | gcc/ifcvt.c | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c index fd682a4..46a13c4 100644 --- a/gcc/ifcvt.c +++ b/gcc/ifcvt.c @@ -84,8 +84,6 @@ static rtx_insn *last_active_insn (basic_block, int); static rtx_insn *find_active_insn_before (basic_block, rtx_insn *); static rtx_insn *find_active_insn_after (basic_block, rtx_insn *); static basic_block block_fallthru (basic_block); -static int cond_exec_process_insns (ce_if_block *, rtx_insn *, rtx, rtx, int, - int); static rtx cond_exec_get_condition (rtx_insn *); static rtx noce_get_condition (rtx_insn *, rtx_insn **, bool); static int noce_operand_ok (const_rtx); @@ -335,7 +333,8 @@ cond_exec_process_insns (ce_if_block *ce_info ATTRIBUTE_UNUSED, /* if block information */rtx_insn *start, /* first insn to look at */rtx end, /* last insn to look at */rtx test, - /* conditional execution test */int prob_val, + /* conditional execution test */profile_probability + prob_val, /* probability of branch taken. */int mod_ok) { int must_be_last = FALSE; @@ -410,10 +409,11 @@ cond_exec_process_insns (ce_if_block *ce_info ATTRIBUTE_UNUSED, validate_change (insn, &PATTERN (insn), pattern, 1); - if (CALL_P (insn) && prob_val >= 0) + if (CALL_P (insn) && prob_val.initialized_p ()) validate_change (insn, ®_NOTES (insn), gen_rtx_INT_LIST ((machine_mode) REG_BR_PROB, - prob_val, REG_NOTES (insn)), 1); + prob_val.to_reg_br_prob_note (), + REG_NOTES (insn)), 1); insn_done: if (insn == end) @@ -472,8 +472,8 @@ cond_exec_process_if_block (ce_if_block * ce_info, int then_mod_ok; /* whether conditional mods are ok in THEN */ rtx true_expr; /* test for else block insns */ rtx false_expr; /* test for then block insns */ - int true_prob_val; /* probability of else block */ - int false_prob_val; /* probability of then block */ + profile_probability true_prob_val;/* probability of else block */ + profile_probability false_prob_val;/* probability of then block */ rtx_insn *then_last_head = NULL; /* Last match at the head of THEN */ rtx_insn *else_last_head = NULL; /* Last match at the head of ELSE */ rtx_insn *then_first_tail = NULL; /* First match at the tail of THEN */ @@ -618,13 +618,13 @@ cond_exec_process_if_block (ce_if_block * ce_info, note = find_reg_note (BB_END (test_bb), REG_BR_PROB, NULL_RTX); if (note) { - true_prob_val = XINT (note, 0); - false_prob_val = REG_BR_PROB_BASE - true_prob_val; + true_prob_val = profile_probability::from_reg_br_prob_note (XINT (note, 0)); + false_prob_val = true_prob_val.invert (); } else { - true_prob_val = -1; - false_prob_val = -1; + true_prob_val = profile_probability::uninitialized (); + false_prob_val = profile_probability::uninitialized (); } /* If we have && or || tests, do them here. These tests are in the adjacent @@ -5121,7 +5121,9 @@ dead_or_predicable (basic_block test_bb, basic_block merge_bb, return FALSE; rtx note = find_reg_note (jump, REG_BR_PROB, NULL_RTX); - int prob_val = (note ? XINT (note, 0) : -1); + profile_probability prob_val + = (note ? profile_probability::from_reg_br_prob_note (XINT (note, 0)) + : profile_probability::uninitialized ()); if (reversep) { @@ -5130,8 +5132,7 @@ dead_or_predicable (basic_block test_bb, basic_block merge_bb, return FALSE; cond = gen_rtx_fmt_ee (rev, GET_MODE (cond), XEXP (cond, 0), XEXP (cond, 1)); - if (prob_val >= 0) - prob_val = REG_BR_PROB_BASE - prob_val; + prob_val = prob_val.invert (); } if (cond_exec_process_insns (NULL, head, end, cond, prob_val, 0) |