PATCH: set correctly bb frequency in profile based transformations
Zdenek Dvorak
rakdver@atrey.karlin.mff.cuni.cz
Tue Jan 9 20:32:00 GMT 2007
Hello,
> check_bb_profile (...) warns again "Invalid sum of incoming frequencies ...".
>
> This patch corretly set bb frequencies for profile based transformations.
>
> Bootstraped and tested on x86-linux, x86_64-linux.
could you please also add testcase to the testsuite?
Zdenek
> OK?
>
> Tomas
>
> Changelog:
>
> 2007-01-09 Tomas Bily <tbily@suse.cz>:
>
> * value-profile.c (tree_divmod_fixed_value): Set frequency to newly
> created basic blocks
> (tree_mod_pow2): Likewise.
> (tree_mod_subtract): Likewise
> (tree_stringop_fixed_value): Likewise
> Index: gcc/value-prof.c
> ===================================================================
> --- gcc/value-prof.c (revision 120450)
> +++ gcc/value-prof.c (working copy)
> @@ -537,6 +558,10 @@ tree_divmod_fixed_value (tree stmt, tree
> e34->probability = REG_BR_PROB_BASE;
> e34->count = all - count;
>
> + bb2->frequency = EDGE_FREQUENCY (e12);
> + bb3->frequency = EDGE_FREQUENCY (e13);
> + bb4->frequency = EDGE_FREQUENCY (e24) + EDGE_FREQUENCY (e34);
> +
> return tmp2;
> }
>
> @@ -696,6 +721,10 @@ tree_mod_pow2 (tree stmt, tree operation
> e34->probability = REG_BR_PROB_BASE;
> e34->count = all - count;
>
> + bb2->frequency = EDGE_FREQUENCY (e12);
> + bb3->frequency = EDGE_FREQUENCY (e13);
> + bb4->frequency = EDGE_FREQUENCY (e24) + EDGE_FREQUENCY (e34);
> +
> return result;
> }
>
> @@ -785,9 +814,9 @@ tree_mod_subtract (tree stmt, tree opera
> tree label_decl3 = create_artificial_label ();
> tree label1, label2, label3;
> tree bb1end, bb2end = NULL_TREE, bb3end;
> - basic_block bb, bb2, bb3, bb4;
> + basic_block bb, bb2, bb3 = NULL, bb4;
> tree optype = TREE_TYPE (operation);
> - edge e12, e23 = 0, e24, e34, e14;
> + edge e12, e23 = 0, e24 = 0, e34, e14;
> block_stmt_iterator bsi;
> tree result = create_tmp_var (optype, "PROF");
>
> @@ -876,6 +905,14 @@ tree_mod_subtract (tree stmt, tree opera
> e34->probability = REG_BR_PROB_BASE;
> e34->count = all - count1 - count2;
>
> + bb2->frequency = EDGE_FREQUENCY (e12);
> + bb4->frequency = EDGE_FREQUENCY (e14) + EDGE_FREQUENCY (e34);
> + if (ncounts)
> + {
> + bb3->frequency = EDGE_FREQUENCY (e23);
> + bb4->frequency += EDGE_FREQUENCY (e24);
> + }
> +
> return result;
> }
>
> @@ -1094,6 +1330,10 @@ tree_stringop_fixed_value (tree stmt, tr
>
> e34->probability = REG_BR_PROB_BASE;
> e34->count = all - count;
> +
> + bb2->frequency = EDGE_FREQUENCY (e12);
> + bb3->frequency = EDGE_FREQUENCY (e13);
> + bb4->frequency = EDGE_FREQUENCY (e24) + EDGE_FREQUENCY (e34);
> }
More information about the Gcc-patches
mailing list