Construct OperationIntegerPower

Performance Diagrams

Construct OperationIntegerPower 0010000001000000200000020000003000000300000040000004000000500000050000006000000600000070000007000000800000080000009000000900000010000000100000001100000011000000120000001200000013000000130000001400000014000000CPython 2.7Nuitka (master)Nuitka (develop)Nuitka (factory)1468335988.95192307692307257.0CPython 2.76650000242.31730769230768392.1983969770447Nuitka (master)6650000395.6826923076923392.1983969770447Nuitka (develop)6650000549.0480769230769392.1983969770447Nuitka (factory)Construct OperationIntegerPowerTicks Construct OperationIntegerPower 00100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000100000000100000000110000000110000000CPython 3.5Nuitka (master)Nuitka (develop)Nuitka (factory)11522931688.11538461538461257.0CPython 3.5109350000240.03846153846155269.608505240241Nuitka (master)109350000391.96153846153845269.608505240241Nuitka (develop)109350000543.8846153846154269.608505240241Nuitka (factory)Construct OperationIntegerPowerTicks

Source Code with Construct

module_value1 = -1
module_value2 = 17

def calledRepeatedly():
    # Force frame and eliminate forward propagation (currently).
    module_value1

    local_value = module_value1

    s = module_value1
    t = module_value2
# construct_begin
    t = s ** t
# construct_end

    return s, t, local_value

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

print("OK.")

Source Code without Construct

module_value1 = -1
module_value2 = 17

def calledRepeatedly():
    # Force frame and eliminate forward propagation (currently).
    module_value1

    local_value = module_value1

    s = module_value1
    t = module_value2
# construct_begin



    return s, t, local_value

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

print("OK.")

Context Diff of Source Code


Construct
Baseline
28     local_value = module_value1 28     local_value = module_value1
29 29
30     s = module_value1 30     s = module_value1
31     t = module_value2 31     t = module_value2
32 # construct_begin 32 # construct_begin
t 33     t = s ** t t 33  
34 # construct_end 34  
35 35
36     return s, t, local_value 36     return s, t, local_value
37 37
38 import itertools 38 import itertools
39 for x in itertools.repeat(None, 50000): 39 for x in itertools.repeat(None, 50000):

Context Diff of Generated Code


Construct
Baseline
273         tmp_assign_source_3 = tmp_mvar_value_4; 273         tmp_assign_source_3 = tmp_mvar_value_4;
274         assert(var_t == NULL); 274         assert(var_t == NULL);
275         Py_INCREF(tmp_assign_source_3); 275         Py_INCREF(tmp_assign_source_3);
276         var_t = tmp_assign_source_3; 276         var_t = tmp_assign_source_3;
277     } 277     }
n 278     { n
279         PyObject *tmp_assign_source_4;
280         PyObject *tmp_left_name_1;
281         PyObject *tmp_right_name_1;
282         CHECK_OBJECT(var_s);
283         tmp_left_name_1 = var_s;
284         CHECK_OBJECT(var_t);
285         tmp_right_name_1 = var_t;
286         tmp_assign_source_4 = BINARY_OPERATION_POW_OBJECT_OBJECT_OBJECT(tmp_left_name_1, tmp_right_name_1);
287         if (tmp_assign_source_4 == NULL) {
288             assert(ERROR_OCCURRED());
289  
290             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
291  
292  
293             exception_lineno = 33;
294             type_description_1 = "ooo";
295             goto frame_exception_exit_1;
296         }
297         {
298             PyObject *old = var_t;
299             assert(old != NULL);
300             var_t = tmp_assign_source_4;
301             Py_DECREF(old);
302         }
303  
304     }
305 278
306 #if 0 279 #if 0
307     RESTORE_FRAME_EXCEPTION(frame_556d31fc4ec57d673aaedf4ffd04279c); 280     RESTORE_FRAME_EXCEPTION(frame_556d31fc4ec57d673aaedf4ffd04279c);
308 #endif 281 #endif
309 282
400     exception_lineno = 0; 373     exception_lineno = 0;
401 374
402     Py_XDECREF(var_s); 375     Py_XDECREF(var_s);
403     var_s = NULL; 376     var_s = NULL;
404 377
t 405     Py_XDECREF(var_t); t
406     var_t = NULL;
407  
408     Py_XDECREF(var_local_value); 378     Py_XDECREF(var_local_value);
409     var_local_value = NULL; 379     var_local_value = NULL;
410 380
411     // Re-raise. 381     // Re-raise.
412     exception_type = exception_keeper_type_1; 382     exception_type = exception_keeper_type_1;