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