diff options
author | Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz> | 2004-09-01 22:58:55 +0200 |
---|---|---|
committer | Zdenek Dvorak <rakdver@gcc.gnu.org> | 2004-09-01 20:58:55 +0000 |
commit | 6d9901e75f19dfd34480c4cf25859b7d4a3bff01 (patch) | |
tree | 4f8dfeb1abc654e971b9c4f5130e5a5bacce5cbb /gcc/toplev.c | |
parent | d7fe1183215b7a04b62839775c775e6c4a5c90e1 (diff) | |
download | gcc-6d9901e75f19dfd34480c4cf25859b7d4a3bff01.tar.gz |
Makefile.in (rtl-profile.o, [...]): Add GCC_H dependency.
* Makefile.in (rtl-profile.o, value-prof.o): Add GCC_H dependency.
* common.opt (fspeculative-prefetching): New.
* flags.h (flag_speculative_prefetching_set): Declare.
* gcov-io.c (gcov_write_counter, gcov_read_counter): Allow negative
values.
* opts.c (flag_sepculative_prefetching_set): New variable.
(common_handle_option): Handle -fspeculative-prefetching.
* passes.c (rest_of_compilation): Ditto.
* profile.c (instrument_values, compute_value_histograms, branch_prob):
Use vectors instead of arrays.
* toplev.c (process_options): Handle -fspeculative-prefetching.
* rtl-profile.c: Include ggc.h.
(rtl_gen_interval_profiler, rtl_gen_pow2_profiler,
rtl_gen_one_value_profiler_no_edge_manipulation,
rtl_gen_one_value_profiler, rtl_gen_const_delta_profiler): Type of
argument changed.
* tree-profile.c (tree_gen_interval_profiler, tree_gen_pow2_profiler,
tree_gen_one_value_profiler, tree_gen_const_delta_profiler): Type of
argument changed.
* value-prof.c: Include ggc.h.
(NOPREFETCH_RANGE_MIN, NOPREFETCH_RANGE_MAX): New
macros.
(insn_prefetch_values_to_profile, find_mem_reference_1,
find_mem_reference_2, find_mem_reference, gen_speculative_prefetch,
speculative_prefetching_transform): New.
(value_profile_transformations): Call speculative_prefetching_transform.
(insn_values_to_profile): Call insn_prefetch_values_to_profile.
(insn_divmod_values_to_profile, rtl_find_values_to_profile,
tree_find_values_to_profile, find_values to profile): Use vectors
instead of arrays.
(free_profiled_values): Removed.
* value-prof.h (struct histogram_value): Renamed to
struct histogram_value_t.
(histogram_value, histogram_values): New types.
(find_values_to_profile): Declaration changed.
(free_profiled_values): Removed.
(struct profile_hooks): Type of argument of the hooks changed to
histogram_value.
* doc/invoke.texi (-fspeculative-prefetching): Document.
From-SVN: r86930
Diffstat (limited to 'gcc/toplev.c')
-rw-r--r-- | gcc/toplev.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/gcc/toplev.c b/gcc/toplev.c index 34db3bd4a76..853f17048c0 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -1730,6 +1730,17 @@ process_options (void) if (flag_value_profile_transformations) flag_profile_values = 1; + /* Speculative prefetching implies the value profiling. We also switch off + the prefetching in the loop optimizer, so that we do not emit double + prefetches. TODO -- we should teach these two to cooperate; the loop + based prefetching may sometimes do a better job, especially in connection + with reuse analysis. */ + if (flag_speculative_prefetching) + { + flag_profile_values = 1; + flag_prefetch_loop_arrays = 0; + } + /* Warn about options that are not supported on this machine. */ #ifndef INSN_SCHEDULING if (flag_schedule_insns || flag_schedule_insns_after_reload) @@ -1898,12 +1909,24 @@ process_options (void) warning ("-fprefetch-loop-arrays not supported for this target"); flag_prefetch_loop_arrays = 0; } + if (flag_speculative_prefetching) + { + if (flag_speculative_prefetching_set) + WARNIng ("-fspeculative-prefetching not supported for this target"); + flag_speculative_prefetching = 0; + } #else if (flag_prefetch_loop_arrays && !HAVE_prefetch) { warning ("-fprefetch-loop-arrays not supported for this target (try -march switches)"); flag_prefetch_loop_arrays = 0; } + if (flag_speculative_prefetching && !HAVE_prefetch) + { + if (flag_speculative_prefetching_set) + warning ("-fspeculative-prefetching not supported for this target (try -march switches)"); + flag_speculative_prefetching = 0; + } #endif /* This combination of options isn't handled for i386 targets and doesn't |