[Patch AArch64] Add support for vectorizable standard math patterns.

James Greenhalgh james.greenhalgh@arm.com
Tue Nov 27 16:52:00 GMT 2012


Hi,

This patch adds support for vectorizing across some of the rounding
functions in the C math library to the AArch64 back-end.

In particular, we add support for vectorizing across:

ceil (), ceilf (), lceil (),
floor (), floorf (), lfloor (),
round (), roundf (),
nearbyint (), nearbyintf (),
trunc (), truncf ()

We add testcases ensuring that each of the expected functions are
vectorized. As the i386 and rs6000 backends both ostensibly support
these optimisations we add these tests to the generic testsuites, but
only wire them up for AArch64. As a target may support any subset of
these vectorizations we need a check_effective_target macro for
each of them.

Because of this change to the generic test code I've CCed Janis
Johnson and Mike Stump.

Is this patch OK to commit?

Thanks,
James

---
gcc/

2012-11-27  James Greenhalgh  <james.greenhalgh@arm.com>

	* gcc/config/aarch64/aarch64-builtins.c
	(aarch64_builtin_vectorized_function): New.
	* gcc/config/aarch64/aarch64-protos.h
	(aarch64_builtin_vectorized_function): Declare.
	* gcc/config/aarch64/aarch64-simd-builtins.def (frintz, frintp): Add.
	(frintm, frinti, frintx, frinta, fcvtzs, fcvtzu): Likewise.
	(fcvtas, fcvtau, fcvtps, fcvtpu, fcvtms, fcvtmu): Likewise.
	* gcc/config/aarch64/aarch64-simd.md
	(aarch64_frint_<frint_suffix><mode>): New.
	(<frint_pattern><mode>2): Likewise.
	(aarch64_fcvt<frint_suffix><su><mode>): Likewise.
	(l<fcvt_pattern><su_optab><fcvt_target><VDQF:mode>2): Likewise.
	* gcc/config/aarch64/aarch64.c (TARGET_VECTORIZE_BUILTINS): Define.
	(TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION): Likewise.
	* gcc/config/aarch64/aarch64.md
	(btrunc<mode>2, ceil<mode>2, floor<mode>2)
	(round<mode>2, rint<mode>2, nearbyint<mode>2): Consolidate as...
	(<frint_pattern><mode>2): ...this.
	(lceil<su_optab><mode><mode>2, lfloor<su_optab><mode><mode>2)
	(lround<su_optab><mode><mode>2)
	(lrint<su_optab><mode><mode>2): Consolidate as...
	(l<fcvt_pattern><su_optab><GPF:mode><GPI:mode>2): ... this.
	* gcc/config/aarch64/iterators.md (fcvt_target): New.
	(FCVT_TARGET): Likewise.
	(FRINT): Likewise.
	(FCVT): Likewise.
	(frint_pattern): Likewise.
	(frint_suffix): Likewise.
	(fcvt_pattern): Likewise.

gcc/testsuite/

2012-11-27  James Greenhalgh  <james.greenhalgh@arm.com>

	* gcc/testsuite/gcc.dg/vect/vect-rounding-btrunc.c: New test.
	* gcc/testsuite/gcc.dg/vect/vect-rounding-btruncf.c: Likewise.
	* gcc/testsuite/gcc.dg/vect/vect-rounding-ceil.c: Likewise.
	* gcc/testsuite/gcc.dg/vect/vect-rounding-ceilf.c: Likewise.
	* gcc/testsuite/gcc.dg/vect/vect-rounding-floor.c: Likewise.
	* gcc/testsuite/gcc.dg/vect/vect-rounding-floorf.c: Likewise.
	* gcc/testsuite/gcc.dg/vect/vect-rounding-lceil.c: Likewise.
	* gcc/testsuite/gcc.dg/vect/vect-rounding-lfloor.c: Likewise.
	* gcc/testsuite/gcc.dg/vect/vect-rounding-nearbyint.c: Likewise.
	* gcc/testsuite/gcc.dg/vect/vect-rounding-nearbyintf.c: Likewise.
	* gcc/testsuite/gcc.dg/vect/vect-rounding-round.c: Likewise.
	* gcc/testsuite/gcc.dg/vect/vect-rounding-roundf.c: Likewise.
	* gcc/testsuite/lib/target-supports.exp
	(check_effective_target_vect_call_btrunc): New.
	(check_effective_target_vect_call_btruncf): Likewise.
	(check_effective_target_vect_call_ceil): Likewise.
	(check_effective_target_vect_call_ceilf): Likewise.
	(check_effective_target_vect_call_floor): Likewise.
	(check_effective_target_vect_call_floorf): Likewise.
	(check_effective_target_vect_call_lceil): Likewise.
	(check_effective_target_vect_call_lfloor): Likewise.
	(check_effective_target_vect_call_nearbyint): Likewise.
	(check_effective_target_vect_call_nearbyintf): Likewise.
	(check_effective_target_vect_call_round): Likewise.
	(check_effective_target_vect_call_roundf): Likewise.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Patch-AArch64-Add-support-for-vectorizable-standard-.patch
Type: text/x-patch
Size: 27966 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20121127/184ceefc/attachment.bin>


More information about the Gcc-patches mailing list