Hmmm? I didn't get that error on selftest? my diff with your v2:
$ git diff diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index 12655f7fdc65..466e1aed91c7 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -8058,8 +8058,9 @@ asm_insn_p (rtx_insn *insn) static bool vxrm_unknown_p (rtx_insn *insn) { + static const_rtx vxrm_reg = gen_rtx_REG (SImode, VXRM_REGNUM); /* Return true if there is a definition of VXRM. */ - if (reg_set_p (gen_rtx_REG (SImode, VXRM_REGNUM), insn)) + if (reg_set_p (vxrm_reg, insn)) return true; /* A CALL function may contain an instruction that modifies the VXRM, @@ -8080,8 +8081,9 @@ vxrm_unknown_p (rtx_insn *insn) static bool frm_unknown_dynamic_p (rtx_insn *insn) { + static const_rtx frm_reg = gen_rtx_REG (SImode, FRM_REGNUM); /* Return true if there is a definition of FRM. */ - if (reg_set_p (gen_rtx_REG (SImode, FRM_REGNUM), insn)) + if (reg_set_p (frm_reg, insn)) return true; /* A CALL function may contain an instruction that modifies the FRM, On Thu, Jul 13, 2023 at 1:07 PM Li, Pan2 via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: > > Thanks Jeff and Kito for comments, update the V3 version as below. > > https://gcc.gnu.org/pipermail/gcc-patches/2023-July/624347.html > > > Extract vxrm reg to a local static variable to prevent construct that again > > and again. > > The "static const_rtx vxrm_rtx = gen_rtx_REG (SImode, VXRM_REGMU)" results in > some error when selftest like below, thus patch v3 doesn't include this > change. > > /home/pli/repos/gcc/111/riscv-gnu-toolchain/build-gcc-newlib-stage1/./gcc/xgcc > -B/home/pli/repos/gcc/111/riscv-gnu-toolchain/build-gcc-newlib-stage1/./gcc/ > -xc -nostdinc /dev/null -S -o /dev/null > -fself-test=../.././gcc/gcc/testsuite/selftests > virtual memory exhausted: Invalid argument > make[2]: *** [../.././gcc/gcc/c/Make-lang.in:153: s-selftest-c] Error 1 > > Pan > > -----Original Message----- > From: Jeff Law <jeffreya...@gmail.com> > Sent: Wednesday, July 12, 2023 11:31 PM > To: Li, Pan2 <pan2...@intel.com>; gcc-patches@gcc.gnu.org > Cc: juzhe.zh...@rivai.ai; rdapp....@gmail.com; Wang, Yanzhang > <yanzhang.w...@intel.com>; kito.ch...@gmail.com > Subject: Re: [PATCH v2] RISC-V: Refactor riscv mode after for VXRM and FRM > > > > On 7/11/23 23:50, pan2...@intel.com wrote: > > From: Pan Li <pan2...@intel.com> > > > > When investigate the FRM dynmaic rounding mode, we find the global > > unknown status is quite different between the fixed-point and > > floating-point. Thus, we separate the unknown function with extracting > > some inner common functions. > > > > We will also prepare more test cases in another PATCH. > > > > Signed-off-by: Pan Li <pan2...@intel.com> > > > > gcc/ChangeLog: > > > > * config/riscv/riscv.cc (regnum_definition_p): New function. > > (insn_asm_p): Ditto. > > (riscv_vxrm_mode_after): New function for fixed-point. > > (global_vxrm_state_unknown_p): Ditto. > > (riscv_frm_mode_after): New function for floating-point. > > (global_frm_state_unknown_p): Ditto. > > (riscv_mode_after): Leverage new functions. > > (riscv_entity_mode_after): Removed. > > --- > > gcc/config/riscv/riscv.cc | 96 +++++++++++++++++++++++++++++++++------ > > 1 file changed, 82 insertions(+), 14 deletions(-) > > > > diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc > > index 38d8eb2fcf5..553fbb4435a 100644 > > --- a/gcc/config/riscv/riscv.cc > > +++ b/gcc/config/riscv/riscv.cc > > @@ -7742,19 +7742,91 @@ global_state_unknown_p (rtx_insn *insn, unsigned > > int regno) > > return false; > > } > > > > +static bool > > +regnum_definition_p (rtx_insn *insn, unsigned int regno) > Needs a function comment. This is true for each new function added. In > this specific case somethign like this might be appropriate > > /* Return TRUE if REGNO is set in INSN, FALSE otherwise. */ > > Which begs the question, is there some reason why we're not using the > existing reg_set_p or simple_regno_set from rtlanal.cc? > > > > Jeff