dmd codegen improvements

tsbockman via Digitalmars-d digitalmars-d at puremagic.com
Fri Aug 28 16:57:06 PDT 2015


On Wednesday, 19 August 2015 at 22:15:46 UTC, tsbockman wrote:
> I lack the assembly language skills to determine the cause(s) 
> myself, but my 
> [CheckedInt](https://github.com/tsbockman/CheckedInt) benchmark 
> runs about 10x slower when compiled with DMD rather than GDC. 
> I'm sure there's some low-hanging fruit in there somewhere...

While doing some refactoring and updating CheckedInt for DMD 
2.068, I have discovered one major source of slowness: DMD cannot 
inline even trivial struct constructors:

// Error: constructor foo.this cannot inline function
struct foo {
     int bar;

     pragma(inline, true) this(int bar) {
         this.bar = bar;
     }
}

Refactoring my code to reduce the use of struct constructors 
yielded a 2x speed boost. The workaround is stupidly simple, 
though ugly:

struct foo {
     int bar;

     pragma(inline, true) static auto inline_cons(int bar) {
         foo ret = void;
         ret.bar = bar;
         return ret;
     }
}



More information about the Digitalmars-d mailing list