Commit 63cd3bbb authored by Stefan Behnel's avatar Stefan Behnel

Disable method unpacking inside of module init function by default as it...

Disable method unpacking inside of module init function by default as it really just increases the code size to uselessly speed up one-time code.
See #2102.
parent 4575a2f2
...@@ -20,7 +20,8 @@ Features added ...@@ -20,7 +20,8 @@ Features added
* When compiling with gcc, the module init function is now tuned for small * When compiling with gcc, the module init function is now tuned for small
code size instead of whatever compile flags were provided externally. code size instead of whatever compile flags were provided externally.
(Github issue #2102) Cython now also disables some code intensive optimisations in that function
to further reduce the code size. (Github issue #2102)
* C file includes are moved behind the module declarations if possible, to allow * C file includes are moved behind the module declarations if possible, to allow
them to depend on module declarations themselves. them to depend on module declarations themselves.
......
...@@ -4584,7 +4584,7 @@ class ConstantFolding(Visitor.VisitorTransform, SkipDeclarations): ...@@ -4584,7 +4584,7 @@ class ConstantFolding(Visitor.VisitorTransform, SkipDeclarations):
visit_Node = Visitor.VisitorTransform.recurse_to_children visit_Node = Visitor.VisitorTransform.recurse_to_children
class FinalOptimizePhase(Visitor.CythonTransform, Visitor.NodeRefCleanupMixin): class FinalOptimizePhase(Visitor.EnvTransform, Visitor.NodeRefCleanupMixin):
""" """
This visitor handles several commuting optimizations, and is run This visitor handles several commuting optimizations, and is run
just before the C code generation phase. just before the C code generation phase.
...@@ -4622,8 +4622,8 @@ class FinalOptimizePhase(Visitor.CythonTransform, Visitor.NodeRefCleanupMixin): ...@@ -4622,8 +4622,8 @@ class FinalOptimizePhase(Visitor.CythonTransform, Visitor.NodeRefCleanupMixin):
function.type = function.entry.type function.type = function.entry.type
PyTypeObjectPtr = PyrexTypes.CPtrType(cython_scope.lookup('PyTypeObject').type) PyTypeObjectPtr = PyrexTypes.CPtrType(cython_scope.lookup('PyTypeObject').type)
node.args[1] = ExprNodes.CastNode(node.args[1], PyTypeObjectPtr) node.args[1] = ExprNodes.CastNode(node.args[1], PyTypeObjectPtr)
elif (self.current_directives.get("optimize.unpack_method_calls") elif (node.is_temp and function.type.is_pyobject and self.current_directives.get(
and node.is_temp and function.type.is_pyobject): "optimize.unpack_method_calls_in_pyinit" if self.current_env().is_module_scope else "optimize.unpack_method_calls")):
# optimise simple Python methods calls # optimise simple Python methods calls
if isinstance(node.arg_tuple, ExprNodes.TupleNode) and not ( if isinstance(node.arg_tuple, ExprNodes.TupleNode) and not (
node.arg_tuple.mult_factor or (node.arg_tuple.is_literal and node.arg_tuple.args)): node.arg_tuple.mult_factor or (node.arg_tuple.is_literal and node.arg_tuple.args)):
......
...@@ -194,6 +194,7 @@ _directive_defaults = { ...@@ -194,6 +194,7 @@ _directive_defaults = {
# optimizations # optimizations
'optimize.inline_defnode_calls': True, 'optimize.inline_defnode_calls': True,
'optimize.unpack_method_calls': True, # increases code size when True 'optimize.unpack_method_calls': True, # increases code size when True
'optimize.unpack_method_calls_in_pyinit': False, # uselessly increases code size when True
'optimize.use_switch': True, 'optimize.use_switch': True,
# remove unreachable code # remove unreachable code
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment