diff options
author | Andrew MacLeod <amacleod@redhat.com> | 2013-10-16 15:48:47 +0000 |
---|---|---|
committer | Andrew Macleod <amacleod@gcc.gnu.org> | 2013-10-16 15:48:47 +0000 |
commit | 1ef88893457d51ad3429eab97fb6edd56c9db646 (patch) | |
tree | 8477f2ad269e9d4ebe53cbc7799f7b5a6c9dc5ca /gcc/tree-ssa-loop-niter.c | |
parent | c22df64f91c2f4fcd22eb94ed55af08095e3ad78 (diff) | |
download | gcc-1ef88893457d51ad3429eab97fb6edd56c9db646.zip gcc-1ef88893457d51ad3429eab97fb6edd56c9db646.tar.gz gcc-1ef88893457d51ad3429eab97fb6edd56c9db646.tar.bz2 |
re PR tree-optimization/58697 (wrong code (segfaults) at -O3)
PR tree-optimization/58697
* cfgloop.c (get_estimated_loop_iterations_int): Rename from
estimated_loop_iterations_int.
(max_stmt_executions_int): Call get_max_loop_iterations_int.
(get_max_loop_iterations_int): New. HWINT version of
get_max_loop_iterations.
* cfgloop.h: Add prototypes.
* loop-iv.c (find_simple_exit): call get_estimated_loop_iterations_int.
* loop-unroll.c (decide_peel_once_rolling): Call
get_estimated_loop_iterations_int.
* tree-ssa-loop-niter.c (estimated_loop_iterations_int): Add back.
* tree-ssa-loop-niter.h: Tweak prototypes.
From-SVN: r203709
Diffstat (limited to 'gcc/tree-ssa-loop-niter.c')
-rw-r--r-- | gcc/tree-ssa-loop-niter.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/gcc/tree-ssa-loop-niter.c b/gcc/tree-ssa-loop-niter.c index 8bcb1c6..113c7d1 100644 --- a/gcc/tree-ssa-loop-niter.c +++ b/gcc/tree-ssa-loop-niter.c @@ -3388,6 +3388,27 @@ estimated_loop_iterations (struct loop *loop, double_int *nit) return (get_estimated_loop_iterations (loop, nit)); } +/* Similar to estimated_loop_iterations, but returns the estimate only + if it fits to HOST_WIDE_INT. If this is not the case, or the estimate + on the number of iterations of LOOP could not be derived, returns -1. */ + +HOST_WIDE_INT +estimated_loop_iterations_int (struct loop *loop) +{ + double_int nit; + HOST_WIDE_INT hwi_nit; + + if (!estimated_loop_iterations (loop, &nit)) + return -1; + + if (!nit.fits_shwi ()) + return -1; + hwi_nit = nit.to_shwi (); + + return hwi_nit < 0 ? -1 : hwi_nit; +} + + /* Sets NIT to an upper bound for the maximum number of executions of the latch of the LOOP. If we have no reliable estimate, the function returns false, otherwise returns true. */ |