RISC-V: Fix RVV_VLMAX
commit01260a823073675e13dd1fc85cf2657a5396adf2
authorJuzhe-Zhong <juzhe.zhong@rivai.ai>
Fri, 19 Jan 2024 08:34:25 +0000 (19 16:34 +0800)
committerRobin Dapp <rdapp@ventanamicro.com>
Fri, 19 Jan 2024 09:48:56 +0000 (19 10:48 +0100)
tree8f13abdba796930bb0581304e94bdd38cffb967e
parent62b59bc4f70d02a485c527aa3277f4b4010edb6b
RISC-V: Fix RVV_VLMAX

This patch fixes memory hog found in SPEC2017 wrf benchmark which caused by
RVV_VLMAX since RVV_VLMAX generate brand new rtx by gen_rtx_REG (Pmode, X0_REGNUM)
every time we call RVV_VLMAX, that is, we are always generating garbage and redundant
(reg:DI 0 zero) rtx.

After this patch fix, the memory hog is gone.

Time variable                                   usr           sys          wall           GGC
 machine dep reorg                  :   1.99 (  9%)   0.35 ( 56%)   2.33 ( 10%)   939M ( 80%) [Before this patch]
 machine dep reorg                  :   1.71 (  6%)   0.16 ( 27%)   3.77 (  6%)   659k (  0%) [After this patch]

Time variable                                   usr           sys          wall           GGC
 machine dep reorg                  :  75.93 ( 18%)  14.23 ( 88%)  90.15 ( 21%) 33383M ( 95%) [Before this patch]
 machine dep reorg                  :  56.00 ( 14%)   7.92 ( 77%)  63.93 ( 15%)  4361k (  0%) [After this patch]

Test is running. Ok for trunk if I passed the test with no regresion ?

PR target/113495

gcc/ChangeLog:

* config/riscv/riscv-protos.h (RVV_VLMAX): Change to regno_reg_rtx[X0_REGNUM].
(RVV_VUNDEF): Ditto.
* config/riscv/riscv-vsetvl.cc: Add timevar.
gcc/config/riscv/riscv-protos.h
gcc/config/riscv/riscv-vsetvl.cc