- riscv_gpr_save_operation_p might try to match parallel on other
patterns like inline asm pattern, and then it might trigger ther
assertion checking there, so we could trun it into a early exit check.
gcc/ChangeLog:
PR target/95683
* config/riscv/riscv.c (riscv_gpr_save_operation_p): Remove
assertion and turn it into a early exit check.
gcc/testsuite/ChangeLog
PR target/95683
* gcc.target/riscv/pr95683.c: New.
riscv_gpr_save_operation_p (rtx op)
{
unsigned len = XVECLEN (op, 0);
- gcc_assert (len <= ARRAY_SIZE (gpr_save_reg_order));
+
+ if (len > ARRAY_SIZE (gpr_save_reg_order))
+ return false;
+
for (unsigned i = 0; i < len; i++)
{
rtx elt = XVECEXP (op, 0, i);
--- /dev/null
+/* PR target/95683 */
+/* { dg-options "-Os" } */
+/* { dg-do compile } */
+void a() {
+ asm(""
+ :
+ :
+ : "a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "t0", "t1", "t2", "t3",
+ "t4", "t5", "t6", "ra");
+}