Commit e1e6dc73 by Richard Guenther Committed by Richard Biener

re PR tree-optimization/40421 (Revision 148352 failed 416.gamess in SPEC CPU 2006)

2009-06-13  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/40389
	* tree-predcom.c (should_unroll_loop_p): Remove.
	(tree_predictive_commoning_loop): Use can_unroll_loop_p.

	* gfortran.fortran-torture/compile/pr40421.f: New testcase.

From-SVN: r148458
parent 8012b923
2009-06-13 Richard Guenther <rguenther@suse.de>
PR tree-optimization/40389
* tree-predcom.c (should_unroll_loop_p): Remove.
(tree_predictive_commoning_loop): Use can_unroll_loop_p.
2009-06-13 Michael Meissner <meissner@linux.vnet.ibm.com> 2009-06-13 Michael Meissner <meissner@linux.vnet.ibm.com>
* config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin): * config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
......
2009-06-13 Richard Guenther <rguenther@suse.de>
PR tree-optimization/40389
* gfortran.fortran-torture/compile/pr40421.f: New testcase.
2009-06-12 Aldy Hernandez <aldyh@redhat.com> 2009-06-12 Aldy Hernandez <aldyh@redhat.com>
* gcc.dg/old-style-prom-3.c: Add column info. * gcc.dg/old-style-prom-3.c: Add column info.
......
SUBROUTINE VROT2(N,DIS)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
PARAMETER(ZERO=0.0D+00)
COMMON /SYMSPD/ PTR(3,144)
DIMENSION DIS(3,2),TMP(3,2)
DO I = 1,3
TMP1 = ZERO
DO J = 1,3
TMP1 = TMP1 + PTR(I,N+J)
END DO
TMP(I,1) = TMP1
END DO
DO I = 1,3
DIS(I,1) = TMP(I,1)
END DO
RETURN
END
...@@ -1870,43 +1870,6 @@ execute_pred_commoning_cbck (struct loop *loop, void *data) ...@@ -1870,43 +1870,6 @@ execute_pred_commoning_cbck (struct loop *loop, void *data)
execute_pred_commoning (loop, dta->chains, dta->tmp_vars); execute_pred_commoning (loop, dta->chains, dta->tmp_vars);
} }
/* Returns true if we can and should unroll LOOP FACTOR times. Number
of iterations of the loop is returned in NITER. */
static bool
should_unroll_loop_p (struct loop *loop, unsigned factor,
struct tree_niter_desc *niter)
{
edge exit;
if (factor == 1)
return false;
/* Check whether unrolling is possible. We only want to unroll loops
for that we are able to determine number of iterations. We also
want to split the extra iterations of the loop from its end,
therefore we require that the loop has precisely one
exit. */
exit = single_dom_exit (loop);
if (!exit)
return false;
if (!number_of_iterations_exit (loop, exit, niter, false))
return false;
/* And of course, we must be able to duplicate the loop. */
if (!can_duplicate_loop_p (loop))
return false;
/* The final loop should be small enough. */
if (tree_num_loop_insns (loop, &eni_size_weights) * factor
> (unsigned) PARAM_VALUE (PARAM_MAX_UNROLLED_INSNS))
return false;
return true;
}
/* Base NAME and all the names in the chain of phi nodes that use it /* Base NAME and all the names in the chain of phi nodes that use it
on variable VAR. The phi nodes are recognized by being in the copies of on variable VAR. The phi nodes are recognized by being in the copies of
the header of the LOOP. */ the header of the LOOP. */
...@@ -2544,7 +2507,8 @@ tree_predictive_commoning_loop (struct loop *loop) ...@@ -2544,7 +2507,8 @@ tree_predictive_commoning_loop (struct loop *loop)
that its number of iterations is divisible by the factor. */ that its number of iterations is divisible by the factor. */
unroll_factor = determine_unroll_factor (chains); unroll_factor = determine_unroll_factor (chains);
scev_reset (); scev_reset ();
unroll = should_unroll_loop_p (loop, unroll_factor, &desc); unroll = (unroll_factor > 1
&& can_unroll_loop_p (loop, unroll_factor, &desc));
exit = single_dom_exit (loop); exit = single_dom_exit (loop);
/* Execute the predictive commoning transformations, and possibly unroll the /* Execute the predictive commoning transformations, and possibly unroll the
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment