Original bug ID: 7042 Reporter:@xavierleroy Assigned to:@xavierleroy Status: closed (set by @xavierleroy on 2017-02-16T14:16:46Z) Resolution: fixed Priority: normal Severity: major Platform: x86-64 Version: 4.03.0+dev / +beta1 Target version: 4.03.0+dev / +beta1 Fixed in version: 4.03.0+dev / +beta1 Category: back end (clambda to assembly) Related to:#6442
Bug description
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.
Possible fixes:
use a specific comparison function, as done for #6442
at some point in the back-end (C--? Mach?), use int64 instead of float to represent FP constants.
Steps to reproduce
Compile mzero.ml using ocamlc and using ocamlopt, then compare the outputs.
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.
Original bug ID: 7042
Reporter: @xavierleroy
Assigned to: @xavierleroy
Status: closed (set by @xavierleroy on 2017-02-16T14:16:46Z)
Resolution: fixed
Priority: normal
Severity: major
Platform: x86-64
Version: 4.03.0+dev / +beta1
Target version: 4.03.0+dev / +beta1
Fixed in version: 4.03.0+dev / +beta1
Category: back end (clambda to assembly)
Related to: #6442
Bug description
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.
Possible fixes:
Steps to reproduce
Compile mzero.ml using ocamlc and using ocamlopt, then compare the outputs.
File attachments
The text was updated successfully, but these errors were encountered: