On 04/02/2018 10:52 AM, Dennis wrote:
```For these examples, I'll use the D programming language compiler that is currently under development. (...)
But what if bar is pure?

pure int bar(int);

int foo(int i)
{
     return bar(i) + bar(i);
}

Now the assembler output is:

     push    EAX    ; save argument i on stack
     call    bar    ; call bar(i)
     add     EAX,EAX   ; double result
     pop     ECX    ; clean stack
     ret      ; return to caller

bar(i) is called only once```

I've checked whether multiple calls to pure functions get optimized, and it seems like they *never* do. I've tried different versions of dmd with optimizaiton flags on/off, and also LDC/GDC.

The function also needs the `nothrow` attribute. And you have to compile with `-O -release`.

https://run.dlang.io/is/GWnUPH

Reply via email to