aboutsummaryrefslogtreecommitdiff
path: root/gcc/genautomata.c
diff options
context:
space:
mode:
authorMaxim Kuvyrkov <maxim@codesourcery.com>2007-08-22 15:07:10 +0000
committerMaxim Kuvyrkov <mkuvyrkov@gcc.gnu.org>2007-08-22 15:07:10 +0000
commit1c3d0d93e2b064822db68e22a09e424e9b4abe18 (patch)
tree04fd8eda25f1831c163b4516b1d3c64f6b57fc22 /gcc/genautomata.c
parentf37dc59727f9ef6704c2063e2eef017ae3517cc6 (diff)
downloadgcc-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.c39
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 ();