summaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-loop-prefetch.c
diff options
context:
space:
mode:
authorkrebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4>2010-05-11 07:29:59 +0000
committerkrebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4>2010-05-11 07:29:59 +0000
commit8234f09041f74605ace7f36a41ddca962d33a18e (patch)
treef5d086e41dea69572170f50446b3a4c03d67579c /gcc/tree-ssa-loop-prefetch.c
parent5d68c00f1c9af084246849a78843cb36b7c695da (diff)
downloadgcc-8234f09041f74605ace7f36a41ddca962d33a18e.tar.gz
2010-05-11 Christian Borntraeger <borntraeger@de.ibm.com>
* tree-ssa-loop-prefetch.c (prune_ref_by_group_reuse): Reset prefetch_before to PREFETCH_ALL if to accesses "meet" beyond cache size. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159257 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-ssa-loop-prefetch.c')
-rw-r--r--gcc/tree-ssa-loop-prefetch.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/tree-ssa-loop-prefetch.c b/gcc/tree-ssa-loop-prefetch.c
index 2fc901d907b..daf9956d3bc 100644
--- a/gcc/tree-ssa-loop-prefetch.c
+++ b/gcc/tree-ssa-loop-prefetch.c
@@ -716,6 +716,9 @@ prune_ref_by_group_reuse (struct mem_ref *ref, struct mem_ref *by,
hit_from = ddown (delta_b, PREFETCH_BLOCK) * PREFETCH_BLOCK;
prefetch_before = (hit_from - delta_r + step - 1) / step;
+ /* Do not reduce prefetch_before if we meet beyond cache size. */
+ if (prefetch_before > abs (L2_CACHE_SIZE_BYTES / step))
+ prefetch_before = PREFETCH_ALL;
if (prefetch_before < ref->prefetch_before)
ref->prefetch_before = prefetch_before;
@@ -746,6 +749,9 @@ prune_ref_by_group_reuse (struct mem_ref *ref, struct mem_ref *by,
reduced_prefetch_block, align_unit);
if (miss_rate <= ACCEPTABLE_MISS_RATE)
{
+ /* Do not reduce prefetch_before if we meet beyond cache size. */
+ if (prefetch_before > L2_CACHE_SIZE_BYTES / PREFETCH_BLOCK)
+ prefetch_before = PREFETCH_ALL;
if (prefetch_before < ref->prefetch_before)
ref->prefetch_before = prefetch_before;