On Mon, 14 Nov 2022 at 17:29, jiawei <jia...@iscas.ac.cn> wrote: > > Skip add insn generate if the adjust size equal to zero. > > gcc/ChangeLog: > > * config/riscv/riscv.cc (riscv_expand_epilogue): > New if control segement. > > --- > gcc/config/riscv/riscv.cc | 18 ++++++++++-------- > 1 file changed, 10 insertions(+), 8 deletions(-) > > diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc > index 02a01ca0b7c..af138db7545 100644 > --- a/gcc/config/riscv/riscv.cc > +++ b/gcc/config/riscv/riscv.cc > @@ -5186,24 +5186,26 @@ riscv_expand_epilogue (int style) > } > > /* Get an rtx for STEP1 that we can add to BASE. */ > - rtx adjust = GEN_INT (step1.to_constant ()); > - if (!SMALL_OPERAND (step1.to_constant ())) > + if (step1.to_constant () != 0){ > + rtx adjust = GEN_INT (step1.to_constant ()); > + if (!SMALL_OPERAND (step1.to_constant ()))
Please take a look at the recent improvements for the add<mode>3 expander (recently submitted as https://patchwork.ozlabs.org/project/gcc/patch/20221109230718.3240479-1-philipp.toms...@vrull.eu/). Maybe you also want to use the test for the addi_operand(...) instead of SMALL_OPERAND? > { > riscv_emit_move (RISCV_PROLOGUE_TEMP (Pmode), adjust); > adjust = RISCV_PROLOGUE_TEMP (Pmode); > } > > - insn = emit_insn ( > + insn = emit_insn ( > gen_add3_insn (stack_pointer_rtx, stack_pointer_rtx, adjust)); > > - rtx dwarf = NULL_RTX; > - rtx cfa_adjust_rtx = gen_rtx_PLUS (Pmode, stack_pointer_rtx, > + rtx dwarf = NULL_RTX; > + rtx cfa_adjust_rtx = gen_rtx_PLUS (Pmode, stack_pointer_rtx, > GEN_INT (step2)); > > - dwarf = alloc_reg_note (REG_CFA_DEF_CFA, cfa_adjust_rtx, dwarf); > - RTX_FRAME_RELATED_P (insn) = 1; > + dwarf = alloc_reg_note (REG_CFA_DEF_CFA, cfa_adjust_rtx, dwarf); > + RTX_FRAME_RELATED_P (insn) = 1; > > - REG_NOTES (insn) = dwarf; > + REG_NOTES (insn) = dwarf; > + } > } > else if (frame_pointer_needed) > { > -- > 2.25.1 >