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:
Jin Ma 2023-08-09 13:52:06 -06:00 committed by Jeff Law
parent a16dc729fd
commit f088b768d0

View file

@ -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