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