> +(define_insn "@nds_vfwcvt_bf16<mode>" > + [(set (match_operand:NDS_VWEXTBF 0 "register_operand" > "=&vr") > + (unspec_volatile:NDS_VWEXTBF > + [(float_extend:NDS_VWEXTBF > + (match_operand:<NDS_V_DOUBLE_TRUNC_BF> 1 "register_operand" " > vr"))] > + UNSPEC_NDS_VFWCVTBF16))] > + "TARGET_VECTOR && TARGET_XANDESVBFHCVT" > + "nds.vfwcvt.s.bf16\t%0,%1" > + [(set_attr "type" "fcvt") > + (set_attr "mode" "<NDS_V_DOUBLE_TRUNC_BF>")]) > + > +(define_insn "@nds_vfncvt_bf16<mode>" > + [(set (match_operand:<NDS_V_DOUBLE_TRUNC_BF> 0 "register_operand" "=&vr") > + (unspec_volatile:<NDS_V_DOUBLE_TRUNC_BF> > + [(float_truncate:<NDS_V_DOUBLE_TRUNC_BF> > + (match_operand:NDS_VWEXTBF 1 "register_operand" " > vr"))] > + UNSPEC_NDS_VFNCVTBF16))] > + "TARGET_VECTOR && TARGET_XANDESVBFHCVT" > + "nds.vfncvt.bf16.s\t%0,%1" > + [(set_attr "type" "fcvt") > + (set_attr "mode" "<NDS_V_DOUBLE_TRUNC_BF>")])
Where are VL and VTYPE operands? I am not sure why this can work correctly with vsetvli pass? and what's different between vfncvtbf16.f.f.w and vfwcvtbf16.f.f.v? I assume that pattern should at least add use (reg:SI VTYPE_REGNUM) like @pred_trunc<mode>_to_bf16 and @pred_extend_bf16_to_<mode>?