https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123940
--- Comment #4 from Robin Dapp <rdapp at gcc dot gnu.org> ---
No, not fre. We create an FMA where we shouldn't:
Before:
vect_pretmp_50.23_121 = MEM <vector(2) charD.2> [(charD.2 *)&dD.2916 + 14B];
vect__28.25_123 = vect_pretmp_50.23_121 * { 2, 2 };
vect_patt_99.26_124 = .COND_ADD ({ -1, -1 }, vect_pretmp_50.23_121, { 14, 15
}, vect__28.25_123);
_126 = BIT_FIELD_REF <vect_patt_99.26_124, 8, 8>;
After:
vect_pretmp_50.23_121 = MEM <vector(2) charD.2> [(charD.2 *)&dD.2916 + 14B];
vect_patt_99.26_124 = .FMA (vect_pretmp_50.23_121, { 2, 2 },
vect_pretmp_50.23_121);
_126 = BIT_FIELD_REF <vect_patt_99.26_124, 8, 8>;
The use of the mult result is in the else operand of the COND_ADD (which is
actually dead because the condition is always true).
Testing a patch.