aarch64: Relax builtin flags for integer builtins

This patch relaxes the flags for most integer builtins to NONE as they don't read/write memory
and don't care about the FPCR/FPSR or exceptions so we should be more aggressive with them.

This leads to fallout in a testcase where the result of an intrinsic was unused and it is now
DCE'd. The testcase is adjusted.

gcc/ChangeLog:

	* config/aarch64/aarch64-simd-builtins.def (clrsb, clz, ctz, popcount,
	vec_smult_lane_, vec_smlal_lane_, vec_smult_laneq_, vec_smlal_laneq_,
	vec_umult_lane_, vec_umlal_lane_, vec_umult_laneq_, vec_umlal_laneq_,
	ashl, sshl, ushl, srshl, urshl, sdot_lane, udot_lane, sdot_laneq,
	udot_laneq, usdot_lane, usdot_laneq, sudot_lane, sudot_laneq, ashr,
	ashr_simd, lshr, lshr_simd, srshr_n, urshr_n, ssra_n, usra_n, srsra_n,
	ursra_n, sshll_n, ushll_n, sshll2_n, ushll2_n, ssri_n, usri_n, ssli_n,
	ssli_n, usli_n, bswap, rbit, simd_bsl, eor3q, rax1q, xarq, bcaxq): Use
	NONE builtin flags.

gcc/testsuite/ChangeLog:

	* gcc.target/aarch64/arg-type-diagnostics-1.c: Return result from foo.
This commit is contained in:
Kyrylo Tkachov 2021-02-01 17:40:20 +00:00
parent 886f9f519c
commit 7bcd5e09fb
2 changed files with 58 additions and 56 deletions

View File

@ -50,10 +50,10 @@
BUILTIN_VHSDF_DF (UNOP, sqrt, 2, FP)
BUILTIN_VD_BHSI (BINOP, addp, 0, NONE)
VAR1 (UNOP, addp, 0, NONE, di)
BUILTIN_VDQ_BHSI (UNOP, clrsb, 2, ALL)
BUILTIN_VDQ_BHSI (UNOP, clz, 2, ALL)
BUILTIN_VS (UNOP, ctz, 2, ALL)
BUILTIN_VB (UNOP, popcount, 2, ALL)
BUILTIN_VDQ_BHSI (UNOP, clrsb, 2, NONE)
BUILTIN_VDQ_BHSI (UNOP, clz, 2, NONE)
BUILTIN_VS (UNOP, ctz, 2, NONE)
BUILTIN_VB (UNOP, popcount, 2, NONE)
/* Implemented by aarch64_<sur>q<r>shl<mode>. */
BUILTIN_VSDQ_I (BINOP, sqshl, 0, NONE)
@ -284,14 +284,14 @@
BUILTIN_VD_HSI (BINOP, smull_n, 0, NONE)
BUILTIN_VD_HSI (BINOPU, umull_n, 0, NONE)
BUILTIN_VD_HSI (TERNOP_LANE, vec_smult_lane_, 0, ALL)
BUILTIN_VD_HSI (QUADOP_LANE, vec_smlal_lane_, 0, ALL)
BUILTIN_VD_HSI (TERNOP_LANE, vec_smult_laneq_, 0, ALL)
BUILTIN_VD_HSI (QUADOP_LANE, vec_smlal_laneq_, 0, ALL)
BUILTIN_VD_HSI (TERNOPU_LANE, vec_umult_lane_, 0, ALL)
BUILTIN_VD_HSI (QUADOPU_LANE, vec_umlal_lane_, 0, ALL)
BUILTIN_VD_HSI (TERNOPU_LANE, vec_umult_laneq_, 0, ALL)
BUILTIN_VD_HSI (QUADOPU_LANE, vec_umlal_laneq_, 0, ALL)
BUILTIN_VD_HSI (TERNOP_LANE, vec_smult_lane_, 0, NONE)
BUILTIN_VD_HSI (QUADOP_LANE, vec_smlal_lane_, 0, NONE)
BUILTIN_VD_HSI (TERNOP_LANE, vec_smult_laneq_, 0, NONE)
BUILTIN_VD_HSI (QUADOP_LANE, vec_smlal_laneq_, 0, NONE)
BUILTIN_VD_HSI (TERNOPU_LANE, vec_umult_lane_, 0, NONE)
BUILTIN_VD_HSI (QUADOPU_LANE, vec_umlal_lane_, 0, NONE)
BUILTIN_VD_HSI (TERNOPU_LANE, vec_umult_laneq_, 0, NONE)
BUILTIN_VD_HSI (QUADOPU_LANE, vec_umlal_laneq_, 0, NONE)
BUILTIN_VD_HSI (QUADOP_LANE, vec_smlsl_lane_, 0, NONE)
BUILTIN_VD_HSI (QUADOP_LANE, vec_smlsl_laneq_, 0, NONE)
@ -315,25 +315,25 @@
BUILTIN_VSDQ_HSI (TERNOP_LANE, sqrdmulh_lane, 0, NONE)
BUILTIN_VSDQ_HSI (TERNOP_LANE, sqrdmulh_laneq, 0, NONE)
BUILTIN_VSDQ_I_DI (BINOP, ashl, 3, ALL)
BUILTIN_VSDQ_I_DI (BINOP, ashl, 3, NONE)
/* Implemented by aarch64_<sur>shl<mode>. */
BUILTIN_VSDQ_I_DI (BINOP, sshl, 0, ALL)
BUILTIN_VSDQ_I_DI (BINOP_UUS, ushl, 0, ALL)
BUILTIN_VSDQ_I_DI (BINOP, srshl, 0, ALL)
BUILTIN_VSDQ_I_DI (BINOP_UUS, urshl, 0, ALL)
BUILTIN_VSDQ_I_DI (BINOP, sshl, 0, NONE)
BUILTIN_VSDQ_I_DI (BINOP_UUS, ushl, 0, NONE)
BUILTIN_VSDQ_I_DI (BINOP, srshl, 0, NONE)
BUILTIN_VSDQ_I_DI (BINOP_UUS, urshl, 0, NONE)
/* Implemented by aarch64_<sur><dotprod>{_lane}{q}<dot_mode>. */
BUILTIN_VB (TERNOP, sdot, 0, NONE)
BUILTIN_VB (TERNOPU, udot, 0, NONE)
BUILTIN_VB (TERNOP_SSUS, usdot, 0, NONE)
BUILTIN_VB (QUADOP_LANE, sdot_lane, 0, ALL)
BUILTIN_VB (QUADOPU_LANE, udot_lane, 0, ALL)
BUILTIN_VB (QUADOP_LANE, sdot_laneq, 0, ALL)
BUILTIN_VB (QUADOPU_LANE, udot_laneq, 0, ALL)
BUILTIN_VB (QUADOPSSUS_LANE_QUADTUP, usdot_lane, 0, ALL)
BUILTIN_VB (QUADOPSSUS_LANE_QUADTUP, usdot_laneq, 0, ALL)
BUILTIN_VB (QUADOPSSSU_LANE_QUADTUP, sudot_lane, 0, ALL)
BUILTIN_VB (QUADOPSSSU_LANE_QUADTUP, sudot_laneq, 0, ALL)
BUILTIN_VB (QUADOP_LANE, sdot_lane, 0, NONE)
BUILTIN_VB (QUADOPU_LANE, udot_lane, 0, NONE)
BUILTIN_VB (QUADOP_LANE, sdot_laneq, 0, NONE)
BUILTIN_VB (QUADOPU_LANE, udot_laneq, 0, NONE)
BUILTIN_VB (QUADOPSSUS_LANE_QUADTUP, usdot_lane, 0, NONE)
BUILTIN_VB (QUADOPSSUS_LANE_QUADTUP, usdot_laneq, 0, NONE)
BUILTIN_VB (QUADOPSSSU_LANE_QUADTUP, sudot_lane, 0, NONE)
BUILTIN_VB (QUADOPSSSU_LANE_QUADTUP, sudot_laneq, 0, NONE)
/* Implemented by aarch64_fcadd<rot><mode>. */
BUILTIN_VHSDF (BINOP, fcadd90, 0, FP)
@ -354,24 +354,24 @@
BUILTIN_VQ_HSF (QUADOP_LANE_PAIR, fcmlaq_lane180, 0, ALL)
BUILTIN_VQ_HSF (QUADOP_LANE_PAIR, fcmlaq_lane270, 0, ALL)
BUILTIN_VDQ_I (SHIFTIMM, ashr, 3, ALL)
VAR1 (SHIFTIMM, ashr_simd, 0, ALL, di)
BUILTIN_VDQ_I (SHIFTIMM, lshr, 3, ALL)
VAR1 (USHIFTIMM, lshr_simd, 0, ALL, di)
BUILTIN_VDQ_I (SHIFTIMM, ashr, 3, NONE)
VAR1 (SHIFTIMM, ashr_simd, 0, NONE, di)
BUILTIN_VDQ_I (SHIFTIMM, lshr, 3, NONE)
VAR1 (USHIFTIMM, lshr_simd, 0, NONE, di)
/* Implemented by aarch64_<sur>shr_n<mode>. */
BUILTIN_VSDQ_I_DI (SHIFTIMM, srshr_n, 0, ALL)
BUILTIN_VSDQ_I_DI (USHIFTIMM, urshr_n, 0, ALL)
BUILTIN_VSDQ_I_DI (SHIFTIMM, srshr_n, 0, NONE)
BUILTIN_VSDQ_I_DI (USHIFTIMM, urshr_n, 0, NONE)
/* Implemented by aarch64_<sur>sra_n<mode>. */
BUILTIN_VSDQ_I_DI (SHIFTACC, ssra_n, 0, ALL)
BUILTIN_VSDQ_I_DI (USHIFTACC, usra_n, 0, ALL)
BUILTIN_VSDQ_I_DI (SHIFTACC, srsra_n, 0, ALL)
BUILTIN_VSDQ_I_DI (USHIFTACC, ursra_n, 0, ALL)
BUILTIN_VSDQ_I_DI (SHIFTACC, ssra_n, 0, NONE)
BUILTIN_VSDQ_I_DI (USHIFTACC, usra_n, 0, NONE)
BUILTIN_VSDQ_I_DI (SHIFTACC, srsra_n, 0, NONE)
BUILTIN_VSDQ_I_DI (USHIFTACC, ursra_n, 0, NONE)
/* Implemented by aarch64_<sur>shll_n<mode>. */
BUILTIN_VD_BHSI (SHIFTIMM, sshll_n, 0, ALL)
BUILTIN_VD_BHSI (USHIFTIMM, ushll_n, 0, ALL)
BUILTIN_VD_BHSI (SHIFTIMM, sshll_n, 0, NONE)
BUILTIN_VD_BHSI (USHIFTIMM, ushll_n, 0, NONE)
/* Implemented by aarch64_<sur>shll2_n<mode>. */
BUILTIN_VQW (SHIFTIMM, sshll2_n, 0, ALL)
BUILTIN_VQW (SHIFTIMM, ushll2_n, 0, ALL)
BUILTIN_VQW (SHIFTIMM, sshll2_n, 0, NONE)
BUILTIN_VQW (SHIFTIMM, ushll2_n, 0, NONE)
/* Implemented by aarch64_<sur>q<r>shr<u>n_n<mode>. */
BUILTIN_VSQN_HSDI (SHIFTIMM, sqshrun_n, 0, NONE)
BUILTIN_VSQN_HSDI (SHIFTIMM, sqrshrun_n, 0, NONE)
@ -387,11 +387,11 @@
BUILTIN_VQN (SHIFT2IMM, sqrshrn2_n, 0, NONE)
BUILTIN_VQN (USHIFT2IMM, uqrshrn2_n, 0, NONE)
/* Implemented by aarch64_<sur>s<lr>i_n<mode>. */
BUILTIN_VSDQ_I_DI (SHIFTINSERT, ssri_n, 0, ALL)
BUILTIN_VSDQ_I_DI (USHIFTACC, usri_n, 0, ALL)
BUILTIN_VSDQ_I_DI (SHIFTINSERT, ssli_n, 0, ALL)
VAR2 (SHIFTINSERTP, ssli_n, 0, ALL, di, v2di)
BUILTIN_VSDQ_I_DI (USHIFTACC, usli_n, 0, ALL)
BUILTIN_VSDQ_I_DI (SHIFTINSERT, ssri_n, 0, NONE)
BUILTIN_VSDQ_I_DI (USHIFTACC, usri_n, 0, NONE)
BUILTIN_VSDQ_I_DI (SHIFTINSERT, ssli_n, 0, NONE)
VAR2 (SHIFTINSERTP, ssli_n, 0, NONE, di, v2di)
BUILTIN_VSDQ_I_DI (USHIFTACC, usli_n, 0, NONE)
/* Implemented by aarch64_<sur>qshl<u>_n<mode>. */
BUILTIN_VSDQ_I (SHIFTIMM_USS, sqshlu_n, 0, NONE)
BUILTIN_VSDQ_I (SHIFTIMM, sqshl_n, 0, NONE)
@ -550,9 +550,9 @@
VAR1 (UNOP, floatunsv4si, 2, FP, v4sf)
VAR1 (UNOP, floatunsv2di, 2, FP, v2df)
VAR5 (UNOPU, bswap, 2, ALL, v4hi, v8hi, v2si, v4si, v2di)
VAR5 (UNOPU, bswap, 2, NONE, v4hi, v8hi, v2si, v4si, v2di)
BUILTIN_VB (UNOP, rbit, 0, ALL)
BUILTIN_VB (UNOP, rbit, 0, NONE)
/* Implemented by
aarch64_<PERMUTE:perm_insn><mode>. */
@ -616,9 +616,9 @@
VAR1 (TERNOP, fnma, 4, FP, hf)
/* Implemented by aarch64_simd_bsl<mode>. */
BUILTIN_VDQQH (BSL_P, simd_bsl, 0, ALL)
VAR2 (BSL_P, simd_bsl,0, ALL, di, v2di)
BUILTIN_VSDQ_I_DI (BSL_U, simd_bsl, 0, ALL)
BUILTIN_VDQQH (BSL_P, simd_bsl, 0, NONE)
VAR2 (BSL_P, simd_bsl,0, NONE, di, v2di)
BUILTIN_VSDQ_I_DI (BSL_U, simd_bsl, 0, NONE)
BUILTIN_VALLDIF (BSL_S, simd_bsl, 0, ALL)
/* Implemented by aarch64_crypto_aes<op><mode>. */
@ -763,15 +763,15 @@
/* Implemented by aarch64_crypto_sha512su1qv2di. */
VAR1 (TERNOPU, crypto_sha512su1q, 0, NONE, v2di)
/* Implemented by eor3q<mode>4. */
BUILTIN_VQ_I (TERNOPU, eor3q, 4, ALL)
BUILTIN_VQ_I (TERNOP, eor3q, 4, ALL)
BUILTIN_VQ_I (TERNOPU, eor3q, 4, NONE)
BUILTIN_VQ_I (TERNOP, eor3q, 4, NONE)
/* Implemented by aarch64_rax1qv2di. */
VAR1 (BINOPU, rax1q, 0, ALL, v2di)
VAR1 (BINOPU, rax1q, 0, NONE, v2di)
/* Implemented by aarch64_xarqv2di. */
VAR1 (TERNOPUI, xarq, 0, ALL, v2di)
VAR1 (TERNOPUI, xarq, 0, NONE, v2di)
/* Implemented by bcaxq<mode>4. */
BUILTIN_VQ_I (TERNOPU, bcaxq, 4, ALL)
BUILTIN_VQ_I (TERNOP, bcaxq, 4, ALL)
BUILTIN_VQ_I (TERNOPU, bcaxq, 4, NONE)
BUILTIN_VQ_I (TERNOP, bcaxq, 4, NONE)
/* Implemented by aarch64_fml<f16mac1>l<f16quad>_low<mode>. */
VAR1 (TERNOP, fmlal_low, 0, FP, v2sf)

View File

@ -3,7 +3,8 @@
#include "arm_neon.h"
void foo (int a)
int32x2_t
foo (int a)
{
int32x2_t arg1;
int32x2_t arg2;
@ -15,4 +16,5 @@ void foo (int a)
we have to tell dg-error to ignore the line number. */
result = vrsra_n_s32 (arg1, arg2, a);
/* { dg-error "must be a constant immediate" "" { target *-*-* } 0 } */
return result;
}