On Friday, 13 November 2015 at 19:59:51 UTC, Ali Çehreli wrote:
On 11/12/2015 11:50 AM, Ali Çehreli wrote:
I would love to be convinced. :) Can someone come up with a reduced
example please?

On 11/12/2015 03:59 AM, Daniel Kozak wrote:

 >      for (i=0; i < 1000000; ++i) {
 >          fmttable(table);
 >      }

I think what we are seeing here is more due to the unused side-effect in
the loop, where compiling with -w fails compilation:

Warning: calling deneme.fmttable without side effects discards return
value of type string, prepend a cast(void) if intentional

Ali


Can someone please tell me if I am mistaken not.

Once again, I don't think this example is fast because the compiler reuses the return value of fmttable() in the loop. Rather, it simply removes the whole expression because its only side-effect is not used in the program.

Perhaps that's what everybody else is saying anyway. :)

(Why don't I look at the assembly myself? Going to a meeting... :p)

Ali

I confirm it, here is the loop part:

    0x004375c2    31db           xor ebx, ebx
┌─> 0x004375c4    ffc3           inc ebx
│   0x004375c6    81fb40420f00   cmp ebx, 0xf4240
└─< 0x004375cc    72f6           jb 0x4375c4
    0x004375ce    8bfb           mov edi, ebx
0x004375d0 e8230d0000 call sym._D3std5stdio14__T7writelnTiZ7writelnFNfiZv

(DMD 2.069 -O -release -inline -boundscheck=off, code from the first post)

Reply via email to