dmd codegen improvements

BBasile via Digitalmars-d digitalmars-d at puremagic.com
Sun Sep 13 10:30:09 PDT 2015


On Tuesday, 18 August 2015 at 10:45:49 UTC, Walter Bright 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.

Maybe the ENTER instruction should be replaced by a full prologue:

- 
https://github.com/D-Programming-Language/dmd/blob/ef24f9acd99aa52ed28e7221cb0997099ab85f4a/src/backend/cod3.c#L2939
- 
http://stackoverflow.com/questions/5959890/enter-vs-push-ebp-mov-ebp-esp-sub-esp-imm-and-leave-vs-mov-esp-ebp

It seems that since the Pentium I, ENTER is always slower. But i 
don't know if it's used as a kind of optimization for the binary 
size. Actually before using DMD I had **never** seen an ENTER.


More information about the Digitalmars-d mailing list