-----  Respin of the below patch ----- In this 1/2 patch, from v1 to v2 I have added: * The three new helper #defines in arm.h. * Attribute mappings to unpredicated MVE instructions that map to themselves. This allows us to distinguish between unpredicated insns that do have a VPT predicated form (are VPT predicable) and insns that do not. Original email with updated Changelog at the end: Hi all, I'd like to submit two patches that add support for Arm's MVE Tail Predicated Low Overhead Loop feature. --- Introduction --- The M-class Arm-ARM: https://developer.arm.com/documentation/ddi0553/bu/?lang=en Section B5.5.1 "Loop tail predication" describes the feature we are adding support for with this patch (although we only add codegen for DLSTP/LETP instruction loops). Previously with commit d2ed233cb94 we'd added support for non-MVE DLS/LE loops through the loop-doloop pass, which, given a standard MVE loop like: ``` void  __attribute__ ((noinline)) test (int16_t *a, int16_t *b, int16_t *c, int n) {   while (n > 0)     {       mve_pred16_t p = vctp16q (n);       int16x8_t va = vldrhq_z_s16 (a, p);       int16x8_t vb = vldrhq_z_s16 (b, p);       int16x8_t vc = vaddq_x_s16 (va, vb, p);       vstrhq_p_s16 (c, vc, p);       c+=8;       a+=8;       b+=8;       n-=8;     } } ``` .. would output: ```                 dls     lr, lr .L3:         vctp.16 r3         vmrs    ip, P0  @ movhi         sxth    ip, ip         vmsr     P0, ip @ movhi         mov     r4, r0         vpst         vldrht.16       q2, [r4]         mov     r4, r1         vmov    q3, q0         vpst         vldrht.16       q1, [r4]         mov     r4, r2         vpst         vaddt.i16       q3, q2, q1         subs    r3, r3, #8         vpst         vstrht.16       q3, [r4]         adds    r0, r0, #16         adds    r1, r1, #16         adds    r2, r2, #16         le      lr, .L3 ``` where the LE instruction will decrement LR by 1, compare and branch if needed. (there are also other inefficiencies with the above code, like the pointless vmrs/sxth/vmsr on the VPR and the adds not being merged into the vldrht/vstrht as a #16 offsets and some random movs! But that's different problems...) The MVE version is similar, except that: * Instead of DLS/LE the instructions are DLSTP/LETP. * Instead of pre-calculating the number of iterations of the   loop, we place the number of elements to be processed by the   loop into LR. * Instead of decrementing the LR by one, LETP will decrement it   by FPSCR.LTPSIZE, which is the number of elements being   processed in each iteration: 16 for 8-bit elements, 5 for 16-bit   elements, etc. * On the final iteration, automatic Loop Tail Predication is   performed, as if the instructions within the loop had been VPT   predicated with a VCTP generating the VPR predicate in every   loop iteration. The dlstp/letp loop now looks like: ```                 dlstp.16        lr, r3 .L14:         mov     r3, r0         vldrh.16        q3, [r3]         mov     r3, r1         vldrh.16        q2, [r3]         mov     r3, r2         vadd.i16  q3, q3, q2         adds    r0, r0, #16         vstrh.16        q3, [r3]         adds    r1, r1, #16         adds    r2, r2, #16         letp    lr, .L14 ``` Since the loop tail predication is automatic, we have eliminated the VCTP that had been specified by the user in the intrinsic and converted the VPT-predicated instructions into their unpredicated equivalents (which also saves us from VPST insns). The LE instruction here decrements LR by 8 in each iteration. --- This 1/2 patch --- This first patch lays some groundwork by adding an attribute to md patterns, and then the second patch contains the functional changes. One major difficulty in implementing MVE Tail-Predicated Low Overhead Loops was the need to transform VPT-predicated insns in the insn chain into their unpredicated equivalents, like: `mve_vldrbq_z_ -> mve_vldrbq_`. This requires us to have a deterministic link between two different patterns in mve.md -- this _could_ be done by re-ordering the entirety of mve.md such that the patterns are at some constant icode proximity (e.g. having the _z immediately after the unpredicated version would mean that to map from the former to the latter you could use icode-1), but that is a very messy solution that would lead to complex unknown dependencies between patterns. This patch proves an alternative way of doing that: using an insn attribute to encode the icode of the unpredicated instruction. This was implemented by doing a find n replace across mve.md using the following patterns: define_insn "(.*)_p_(.*)"((.|\n)*?)\n( )*\[\(set_attr define_insn "$1_p_$2"$3\n$5[(set (attr "mve_unpredicated_insn") (symbol_ref "CODE_FOR_$1_$2"))\n$5 (set_attr define_insn "(.*)_m_(.*)"((.|\n)*?)\n( )*\[\(set_attr define_insn "$1_m_$2"$3\n$5[(set (attr "mve_unpredicated_insn") (symbol_ref "CODE_FOR_$1_$2"))\n$5 (set_attr define_insn "(.*)_z_(.*)"((.|\n)*?)\n( )*\[\(set_attr define_insn "$1_z_$2"$3\n$5[(set (attr "mve_unpredicated_insn") (symbol_ref "CODE_FOR_$1_$2"))\n$5 (set_attr and then a number of manual fixes were needed for the md patterns that did not conform to the above.  Those changes were: Dropped the type suffix _s/_u_f: CODE_FOR_mve_vcmpcsq_n_ CODE_FOR_mve_vcmpcsq_ CODE_FOR_mve_vcmpeqq_n_ CODE_FOR_mve_vcmpeqq_ CODE_FOR_mve_vcmpgeq_n_ CODE_FOR_mve_vcmpgeq_ CODE_FOR_mve_vcmpgtq_n_ CODE_FOR_mve_vcmpgtq_ CODE_FOR_mve_vcmphiq_n_ CODE_FOR_mve_vcmphiq_ CODE_FOR_mve_vcmpleq_n_ CODE_FOR_mve_vcmpleq_ CODE_FOR_mve_vcmpltq_n_ CODE_FOR_mve_vcmpltq_ CODE_FOR_mve_vcmpneq_n_ CODE_FOR_mve_vcmpneq_ CODE_FOR_mve_vaddq CODE_FOR_mve_vcaddq_rot270 CODE_FOR_mve_vcaddq_rot90 CODE_FOR_mve_vcaddq_rot270 CODE_FOR_mve_vcaddq_rot90 CODE_FOR_mve_vcmlaq CODE_FOR_mve_vcmlaq_rot180 CODE_FOR_mve_vcmlaq_rot270 CODE_FOR_mve_vcmlaq_rot90 CODE_FOR_mve_vcmulq CODE_FOR_mve_vcmulq_rot180 CODE_FOR_mve_vcmulq_rot270 CODE_FOR_mve_vcmulq_rot90 Dropped _wb_: CODE_FOR_mve_vidupq_u_insn CODE_FOR_mve_vddupq_u_insn Dropped one underscore character: CODE_FOR_arm_vcx1qv16qi CODE_FOR_arm_vcx2qv16qi CODE_FOR_arm_vcx3qv16qi No regressions on arm-none-eabi with an MVE target. Thank you, Stam Markianos-Wright gcc/ChangeLog:         * config/arm/arm.md (mve_unpredicated_insn): New attribute.         * config/arm/arm.h (MVE_VPT_PREDICATED_INSN_P): New define.     (MVE_VPT_UNPREDICATED_INSN_P): Likewise.     (MVE_VPT_PREDICABLE_INSN_P): Likewise.         * config/arm/vec-common.md (mve_vshlq_): Add attribute.         * config/arm/mve.md (arm_vcx1q_p_v16qi): Add attribute.     (arm_vcx1qv16qi): Likewise.     (arm_vcx1qav16qi): Likewise.     (arm_vcx1qv16qi): Likewise.     (arm_vcx2q_p_v16qi): Likewise.     (arm_vcx2qv16qi): Likewise.     (arm_vcx2qav16qi): Likewise.     (arm_vcx2qv16qi): Likewise.     (arm_vcx3q_p_v16qi): Likewise.     (arm_vcx3qv16qi): Likewise.     (arm_vcx3qav16qi: Likewise.     (arm_vcx3qv16qi): Likewise.     (mve_vabavq_): Likewise.     (mve_vabavq_p_): Likewise.     (mve_vabdq_): Likewise.     (mve_vabdq_f): Likewise.     (mve_vabdq_m_): Likewise.     (mve_vabdq_m_f): Likewise.     (mve_vabsq_f): Likewise.     (mve_vabsq_m_f): Likewise.     (mve_vabsq_m_s): Likewise.     (mve_vabsq_s): Likewise.     (mve_vadciq_v4si): Likewise.     (mve_vadciq_m_v4si): Likewise.     (mve_vadcq_v4si): Likewise.     (mve_vadcq_m_v4si): Likewise.     (mve_vaddlvaq_v4si): Likewise.     (mve_vaddlvaq_p_v4si): Likewise.     (mve_vaddlvq_v4si): Likewise.     (mve_vaddlvq_p_v4si): Likewise.     (mve_vaddq_f): Likewise.     (mve_vaddq_m_): Likewise.     (mve_vaddq_m_f): Likewise.     (mve_vaddq_m_n_): Likewise.     (mve_vaddq_m_n_f): Likewise.     (mve_vaddq_n_): Likewise.     (mve_vaddq_n_f): Likewise.     (mve_vaddq): Likewise.     (mve_vaddvaq_): Likewise.     (mve_vaddvaq_p_): Likewise.     (mve_vaddvq_): Likewise.     (mve_vaddvq_p_): Likewise.     (mve_vandq_): Likewise.     (mve_vandq_f): Likewise.     (mve_vandq_m_): Likewise.     (mve_vandq_m_f): Likewise.     (mve_vandq_s): Likewise.     (mve_vandq_u): Likewise.     (mve_vbicq_): Likewise.     (mve_vbicq_f): Likewise.     (mve_vbicq_m_): Likewise.     (mve_vbicq_m_f): Likewise.     (mve_vbicq_m_n_): Likewise.     (mve_vbicq_n_): Likewise.     (mve_vbicq_s): Likewise.     (mve_vbicq_u): Likewise.     (mve_vbrsrq_m_n_): Likewise.     (mve_vbrsrq_m_n_f): Likewise.     (mve_vbrsrq_n_): Likewise.     (mve_vbrsrq_n_f): Likewise.     (mve_vcaddq_rot270_m_): Likewise.     (mve_vcaddq_rot270_m_f): Likewise.     (mve_vcaddq_rot270): Likewise.     (mve_vcaddq_rot270): Likewise.     (mve_vcaddq_rot90_m_): Likewise.     (mve_vcaddq_rot90_m_f): Likewise.     (mve_vcaddq_rot90): Likewise.     (mve_vcaddq_rot90): Likewise.     (mve_vcaddq): Likewise.     (mve_vcaddq): Likewise.     (mve_vclsq_m_s): Likewise.     (mve_vclsq_s): Likewise.     (mve_vclzq_): Likewise.     (mve_vclzq_m_): Likewise.     (mve_vclzq_s): Likewise.     (mve_vclzq_u): Likewise.     (mve_vcmlaq_m_f): Likewise.     (mve_vcmlaq_rot180_m_f): Likewise.     (mve_vcmlaq_rot180): Likewise.     (mve_vcmlaq_rot270_m_f): Likewise.     (mve_vcmlaq_rot270): Likewise.     (mve_vcmlaq_rot90_m_f): Likewise.     (mve_vcmlaq_rot90): Likewise.     (mve_vcmlaq): Likewise.     (mve_vcmlaq): Likewise.     (mve_vcmpq_): Likewise.     (mve_vcmpq_f): Likewise.     (mve_vcmpq_n_): Likewise.     (mve_vcmpq_n_f): Likewise.     (mve_vcmpcsq_): Likewise.     (mve_vcmpcsq_m_n_u): Likewise.     (mve_vcmpcsq_m_u): Likewise.     (mve_vcmpcsq_n_): Likewise.     (mve_vcmpeqq_): Likewise.     (mve_vcmpeqq_f): Likewise.     (mve_vcmpeqq_m_): Likewise.     (mve_vcmpeqq_m_f): Likewise.     (mve_vcmpeqq_m_n_): Likewise.     (mve_vcmpeqq_m_n_f): Likewise.     (mve_vcmpeqq_n_): Likewise.     (mve_vcmpeqq_n_f): Likewise.     (mve_vcmpgeq_): Likewise.     (mve_vcmpgeq_f): Likewise.     (mve_vcmpgeq_m_f): Likewise.     (mve_vcmpgeq_m_n_f): Likewise.     (mve_vcmpgeq_m_n_s): Likewise.     (mve_vcmpgeq_m_s): Likewise.     (mve_vcmpgeq_n_): Likewise.     (mve_vcmpgeq_n_f): Likewise.     (mve_vcmpgtq_): Likewise.     (mve_vcmpgtq_f): Likewise.     (mve_vcmpgtq_m_f): Likewise.     (mve_vcmpgtq_m_n_f): Likewise.     (mve_vcmpgtq_m_n_s): Likewise.     (mve_vcmpgtq_m_s): Likewise.     (mve_vcmpgtq_n_): Likewise.     (mve_vcmpgtq_n_f): Likewise.     (mve_vcmphiq_): Likewise.     (mve_vcmphiq_m_n_u): Likewise.     (mve_vcmphiq_m_u): Likewise.     (mve_vcmphiq_n_): Likewise.     (mve_vcmpleq_): Likewise.     (mve_vcmpleq_f): Likewise.     (mve_vcmpleq_m_f): Likewise.     (mve_vcmpleq_m_n_f): Likewise.     (mve_vcmpleq_m_n_s): Likewise.     (mve_vcmpleq_m_s): Likewise.     (mve_vcmpleq_n_): Likewise.     (mve_vcmpleq_n_f): Likewise.     (mve_vcmpltq_): Likewise.     (mve_vcmpltq_f): Likewise.     (mve_vcmpltq_m_f): Likewise.     (mve_vcmpltq_m_n_f): Likewise.     (mve_vcmpltq_m_n_s): Likewise.     (mve_vcmpltq_m_s): Likewise.     (mve_vcmpltq_n_): Likewise.     (mve_vcmpltq_n_f): Likewise.     (mve_vcmpneq_): Likewise.     (mve_vcmpneq_f): Likewise.     (mve_vcmpneq_m_): Likewise.     (mve_vcmpneq_m_f): Likewise.     (mve_vcmpneq_m_n_): Likewise.     (mve_vcmpneq_m_n_f): Likewise.     (mve_vcmpneq_n_): Likewise.     (mve_vcmpneq_n_f): Likewise.     (mve_vcmulq_m_f): Likewise.     (mve_vcmulq_rot180_m_f): Likewise.     (mve_vcmulq_rot180): Likewise.     (mve_vcmulq_rot270_m_f): Likewise.     (mve_vcmulq_rot270): Likewise.     (mve_vcmulq_rot90_m_f): Likewise.     (mve_vcmulq_rot90): Likewise.     (mve_vcmulq): Likewise.     (mve_vcmulq): Likewise.     (mve_vctpq_mhi): Likewise.     (mve_vctpqhi): Likewise.     (mve_vcvtaq_): Likewise.     (mve_vcvtaq_m_): Likewise.     (mve_vcvtbq_f16_f32v8hf): Likewise.     (mve_vcvtbq_f32_f16v4sf): Likewise.     (mve_vcvtbq_m_f16_f32v8hf): Likewise.     (mve_vcvtbq_m_f32_f16v4sf): Likewise.     (mve_vcvtmq_): Likewise.     (mve_vcvtmq_m_): Likewise.     (mve_vcvtnq_): Likewise.     (mve_vcvtnq_m_): Likewise.     (mve_vcvtpq_): Likewise.     (mve_vcvtpq_m_): Likewise.     (mve_vcvtq_from_f_): Likewise.     (mve_vcvtq_m_from_f_): Likewise.     (mve_vcvtq_m_n_from_f_): Likewise.     (mve_vcvtq_m_n_to_f_): Likewise.     (mve_vcvtq_m_to_f_): Likewise.     (mve_vcvtq_n_from_f_): Likewise.     (mve_vcvtq_n_to_f_): Likewise.     (mve_vcvtq_to_f_): Likewise.     (mve_vcvttq_f16_f32v8hf): Likewise.     (mve_vcvttq_f32_f16v4sf): Likewise.     (mve_vcvttq_m_f16_f32v8hf): Likewise.     (mve_vcvttq_m_f32_f16v4sf): Likewise.     (mve_vddupq_m_wb_u_insn): Likewise.     (mve_vddupq_u_insn): Likewise.     (mve_vdupq_m_n_): Likewise.     (mve_vdupq_m_n_f): Likewise.     (mve_vdupq_n_): Likewise.     (mve_vdupq_n_f): Likewise.     (mve_vdwdupq_m_wb_u_insn): Likewise.     (mve_vdwdupq_wb_u_insn): Likewise.     (mve_veorq_): Likewise.     (mve_veorq_f): Likewise.     (mve_veorq_m_): Likewise.     (mve_veorq_m_f): Likewise.     (mve_veorq_s): Likewise.     (mve_veorq_u): Likewise.     (mve_vfmaq_f): Likewise.     (mve_vfmaq_m_f): Likewise.     (mve_vfmaq_m_n_f): Likewise.     (mve_vfmaq_n_f): Likewise.     (mve_vfmasq_m_n_f): Likewise.     (mve_vfmasq_n_f): Likewise.     (mve_vfmsq_f): Likewise.     (mve_vfmsq_m_f): Likewise.     (mve_vhaddq_): Likewise.     (mve_vhaddq_m_): Likewise.     (mve_vhaddq_m_n_): Likewise.     (mve_vhaddq_n_): Likewise.     (mve_vhcaddq_rot270_m_s): Likewise.     (mve_vhcaddq_rot270_s): Likewise.     (mve_vhcaddq_rot90_m_s): Likewise.     (mve_vhcaddq_rot90_s): Likewise.     (mve_vhsubq_): Likewise.     (mve_vhsubq_m_): Likewise.     (mve_vhsubq_m_n_): Likewise.     (mve_vhsubq_n_): Likewise.     (mve_vidupq_m_wb_u_insn): Likewise.     (mve_vidupq_u_insn): Likewise.     (mve_viwdupq_m_wb_u_insn): Likewise.     (mve_viwdupq_wb_u_insn): Likewise.     (mve_vldrbq_): Likewise.     (mve_vldrbq_gather_offset_): Likewise.     (mve_vldrbq_gather_offset_z_): Likewise.     (mve_vldrbq_z_): Likewise.     (mve_vldrdq_gather_base_v2di): Likewise.     (mve_vldrdq_gather_base_wb_v2di_insn): Likewise.     (mve_vldrdq_gather_base_wb_z_v2di_insn): Likewise.     (mve_vldrdq_gather_base_z_v2di): Likewise.     (mve_vldrdq_gather_offset_v2di): Likewise.     (mve_vldrdq_gather_offset_z_v2di): Likewise.     (mve_vldrdq_gather_shifted_offset_v2di): Likewise.     (mve_vldrdq_gather_shifted_offset_z_v2di): Likewise.     (mve_vldrhq_): Likewise.     (mve_vldrhq_fv8hf): Likewise.     (mve_vldrhq_gather_offset_): Likewise.     (mve_vldrhq_gather_offset_fv8hf): Likewise.     (mve_vldrhq_gather_offset_z_): Likewise.     (mve_vldrhq_gather_offset_z_fv8hf): Likewise.     (mve_vldrhq_gather_shifted_offset_): Likewise.     (mve_vldrhq_gather_shifted_offset_fv8hf): Likewise.     (mve_vldrhq_gather_shifted_offset_z_): Likewise.     (mve_vldrhq_gather_shifted_offset_z_fv8hf): Likewise.     (mve_vldrhq_z_): Likewise.     (mve_vldrhq_z_fv8hf): Likewise.     (mve_vldrwq_v4si): Likewise.     (mve_vldrwq_fv4sf): Likewise.     (mve_vldrwq_gather_base_v4si): Likewise.     (mve_vldrwq_gather_base_fv4sf): Likewise.     (mve_vldrwq_gather_base_wb_v4si_insn): Likewise.     (mve_vldrwq_gather_base_wb_fv4sf_insn): Likewise.     (mve_vldrwq_gather_base_wb_z_v4si_insn): Likewise.     (mve_vldrwq_gather_base_wb_z_fv4sf_insn): Likewise.     (mve_vldrwq_gather_base_z_v4si): Likewise.     (mve_vldrwq_gather_base_z_fv4sf): Likewise.     (mve_vldrwq_gather_offset_v4si): Likewise.     (mve_vldrwq_gather_offset_fv4sf): Likewise.     (mve_vldrwq_gather_offset_z_v4si): Likewise.     (mve_vldrwq_gather_offset_z_fv4sf): Likewise.     (mve_vldrwq_gather_shifted_offset_v4si): Likewise.     (mve_vldrwq_gather_shifted_offset_fv4sf): Likewise.     (mve_vldrwq_gather_shifted_offset_z_v4si): Likewise.     (mve_vldrwq_gather_shifted_offset_z_fv4sf): Likewise.     (mve_vldrwq_z_v4si): Likewise.     (mve_vldrwq_z_fv4sf): Likewise.     (mve_vmaxaq_m_s): Likewise.     (mve_vmaxaq_s): Likewise.     (mve_vmaxavq_p_s): Likewise.     (mve_vmaxavq_s): Likewise.     (mve_vmaxnmaq_f): Likewise.     (mve_vmaxnmaq_m_f): Likewise.     (mve_vmaxnmavq_f): Likewise.     (mve_vmaxnmavq_p_f): Likewise.     (mve_vmaxnmq_f): Likewise.     (mve_vmaxnmq_m_f): Likewise.     (mve_vmaxnmvq_f): Likewise.     (mve_vmaxnmvq_p_f): Likewise.     (mve_vmaxq_): Likewise.     (mve_vmaxq_m_): Likewise.     (mve_vmaxq_s): Likewise.     (mve_vmaxq_u): Likewise.     (mve_vmaxvq_): Likewise.     (mve_vmaxvq_p_): Likewise.     (mve_vminaq_m_s): Likewise.     (mve_vminaq_s): Likewise.     (mve_vminavq_p_s): Likewise.     (mve_vminavq_s): Likewise.     (mve_vminnmaq_f): Likewise.     (mve_vminnmaq_m_f): Likewise.     (mve_vminnmavq_f): Likewise.     (mve_vminnmavq_p_f): Likewise.     (mve_vminnmq_f): Likewise.     (mve_vminnmq_m_f): Likewise.     (mve_vminnmvq_f): Likewise.     (mve_vminnmvq_p_f): Likewise.     (mve_vminq_): Likewise.     (mve_vminq_m_): Likewise.     (mve_vminq_s): Likewise.     (mve_vminq_u): Likewise.     (mve_vminvq_): Likewise.     (mve_vminvq_p_): Likewise.     (mve_vmladavaq_): Likewise.     (mve_vmladavaq_p_): Likewise.     (mve_vmladavaxq_p_s): Likewise.     (mve_vmladavaxq_s): Likewise.     (mve_vmladavq_): Likewise.     (mve_vmladavq_p_): Likewise.     (mve_vmladavxq_p_s): Likewise.     (mve_vmladavxq_s): Likewise.     (mve_vmlaldavaq_): Likewise.     (mve_vmlaldavaq_p_): Likewise.     (mve_vmlaldavaxq_): Likewise.     (mve_vmlaldavaxq_p_): Likewise.     (mve_vmlaldavaxq_s): Likewise.     (mve_vmlaldavq_): Likewise.     (mve_vmlaldavq_p_): Likewise.     (mve_vmlaldavxq_p_s): Likewise.     (mve_vmlaldavxq_s): Likewise.     (mve_vmlaq_m_n_): Likewise.     (mve_vmlaq_n_): Likewise.     (mve_vmlasq_m_n_): Likewise.     (mve_vmlasq_n_): Likewise.     (mve_vmlsdavaq_p_s): Likewise.     (mve_vmlsdavaq_s): Likewise.     (mve_vmlsdavaxq_p_s): Likewise.     (mve_vmlsdavaxq_s): Likewise.     (mve_vmlsdavq_p_s): Likewise.     (mve_vmlsdavq_s): Likewise.     (mve_vmlsdavxq_p_s): Likewise.     (mve_vmlsdavxq_s): Likewise.     (mve_vmlsldavaq_p_s): Likewise.     (mve_vmlsldavaq_s): Likewise.     (mve_vmlsldavaxq_p_s): Likewise.     (mve_vmlsldavaxq_s): Likewise.     (mve_vmlsldavq_p_s): Likewise.     (mve_vmlsldavq_s): Likewise.     (mve_vmlsldavxq_p_s): Likewise.     (mve_vmlsldavxq_s): Likewise.     (mve_vmovlbq_): Likewise.     (mve_vmovlbq_m_): Likewise.     (mve_vmovltq_): Likewise.     (mve_vmovltq_m_): Likewise.     (mve_vmovnbq_): Likewise.     (mve_vmovnbq_m_): Likewise.     (mve_vmovntq_): Likewise.     (mve_vmovntq_m_): Likewise.     (mve_vmulhq_): Likewise.     (mve_vmulhq_m_): Likewise.     (mve_vmullbq_int_): Likewise.     (mve_vmullbq_int_m_): Likewise.     (mve_vmullbq_poly_m_p): Likewise.     (mve_vmullbq_poly_p): Likewise.     (mve_vmulltq_int_): Likewise.     (mve_vmulltq_int_m_): Likewise.     (mve_vmulltq_poly_m_p): Likewise.     (mve_vmulltq_poly_p): Likewise.     (mve_vmulq_): Likewise.     (mve_vmulq_f): Likewise.     (mve_vmulq_m_): Likewise.     (mve_vmulq_m_f): Likewise.     (mve_vmulq_m_n_): Likewise.     (mve_vmulq_m_n_f): Likewise.     (mve_vmulq_n_): Likewise.     (mve_vmulq_n_f): Likewise.     (mve_vmvnq_): Likewise.     (mve_vmvnq_m_): Likewise.     (mve_vmvnq_m_n_): Likewise.     (mve_vmvnq_n_): Likewise.     (mve_vmvnq_s): Likewise.     (mve_vmvnq_u): Likewise.     (mve_vnegq_f): Likewise.     (mve_vnegq_m_f): Likewise.     (mve_vnegq_m_s): Likewise.     (mve_vnegq_s): Likewise.     (mve_vornq_): Likewise.     (mve_vornq_f): Likewise.     (mve_vornq_m_): Likewise.     (mve_vornq_m_f): Likewise.     (mve_vornq_s): Likewise.     (mve_vornq_u): Likewise.     (mve_vorrq_): Likewise.     (mve_vorrq_f): Likewise.     (mve_vorrq_m_): Likewise.     (mve_vorrq_m_f): Likewise.     (mve_vorrq_m_n_): Likewise.     (mve_vorrq_n_): Likewise.     (mve_vorrq_s): Likewise.     (mve_vorrq_s): Likewise.     (mve_vqabsq_m_s): Likewise.     (mve_vqabsq_s): Likewise.     (mve_vqaddq_): Likewise.     (mve_vqaddq_m_): Likewise.     (mve_vqaddq_m_n_): Likewise.     (mve_vqaddq_n_): Likewise.     (mve_vqdmladhq_m_s): Likewise.     (mve_vqdmladhq_s): Likewise.     (mve_vqdmladhxq_m_s): Likewise.     (mve_vqdmladhxq_s): Likewise.     (mve_vqdmlahq_m_n_s): Likewise.     (mve_vqdmlahq_n_): Likewise.     (mve_vqdmlahq_n_s): Likewise.     (mve_vqdmlashq_m_n_s): Likewise.     (mve_vqdmlashq_n_): Likewise.     (mve_vqdmlashq_n_s): Likewise.     (mve_vqdmlsdhq_m_s): Likewise.     (mve_vqdmlsdhq_s): Likewise.     (mve_vqdmlsdhxq_m_s): Likewise.     (mve_vqdmlsdhxq_s): Likewise.     (mve_vqdmulhq_m_n_s): Likewise.     (mve_vqdmulhq_m_s): Likewise.     (mve_vqdmulhq_n_s): Likewise.     (mve_vqdmulhq_s): Likewise.     (mve_vqdmullbq_m_n_s): Likewise.     (mve_vqdmullbq_m_s): Likewise.     (mve_vqdmullbq_n_s): Likewise.     (mve_vqdmullbq_s): Likewise.     (mve_vqdmulltq_m_n_s): Likewise.     (mve_vqdmulltq_m_s): Likewise.     (mve_vqdmulltq_n_s): Likewise.     (mve_vqdmulltq_s): Likewise.     (mve_vqmovnbq_): Likewise.     (mve_vqmovnbq_m_): Likewise.     (mve_vqmovntq_): Likewise.     (mve_vqmovntq_m_): Likewise.     (mve_vqmovunbq_m_s): Likewise.     (mve_vqmovunbq_s): Likewise.     (mve_vqmovuntq_m_s): Likewise.     (mve_vqmovuntq_s): Likewise.     (mve_vqnegq_m_s): Likewise.     (mve_vqnegq_s): Likewise.     (mve_vqrdmladhq_m_s): Likewise.     (mve_vqrdmladhq_s): Likewise.     (mve_vqrdmladhxq_m_s): Likewise.     (mve_vqrdmladhxq_s): Likewise.     (mve_vqrdmlahq_m_n_s): Likewise.     (mve_vqrdmlahq_n_): Likewise.     (mve_vqrdmlahq_n_s): Likewise.     (mve_vqrdmlashq_m_n_s): Likewise.     (mve_vqrdmlashq_n_): Likewise.     (mve_vqrdmlashq_n_s): Likewise.     (mve_vqrdmlsdhq_m_s): Likewise.     (mve_vqrdmlsdhq_s): Likewise.     (mve_vqrdmlsdhxq_m_s): Likewise.     (mve_vqrdmlsdhxq_s): Likewise.     (mve_vqrdmulhq_m_n_s): Likewise.     (mve_vqrdmulhq_m_s): Likewise.     (mve_vqrdmulhq_n_s): Likewise.     (mve_vqrdmulhq_s): Likewise.     (mve_vqrshlq_): Likewise.     (mve_vqrshlq_m_): Likewise.     (mve_vqrshlq_m_n_): Likewise.     (mve_vqrshlq_n_): Likewise.     (mve_vqrshrnbq_m_n_): Likewise.     (mve_vqrshrnbq_n_): Likewise.     (mve_vqrshrntq_m_n_): Likewise.     (mve_vqrshrntq_n_): Likewise.     (mve_vqrshrunbq_m_n_s): Likewise.     (mve_vqrshrunbq_n_s): Likewise.     (mve_vqrshruntq_m_n_s): Likewise.     (mve_vqrshruntq_n_s): Likewise.     (mve_vqshlq_): Likewise.     (mve_vqshlq_m_): Likewise.     (mve_vqshlq_m_n_): Likewise.     (mve_vqshlq_m_r_): Likewise.     (mve_vqshlq_n_): Likewise.     (mve_vqshlq_r_): Likewise.     (mve_vqshluq_m_n_s): Likewise.     (mve_vqshluq_n_s): Likewise.     (mve_vqshrnbq_m_n_): Likewise.     (mve_vqshrnbq_n_): Likewise.     (mve_vqshrntq_m_n_): Likewise.     (mve_vqshrntq_n_): Likewise.     (mve_vqshrunbq_m_n_s): Likewise.     (mve_vqshrunbq_n_s): Likewise.     (mve_vqshruntq_m_n_s): Likewise.     (mve_vqshruntq_n_s): Likewise.     (mve_vqsubq_): Likewise.     (mve_vqsubq_m_): Likewise.     (mve_vqsubq_m_n_): Likewise.     (mve_vqsubq_n_): Likewise.     (mve_vrev16q_v16qi): Likewise.     (mve_vrev16q_m_v16qi): Likewise.     (mve_vrev32q_): Likewise.     (mve_vrev32q_fv8hf): Likewise.     (mve_vrev32q_m_): Likewise.     (mve_vrev32q_m_fv8hf): Likewise.     (mve_vrev64q_): Likewise.     (mve_vrev64q_f): Likewise.     (mve_vrev64q_m_): Likewise.     (mve_vrev64q_m_f): Likewise.     (mve_vrhaddq_): Likewise.     (mve_vrhaddq_m_): Likewise.     (mve_vrmlaldavhaq_v4si): Likewise.     (mve_vrmlaldavhaq_p_sv4si): Likewise.     (mve_vrmlaldavhaq_p_uv4si): Likewise.     (mve_vrmlaldavhaq_sv4si): Likewise.     (mve_vrmlaldavhaq_uv4si): Likewise.     (mve_vrmlaldavhaxq_p_sv4si): Likewise.     (mve_vrmlaldavhaxq_sv4si): Likewise.     (mve_vrmlaldavhq_v4si): Likewise.     (mve_vrmlaldavhq_p_v4si): Likewise.     (mve_vrmlaldavhxq_p_sv4si): Likewise.     (mve_vrmlaldavhxq_sv4si): Likewise.     (mve_vrmlsldavhaq_p_sv4si): Likewise.     (mve_vrmlsldavhaq_sv4si): Likewise.     (mve_vrmlsldavhaxq_p_sv4si): Likewise.     (mve_vrmlsldavhaxq_sv4si): Likewise.     (mve_vrmlsldavhq_p_sv4si): Likewise.     (mve_vrmlsldavhq_sv4si): Likewise.     (mve_vrmlsldavhxq_p_sv4si): Likewise.     (mve_vrmlsldavhxq_sv4si): Likewise.     (mve_vrmulhq_): Likewise.     (mve_vrmulhq_m_): Likewise.     (mve_vrndaq_f): Likewise.     (mve_vrndaq_m_f): Likewise.     (mve_vrndmq_f): Likewise.     (mve_vrndmq_m_f): Likewise.     (mve_vrndnq_f): Likewise.     (mve_vrndnq_m_f): Likewise.     (mve_vrndpq_f): Likewise.     (mve_vrndpq_m_f): Likewise.     (mve_vrndq_f): Likewise.     (mve_vrndq_m_f): Likewise.     (mve_vrndxq_f): Likewise.     (mve_vrndxq_m_f): Likewise.     (mve_vrshlq_): Likewise.     (mve_vrshlq_m_): Likewise.     (mve_vrshlq_m_n_): Likewise.     (mve_vrshlq_n_): Likewise.     (mve_vrshrnbq_m_n_): Likewise.     (mve_vrshrnbq_n_): Likewise.     (mve_vrshrntq_m_n_): Likewise.     (mve_vrshrntq_n_): Likewise.     (mve_vrshrq_m_n_): Likewise.     (mve_vrshrq_n_): Likewise.     (mve_vsbciq_v4si): Likewise.     (mve_vsbciq_m_v4si): Likewise.     (mve_vsbcq_v4si): Likewise.     (mve_vsbcq_m_v4si): Likewise.     (mve_vshlcq_): Likewise.     (mve_vshlcq_m_): Likewise.     (mve_vshllbq_m_n_): Likewise.     (mve_vshllbq_n_): Likewise.     (mve_vshlltq_m_n_): Likewise.     (mve_vshlltq_n_): Likewise.     (mve_vshlq_): Likewise.     (mve_vshlq_): Likewise.     (mve_vshlq_m_): Likewise.     (mve_vshlq_m_n_): Likewise.     (mve_vshlq_m_r_): Likewise.     (mve_vshlq_n_): Likewise.     (mve_vshlq_r_): Likewise.     (mve_vshrnbq_m_n_): Likewise.     (mve_vshrnbq_n_): Likewise.     (mve_vshrntq_m_n_): Likewise.     (mve_vshrntq_n_): Likewise.     (mve_vshrq_m_n_): Likewise.     (mve_vshrq_n_): Likewise.     (mve_vsliq_m_n_): Likewise.     (mve_vsliq_n_): Likewise.     (mve_vsriq_m_n_): Likewise.     (mve_vsriq_n_): Likewise.     (mve_vstrbq_): Likewise.     (mve_vstrbq_p_): Likewise.     (mve_vstrbq_scatter_offset__insn): Likewise.     (mve_vstrbq_scatter_offset_p__insn): Likewise.     (mve_vstrdq_scatter_base_v2di): Likewise.     (mve_vstrdq_scatter_base_p_v2di): Likewise.     (mve_vstrdq_scatter_base_wb_v2di): Likewise.     (mve_vstrdq_scatter_base_wb_p_v2di): Likewise.     (mve_vstrdq_scatter_offset_v2di_insn): Likewise.     (mve_vstrdq_scatter_offset_p_v2di_insn): Likewise.     (mve_vstrdq_scatter_shifted_offset_v2di_insn): Likewise.     (mve_vstrdq_scatter_shifted_offset_p_v2di_insn): Likewise.     (mve_vstrhq_): Likewise.     (mve_vstrhq_fv8hf): Likewise.     (mve_vstrhq_p_): Likewise.     (mve_vstrhq_p_fv8hf): Likewise.     (mve_vstrhq_scatter_offset__insn): Likewise.     (mve_vstrhq_scatter_offset_fv8hf_insn): Likewise.     (mve_vstrhq_scatter_offset_p__insn): Likewise.     (mve_vstrhq_scatter_offset_p_fv8hf_insn): Likewise.  (mve_vstrhq_scatter_shifted_offset__insn): Likewise.     (mve_vstrhq_scatter_shifted_offset_fv8hf_insn): Likewise.  (mve_vstrhq_scatter_shifted_offset_p__insn): Likewise.     (mve_vstrhq_scatter_shifted_offset_p_fv8hf_insn): Likewise.     (mve_vstrwq_v4si): Likewise.     (mve_vstrwq_fv4sf): Likewise.     (mve_vstrwq_p_v4si): Likewise.     (mve_vstrwq_p_fv4sf): Likewise.     (mve_vstrwq_scatter_base_v4si): Likewise.     (mve_vstrwq_scatter_base_fv4sf): Likewise.     (mve_vstrwq_scatter_base_p_v4si): Likewise.     (mve_vstrwq_scatter_base_p_fv4sf): Likewise.     (mve_vstrwq_scatter_base_wb_v4si): Likewise.     (mve_vstrwq_scatter_base_wb_fv4sf): Likewise.     (mve_vstrwq_scatter_base_wb_p_v4si): Likewise.     (mve_vstrwq_scatter_base_wb_p_fv4sf): Likewise.     (mve_vstrwq_scatter_offset_v4si_insn): Likewise.     (mve_vstrwq_scatter_offset_fv4sf_insn): Likewise.     (mve_vstrwq_scatter_offset_p_v4si_insn): Likewise.     (mve_vstrwq_scatter_offset_p_fv4sf_insn): Likewise.     (mve_vstrwq_scatter_shifted_offset_v4si_insn): Likewise.     (mve_vstrwq_scatter_shifted_offset_fv4sf_insn): Likewise.     (mve_vstrwq_scatter_shifted_offset_p_v4si_insn): Likewise.     (mve_vstrwq_scatter_shifted_offset_p_fv4sf_insn): Likewise.     (mve_vsubq_): Likewise.     (mve_vsubq_f): Likewise.     (mve_vsubq_m_): Likewise.     (mve_vsubq_m_f): Likewise.     (mve_vsubq_m_n_): Likewise.     (mve_vsubq_m_n_f): Likewise.     (mve_vsubq_n_): Likewise.     (mve_vsubq_n_f): Likewise. gcc/testsuite/ChangeLog:         * gcc.target/arm/dlstp-compile-asm.c: New test.