Define PREFETCH_MOD_TO_UNROLL_FACTOR_RATIO heuristic.

2010-05-17  Changpeng Fang  <changpeng.fang@amd.com>

	* tree-ssa-loop-prefetch.c (PREFETCH_MOD_TO_UNROLL_FACTOR_RATIO): New.
	(schedule_prefetches): Do not generate a prefetch if the unroll factor
	is far from what is required by the prefetch.

From-SVN: r159514
This commit is contained in:
Changpeng Fang 2010-05-17 22:33:53 +00:00 committed by Sebastian Pop
parent 339f49ec21
commit 8532678c05
2 changed files with 23 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2010-05-17 Changpeng Fang <changpeng.fang@amd.com>
* tree-ssa-loop-prefetch.c (PREFETCH_MOD_TO_UNROLL_FACTOR_RATIO): New.
(schedule_prefetches): Do not generate a prefetch if the unroll factor
is far from what is required by the prefetch.
2010-05-17 Jan Hubicka <jh@suse.cz>
* ipa-cp.c (ipcp_update_callgraph): Use ipa_is_param_used.

View File

@ -225,6 +225,17 @@ struct mem_ref_group
#define PREFETCH_ALL (~(unsigned HOST_WIDE_INT) 0)
/* Do not generate a prefetch if the unroll factor is significantly less
than what is required by the prefetch. This is to avoid redundant
prefetches. For example, if prefetch_mod is 16 and unroll_factor is
1, this means prefetching requires unrolling the loop 16 times, but
the loop is not going to be unrolled. In this case (ratio = 16),
prefetching is not likely to be beneficial. */
#ifndef PREFETCH_MOD_TO_UNROLL_FACTOR_RATIO
#define PREFETCH_MOD_TO_UNROLL_FACTOR_RATIO 8
#endif
/* The memory reference. */
struct mem_ref
@ -921,6 +932,12 @@ schedule_prefetches (struct mem_ref_group *groups, unsigned unroll_factor,
if (!should_issue_prefetch_p (ref))
continue;
/* The loop is far from being sufficiently unrolled for this
prefetch. Do not generate prefetch to avoid many redudant
prefetches. */
if (ref->prefetch_mod / unroll_factor > PREFETCH_MOD_TO_UNROLL_FACTOR_RATIO)
continue;
/* If we need to prefetch the reference each PREFETCH_MOD iterations,
and we unroll the loop UNROLL_FACTOR times, we need to insert
ceil (UNROLL_FACTOR / PREFETCH_MOD) instructions in each