CSE optimization confuses -0.0 with 0.0 #7042
Original bug ID: 7042
Owing to the use of Pervasives.compare, the new CSE pass of 4.03 considers as equal the instructions "Iconst_float 0.0" and "Iconst_float (-0.0)", replacing the latter by a move of the result of the former. This is not correct, as demonstrated by the attached repro case.
Steps to reproduce
Compile mzero.ml using ocamlc and using ocamlopt, then compare the outputs.
Comment author: @mshinwell
I think Flambda may suffer from a similar problem; in fact, we already have a code review comment about it. Maybe we should consider a different representation for floats even before Cmm.