Avoid using predefined insn name for instruction with different semantics
authorJeff Law <jeffreyalaw@gmail.com>
Wed, 9 Feb 2022 19:10:53 +0000 (14:10 -0500)
committerJeff Law <jeffreyalaw@gmail.com>
Wed, 9 Feb 2022 19:10:53 +0000 (14:10 -0500)
commiteefec38c992e3622a69de9667e91f0cafbff03cc
tree9e93d1e58a23d374a4f0a5e2e985d1aa233d5ece
parentd3f3ec5a555dbf0e3329515b38f848b4760589b2
Avoid using predefined insn name for instruction with different semantics

This isn't technically a regression, but it only impacts the v850 target and
fixes a long standing code correctness issue.

As outlined in slightly more detail in the PR, the v850 is using the pattern
name "fnmasf4" and "fnmssf4" to generate fnmaf.s and fnmsf.s instructions
 respectively.

Unfortunately fnmasf4 is expected to produce (-a * b) + c and
fnmssf4 (-a * b) - c.  Those v850 instructions actually negate the entire
result.

The fix is trivial.  Use a different pattern name so that the combiner can
still generate those instructions, but prevent those instructions from being
used to implement GCC's notion of what fnmas and fnmss should be.

This fixes pr97040 as well as a handful of testsuite failures for the v3e5
multilib.

gcc/
PR target/97040
* config/v850/v850.md (*v850_fnmasf4): Renamed from fnmasf4.
(*v850_fnmssf4): Renamed from fnmssf4
gcc/config/v850/v850.md