Commit 8532678c by Changpeng Fang Committed by Sebastian Pop

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
parent 339f49ec
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> 2010-05-17 Jan Hubicka <jh@suse.cz>
* ipa-cp.c (ipcp_update_callgraph): Use ipa_is_param_used. * ipa-cp.c (ipcp_update_callgraph): Use ipa_is_param_used.
......
...@@ -225,6 +225,17 @@ struct mem_ref_group ...@@ -225,6 +225,17 @@ struct mem_ref_group
#define PREFETCH_ALL (~(unsigned HOST_WIDE_INT) 0) #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. */ /* The memory reference. */
struct mem_ref struct mem_ref
...@@ -921,6 +932,12 @@ schedule_prefetches (struct mem_ref_group *groups, unsigned unroll_factor, ...@@ -921,6 +932,12 @@ schedule_prefetches (struct mem_ref_group *groups, unsigned unroll_factor,
if (!should_issue_prefetch_p (ref)) if (!should_issue_prefetch_p (ref))
continue; 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, /* If we need to prefetch the reference each PREFETCH_MOD iterations,
and we unroll the loop UNROLL_FACTOR times, we need to insert and we unroll the loop UNROLL_FACTOR times, we need to insert
ceil (UNROLL_FACTOR / PREFETCH_MOD) instructions in each ceil (UNROLL_FACTOR / PREFETCH_MOD) instructions in each
......
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