Bug 4034 – pure function calls returning a double do not seem to be optimized away

Status
NEW
Severity
enhancement
Priority
P4
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2010-03-31T09:45:44Z
Last change time
2024-12-13T17:52:02Z
Keywords
performance
Assigned to
No Owner
Creator
bearophile_hugs
Moved to GitHub: dmd#18211 →

Comments

Comment #0 by bearophile_hugs — 2010-03-31T09:45:44Z
This small D2 program calls two times a function msin that I have tagged as pure, but in the binary there are two sin instructions, I don't understand: import std.c.stdio: printf; import std.c.stdlib: atof; import std.math: sin; pure double msin(double x) { return sin(x); } void main() { double x = atof("0.3"); double y = msin(x) + msin(x); printf("%f\n", y); } Compiled with dmd v2.042: dmd -O -release -inline bug1.d Produces: _D4bug14msinFNadZd: fld qword ptr 4[ESP] fsin ret 8 __Dmain: L0: sub ESP,01Ch mov EAX,offset FLAT:_DATA push EAX call near ptr _atof mov ECX,offset FLAT:_DATA[4] fstp qword ptr 8[ESP] fld qword ptr 8[ESP] fsin fld qword ptr 8[ESP] sub ESP,8 fsin faddp ST(1),ST fstp qword ptr [ESP] push ECX call near ptr _printf add ESP,010h add ESP,01Ch xor EAX,EAX ret Similar code is produced with this line: double y = sin(x) + sin(x);
Comment #1 by dkorpel — 2021-09-04T12:51:07Z
I don't think this is about returning double, but about `msin` not being `nothrow`.
Comment #2 by robert.schadek — 2024-12-13T17:52:02Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/18211 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB