Hi, Jeff. (define_insn_and_split "*mov<VT:mode>_<P:mode>" [(set (match_operand:VT 0 "reg_or_mem_operand" "=vr,vr, m") (match_operand:VT 1 "reg_or_mem_operand" " vr, m,vr")) (clobber (match_scratch:P 2 "=X,&r,&r")) (clobber (match_scratch:P 3 "=X,&r,&r")) (clobber (match_scratch:P 4 "=X,&r,&r"))] "TARGET_VECTOR" "#" "&& reload_completed" [(const_int 0)] { riscv_vector::expand_tuple_move (operands); DONE; } [(set_attr "type" "vmov,vlde,vste") (set_attr "mode" "<VT:MODE>") (set (attr "avl_type") (const_int INVALID_ATTRIBUTE))])
We classify this pattern as vlde/vste/vmov, this pattern doesn't have AVL TYPE operands. I realize that when I am adding new pre-RA optimization PASS it caused issue. juzhe.zh...@rivai.ai From: Jeff Law Date: 2023-10-23 10:24 To: Juzhe-Zhong; gcc-patches CC: kito.cheng; kito.cheng; rdapp.gcc Subject: Re: [PATCH] RISC-V: Fix AVL_TYPE attribute of tuple mode mov<mode> On 10/22/23 16:46, Juzhe-Zhong wrote: > The tuple mode mov<mode> pattern doesn't have avl_type so it is invalid > attribute. > > gcc/ChangeLog: > > * config/riscv/vector.md: Fix avl_type attribute of tuple mov<mode>. Presumably you got a fault or something similar trying to compute the avl_type attr when trying to access operands[7]? from this code: > (eq_attr "type" > "vlde,vldff,vste,vimov,vimov,vimov,vfmov,vext,vimerge,\ > > vfsqrt,vfrecp,vfmerge,vfcvtitof,vfcvtftoi,vfwcvtitof,\ > > vfwcvtftoi,vfwcvtftof,vfncvtitof,vfncvtftoi,vfncvtftof,\ > vfclass,vired,viwred,vfredu,vfredo,vfwredu,vfwredo,\ > vimovxv,vfmovfv,vlsegde,vlsegdff") > (symbol_ref "INTVAL (operands[7])") > (eq_attr "type" "vldm,vstm,vimov,vmalu,vmalu") OK for the trunk. Jeff