RISC-V: Handle no_insn in TARGET_SCHED_VARIABLE_ISSUE.
Reference: d0bc0cb66b
RISC-V should also be implemented to handle no_insn patterns for pipelining.
gcc/ChangeLog:
* config/riscv/riscv.cc (riscv_sched_variable_issue): New function.
(TARGET_SCHED_VARIABLE_ISSUE): New macro.
Co-authored-by: Philipp Tomsich <philipp.tomsich@vrull.eu>
Co-authored-by: Jeff Law <jlaw@ventanamicro.com>
This commit is contained in:
parent
a16dc729fd
commit
f088b768d0
1 changed files with 28 additions and 0 deletions
|
@ -6698,6 +6698,31 @@ riscv_issue_rate (void)
|
|||
return tune_param->issue_rate;
|
||||
}
|
||||
|
||||
/* Implement TARGET_SCHED_VARIABLE_ISSUE. */
|
||||
static int
|
||||
riscv_sched_variable_issue (FILE *, int, rtx_insn *insn, int more)
|
||||
{
|
||||
if (DEBUG_INSN_P (insn))
|
||||
return more;
|
||||
|
||||
rtx_code code = GET_CODE (PATTERN (insn));
|
||||
if (code == USE || code == CLOBBER)
|
||||
return more;
|
||||
|
||||
/* GHOST insns are used for blockage and similar cases which
|
||||
effectively end a cycle. */
|
||||
if (get_attr_type (insn) == TYPE_GHOST)
|
||||
return 0;
|
||||
|
||||
#if 0
|
||||
/* If we ever encounter an insn with an unknown type, trip
|
||||
an assert so we can find and fix this problem. */
|
||||
gcc_assert (get_attr_type (insn) != TYPE_UNKNOWN);
|
||||
#endif
|
||||
|
||||
return more - 1;
|
||||
}
|
||||
|
||||
/* Auxiliary function to emit RISC-V ELF attribute. */
|
||||
static void
|
||||
riscv_emit_attribute ()
|
||||
|
@ -8420,6 +8445,9 @@ riscv_frame_pointer_required (void)
|
|||
#undef TARGET_SCHED_ISSUE_RATE
|
||||
#define TARGET_SCHED_ISSUE_RATE riscv_issue_rate
|
||||
|
||||
#undef TARGET_SCHED_VARIABLE_ISSUE
|
||||
#define TARGET_SCHED_VARIABLE_ISSUE riscv_sched_variable_issue
|
||||
|
||||
#undef TARGET_FUNCTION_OK_FOR_SIBCALL
|
||||
#define TARGET_FUNCTION_OK_FOR_SIBCALL riscv_function_ok_for_sibcall
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue