From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 63958 invoked by alias); 7 Jul 2015 12:34:10 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 63946 invoked by uid 89); 7 Jul 2015 12:34:09 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.7 required=5.0 tests=AWL,BAYES_00,SPF_PASS autolearn=ham version=3.3.2 X-HELO: eu-smtp-delivery-143.mimecast.com Received: from eu-smtp-delivery-143.mimecast.com (HELO eu-smtp-delivery-143.mimecast.com) (207.82.80.143) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 07 Jul 2015 12:34:07 +0000 Received: from cam-owa1.Emea.Arm.com (fw-tnat.cambridge.arm.com [217.140.96.140]) by eu-smtp-1.mimecast.com with ESMTP id uk-mta-18-bVUExIWETZuy85hc0w7yww-1 Received: from [10.2.207.65] ([10.1.2.79]) by cam-owa1.Emea.Arm.com with Microsoft SMTPSVC(6.0.3790.3959); Tue, 7 Jul 2015 13:34:01 +0100 Message-ID: <559BC739.2020806@arm.com> Date: Tue, 07 Jul 2015 12:34:00 -0000 From: Alan Lawrence User-Agent: Thunderbird 2.0.0.24 (X11/20101213) MIME-Version: 1.0 To: "gcc-patches@gcc.gnu.org" Subject: [PATCH 1/16][ARM] PR/63870 Add qualifier to check lane bounds in expand In-Reply-To: <559BC6EC.3000907@arm.com> X-MC-Unique: bVUExIWETZuy85hc0w7yww-1 Content-Type: multipart/mixed; boundary="------------050602070008030104000300" X-IsSubscribed: yes X-SW-Source: 2015-07/txt/msg00474.txt.bz2 This is a multi-part message in MIME format. --------------050602070008030104000300 Content-Type: text/plain; charset=WINDOWS-1252; format=flowed Content-Transfer-Encoding: quoted-printable Content-length: 195 As per https://gcc.gnu.org/ml/gcc-patches/2015-04/msg01333.html (While this falls under PR/63870, and I will link to that in the ChangeLog,= it=20 is only a small step towards fixing that PR.) --------------050602070008030104000300 Content-Type: text/x-patch; name=01_arm_qualifier_lane_index.patch Content-Transfer-Encoding: quoted-printable Content-Disposition: inline; filename="01_arm_qualifier_lane_index.patch" Content-length: 18804 commit 9812db88cff20a505365f68f4065d2fbab998c9c Author: Alan Lawrence Date: Mon Dec 8 11:04:49 2014 +0000 ARM: Add qualifier_lane_index diff --git a/gcc/config/arm/arm-builtins.c b/gcc/config/arm/arm-builtins.c index f960e0a..7f5bf87 100644 --- a/gcc/config/arm/arm-builtins.c +++ b/gcc/config/arm/arm-builtins.c @@ -77,7 +77,9 @@ enum arm_type_qualifiers /* qualifier_const_pointer | qualifier_map_mode */ qualifier_const_pointer_map_mode =3D 0x86, /* Polynomial types. */ - qualifier_poly =3D 0x100 + qualifier_poly =3D 0x100, + /* Lane indices - must be within range of previous argument =3D a vector= . */ + qualifier_lane_index =3D 0x200 }; =20 /* The qualifier_internal allows generation of a unary builtin from @@ -108,21 +110,40 @@ arm_ternop_qualifiers[SIMD_MAX_BUILTIN_ARGS] =20 /* T (T, immediate). */ static enum arm_type_qualifiers -arm_getlane_qualifiers[SIMD_MAX_BUILTIN_ARGS] +arm_binop_imm_qualifiers[SIMD_MAX_BUILTIN_ARGS] =3D { qualifier_none, qualifier_none, qualifier_immediate }; +#define BINOP_IMM_QUALIFIERS (arm_binop_imm_qualifiers) + +/* T (T, lane index). */ +static enum arm_type_qualifiers +arm_getlane_qualifiers[SIMD_MAX_BUILTIN_ARGS] + =3D { qualifier_none, qualifier_none, qualifier_lane_index }; #define GETLANE_QUALIFIERS (arm_getlane_qualifiers) =20 /* T (T, T, T, immediate). */ static enum arm_type_qualifiers -arm_lanemac_qualifiers[SIMD_MAX_BUILTIN_ARGS] +arm_mac_n_qualifiers[SIMD_MAX_BUILTIN_ARGS] =3D { qualifier_none, qualifier_none, qualifier_none, qualifier_none, qualifier_immediate }; -#define LANEMAC_QUALIFIERS (arm_lanemac_qualifiers) +#define MAC_N_QUALIFIERS (arm_mac_n_qualifiers) + +/* T (T, T, T, lane index). */ +static enum arm_type_qualifiers +arm_mac_lane_qualifiers[SIMD_MAX_BUILTIN_ARGS] + =3D { qualifier_none, qualifier_none, qualifier_none, + qualifier_none, qualifier_lane_index }; +#define MAC_LANE_QUALIFIERS (arm_mac_lane_qualifiers) =20 /* T (T, T, immediate). */ static enum arm_type_qualifiers -arm_setlane_qualifiers[SIMD_MAX_BUILTIN_ARGS] +arm_ternop_imm_qualifiers[SIMD_MAX_BUILTIN_ARGS] =3D { qualifier_none, qualifier_none, qualifier_none, qualifier_immediat= e }; +#define TERNOP_IMM_QUALIFIERS (arm_ternop_imm_qualifiers) + +/* T (T, T, lane index). */ +static enum arm_type_qualifiers +arm_setlane_qualifiers[SIMD_MAX_BUILTIN_ARGS] + =3D { qualifier_none, qualifier_none, qualifier_none, qualifier_lane_ind= ex }; #define SETLANE_QUALIFIERS (arm_setlane_qualifiers) =20 /* T (T, T). */ @@ -1927,6 +1948,7 @@ arm_expand_unop_builtin (enum insn_code icode, typedef enum { NEON_ARG_COPY_TO_REG, NEON_ARG_CONSTANT, + NEON_ARG_LANE_INDEX, NEON_ARG_MEMORY, NEON_ARG_STOP } builtin_arg; @@ -2043,6 +2065,16 @@ arm_expand_neon_args (rtx target, machine_mode map_m= ode, int fcode, op[argc] =3D copy_to_mode_reg (mode[argc], op[argc]); break; =20 + case NEON_ARG_LANE_INDEX: + /* Previous argument must be a vector, which this indexes. */ + gcc_assert (argc > 0); + if (CONST_INT_P (op[argc])) + { + enum machine_mode vmode =3D mode[argc - 1]; + neon_lane_bounds (op[argc], 0, GET_MODE_NUNITS (vmode), exp); + } + /* Fall through - if the lane index isn't a constant then + the next case will error. */ case NEON_ARG_CONSTANT: if (!(*insn_data[icode].operand[opno].predicate) (op[argc], mode[argc])) @@ -2170,7 +2202,9 @@ arm_expand_neon_builtin (int fcode, tree exp, rtx tar= get) int operands_k =3D k - is_void; int expr_args_k =3D k - 1; =20 - if (d->qualifiers[qualifiers_k] & qualifier_immediate) + if (d->qualifiers[qualifiers_k] & qualifier_lane_index) + args[k] =3D NEON_ARG_LANE_INDEX; + else if (d->qualifiers[qualifiers_k] & qualifier_immediate) args[k] =3D NEON_ARG_CONSTANT; else if (d->qualifiers[qualifiers_k] & qualifier_maybe_immediate) { diff --git a/gcc/config/arm/arm-protos.h b/gcc/config/arm/arm-protos.h index 62f91ef..25bdebd 100644 --- a/gcc/config/arm/arm-protos.h +++ b/gcc/config/arm/arm-protos.h @@ -86,7 +86,7 @@ extern void neon_pairwise_reduce (rtx, rtx, machine_mode, extern rtx neon_make_constant (rtx); extern tree arm_builtin_vectorized_function (tree, tree, tree); extern void neon_expand_vector_init (rtx, rtx); -extern void neon_lane_bounds (rtx, HOST_WIDE_INT, HOST_WIDE_INT); +extern void neon_lane_bounds (rtx, HOST_WIDE_INT, HOST_WIDE_INT, const_tre= e); extern void neon_const_bounds (rtx, HOST_WIDE_INT, HOST_WIDE_INT); extern HOST_WIDE_INT neon_element_bits (machine_mode); extern void neon_reinterpret (rtx, rtx); diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index e79a369..6e074ea 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -12788,12 +12788,12 @@ neon_expand_vector_init (rtx target, rtx vals) } =20 /* Ensure OPERAND lies between LOW (inclusive) and HIGH (exclusive). Raise - ERR if it doesn't. FIXME: NEON bounds checks occur late in compilation= , so - reported source locations are bogus. */ + ERR if it doesn't. EXP indicates the source location, which includes t= he + inlining history for intrinsics. */ =20 static void bounds_check (rtx operand, HOST_WIDE_INT low, HOST_WIDE_INT high, - const char *err) + const_tree exp, const char *desc) { HOST_WIDE_INT lane; =20 @@ -12802,15 +12802,22 @@ bounds_check (rtx operand, HOST_WIDE_INT low, HOS= T_WIDE_INT high, lane =3D INTVAL (operand); =20 if (lane < low || lane >=3D high) - error (err); + { + if (exp) + error ("%K%s %lld out of range %lld - %lld", + exp, desc, lane, low, high - 1); + else + error ("%s %lld out of range %lld - %lld", desc, lane, low, high - 1); + } } =20 /* Bounds-check lanes. */ =20 void -neon_lane_bounds (rtx operand, HOST_WIDE_INT low, HOST_WIDE_INT high) +neon_lane_bounds (rtx operand, HOST_WIDE_INT low, HOST_WIDE_INT high, + const_tree exp) { - bounds_check (operand, low, high, "lane out of range"); + bounds_check (operand, low, high, exp, "lane"); } =20 /* Bounds-check constants. */ @@ -12818,7 +12825,7 @@ neon_lane_bounds (rtx operand, HOST_WIDE_INT low, H= OST_WIDE_INT high) void neon_const_bounds (rtx operand, HOST_WIDE_INT low, HOST_WIDE_INT high) { - bounds_check (operand, low, high, "constant out of range"); + bounds_check (operand, low, high, NULL_TREE, "constant"); } =20 HOST_WIDE_INT diff --git a/gcc/config/arm/arm_neon_builtins.def b/gcc/config/arm/arm_neon= _builtins.def index f55591d..f150b98 100644 --- a/gcc/config/arm/arm_neon_builtins.def +++ b/gcc/config/arm/arm_neon_builtins.def @@ -67,28 +67,28 @@ VAR8 (BINOP, vqshls, v8qi, v4hi, v2si, di, v16qi, v8hi,= v4si, v2di) VAR8 (BINOP, vqshlu, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) VAR8 (BINOP, vqrshls, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) VAR8 (BINOP, vqrshlu, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) -VAR8 (GETLANE, vshrs_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) -VAR8 (GETLANE, vshru_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) -VAR8 (GETLANE, vrshrs_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) -VAR8 (GETLANE, vrshru_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) -VAR3 (GETLANE, vshrn_n, v8hi, v4si, v2di) -VAR3 (GETLANE, vrshrn_n, v8hi, v4si, v2di) -VAR3 (GETLANE, vqshrns_n, v8hi, v4si, v2di) -VAR3 (GETLANE, vqshrnu_n, v8hi, v4si, v2di) -VAR3 (GETLANE, vqrshrns_n, v8hi, v4si, v2di) -VAR3 (GETLANE, vqrshrnu_n, v8hi, v4si, v2di) -VAR3 (GETLANE, vqshrun_n, v8hi, v4si, v2di) -VAR3 (GETLANE, vqrshrun_n, v8hi, v4si, v2di) -VAR8 (GETLANE, vshl_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) -VAR8 (GETLANE, vqshl_s_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) -VAR8 (GETLANE, vqshl_u_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) -VAR8 (GETLANE, vqshlu_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) -VAR3 (GETLANE, vshlls_n, v8qi, v4hi, v2si) -VAR3 (GETLANE, vshllu_n, v8qi, v4hi, v2si) -VAR8 (SETLANE, vsras_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) -VAR8 (SETLANE, vsrau_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) -VAR8 (SETLANE, vrsras_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) -VAR8 (SETLANE, vrsrau_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) +VAR8 (BINOP_IMM, vshrs_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) +VAR8 (BINOP_IMM, vshru_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) +VAR8 (BINOP_IMM, vrshrs_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) +VAR8 (BINOP_IMM, vrshru_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) +VAR3 (BINOP_IMM, vshrn_n, v8hi, v4si, v2di) +VAR3 (BINOP_IMM, vrshrn_n, v8hi, v4si, v2di) +VAR3 (BINOP_IMM, vqshrns_n, v8hi, v4si, v2di) +VAR3 (BINOP_IMM, vqshrnu_n, v8hi, v4si, v2di) +VAR3 (BINOP_IMM, vqrshrns_n, v8hi, v4si, v2di) +VAR3 (BINOP_IMM, vqrshrnu_n, v8hi, v4si, v2di) +VAR3 (BINOP_IMM, vqshrun_n, v8hi, v4si, v2di) +VAR3 (BINOP_IMM, vqrshrun_n, v8hi, v4si, v2di) +VAR8 (BINOP_IMM, vshl_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) +VAR8 (BINOP_IMM, vqshl_s_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) +VAR8 (BINOP_IMM, vqshl_u_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) +VAR8 (BINOP_IMM, vqshlu_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) +VAR3 (BINOP_IMM, vshlls_n, v8qi, v4hi, v2si) +VAR3 (BINOP_IMM, vshllu_n, v8qi, v4hi, v2si) +VAR8 (TERNOP_IMM, vsras_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) +VAR8 (TERNOP_IMM, vsrau_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) +VAR8 (TERNOP_IMM, vrsras_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) +VAR8 (TERNOP_IMM, vrsrau_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) VAR2 (BINOP, vsub, v2sf, v4sf) VAR3 (BINOP, vsubls, v8qi, v4hi, v2si) VAR3 (BINOP, vsublu, v8qi, v4hi, v2si) @@ -140,8 +140,8 @@ VAR6 (BINOP, vpadals, v8qi, v4hi, v2si, v16qi, v8hi, v4= si) VAR6 (BINOP, vpadalu, v8qi, v4hi, v2si, v16qi, v8hi, v4si) VAR2 (BINOP, vrecps, v2sf, v4sf) VAR2 (BINOP, vrsqrts, v2sf, v4sf) -VAR8 (SETLANE, vsri_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) -VAR8 (SETLANE, vsli_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) +VAR8 (TERNOP_IMM, vsri_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) +VAR8 (TERNOP_IMM, vsli_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di) VAR8 (UNOP, vabs, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) VAR6 (UNOP, vqabs, v8qi, v4hi, v2si, v16qi, v8hi, v4si) VAR8 (UNOP, vneg, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) @@ -162,7 +162,7 @@ VAR10 (SETLANE, vset_lane, VAR5 (UNOP, vcreate, v8qi, v4hi, v2si, v2sf, di) VAR10 (UNOP, vdup_n, v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) -VAR10 (BINOP, vdup_lane, +VAR10 (GETLANE, vdup_lane, v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) VAR5 (COMBINE, vcombine, v8qi, v4hi, v2si, v2sf, di) VAR5 (UNOP, vget_high, v16qi, v8hi, v4si, v4sf, v2di) @@ -174,23 +174,23 @@ VAR3 (UNOP, vqmovun, v8hi, v4si, v2di) VAR3 (UNOP, vmovls, v8qi, v4hi, v2si) VAR3 (UNOP, vmovlu, v8qi, v4hi, v2si) VAR6 (SETLANE, vmul_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf) -VAR6 (LANEMAC, vmla_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf) -VAR2 (LANEMAC, vmlals_lane, v4hi, v2si) -VAR2 (LANEMAC, vmlalu_lane, v4hi, v2si) -VAR2 (LANEMAC, vqdmlal_lane, v4hi, v2si) -VAR6 (LANEMAC, vmls_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf) -VAR2 (LANEMAC, vmlsls_lane, v4hi, v2si) -VAR2 (LANEMAC, vmlslu_lane, v4hi, v2si) -VAR2 (LANEMAC, vqdmlsl_lane, v4hi, v2si) +VAR6 (MAC_LANE, vmla_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf) +VAR2 (MAC_LANE, vmlals_lane, v4hi, v2si) +VAR2 (MAC_LANE, vmlalu_lane, v4hi, v2si) +VAR2 (MAC_LANE, vqdmlal_lane, v4hi, v2si) +VAR6 (MAC_LANE, vmls_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf) +VAR2 (MAC_LANE, vmlsls_lane, v4hi, v2si) +VAR2 (MAC_LANE, vmlslu_lane, v4hi, v2si) +VAR2 (MAC_LANE, vqdmlsl_lane, v4hi, v2si) VAR6 (BINOP, vmul_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf) -VAR6 (LANEMAC, vmla_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf) -VAR2 (LANEMAC, vmlals_n, v4hi, v2si) -VAR2 (LANEMAC, vmlalu_n, v4hi, v2si) -VAR2 (LANEMAC, vqdmlal_n, v4hi, v2si) -VAR6 (LANEMAC, vmls_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf) -VAR2 (LANEMAC, vmlsls_n, v4hi, v2si) -VAR2 (LANEMAC, vmlslu_n, v4hi, v2si) -VAR2 (LANEMAC, vqdmlsl_n, v4hi, v2si) +VAR6 (MAC_N, vmla_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf) +VAR2 (MAC_N, vmlals_n, v4hi, v2si) +VAR2 (MAC_N, vmlalu_n, v4hi, v2si) +VAR2 (MAC_N, vqdmlal_n, v4hi, v2si) +VAR6 (MAC_N, vmls_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf) +VAR2 (MAC_N, vmlsls_n, v4hi, v2si) +VAR2 (MAC_N, vmlslu_n, v4hi, v2si) +VAR2 (MAC_N, vqdmlsl_n, v4hi, v2si) VAR10 (SETLANE, vext, v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di) VAR8 (UNOP, vrev64, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf) diff --git a/gcc/config/arm/neon.md b/gcc/config/arm/neon.md index 654d9d5..4af74ce 100644 --- a/gcc/config/arm/neon.md +++ b/gcc/config/arm/neon.md @@ -2663,8 +2663,6 @@ (match_operand:SI 2 "immediate_operand" "")] "TARGET_NEON" { - neon_lane_bounds (operands[2], 0, GET_MODE_NUNITS (mode)); - if (BYTES_BIG_ENDIAN) { /* The intrinsics are defined in terms of a model where the @@ -2694,8 +2692,6 @@ (match_operand:SI 2 "immediate_operand" "")] "TARGET_NEON" { - neon_lane_bounds (operands[2], 0, GET_MODE_NUNITS (mode)); - if (BYTES_BIG_ENDIAN) { /* The intrinsics are defined in terms of a model where the @@ -2725,7 +2721,6 @@ (match_operand:SI 2 "immediate_operand" "")] "TARGET_NEON" { - neon_lane_bounds (operands[2], 0, 1); emit_move_insn (operands[0], operands[1]); DONE; }) @@ -2736,18 +2731,11 @@ (match_operand:SI 2 "immediate_operand" "")] "TARGET_NEON" { - switch (INTVAL (operands[2])) - { - case 0: - emit_move_insn (operands[0], gen_lowpart (DImode, operands[1])); - break; - case 1: - emit_move_insn (operands[0], gen_highpart (DImode, operands[1])); - break; - default: - neon_lane_bounds (operands[2], 0, 1); - FAIL; - } + int lane =3D INTVAL (operands[2]); + gcc_assert ((lane =3D=3D0) || (lane =3D=3D 1)); + emit_move_insn (operands[0], lane =3D=3D 0 + ? gen_lowpart (DImode, operands[1]) + : gen_highpart (DImode, operands[1])); DONE; }) =20 @@ -2759,7 +2747,6 @@ "TARGET_NEON" { unsigned int elt =3D INTVAL (operands[3]); - neon_lane_bounds (operands[3], 0, GET_MODE_NUNITS (mode)); =20 if (BYTES_BIG_ENDIAN) { @@ -2782,7 +2769,6 @@ (match_operand:SI 3 "immediate_operand" "i")] "TARGET_NEON" { - neon_lane_bounds (operands[3], 0, 1); emit_move_insn (operands[0], operands[1]); DONE; }) @@ -2864,7 +2850,6 @@ (match_operand:SI 2 "immediate_operand" "i")] "TARGET_NEON" { - neon_lane_bounds (operands[2], 0, GET_MODE_NUNITS (mode)); if (BYTES_BIG_ENDIAN) { unsigned int elt =3D INTVAL (operands[2]); @@ -2885,7 +2870,6 @@ (match_operand:SI 2 "immediate_operand" "i")] "TARGET_NEON" { - neon_lane_bounds (operands[2], 0, 1); emit_move_insn (operands[0], operands[1]); DONE; }) @@ -2897,7 +2881,6 @@ (match_operand:SI 2 "immediate_operand" "i")] "TARGET_NEON" { - neon_lane_bounds (operands[2], 0, 1); emit_insn (gen_neon_vdup_nv2di (operands[0], operands[1])); DONE; }) @@ -3097,7 +3080,6 @@ UNSPEC_VMUL_LANE))] "TARGET_NEON" { - neon_lane_bounds (operands[3], 0, GET_MODE_NUNITS (mode)); return "vmul.\t%P0, %P1, %P2[%c3]"; } [(set (attr "type") @@ -3115,7 +3097,6 @@ UNSPEC_VMUL_LANE))] "TARGET_NEON" { - neon_lane_bounds (operands[3], 0, GET_MODE_NUNITS (mode)); return "vmul.\t%q0, %q1, %P2[%c3]"; } [(set (attr "type") @@ -3133,7 +3114,6 @@ VMULL_LANE))] "TARGET_NEON" { - neon_lane_bounds (operands[3], 0, GET_MODE_NUNITS (mode)); return "vmull.%#\t%q0, %P1, %P2[%c3]"; } [(set_attr "type" "neon_mul__scalar_long")] @@ -3148,7 +3128,6 @@ UNSPEC_VQDMULL_LANE))] "TARGET_NEON" { - neon_lane_bounds (operands[3], 0, GET_MODE_NUNITS (mode)); return "vqdmull.\t%q0, %P1, %P2[%c3]"; } [(set_attr "type" "neon_sat_mul__scalar_long")] @@ -3163,7 +3142,6 @@ VQDMULH_LANE))] "TARGET_NEON" { - neon_lane_bounds (operands[3], 0, GET_MODE_NUNITS (mode)); return "vqdmulh.\t%q0, %q1, %P2[%c3]"; } [(set_attr "type" "neon_sat_mul__scalar_q")] @@ -3178,7 +3156,6 @@ VQDMULH_LANE))] "TARGET_NEON" { - neon_lane_bounds (operands[3], 0, GET_MODE_NUNITS (mode)); return "vqdmulh.\t%P0, %P1, %P2[%c3]"; } [(set_attr "type" "neon_sat_mul__scalar_q")] @@ -3194,7 +3171,6 @@ UNSPEC_VMLA_LANE))] "TARGET_NEON" { - neon_lane_bounds (operands[4], 0, GET_MODE_NUNITS (mode)); return "vmla.\t%P0, %P2, %P3[%c4]"; } [(set (attr "type") @@ -3213,7 +3189,6 @@ UNSPEC_VMLA_LANE))] "TARGET_NEON" { - neon_lane_bounds (operands[4], 0, GET_MODE_NUNITS (mode)); return "vmla.\t%q0, %q2, %P3[%c4]"; } [(set (attr "type") @@ -3232,7 +3207,6 @@ VMLAL_LANE))] "TARGET_NEON" { - neon_lane_bounds (operands[4], 0, GET_MODE_NUNITS (mode)); return "vmlal.%#\t%q0, %P2, %P3[%c4]"; } [(set_attr "type" "neon_mla__scalar_long")] @@ -3248,7 +3222,6 @@ UNSPEC_VQDMLAL_LANE))] "TARGET_NEON" { - neon_lane_bounds (operands[4], 0, GET_MODE_NUNITS (mode)); return "vqdmlal.\t%q0, %P2, %P3[%c4]"; } [(set_attr "type" "neon_sat_mla__scalar_long")] @@ -3264,7 +3237,6 @@ UNSPEC_VMLS_LANE))] "TARGET_NEON" { - neon_lane_bounds (operands[4], 0, GET_MODE_NUNITS (mode)); return "vmls.\t%P0, %P2, %P3[%c4]"; } [(set (attr "type") @@ -3283,7 +3255,6 @@ UNSPEC_VMLS_LANE))] "TARGET_NEON" { - neon_lane_bounds (operands[4], 0, GET_MODE_NUNITS (mode)); return "vmls.\t%q0, %q2, %P3[%c4]"; } [(set (attr "type") @@ -3302,7 +3273,6 @@ VMLSL_LANE))] "TARGET_NEON" { - neon_lane_bounds (operands[4], 0, GET_MODE_NUNITS (mode)); return "vmlsl.%#\t%q0, %P2, %P3[%c4]"; } [(set_attr "type" "neon_mla__scalar_long")] @@ -3318,7 +3288,6 @@ UNSPEC_VQDMLSL_LANE))] "TARGET_NEON" { - neon_lane_bounds (operands[4], 0, GET_MODE_NUNITS (mode)); return "vqdmlsl.\t%q0, %P2, %P3[%c4]"; } [(set_attr "type" "neon_sat_mla__scalar_long")] --------------050602070008030104000300--