On Thursday, 25 August 2016 at 17:22:27 UTC, kinke wrote:
I found it hard to believe LDC generates such crappy code when optimizing. These are my results using LDC master on Win64 (`ldc2 -O -release -output-s`):

struct Foo
{
    immutable _u = 8;
    int foo() const
    {
        return 8 * _u;
    }
}
int use(ref const(Foo) foo)
{
    return foo.foo() + foo.foo();
}

int main()
{
    Foo f;
    return use(f);
}


_D7current3Foo3fooMxFZi:
        movl    (%rcx), %eax
        shll    $3, %eax
        retq

_D7current3useFKxS7current3FooZi:
        movl    (%rcx), %eax
        shll    $4, %eax
        retq

_Dmain:
        movl    $128, %eax
        retq

Sure, Foo.foo() and use() could return a constant, but otherwise it can't get much better than this.

I think that here the optimisation is only because LDC can “see” the text of the method. When expansion is not possible, that would be the real test.

Reply via email to