I think you are right btw, the compiler got rid of the wrapper function for
the "+" call, since all I see above is Base.add_float.

On Sun, Jul 24, 2016 at 4:55 PM, Marius Millea <mariusmil...@gmail.com>
wrote:

> Here's my very simple test case. I will also try on my actual code.
>
> using SelfFunctions
> using TimeIt
>
> @selftype self type mytype
>     x::Float64
> end
>
> t = mytype(0)
>
>
> # Test @self'ed version:
>
> @self @inline function f1()
>     1+x
> end
>
> @timeit f1(t)
> println(@code_warntype(f1(t)))
>
> # 1000000 loops, best of 3: 100.64 ns per loop
> # Variables:
> #   sf::SelfFunctions.SelfFunction{###f1_selfimpl#271}
> #   args::Tuple{mytype}
> #
> # Body:
> #   begin
> #       # meta: location /home/marius/workspace/selffunctions/test.jl
> ##f1_selfimpl#271 11
> #       SSAValue(1) =
> (Core.getfield)((Core.getfield)(args::Tuple{mytype},1)::mytype,:x)::Float64
> #       # meta: pop location
> #       return
> (Base.box)(Base.Float64,(Base.add_float)((Base.box)(Float64,(Base.sitofp)(Float64,1)),SSAValue(1)))
> #   end::Float64
>
>
>
>
> # Test non-@self'ed version:
>
> @inline function f2(t::mytype)
>     1+t.x
> end
>
> @timeit f2(t)
> println(@code_warntype(f2(t)))
>
> # 10000000 loops, best of 3: 80.13 ns per loop
> # Variables:
> #   #self#::#f2
> #   t::mytype
> #
> # Body:
> #   begin
> #       return
> (Base.box)(Base.Float64,(Base.add_float)((Base.box)(Float64,(Base.sitofp)(Float64,1)),(Core.getfield)(t::mytype,:x)::Float64))
> #   end::Float64
> # nothing
>
>
> I'm not sure if its the creation of the SSAValue intermediate value or the
> extra getfield lookup, but you can see it slows down from ~80 to ~100ns.
>
>
> Marius
>
>
>
> On Sunday, July 24, 2016 at 3:52:38 PM UTC+2, Fábio Cardeal wrote:
>>
>> The compiler is pretty smart about removing these extra function calls,
>> so I didn't get any extra overhead on my test cases. I went ahead and added
>> `@inline` to the selfcall deckles. You can also do this:
>>
>>   @self @inline function inc2()
>>     inc()
>>     inc()
>>   end
>>
>> Update from the gist and try using some @inlines and see if it helps. You
>> can also send me your test cases if you want.
>>
>> In general, these techniques of adding and using compile time information
>> shouldn't cause any definite slowdown, even if we need to do some tweaking
>> with them meta tags. The compiler isn't perfect about this yet, but I think
>> our case is covered. (I hope?)
>>
>

Reply via email to