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.