On Tue, May 17, 2016 at 11:37:57AM +0100, Kyrill Tkachov wrote: > Hi all, > > The aarch64_vmls<mode> pattern claims to perform a normal vector > floating-point multiply-subtract but in fact performs a fused > multiply-subtract. This is fine when -ffp-contract=fast, but it's not guarded > on anything so will generate the FMLS instruction even when > -ffp-contract=off. > > The solution is just to delete the pattern. If -ffp-contract=fast then an fma > operation will have been generated and the fnma<mode>4 would be used to > generate the FMLS instruction. > > Bootstrapped and tested on aarch64-none-linux-gnu. > > Ok for trunk and GCC 6 and 5? GCC 4.9 needs a different -mtune option in the > testcase to trigger the testcase...
OK, thanks. Please consider the GCC 4.9 backport preapproved with whatever flag is needed to expose the issue. Thanks, James > > Thanks, > Kyrill > > 2016-05-17 Kyrylo Tkachov <kyrylo.tkac...@arm.com> > > PR target/70809 > * config/aarch64/aarch64-simd.md (aarch64_vmls<mode>): Delete. > > 2016-05-17 Kyrylo Tkachov <kyrylo.tkac...@arm.com> > > PR target/70809 > * gcc.target/aarch64/pr70809_1.c: New test.