From f088b768d01ae42385697584a2bcac141685dce2 Mon Sep 17 00:00:00 2001 From: Jin Ma Date: Wed, 9 Aug 2023 13:52:06 -0600 Subject: [PATCH] RISC-V: Handle no_insn in TARGET_SCHED_VARIABLE_ISSUE. Reference: https://github.com/gcc-mirror/gcc/commit/d0bc0cb66bcb0e6a5a5a31a9e900e8ccc98e34e5 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 Co-authored-by: Jeff Law --- gcc/config/riscv/riscv.cc | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index 7f2041a54ba6..dfb519ab9a80 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -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 -- 2.47.2