OSDN Git Service

Define the TRIP_COUNT_TO_AHEAD_RATIO heuristic.
authorspop <spop@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 7 May 2010 17:26:02 +0000 (17:26 +0000)
committerspop <spop@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 7 May 2010 17:26:02 +0000 (17:26 +0000)
2010-05-07  Changpeng Fang  <changpeng.fang@amd.com>

* tree-ssa-loop-prefetch.c (TRIP_COUNT_TO_AHEAD_RATIO): New.
(is_loop_prefetching_profitable): Do not insert prefetches
when the trip count is not at least TRIP_COUNT_TO_AHEAD_RATIO
times the prefetch ahead distance.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159163 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/tree-ssa-loop-prefetch.c

index 6236c9e..5467fa9 100644 (file)
@@ -1,5 +1,12 @@
 2010-05-07  Changpeng Fang  <changpeng.fang@amd.com>
 
+       * tree-ssa-loop-prefetch.c (TRIP_COUNT_TO_AHEAD_RATIO): New.
+       (is_loop_prefetching_profitable): Do not insert prefetches
+       when the trip count is not at least TRIP_COUNT_TO_AHEAD_RATIO
+       times the prefetch ahead distance.
+
+2010-05-07  Changpeng Fang  <changpeng.fang@amd.com>
+
        * tree-ssa-loop-prefetch.c (is_loop_prefetching_profitable):
        Account for loop unrolling in the insn-to-prefetch ratio heuristic.
        (loop_prefetch_arrays): Pass to is_loop_prefetching_profitable
index 38d8f23..7497616 100644 (file)
@@ -199,6 +199,18 @@ along with GCC; see the file COPYING3.  If not see
 #define FENCE_FOLLOWING_MOVNT NULL_TREE
 #endif
 
+/* It is not profitable to prefetch when the trip count is not at
+   least TRIP_COUNT_TO_AHEAD_RATIO times the prefetch ahead distance.
+   For example, in a loop with a prefetch ahead distance of 10,
+   supposing that TRIP_COUNT_TO_AHEAD_RATIO is equal to 4, it is
+   profitable to prefetch when the trip count is greater or equal to
+   40.  In that case, 30 out of the 40 iterations will benefit from
+   prefetching.  */
+
+#ifndef TRIP_COUNT_TO_AHEAD_RATIO
+#define TRIP_COUNT_TO_AHEAD_RATIO 4
+#endif
+
 /* The group of references between that reuse may occur.  */
 
 struct mem_ref_group
@@ -1585,7 +1597,7 @@ is_loop_prefetching_profitable (unsigned ahead, HOST_WIDE_INT est_niter,
       return insn_to_prefetch_ratio >= MIN_INSN_TO_PREFETCH_RATIO;
     }
 
-  if (est_niter <= (HOST_WIDE_INT) ahead)
+  if (est_niter < (HOST_WIDE_INT) (TRIP_COUNT_TO_AHEAD_RATIO * ahead))
     {
       if (dump_file && (dump_flags & TDF_DETAILS))
        fprintf (dump_file,