aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-loop-prefetch.c
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2012-05-07 08:48:44 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2012-05-07 08:48:44 +0000
commit1e3733905bf2731e15d9792c7fa284f0eb5ca924 (patch)
tree1cf80fdb678240c3bfe2c2d0fef301b27d208b02 /gcc/tree-ssa-loop-prefetch.c
parente3a2ec56bc0b746311ed9a705eeef1f59e3e5a16 (diff)
downloadgcc-1e3733905bf2731e15d9792c7fa284f0eb5ca924.zip
gcc-1e3733905bf2731e15d9792c7fa284f0eb5ca924.tar.gz
gcc-1e3733905bf2731e15d9792c7fa284f0eb5ca924.tar.bz2
tree-ssa-loop-prefetch.c (determine_loop_nest_reuse): Return whether we failed to compute data dependences.
2012-05-07 Richard Guenther <rguenther@suse.de> * tree-ssa-loop-prefetch.c (determine_loop_nest_reuse): Return whether we failed to compute data dependences. (loop_prefetch_arrays): Fail if we failed. From-SVN: r187227
Diffstat (limited to 'gcc/tree-ssa-loop-prefetch.c')
-rw-r--r--gcc/tree-ssa-loop-prefetch.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/gcc/tree-ssa-loop-prefetch.c b/gcc/tree-ssa-loop-prefetch.c
index 19a6a22..00f30a1 100644
--- a/gcc/tree-ssa-loop-prefetch.c
+++ b/gcc/tree-ssa-loop-prefetch.c
@@ -1495,9 +1495,9 @@ self_reuse_distance (data_reference_p dr, unsigned *loop_sizes, unsigned n,
/* Determines the distance till the first reuse of each reference in REFS
in the loop nest of LOOP. NO_OTHER_REFS is true if there are no other
- memory references in the loop. */
+ memory references in the loop. Return false if the analysis fails. */
-static void
+static bool
determine_loop_nest_reuse (struct loop *loop, struct mem_ref_group *refs,
bool no_other_refs)
{
@@ -1515,7 +1515,7 @@ determine_loop_nest_reuse (struct loop *loop, struct mem_ref_group *refs,
ddr_p dep;
if (loop->inner)
- return;
+ return true;
/* Find the outermost loop of the loop nest of loop (we require that
there are no sibling loops inside the nest). */
@@ -1585,7 +1585,8 @@ determine_loop_nest_reuse (struct loop *loop, struct mem_ref_group *refs,
ref->independent_p = true;
}
- compute_all_dependences (datarefs, &dependences, vloops, true);
+ if (!compute_all_dependences (datarefs, &dependences, vloops, true))
+ return false;
FOR_EACH_VEC_ELT (ddr_p, dependences, i, dep)
{
@@ -1664,6 +1665,8 @@ determine_loop_nest_reuse (struct loop *loop, struct mem_ref_group *refs,
fprintf (dump_file, " ref %p distance %u\n",
(void *) ref, ref->reuse_distance);
}
+
+ return true;
}
/* Determine whether or not the trip count to ahead ratio is too small based
@@ -1826,7 +1829,8 @@ loop_prefetch_arrays (struct loop *loop)
if (nothing_to_prefetch_p (refs))
goto fail;
- determine_loop_nest_reuse (loop, refs, no_other_refs);
+ if (!determine_loop_nest_reuse (loop, refs, no_other_refs))
+ goto fail;
/* Step 3: determine unroll factor. */
unroll_factor = determine_unroll_factor (loop, refs, ninsns, &desc,