diff options
author | Zack Weinberg <zack@gcc.gnu.org> | 2001-08-18 20:25:54 +0000 |
---|---|---|
committer | Zack Weinberg <zack@gcc.gnu.org> | 2001-08-18 20:25:54 +0000 |
commit | c237e94a5f573ec6b80c4b37ea49b8ab24e68c0d (patch) | |
tree | aaae6cbc02ac7bffabdd0d787362314965ff9d55 /gcc/config/m32r/m32r.c | |
parent | ef89d648b84b126fe6c15be5b09105bf705aa60a (diff) | |
download | gcc-c237e94a5f573ec6b80c4b37ea49b8ab24e68c0d.zip gcc-c237e94a5f573ec6b80c4b37ea49b8ab24e68c0d.tar.gz gcc-c237e94a5f573ec6b80c4b37ea49b8ab24e68c0d.tar.bz2 |
haifa-sched.c: Convert to target hooks.
* haifa-sched.c: Convert to target hooks. Macros replaced
are ISSUE_RATE, ADJUST_COST, ADJUST_PRIORITY, MD_SCHED_INIT,
MD_SCHED_REORDER, MD_SCHED_REORDER2, MD_SCHED_VARIABLE_ISSUE,
MD_SCHED_FINISH, and HAVE_cycle_display.
* target-def.h (TARGET_SCHED_ADJUST_COST,
TARGET_SCHED_ADJUST_PRIORITY, TARGET_SCHED_ISSUE_RATE,
TARGET_SCHED_VARIABLE_ISSUE, TARGET_SCHED_INIT,
TARGET_SCHED_FINISH, TARGET_SCHED_REORDER,
TARGET_SCHED_REORDER2, TARGET_SCHED_CYCLE_DISPLAY):
New hook #defines to be overridden.
(TARGET_SCHED): Bring them all together.
(TARGET_INITIALIZER): Update.
* target.h: Don't forward declare struct rtx_def. Use 'rtx'
instead of 'struct rtx_def *' throughout.
(struct sched): New set of hooks for the scheduler.
* Makefile.in (haifa-sched.o): Depend on target.h.
* doc/tm.texi: Document the new scheduler hooks, together in
their own section, instead of scattered around.
Fix a bunch of underfull/overfull hboxes.
* a29k.h, alpha.h, arm.h, c4x.h, convex.h, d30v.h, i386.h,
ia64.h, m32r.h, m88k.h, mips.h, pa.h, rs6000.h, s390.h, sh.h,
sparc.h: Don't define any of the old scheduler macros.
* a29k.c, alpha.c, arm.c, c4x.c, convex.c, d30v.c, i386.c,
ia64.c, m32r.c, m88k.c, mips.c, pa.c, rs6000.c, s390.c, sh.c,
sparc.c: Create hook functions from code extracted from
corresponding target header, or make existing hooks static, as
appropriate. Set the appropriate entries in targetm.
* alpha-protos.h, arm-protos.h, c4x-protos.h, d30v-protos.h,
i386-protos.h, ia64-protos.h, m32r-protos.h, pa-protos.h,
rs6000-protos.h, s390-protos.h, sparc-protos.h:
Remove prototypes for functions which are now static.
* d30v.h, d30v.c, m32r.h, m32r.c: Remove #ifdef HAIFA and
related gunk; the Haifa scheduler is now the only choice.
From-SVN: r45009
Diffstat (limited to 'gcc/config/m32r/m32r.c')
-rw-r--r-- | gcc/config/m32r/m32r.c | 63 |
1 files changed, 47 insertions, 16 deletions
diff --git a/gcc/config/m32r/m32r.c b/gcc/config/m32r/m32r.c index a37ed65..a9ca24f 100644 --- a/gcc/config/m32r/m32r.c +++ b/gcc/config/m32r/m32r.c @@ -56,7 +56,7 @@ const char * m32r_sdata_string = M32R_SDATA_DEFAULT; enum m32r_sdata m32r_sdata; /* Scheduler support */ -int m32r_sched_odd_word_p; +static int m32r_sched_odd_word_p; /* Forward declaration. */ static void init_reg_tables PARAMS ((void)); @@ -66,6 +66,14 @@ static int m32r_valid_decl_attribute PARAMS ((tree, tree, tree, tree)); static void m32r_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT)); static void m32r_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT)); + +static int m32r_adjust_cost PARAMS ((rtx, rtx, rtx, int)); +static int m32r_adjust_priority PARAMS ((rtx, int)); +static void m32r_sched_init PARAMS ((FILE *, int)); +static int m32r_sched_reorder PARAMS ((FILE *, int, rtx *, int *, int)); +static int m32r_variable_issue PARAMS ((FILE *, int, rtx, int)); +static int m32r_issue_rate PARAMS ((void)); + /* Initialize the GCC target structure. */ #undef TARGET_VALID_DECL_ATTRIBUTE @@ -76,6 +84,19 @@ static void m32r_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT)); #undef TARGET_ASM_FUNCTION_EPILOGUE #define TARGET_ASM_FUNCTION_EPILOGUE m32r_output_function_epilogue +#undef TARGET_SCHED_ADJUST_COST +#define TARGET_SCHED_ADJUST_COST m32r_adjust_cost +#undef TARGET_SCHED_ADJUST_PRIORITY +#define TARGET_SCHED_ADJUST_PRIORITY m32r_adjust_priority +#undef TARGET_SCHED_ISSUE_RATE +#define TARGET_SCHED_ISSUE_RATE m32r_issue_rate +#undef TARGET_SCHED_VARIABLE_ISSUE +#define TARGET_SCHED_VARIABLE_ISSUE m32r_variable_issue +#undef TARGET_SCHED_INIT +#define TARGET_SCHED_INIT m32r_sched_init +#undef TARGET_SCHED_REORDER +#define TARGET_SCHED_REORDER m32r_sched_reorder + struct gcc_target targetm = TARGET_INITIALIZER; /* Called by OVERRIDE_OPTIONS to initialize various things. */ @@ -1471,7 +1492,7 @@ m32r_va_arg (valist, type) return addr_rtx; } -int +static int m32r_adjust_cost (insn, link, dep_insn, cost) rtx insn ATTRIBUTE_UNUSED; rtx link ATTRIBUTE_UNUSED; @@ -1497,7 +1518,7 @@ m32r_is_insn (insn) /* Increase the priority of long instructions so that the short instructions are scheduled ahead of the long ones. */ -int +static int m32r_adjust_priority (insn, priority) rtx insn; int priority; @@ -1512,7 +1533,7 @@ m32r_adjust_priority (insn, priority) /* Initialize for scheduling a group of instructions. */ -void +static void m32r_sched_init (stream, verbose) FILE * stream ATTRIBUTE_UNUSED; int verbose ATTRIBUTE_UNUSED; @@ -1523,15 +1544,18 @@ m32r_sched_init (stream, verbose) /* Reorder the schedulers priority list if needed */ -void -m32r_sched_reorder (stream, verbose, ready, n_ready) +static int +m32r_sched_reorder (stream, verbose, ready, n_readyp, clock) FILE * stream; int verbose; rtx * ready; - int n_ready; + int *n_readyp; + int clock ATTRIBUTE_UNUSED; { + int n_ready = *n_readyp; + if (TARGET_DEBUG) - return; + return m32r_issue_rate (); if (verbose <= 7) stream = (FILE *)0; @@ -1605,11 +1629,8 @@ m32r_sched_reorder (stream, verbose, ready, n_ready) memcpy (ready, new_head, sizeof (rtx) * n_ready); if (stream) { -#ifdef HAIFA - fprintf (stream, ";;\t\t::: New ready list: "); - debug_ready_list (ready, n_ready); -#else int i; + fprintf (stream, ";;\t\t::: New ready list: "); for (i = 0; i < n_ready; i++) { rtx insn = ready[i]; @@ -1627,17 +1648,27 @@ m32r_sched_reorder (stream, verbose, ready, n_ready) } fprintf (stream, "\n"); -#endif } } + return m32r_issue_rate (); +} + +/* Indicate how many instructions can be issued at the same time. + This is sort of a lie. The m32r can issue only 1 long insn at + once, but it can issue 2 short insns. The default therefore is + set at 2, but this can be overridden by the command line option + -missue-rate=1 */ +static int +m32r_issue_rate () +{ + return ((TARGET_LOW_ISSUE_RATE) ? 1 : 2); } - /* If we have a machine that can issue a variable # of instructions per cycle, indicate how many more instructions can be issued after the current one. */ -int -m32r_sched_variable_issue (stream, verbose, insn, how_many) +static int +m32r_variable_issue (stream, verbose, insn, how_many) FILE * stream; int verbose; rtx insn; |