Wide add operations are not always being generated for mixed mode adds as shown by the following test case: int wadd_test(int len, void * dummy, short * __restrict x) { len = len & ~31; int result = 0; __asm volatile (""); for (int i = 0; i < len; i++) result += x[i]; return result; }
Fixed via: URL: https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=230853 r230853 | collison | 2015-11-24 23:51:55 -0700 (Tue, 24 Nov 2015) | 15 lines 2015-11-24 Michael Collison <michael.collison@linaro.org> * config/aarch64/aarch64-simd.md (widen_ssum, widen_usum) (aarch64_<ANY_EXTEND:su><ADDSUB:optab>w<mode>_internal): New patterns * config/aarch64/iterators.md (Vhalf, VDBLW): New mode attributes. * gcc.target/aarch64/saddw-1.c: New test. * gcc.target/aarch64/saddw-2.c: New test. * gcc.target/aarch64/uaddw-1.c: New test. * gcc.target/aarch64/uaddw-2.c: New test. * gcc.target/aarch64/uaddw-3.c: New test. * lib/target-support.exp (check_effective_target_vect_widen_sum_hi_to_si_pattern): Add aarch64 to list of support targets.
Resolved via: https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=230853