On 18 August 2015 at 12:45, Walter Bright via Digitalmars-d < [email protected]> wrote:
> Martin ran some benchmarks recently that showed that ddmd compiled with > dmd was about 30% slower than when compiled with gdc/ldc. This seems to be > fairly typical. > > I'm interested in ways to reduce that gap. > > There are 3 broad kinds of optimizations that compilers do: > > 1. source translations like rewriting x*2 into x<<1, and function inlining > > 2. instruction selection patterns like should one generate: > > SETC AL > MOVZ EAX,AL > > or: > SBB EAX > NEG EAX > > 3. data flow analysis optimizations like constant propagation, dead code > elimination, register allocation, loop invariants, etc. > > Modern compilers (including dmd) do all three. > > So if you're comparing code generated by dmd/gdc/ldc, and notice something > that dmd could do better at (1, 2 or 3), please let me know. Often this > sort of thing is low hanging fruit that is fairly easily inserted into the > back end. > > For example, recently I improved the usage of the SETcc instructions. > > https://github.com/D-Programming-Language/dmd/pull/4901 > https://github.com/D-Programming-Language/dmd/pull/4904 > > A while back I improved usage of BT instructions, the way switch > statements were implemented, and fixed integer divide by a constant with > multiply by its reciprocal. > You didn't fix integer divide on all targets? https://issues.dlang.org/show_bug.cgi?id=14936 (Consider this my contribution to your low hanging fruit)
