https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77281
Bug ID: 77281 Summary: [ARM] Wrong code generated for move of constant vector with mix of signed and unsigned zeros Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: mwahab at gcc dot gnu.org Target Milestone: --- Test gcc.c-torture/execute/ieee/pr72824-2.c fails for arm targets because the code generated to move a vector of signed and unsigned zeros treats it as a vector of unsigned zeros. That is, an assignment x = { 0.f, -0.f, 0.f, -0.f } is treated as the assignment x = { 0.f, 0.f, 0.f, 0.f }. This is due to config/arm/arm.c/neon_valid_immediate using real_equal to compare the vector elements. Seen on trunk and gcc-6.