Construct OperationIntegerPower

Performance Diagrams

Construct OperationIntegerPower 0010000001000000200000020000003000000300000040000004000000500000050000006000000600000070000007000000800000080000009000000900000010000000100000001100000011000000120000001200000013000000130000001400000014000000CPython 2.7Nuitka (master)Nuitka (develop)Nuitka (factory)1468367188.95192307692307257.0CPython 2.76650000242.31730769230768392.200774999553Nuitka (master)6650000395.6826923076923392.200774999553Nuitka (develop)6750000549.0480769230769390.51784853916456Nuitka (factory)Construct OperationIntegerPowerTicks Construct OperationIntegerPower 00100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000100000000100000000110000000110000000CPython 3.5Nuitka (master)Nuitka (develop)Nuitka (factory)11522827188.11538461538461257.0CPython 3.5109350000240.03846153846155269.60637850791375Nuitka (master)109350000391.96153846153845269.60637850791375Nuitka (develop)109350000543.8846153846154269.60637850791375Nuitka (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
220         tmp_assign_source_3 = tmp_mvar_value_4; 220         tmp_assign_source_3 = tmp_mvar_value_4;
221         assert(var_t == NULL); 221         assert(var_t == NULL);
222         Py_INCREF(tmp_assign_source_3); 222         Py_INCREF(tmp_assign_source_3);
223         var_t = tmp_assign_source_3; 223         var_t = tmp_assign_source_3;
224     } 224     }
n 225     { n
226         PyObject *tmp_assign_source_4;
227         PyObject *tmp_left_name_1;
228         PyObject *tmp_right_name_1;
229         CHECK_OBJECT(var_s);
230         tmp_left_name_1 = var_s;
231         CHECK_OBJECT(var_t);
232         tmp_right_name_1 = var_t;
233         tmp_assign_source_4 = BINARY_OPERATION_POW_OBJECT_OBJECT_OBJECT(tmp_left_name_1, tmp_right_name_1);
234         if (tmp_assign_source_4 == NULL) {
235             assert(ERROR_OCCURRED());
236  
237             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
238  
239  
240             exception_lineno = 33;
241             type_description_1 = "ooo";
242             goto frame_exception_exit_1;
243         }
244         {
245             PyObject *old = var_t;
246             assert(old != NULL);
247             var_t = tmp_assign_source_4;
248             Py_DECREF(old);
249         }
250  
251     }
252 225
253 #if 0 226 #if 0
254     RESTORE_FRAME_EXCEPTION(frame_3a3c2871156165845b7bee28987dc5e7); 227     RESTORE_FRAME_EXCEPTION(frame_3a3c2871156165845b7bee28987dc5e7);
255 #endif 228 #endif
256 229
350     var_local_value = NULL; 323     var_local_value = NULL;
351 324
352     Py_XDECREF(var_s); 325     Py_XDECREF(var_s);
353     var_s = NULL; 326     var_s = NULL;
354 327
t 355     Py_XDECREF(var_t); t
356     var_t = NULL;
357  
358     // Re-raise. 328     // Re-raise.
359     exception_type = exception_keeper_type_1; 329     exception_type = exception_keeper_type_1;
360     exception_value = exception_keeper_value_1; 330     exception_value = exception_keeper_value_1;
361     exception_tb = exception_keeper_tb_1; 331     exception_tb = exception_keeper_tb_1;
362     exception_lineno = exception_keeper_lineno_1; 332     exception_lineno = exception_keeper_lineno_1;