Thread overview | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
January 14, 2013 [Issue 9320] New: Non-POD status of a struct correlated to bad inlining. | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=9320 Summary: Non-POD status of a struct correlated to bad inlining. Product: D Version: D2 Platform: All OS/Version: All Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: nobody@puremagic.com ReportedBy: dransic@gmail.com --- Comment #0 from Nicolas Sicard <dransic@gmail.com> 2013-01-14 14:08:34 PST --- This codes defines a struct that is just a wrapper around a real x, with binary operators. --- struct Foo { real x; version(Constructor) { this(real x) { this.x = x; } } Foo opBinary(string op)(Foo other) { return Foo(mixin("x" ~ op ~ "other.x")); } } version(Constructor) static assert(!__traits(isPOD, Foo)); else static assert(__traits(isPOD, Foo)); Foo test(Foo a, Foo b, Foo c) { return (a + b) / (a * b) - c; } void main() {} --- When compiled with -O -inline -release, the object code for the test function is: --- push RBP mov RBP,RSP sub RSP,010h fld tbyte ptr 030h[RBP] fld tbyte ptr 020h[RBP] faddp ST(1),ST fld tbyte ptr 030h[RBP] fld tbyte ptr 020h[RBP] fmulp ST(1),ST fdivp ST(1),ST fld tbyte ptr 010h[RBP] fsubp ST(1),ST fstp tbyte ptr [RDI] mov word ptr 0Ah[RDI],0 mov dword ptr 0Ch[RDI],0 mov RAX,RDI mov RSP,RBP pop RBP ret --- When compiled with the same flags, but with -version=Constructor, I benchmarked the code as 5x slower (no data here) and the object code becomes: --- push RBP mov RBP,RSP sub RSP,0D0h mov -010h[RBP],RDI lea RSI,020h[RBP] lea RDI,-0A0h[RBP] movsd movsd mov RSI,[00h][RIP] lea RDI,-090h[RBP] movsd movsd fld tbyte ptr 030h[RBP] fld tbyte ptr -0A0h[RBP] faddp ST(1),ST fstp tbyte ptr -090h[RBP] mov word ptr -086h[RBP],0 mov dword ptr -084h[RBP],0 lea RSI,-090h[RBP] lea RDI,-0B0h[RBP] movsd movsd lea RSI,020h[RBP] lea RDI,-060h[RBP] movsd movsd mov RSI,[00h][RIP] lea RDI,-050h[RBP] movsd movsd fld tbyte ptr 030h[RBP] fld tbyte ptr -060h[RBP] fmulp ST(1),ST fstp tbyte ptr -050h[RBP] mov word ptr -046h[RBP],0 mov dword ptr -044h[RBP],0 lea RSI,-050h[RBP] lea RDI,-070h[RBP] movsd movsd lea RSI,-070h[RBP] lea RDI,-080h[RBP] movsd movsd mov RSI,[00h][RIP] lea RDI,-040h[RBP] movsd movsd fld tbyte ptr -0B0h[RBP] fld tbyte ptr -080h[RBP] fdivp ST(1),ST fstp tbyte ptr -040h[RBP] mov word ptr -036h[RBP],0 mov dword ptr -034h[RBP],0 lea RSI,-040h[RBP] lea RDI,-0C0h[RBP] movsd movsd lea RSI,010h[RBP] lea RDI,-030h[RBP] movsd movsd mov RSI,[00h][RIP] lea RDI,-020h[RBP] movsd movsd fld tbyte ptr -0C0h[RBP] fld tbyte ptr -030h[RBP] fsubp ST(1),ST fstp tbyte ptr -020h[RBP] mov word ptr -016h[RBP],0 mov dword ptr -014h[RBP],0 lea RSI,-020h[RBP] lea RDI,-0D0h[RBP] movsd movsd lea RSI,-0D0h[RBP] mov RDI,-010h[RBP] movsd movsd mov RAX,-010h[RBP] mov RSP,RBP pop RBP ret --- D2.061, OSX 10.8.2 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
January 16, 2013 [Issue 9320] Non-POD status of a struct correlated to bad inlining. | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nicolas Sicard | http://d.puremagic.com/issues/show_bug.cgi?id=9320 --- Comment #1 from Nicolas Sicard <dransic@gmail.com> 2013-01-16 05:19:13 PST --- Note, LDC produces equivalent code in both cases: --- fld tbyte ptr 028h[RSP] fld tbyte ptr 018h[RSP] fld ST(0) fmul ST,ST(2) fxch ST(1) faddp ST(2),ST fdivp ST(1),ST fld tbyte ptr 8[RSP] fsubp ST(1),ST fstp tbyte ptr [RDI] mov AX,[0Eh][RIP] mov 0Eh[RDI],AX mov EAX,[0Ah][RIP] mov 0Ah[RDI],EAX ret --- -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
January 25, 2013 [Issue 9320] Non-POD status of a struct correlated to bad inlining. | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nicolas Sicard | http://d.puremagic.com/issues/show_bug.cgi?id=9320 Walter Bright <bugzilla@digitalmars.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |bugzilla@digitalmars.com --- Comment #2 from Walter Bright <bugzilla@digitalmars.com> 2013-01-24 23:13:00 PST --- This has nothing to do with inlining; the constructor call is inlined just fine. It also has nothing to do with POD status, although that does illuminate the problem. The problem is that the optimizer does copy propagation only on basic types, not on structs. It needs to do it on structs, too. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
January 27, 2013 [Issue 9320] optimizer should do copy propagation on structs, too | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nicolas Sicard | http://d.puremagic.com/issues/show_bug.cgi?id=9320 --- Comment #3 from github-bugzilla@puremagic.com 2013-01-26 19:51:13 PST --- Commit pushed to dmd-1.x at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/3e004c4fafcd64eda4e5ed1a257182b8d802b66f fix Issue 9320 - optimizer should do copy propagation on structs, too -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
January 27, 2013 [Issue 9320] optimizer should do copy propagation on structs, too | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nicolas Sicard | http://d.puremagic.com/issues/show_bug.cgi?id=9320 --- Comment #4 from Walter Bright <bugzilla@digitalmars.com> 2013-01-26 19:53:08 PST --- https://github.com/D-Programming-Language/dmd/pull/1559 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
January 27, 2013 [Issue 9320] optimizer should do copy propagation on structs, too | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nicolas Sicard | http://d.puremagic.com/issues/show_bug.cgi?id=9320 --- Comment #5 from github-bugzilla@puremagic.com 2013-01-26 22:38:23 PST --- Commit pushed to master at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/fde7475a6f1837a32977221e9eb22df180920826 Merge pull request #1559 from WalterBright/b34 fix Issue 9320 - optimizer should do copy propagation on structs, too -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
January 27, 2013 [Issue 9320] optimizer should do copy propagation on structs, too | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nicolas Sicard | http://d.puremagic.com/issues/show_bug.cgi?id=9320 Walter Bright <bugzilla@digitalmars.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Version|D2 |D1 & D2 Resolution| |FIXED -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
Copyright © 1999-2021 by the D Language Foundation