__ctfe

Adam D. Ruppe destructionator at gmail.com
Mon Oct 1 12:30:13 PDT 2012


On Monday, 1 October 2012 at 19:22:37 UTC, Philippe Sigaud wrote:
> Something I wanted to ask for a long time: is there any runtime 
> speed penalty in using __ctfe?

No. What happens is when it goes to the compile the runtime code, 
__ctfe is a constant false, so then the optimizer can see it is 
obviously dead code and eliminate the branch entirely. You don't 
even have to use the -O switch to get this:

void test() {
	if(__ctfe) {
		asm { nop; nop; nop; nop; }
	} else {
		asm { hlt; }
	}
}

$ dmd test.d -c
$ objdump --disassemble test.o
Disassembly of section .text._D4test4testFZv:

00000000 <_D4test4testFZv>:
    0:   55                      push   %ebp
    1:   8b ec                   mov    %esp,%ebp
    3:   f4                      hlt
    4:   5d                      pop    %ebp
    5:   c3                      ret


Note that there's no trace of a compare, jmp, nor the nops from 
the dead ctfe branch.


More information about the Digitalmars-d mailing list