Construct OperationIntegerAdd

Performance Diagrams

Construct OperationIntegerAdd 0010000001000000200000020000003000000300000040000004000000500000050000006000000600000070000007000000800000080000009000000900000010000000100000001100000011000000120000001200000013000000130000001400000014000000CPython 3.10Nuitka (main)Nuitka (develop)Nuitka (factory)1477312088.95192307692307257.0CPython 3.109549761242.31730769230768344.37303753501163Nuitka (main)9549822395.6826923076923344.372017165688Nuitka (develop)9549552549.0480769230769344.3765335544973Nuitka (factory)Construct OperationIntegerAddTicks Construct OperationIntegerAdd 0010000001000000200000020000003000000300000040000004000000500000050000006000000600000070000007000000800000080000009000000900000010000000100000001100000011000000120000001200000013000000130000001400000014000000CPython 3.8Nuitka (main)Nuitka (develop)Nuitka (factory)1469403288.95192307692307257.0CPython 3.810000425242.31730769230768335.9342570533712Nuitka (main)10000083395.6826923076923335.9400086034929Nuitka (develop)10000299549.0480769230769335.93637604552134Nuitka (factory)Construct OperationIntegerAddTicks Construct OperationIntegerAdd 001000000100000020000002000000300000030000004000000400000050000005000000600000060000007000000700000080000008000000CPython 2.7Nuitka (main)Nuitka (develop)Nuitka (factory)803411189.78846153846155257.0CPython 2.72450253244.59615384615387428.7498323470627Nuitka (main)2450058399.4038461538462428.7558302104231Nuitka (develop)2450054554.2115384615385428.75595324351764Nuitka (factory)Construct OperationIntegerAddTicks

Source Code with Construct

    # construct_end

    return s, t, local_value


for x in itertools.repeat(None, 50000):
    calledRepeatedly()

print("OK.")

#     Python test originally created or extracted from other peoples work. The
#     parts from me are licensed as below. It is at least Free Software where
#     it's copied from other people. In these cases, that will normally be
#     indicated.
#
#     Licensed under the Apache License, Version 2.0 (the "License");
#     you may not use this file except in compliance with the License.
#     You may obtain a copy of the License at
#
#         http://www.apache.org/licenses/LICENSE-2.0
#
#     Unless required by applicable law or agreed to in writing, software
#     distributed under the License is distributed on an "AS IS" BASIS,
#     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#     See the License for the specific language governing permissions and
#     limitations under the License.

Source Code without Construct

    return s, t, local_value


for x in itertools.repeat(None, 50000):
    calledRepeatedly()

print("OK.")

#     Python test originally created or extracted from other peoples work. The
#     parts from me are licensed as below. It is at least Free Software where
#     it's copied from other people. In these cases, that will normally be
#     indicated.
#
#     Licensed under the Apache License, Version 2.0 (the "License");
#     you may not use this file except in compliance with the License.
#     You may obtain a copy of the License at
#
#         http://www.apache.org/licenses/LICENSE-2.0
#
#     Unless required by applicable law or agreed to in writing, software
#     distributed under the License is distributed on an "AS IS" BASIS,
#     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#     See the License for the specific language governing permissions and
#     limitations under the License.

Context Diff of Source Code


Construct
Baseline
14     local_value = module_value1 14     local_value = module_value1
15 15
16     s = module_value1 16     s = module_value1
17     t = module_value2 17     t = module_value2
18     # construct_begin 18     # construct_begin
t 19     t = s + t t 19  
20     # construct_end 20  
21 21
22     return s, t, local_value 22     return s, t, local_value
23 23
24 24
25 for x in itertools.repeat(None, 50000): 25 for x in itertools.repeat(None, 50000):

Context Diff of Generated Code


Construct
Baseline
230             goto frame_exception_exit_1; 230             goto frame_exception_exit_1;
231         } 231         }
232         assert(var_t == NULL); 232         assert(var_t == NULL);
233         Py_INCREF(tmp_assign_source_3); 233         Py_INCREF(tmp_assign_source_3);
234         var_t = tmp_assign_source_3; 234         var_t = tmp_assign_source_3;
n 235     } n
236     {
237         PyObject *tmp_assign_source_4;
238         PyObject *tmp_add_expr_left_1;
239         PyObject *tmp_add_expr_right_1;
240         CHECK_OBJECT(var_s);
241         tmp_add_expr_left_1 = var_s;
242         CHECK_OBJECT(var_t);
243         tmp_add_expr_right_1 = var_t;
244         tmp_assign_source_4 = BINARY_OPERATION_ADD_OBJECT_OBJECT_OBJECT(tmp_add_expr_left_1, tmp_add_expr_right_1);
245         if (tmp_assign_source_4 == NULL) {
246             assert(HAS_ERROR_OCCURRED(tstate));
247  
248             FETCH_ERROR_OCCURRED(tstate, &exception_type, &exception_value, &exception_tb);
249  
250  
251             exception_lineno = 19;
252             type_description_1 = "ooo";
253             goto frame_exception_exit_1;
254         }
255         {
256             PyObject *old = var_t;
257             assert(old != NULL);
258             var_t = tmp_assign_source_4;
259             Py_DECREF(old);
260         }
261  
262     } 235     }
263 236
264 237
265     // Put the previous frame back on top. 238     // Put the previous frame back on top.
266     popFrameStack(tstate); 239     popFrameStack(tstate);
344 317
345     Py_XDECREF(var_local_value); 318     Py_XDECREF(var_local_value);
346     var_local_value = NULL; 319     var_local_value = NULL;
347     Py_XDECREF(var_s); 320     Py_XDECREF(var_s);
348     var_s = NULL; 321     var_s = NULL;
t 349     Py_XDECREF(var_t); t
350     var_t = NULL;
351     // Re-raise. 322     // Re-raise.
352     exception_type = exception_keeper_type_1; 323     exception_type = exception_keeper_type_1;
353     exception_value = exception_keeper_value_1; 324     exception_value = exception_keeper_value_1;
354     exception_tb = exception_keeper_tb_1; 325     exception_tb = exception_keeper_tb_1;
355     exception_lineno = exception_keeper_lineno_1; 326     exception_lineno = exception_keeper_lineno_1;