Skip to content
Snippets Groups Projects
Commit 06308276 authored by Richard Sandiford's avatar Richard Sandiford Committed by Richard Sandiford
Browse files

[AArch64] Use "x" predication for SVE integer arithmetic patterns

The SVE patterns used an UNSPEC_MERGE_PTRUE unspec to attach a predicate
to an otherwise unpredicated integer arithmetic operation.  As its name
suggests, this was designed to be a wrapper used for merging instructions
in which the predicate is known to be a PTRUE.

This unspec dates from the very early days of the port and nothing has
ever taken advantage of the PTRUE guarantee for arithmetic (as opposed
to comparisons).  This patch replaces it with the less stringent
guarantee that:

(a) the values of inactive lanes don't matter and
(b) it is valid to make extra lanes active if there's a specific benefit

Doing this makes the patterns suitable for the ACLE _x functions, which
have the above semantics.

See the block comment in the patch for more details.

2019-08-14  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* config/aarch64/aarch64.md (UNSPEC_PRED_X): New unspec.
	* config/aarch64/aarch64-sve.md: Add a section describing it.
	(@aarch64_pred_mov<mode>, @aarch64_pred_mov<mode>)
	(<SVE_INT_UNARY:optab><mode>2, *<SVE_INT_UNARY:optab><mode>2)
	(aarch64_<su>abd<mode>_3, mul<SVE_I:mode>3, *mul<SVE_I:mode>3)
	(<su>mul<mode>3_highpart, *<su>mul<mode>3_highpart)
	(<SVE_INT_BINARY:optab><mode>3, *<SVE_INT_BINARY:optab><mode>3)
	(*bic<mode>3, v<ASHIFT:optab><mode>3, *v<ASHIFT:optab><mode>3)
	(<su><maxmin><mode>3, *<su><maxmin><mode>3, *madd<SVE_I:mode>)
	(*msub<SVE_I:mode>3, *aarch64_sve_rev64<mode>)
	(*aarch64_sve_rev32<mode>, *aarch64_sve_rev16vnx16qi): Use
	UNSPEC_PRED_X instead of UNSPEC_MERGE_PTRUE.
	* config/aarch64/aarch64-sve2.md (<u>avg<mode>3_floor)
	(<u>avg<mode>3_ceil, *<sur>h<addsub><mode>): Likewise.
	* config/aarch64/aarch64.c (aarch64_split_sve_subreg_move)
	(aarch64_evpc_rev_local): Update accordingly.

From-SVN: r274425
parent 95eb5537
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment