digitalmars.D.bugs - [Issue 12852] New: 64 bit wrong code generated
- via Digitalmars-d-bugs (38/38) Jun 04 2014 https://issues.dlang.org/show_bug.cgi?id=12852
https://issues.dlang.org/show_bug.cgi?id=12852 Issue ID: 12852 Summary: 64 bit wrong code generated Product: D Version: D2 Hardware: x86_64 OS: All Status: NEW Severity: critical Priority: P1 Component: DMD Assignee: nobody puremagic.com Reporter: bugzilla digitalmars.com Martin Nowak reports https://github.com/D-Programming-Language/dmd/pull/2561 : Here is a reduced test case for the std.numeric failure. bool normalize(double[] range, double sum = 1) { double s = 0; // Step 1: Compute sum and length of the range const length = range.length; foreach (e; range) { s += e; } // Step 2: perform normalization if (s == 0) { return false; } // The path most traveled return true; } This generate wrong code for s == 0 . It reuses rdx where it previously loaded the content of the xmm register from the stack. You can compare the old (at line 35) and the new (at line 32) dissassembly. If I remove the SFLexit flag from rtlsym.h it works, this seems to have some side-effect on the backend register usage. --
Jun 04 2014