https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113495
--- Comment #14 from JuzheZhong <juzhe.zhong at rivai dot ai> --- Oh. I known the reason now. The issue is not RISC-V backend VSETVL PASS. It's memory bug of rtx_equal_p I think. We are calling rtx_equal_p which is very costly. For example, has_nonvlmax_reg_avl is calling rtx_equal_p. So I keep all codes unchange, then replace comparison as follows: diff --git a/gcc/config/riscv/riscv-v.cc b/gcc/config/riscv/riscv-v.cc index 93a1238a5ab..1c85c8ee3c6 100644 --- a/gcc/config/riscv/riscv-v.cc +++ b/gcc/config/riscv/riscv-v.cc @@ -4988,7 +4988,7 @@ nonvlmax_avl_type_p (rtx_insn *rinsn) bool vlmax_avl_p (rtx x) { - return x && rtx_equal_p (x, RVV_VLMAX); + return x && REG_P (x) && REGNO (x) == X0_REGNUM/*rtx_equal_p (x, RVV_VLMAX)*/; } Use REGNO (x) == X0_REGNUM instead of rtx_equal_p. Memory-hog issue is gone: 939M -> 725k. So I am gonna send a patch to walk around rtx_equal_p issues which cause memory-hog.