Excellent! Thanks guys, this is a TON better!

I find it a little bit strange that it fetches the value of 0 from some 
area in memory instead of just say xor RAX, RAX. I'm guessing it doesn't 
know that the value is actually numeric 0? Is that because zero(T) isn't 
being inlined fully perhaps?

If it could realize that zero(T) is actually 0, it would probably avoid the 
add altogether and simply do a mov into RAX.

Interestingly, the code generated for Uints implies that that it knows that 
zero(T) is actually just 0 and we get:
julia> code_native(f, (Uint,))
    .section __TEXT,__text,regular,pure_instructions
Filename: none
Source line: 3
    push RBP
    mov RBP, RSP
    test RDI, RDI
    je 9
Source line: 3
    imul RDI, RDI
    jmpq 2
    xor EDI, EDI
Source line: 6
    mov RAX, RDI
    pop RBP
    ret

Which is a little strange in its own way, since the xor EDI, EDI is 
unecessary (and the jmpq 2 as well), but is at least better in that it 
doesn't load a 0 from memory. Any clues?

Thanks for your help guys,
Rak.

On Thursday, April 3, 2014 5:24:27 PM UTC-4, Matt Bauman wrote:
>
> Talk about a perfect storm of fixes and enhancements!  With the latest 
> commit by Arch Robison, the native code is remarkably similar to clang's 
> output — just load, test, and multiply and add.  It's funny to read folks 
> in the issue talking about how much faster the 0.3 version is… when the 
> final result ended up being something like > 50 million fold faster than 
> 0.2.  So very impressive.
>
> You should complain about strange LLVM code more often, Rak.  Here's the 
> native code now:
>
> julia> code_native(f, (Int,))
> .section __TEXT,__text,regular,pure_instructions
> Filename: none
> Source line: 2
> push RBP
> mov RBP, RSP
> movabs RAX, 140508429342280
> Source line: 2
> mov RAX, QWORD PTR [RAX]
> test RDI, RDI
> jle 7
> Source line: 3
> imul RDI, RDI
> add RAX, RDI
> Source line: 6
> pop RBP
> ret
>
> On Wednesday, April 2, 2014 9:26:44 PM UTC-4, andrew cooke wrote:
>>
>>
>> thanks!  it's just possible this will fix a performance issue of mine :o)
>>
>> On Wednesday, 2 April 2014 16:57:36 UTC-3, Steven G. Johnson wrote:
>>>
>>> Just filed this as an issue:
>>>     https://github.com/JuliaLang/julia/issues/6382
>>>
>> julia> code_native(f, (Uint,))
 .section __TEXT,__text,regular,pure_instructions
Filename: none
Source line: 3
 push RBP
 mov RBP, RSP
 test RDI, RDI
 je 9
Source line: 3
 imul RDI, RDI
 jmpq 2
 xor EDI, EDI
Source line: 6
 mov RAX, RDI
 pop RBP
 ret

Reply via email to