================ @@ -473,44 +500,58 @@ def VLD3_DUP : WInst<"vld3_dup", "3(c*!)", "UcUsUiUlcsilfPcPsQcQfQiQlQsQPcQPsQUcQUiQUlQUs">; def VLD4_DUP : WInst<"vld4_dup", "4(c*!)", "UcUsUiUlcsilfPcPsQcQfQiQlQsQPcQPsQUcQUiQUlQUs">; -def VLD2_LANE : WInst<"vld2_lane", "2(c*!)2I", "QUsQUiQsQiQfQPsUcUsUicsifPcPs">; -def VLD3_LANE : WInst<"vld3_lane", "3(c*!)3I", "QUsQUiQsQiQfQPsUcUsUicsifPcPs">; -def VLD4_LANE : WInst<"vld4_lane", "4(c*!)4I", "QUsQUiQsQiQfQPsUcUsUicsifPcPs">; +def VLD2_LANE : WInst<"vld2_lane", "2(c*!)2I", "QUsQUiQsQiQfQPsUcUsUicsifPcPs", + [ImmCheck<4, ImmCheckLaneIndex, 1>]>; +def VLD3_LANE : WInst<"vld3_lane", "3(c*!)3I", "QUsQUiQsQiQfQPsUcUsUicsifPcPs", + [ImmCheck<5, ImmCheckLaneIndex, 1>]>; +def VLD4_LANE : WInst<"vld4_lane", "4(c*!)4I", "QUsQUiQsQiQfQPsUcUsUicsifPcPs", + [ImmCheck<6, ImmCheckLaneIndex, 1>]>; def VST2 : WInst<"vst2", "v*(2!)", "QUcQUsQUiQcQsQiQfQPcQPsUcUsUiUlcsilfPcPs">; def VST3 : WInst<"vst3", "v*(3!)", "QUcQUsQUiQcQsQiQfQPcQPsUcUsUiUlcsilfPcPs">; def VST4 : WInst<"vst4", "v*(4!)", "QUcQUsQUiQcQsQiQfQPcQPsUcUsUiUlcsilfPcPs">; -def VST2_LANE : WInst<"vst2_lane", "v*(2!)I", "QUsQUiQsQiQfQPsUcUsUicsifPcPs">; -def VST3_LANE : WInst<"vst3_lane", "v*(3!)I", "QUsQUiQsQiQfQPsUcUsUicsifPcPs">; -def VST4_LANE : WInst<"vst4_lane", "v*(4!)I", "QUsQUiQsQiQfQPsUcUsUicsifPcPs">; +def VST2_LANE : WInst<"vst2_lane", "v*(2!)I", "QUsQUiQsQiQfQPsUcUsUicsifPcPs", + [ImmCheck<3, ImmCheckLaneIndex, 1>]>; +def VST3_LANE : WInst<"vst3_lane", "v*(3!)I", "QUsQUiQsQiQfQPsUcUsUicsifPcPs", + [ImmCheck<4, ImmCheckLaneIndex, 1>]>; +def VST4_LANE : WInst<"vst4_lane", "v*(4!)I", "QUsQUiQsQiQfQPsUcUsUicsifPcPs", + [ImmCheck<5, ImmCheckLaneIndex, 1>]>; let ArchGuard = "(__ARM_FP & 2)" in { def VLD2_F16 : WInst<"vld2", "2(c*!)", "hQh">; def VLD3_F16 : WInst<"vld3", "3(c*!)", "hQh">; def VLD4_F16 : WInst<"vld4", "4(c*!)", "hQh">; def VLD2_DUP_F16 : WInst<"vld2_dup", "2(c*!)", "hQh">; def VLD3_DUP_F16 : WInst<"vld3_dup", "3(c*!)", "hQh">; def VLD4_DUP_F16 : WInst<"vld4_dup", "4(c*!)", "hQh">; -def VLD2_LANE_F16 : WInst<"vld2_lane", "2(c*!)2I", "hQh">; -def VLD3_LANE_F16 : WInst<"vld3_lane", "3(c*!)3I", "hQh">; -def VLD4_LANE_F16 : WInst<"vld4_lane", "4(c*!)4I", "hQh">; +def VLD2_LANE_F16 : WInst<"vld2_lane", "2(c*!)2I", "hQh", + [ImmCheck<4, ImmCheck0_3, 1>]>; +def VLD3_LANE_F16 : WInst<"vld3_lane", "3(c*!)3I", "hQh", + [ImmCheck<5, ImmCheck0_3, 1>]>; +def VLD4_LANE_F16 : WInst<"vld4_lane", "4(c*!)4I", "hQh", + [ImmCheck<6, ImmCheck0_3, 1>]>; def VST2_F16 : WInst<"vst2", "v*(2!)", "hQh">; def VST3_F16 : WInst<"vst3", "v*(3!)", "hQh">; def VST4_F16 : WInst<"vst4", "v*(4!)", "hQh">; -def VST2_LANE_F16 : WInst<"vst2_lane", "v*(2!)I", "hQh">; -def VST3_LANE_F16 : WInst<"vst3_lane", "v*(3!)I", "hQh">; -def VST4_LANE_F16 : WInst<"vst4_lane", "v*(4!)I", "hQh">; +def VST2_LANE_F16 : WInst<"vst2_lane", "v*(2!)I", "hQh", + [ImmCheck<3, ImmCheck0_3, 1>]>; +def VST3_LANE_F16 : WInst<"vst3_lane", "v*(3!)I", "hQh", + [ImmCheck<4, ImmCheck0_3, 1>]>; +def VST4_LANE_F16 : WInst<"vst4_lane", "v*(4!)I", "hQh", ---------------- SpencerAbson wrote:
I don't believe quad variants currently exist for these, but I have changed it to use a more general `ImmCheckLaneIndex`. https://github.com/llvm/llvm-project/pull/100278 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits