-
- Downloads
[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
Showing
- gcc/ChangeLog 19 additions, 0 deletionsgcc/ChangeLog
- gcc/config/aarch64/aarch64-sve.md 79 additions, 21 deletionsgcc/config/aarch64/aarch64-sve.md
- gcc/config/aarch64/aarch64-sve2.md 4 additions, 4 deletionsgcc/config/aarch64/aarch64-sve2.md
- gcc/config/aarch64/aarch64.c 3 additions, 4 deletionsgcc/config/aarch64/aarch64.c
- gcc/config/aarch64/aarch64.md 1 addition, 0 deletionsgcc/config/aarch64/aarch64.md
Loading
Please register or sign in to comment