This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 3/3] Compute predicates for phi node results in ipa-inline-analysis.c


Hi,

On Thu, Aug 30, 2012 at 05:11:35PM +0200, Martin Jambor wrote:
> this is a new version of the patch which makes ipa analysis produce
> predicates for PHI node results, at least at the bottom of the
> simplest diamond and semi-diamond CFG subgraphs.  This time I also
> analyze the conditions again rather than extracting information from
> CFG edges, which means I can reason about substantially more PHI
> nodes.
> 
> This patch makes us produce loop bounds hint for the pr48636.f90
> testcase.
> 
> Bootstrapped and tested on x86_64-linux.  OK for trunk?
> 
> Thanks,
> 
> Martin
> 
> 
> 2012-08-29  Martin Jambor  <mjambor@suse.cz>
> 
> 	* ipa-inline-analysis.c (phi_result_unknown_predicate): New function.
> 	(predicate_for_phi_result): Likewise.
> 	(estimate_function_body_sizes): Use the above two functions.
> 

This patch, on top of the one doing loop calculations almost always,
introduces a number of testsuite failures which somehow I had not
caught during my testing.  The problem is that either
calculate_dominance_info or loop_optimizer_init introduce new SSA
names for which there is no index in nonconstant_names which is
allocated before the dominance and loop computations.  I'm currently
bootstrapping and testing the following fix which simply allocates the
vector after doing the two computations.  If it passes I will commit
it straight away so that the regression is fixed before I leave for
the weekend, I hope it's obvious enough for that.

On the other hand, it would really be better if we did not change
function bodies during IPA summary generation phase...

Sorry for the breakage,

Martin


2012-08-31  Martin Jambor  <mjambor@suse.cz>

	* ipa-inline-analysis.c (estimate_function_body_sizes): Allocate
	nonconstant_names after calculate_dominance_info and
	loop_optimizer_init.

Index: src/gcc/ipa-inline-analysis.c
===================================================================
--- src.orig/gcc/ipa-inline-analysis.c
+++ src/gcc/ipa-inline-analysis.c
@@ -2185,13 +2185,6 @@ estimate_function_body_sizes (struct cgr
   struct ipa_node_params *parms_info = NULL;
   VEC (predicate_t, heap) *nonconstant_names = NULL;
 
-  if (ipa_node_params_vector && !early && optimize)
-    {
-      parms_info = IPA_NODE_REF (node);
-      VEC_safe_grow_cleared (predicate_t, heap, nonconstant_names,
-			     VEC_length (tree, SSANAMES (my_function)));
-    }
-
   info->conds = 0;
   info->entry = 0;
 
@@ -2199,6 +2192,13 @@ estimate_function_body_sizes (struct cgr
     {
       calculate_dominance_info (CDI_DOMINATORS);
       loop_optimizer_init (LOOPS_NORMAL | LOOPS_HAVE_RECORDED_EXITS);
+
+      if (ipa_node_params_vector)
+	{
+	  parms_info = IPA_NODE_REF (node);
+	  VEC_safe_grow_cleared (predicate_t, heap, nonconstant_names,
+				 VEC_length (tree, SSANAMES (my_function)));
+	}
     }
 
   if (dump_file)




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]