Hi Juzhe, in principle this LGTM. It could use some function comments, though ;) > +imm_avl_p (machine_mode mode) > { > poly_uint64 nuints = GET_MODE_NUNITS (mode); > > return nuints.is_constant () > - /* The vsetivli can only hold register 0~31. */ > - ? (IN_RANGE (nuints.to_constant (), 0, 31)) > - /* Only allowed in VLS-VLMAX mode. */ > - : false; > + /* The vsetivli can only hold register 0~31. */ > + ? (IN_RANGE (nuints.to_constant (), 0, 31)) > + /* Only allowed in VLS-VLMAX mode. */ > + : false; > }
Please replace nuints (or untis) with nunits here everywhere. > +;; The index of operand[] represents the machine mode of the instruction. > +(define_attr "mode_idx" "" > + (cond [(eq_attr "type" > "vlde,vste,vldm,vstm,vlds,vsts,vldux,vldox,vldff,vldr,vstr,\ > + > vlsegde,vlsegds,vlsegdux,vlsegdox,vlsegdff,vialu,vext,vicalu,\ > + > vshift,vicmp,viminmax,vimul,vidiv,vimuladd,vimerge,vimov,\ > + > vsalu,vaalu,vsmul,vsshift,vfalu,vfmul,vfdiv,vfmuladd,vfsqrt,vfrecp,\ > + vfcmp,vfminmax,vfsgnj,vfclass,vfmerge,vfmov,\ > + > vfcvtitof,vfncvtitof,vfncvtftoi,vfncvtftof,vmalu,vmiota,vmidx,\ > + > vimovxv,vfmovfv,vslideup,vslidedown,vislide1up,vislide1down,vfslide1up,vfslide1down,\ > + vgather,vcompress,vmov") > + (const_int 0) > + > + (eq_attr "type" "vimovvx,vfmovvf") > + (const_int 1) > + > + (eq_attr "type" "vssegte,vnshift,vmpop,vmffs") > + (const_int 2) I'm not that fond of the growing number of necessary indices even though I realize that it's the most painless way for now. Why is vnshift "2" and not "0", though? "4" for vnclip also looks dubious. I didn't go through all of them. Regards Robin