Hi, Until a recent change, crtl->is_leaf was initialized only during IRA startup. On NVPTX, register allocation is not done, so the backend asserts that this field is unset, and recomputes it unconditionally.
Now this field can be optionally set via ira_setup_eliminable_regset for register-pressure-sensitive optimizations, so the assumption in the backend no longer holds. Remove the assert, but avoid recomputing the field if it is already set, indicating that the function is known to be leaf. OK to apply? Thanks. Alexander PR target/78831 * config/nvptx/nvptx.c (init_softstack_frame): Remove assert. Compute crtl->is_leaf only if unset. Adjust comment. diff --git a/gcc/config/nvptx/nvptx.c b/gcc/config/nvptx/nvptx.c index 17fe551..b3f025f 100644 --- a/gcc/config/nvptx/nvptx.c +++ b/gcc/config/nvptx/nvptx.c @@ -1048,9 +1048,10 @@ init_softstack_frame (FILE *file, unsigned alignment, HOST_WIDE_INT size) bits, reg_stack, reg_frame, size); /* Usually 'crtl->is_leaf' is computed during register allocator - initialization, which is not done on NVPTX. Compute it now. */ - gcc_assert (!crtl->is_leaf); - crtl->is_leaf = leaf_function_p (); + initialization (which is not done on NVPTX) or for pressure-sensitive + optimizations. Initialize it here, except if already set. */ + if (!crtl->is_leaf) + crtl->is_leaf = leaf_function_p (); if (!crtl->is_leaf) fprintf (file, "\t\tst.shared.u%d [%s], %s;\n", bits, reg_sspslot, reg_stack);