diff options
author | Maxim Kuvyrkov <maxim@codesourcery.com> | 2007-08-22 15:07:10 +0000 |
---|---|---|
committer | Maxim Kuvyrkov <mkuvyrkov@gcc.gnu.org> | 2007-08-22 15:07:10 +0000 |
commit | 1c3d0d93e2b064822db68e22a09e424e9b4abe18 (patch) | |
tree | 04fd8eda25f1831c163b4516b1d3c64f6b57fc22 /gcc/genautomata.c | |
parent | f37dc59727f9ef6704c2063e2eef017ae3517cc6 (diff) | |
download | gcc-1c3d0d93e2b064822db68e22a09e424e9b4abe18.zip gcc-1c3d0d93e2b064822db68e22a09e424e9b4abe18.tar.gz gcc-1c3d0d93e2b064822db68e22a09e424e9b4abe18.tar.bz2 |
target.h (struct gcc_target.sched: dfa_pre_advance_cycle, [...]): New scheduler hooks.
* target.h (struct gcc_target.sched: dfa_pre_advance_cycle,
dfa_post_advance_cycle): New scheduler hooks.
* target-def.h (TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE,
TARGET_SCHED_DFA_POST_ADVANCE_CYCLE): New macros to initialize
new hooks.
(TARGET_SCHED): Use them.
* doc/tm.texi (TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE,
TARGET_SCHED_DFA_POST_ADVANCE_CYCLE): Document new hooks.
* haifa-sched.c (advance_one_cycle): Invoke new hooks.
* genautomata.c (insn_has_dfa_reservation_p): New DFA interface
function to facilitate debugging.
(INSN_HAS_DFA_RESERVATION_P_FUNC_NAME): New macro.
(output_insn_has_dfa_reservation_p): New static function to output
insn_has_dfa_reservation_p ().
(write_automata): Use it.
* genattr.c (main): Output declaration for
insn_has_dfa_reservation_p ().
From-SVN: r127707
Diffstat (limited to 'gcc/genautomata.c')
-rw-r--r-- | gcc/genautomata.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/gcc/genautomata.c b/gcc/genautomata.c index 5657a0d..96737bc 100644 --- a/gcc/genautomata.c +++ b/gcc/genautomata.c @@ -6859,6 +6859,8 @@ output_reserved_units_table_name (FILE *f, automaton_t automaton) #define CPU_UNIT_RESERVATION_P_FUNC_NAME "cpu_unit_reservation_p" +#define INSN_HAS_DFA_RESERVATION_P_FUNC_NAME "insn_has_dfa_reservation_p" + #define DFA_CLEAN_INSN_CACHE_FUNC_NAME "dfa_clean_insn_cache" #define DFA_CLEAR_SINGLE_INSN_CACHE_FUNC_NAME "dfa_clear_single_insn_cache" @@ -8346,6 +8348,42 @@ output_cpu_unit_reservation_p (void) fprintf (output_file, " return 0;\n}\n\n"); } +/* The following function outputs a function to check if insn + has a dfa reservation. */ +static void +output_insn_has_dfa_reservation_p (void) +{ + fprintf (output_file, + "bool\n%s (rtx %s ATTRIBUTE_UNUSED)\n{\n", + INSN_HAS_DFA_RESERVATION_P_FUNC_NAME, + INSN_PARAMETER_NAME); + + if (DECL_INSN_RESERV (advance_cycle_insn_decl)->insn_num == 0) + { + fprintf (output_file, " return false;\n}\n\n"); + return; + } + + fprintf (output_file, " int %s;\n\n", INTERNAL_INSN_CODE_NAME); + + fprintf (output_file, " if (%s == 0)\n %s = %s;\n", + INSN_PARAMETER_NAME, + INTERNAL_INSN_CODE_NAME, ADVANCE_CYCLE_VALUE_NAME); + fprintf (output_file, " else\n\ + {\n\ + %s = %s (%s);\n\ + if (%s > %s)\n\ + %s = %s;\n\ + }\n\n", + INTERNAL_INSN_CODE_NAME, DFA_INSN_CODE_FUNC_NAME, + INSN_PARAMETER_NAME, + INTERNAL_INSN_CODE_NAME, ADVANCE_CYCLE_VALUE_NAME, + INTERNAL_INSN_CODE_NAME, ADVANCE_CYCLE_VALUE_NAME); + + fprintf (output_file, " return %s != %s;\n}\n\n", + INTERNAL_INSN_CODE_NAME, ADVANCE_CYCLE_VALUE_NAME); +} + /* The function outputs PHR interface functions `dfa_clean_insn_cache' and 'dfa_clear_single_insn_cache'. */ static void @@ -9138,6 +9176,7 @@ write_automata (void) fprintf (output_file, "\n#if %s\n\n", CPU_UNITS_QUERY_MACRO_NAME); output_get_cpu_unit_code_func (); output_cpu_unit_reservation_p (); + output_insn_has_dfa_reservation_p (); fprintf (output_file, "\n#endif /* #if %s */\n\n", CPU_UNITS_QUERY_MACRO_NAME); output_dfa_clean_insn_cache_func (); |