[Cython] inline defnode calls

mark florisson markflorisson88 at gmail.com
Wed Jan 25 12:36:03 CET 2012


On 25 January 2012 11:32, mark florisson <markflorisson88 at gmail.com> wrote:
> On 25 January 2012 11:24, Vitja Makarov <vitja.makarov at gmail.com> wrote:
>> 2012/1/25 mark florisson <markflorisson88 at gmail.com>:
>>> On 25 January 2012 06:49, Vitja Makarov <vitja.makarov at gmail.com> wrote:
>>>> 2012/1/25 mark florisson <markflorisson88 at gmail.com>:
>>>>> I just noticed the inline defnode call code. When I try to compile
>>>>> with 'cython -Xoptimize.inline_defnode_calls=True test.pyx' with the
>>>>> following code:
>>>>>
>>>>> def foo(x): print foo
>>>>> foo(10)
>>>>>
>>>>> I get
>>>>>
>>>>> Error compiling Cython file:
>>>>> ------------------------------------------------------------
>>>>> ...
>>>>> def foo(x):
>>>>>    print x
>>>>>
>>>>> foo(10)
>>>>>  ^
>>>>> ------------------------------------------------------------
>>>>>
>>>>> test.pyx:4:3: Compiler crash in InlineDefNodeCalls
>>>>>
>>>>> ModuleNode.body = StatListNode(test.pyx:1:0)
>>>>> StatListNode.stats[2] = ExprStatNode(test.pyx:4:3)
>>>>> ExprStatNode.expr = SimpleCallNode(test.pyx:4:3,
>>>>>    result_is_used = True,
>>>>>    use_managed_ref = True)
>>>>>
>>>>> Compiler crash traceback from this point on:
>>>>>  File "/Users/mark/cy/Cython/Compiler/Visitor.py", line 176, in _visitchild
>>>>>    result = handler_method(child)
>>>>>  File "/Users/mark/cy/Cython/Compiler/Optimize.py", line 1656, in
>>>>> visit_SimpleCallNode
>>>>>    if not function_name.cf_state.is_single:
>>>>> AttributeError: 'NoneType' object has no attribute 'is_single'
>>>>
>>>>
>>>> Thanks for the report! The feature is still experimental and by
>>>> default is disabled.
>>>> Anyway it wouldn't work for your example. It works when we know what
>>>> exactly function is referred by the name so it's closure case:
>>>>
>>>> def foo():
>>>>    def bar():
>>>>        pass
>>>>    bar()
>>>>
>>>> --
>>>> vitja.
>>>> _______________________________________________
>>>> cython-devel mailing list
>>>> cython-devel at python.org
>>>> http://mail.python.org/mailman/listinfo/cython-devel
>>>
>>> Ah, neat. I thought it was perhaps also defying monkeypatching.
>>
>>
>> I'm thinking about implementing  "conditional inlining": depending on
>> what function actually is it'll make direct call to C function or
>> PyObject_Call().
>>
>
> Sounds like a good idea. Any idea how much faster that can be?

Hm, probably about an order of magnitude for a noop function (simple
test of cdef vs def call).

>> --
>> vitja.
>> _______________________________________________
>> cython-devel mailing list
>> cython-devel at python.org
>> http://mail.python.org/mailman/listinfo/cython-devel


More information about the cython-devel mailing list