Construct InplaceOperationIntegerAdd

Performance Diagrams

Construct InplaceOperationIntegerAdd 0010000001000000200000020000003000000300000040000004000000500000050000006000000600000070000007000000800000080000009000000900000010000000100000001100000011000000CPython 2.7Nuitka (master)Nuitka (develop)Nuitka (factory)1193198788.95192307692307257.0CPython 2.74999409242.31730769230768400.5759759750119Nuitka (master)5000050395.6826923076923400.5627006536812Nuitka (develop)5000044549.0480769230769400.56282491565935Nuitka (factory)Construct InplaceOperationIntegerAddTicks Construct InplaceOperationIntegerAdd 00200000020000004000000400000060000006000000800000080000001000000010000000120000001200000014000000140000001600000016000000180000001800000020000000200000002200000022000000CPython 3.5Nuitka (master)Nuitka (develop)Nuitka (factory)2321984688.95192307692307257.0CPython 3.517800159242.31730769230768314.67859259273297Nuitka (master)17800499395.6826923076923314.67497416947685Nuitka (develop)17799976549.0480769230769314.68054015583846Nuitka (factory)Construct InplaceOperationIntegerAddTicks

Source Code with Construct

module_value1 = 5
module_value2 = 3

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

    # Make sure we have a local variable x anyway
    s = 2

    local_value = module_value1

    s += module_value1
# construct_begin
    s += 1000
# construct_end
    s += module_value2

    return s

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

print("OK.")

Source Code without Construct

module_value1 = 5
module_value2 = 3

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

    # Make sure we have a local variable x anyway
    s = 2

    local_value = module_value1

    s += module_value1
# construct_begin


    s += module_value2

    return s

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

print("OK.")

Context Diff of Source Code


Construct
Baseline
30 30
31     local_value = module_value1 31     local_value = module_value1
32 32
33     s += module_value1 33     s += module_value1
34 # construct_begin 34 # construct_begin
t 35     s += 1000 t 35  
36 # construct_end 36  
37     s += module_value2 37     s += module_value2
38 38
39     return s 39     return s
40 40
41 import itertools 41 import itertools

Context Diff of Generated Code


Construct
Baseline
40 static PyObject *const_int_pos_3; 40 static PyObject *const_int_pos_3;
41 static PyObject *const_str_plain_local_value; 41 static PyObject *const_str_plain_local_value;
42 static PyObject *const_int_pos_50000; 42 static PyObject *const_int_pos_50000;
43 static PyObject *const_str_plain_module_value2; 43 static PyObject *const_str_plain_module_value2;
44 static PyObject *const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple; 44 static PyObject *const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple;
n 45 static PyObject *const_int_pos_1000; n
46 static PyObject *const_str_plain_module_value1; 45 static PyObject *const_str_plain_module_value1;
47 static PyObject *const_tuple_str_plain_s_str_plain_local_value_tuple; 46 static PyObject *const_tuple_str_plain_s_str_plain_local_value_tuple;
48 static PyObject *const_str_plain_calledRepeatedly; 47 static PyObject *const_str_plain_calledRepeatedly;
49 static PyObject *const_str_angle_module; 48 static PyObject *const_str_angle_module;
50 static PyObject *const_str_plain_None; 49 static PyObject *const_str_plain_None;
73     const_int_pos_50000 = PyLong_FromUnsignedLong(50000ul); 72     const_int_pos_50000 = PyLong_FromUnsignedLong(50000ul);
74     const_str_plain_module_value2 = UNSTREAM_STRING_ASCII(&constant_bin[ 41 ], 13, 1); 73     const_str_plain_module_value2 = UNSTREAM_STRING_ASCII(&constant_bin[ 41 ], 13, 1);
75     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New(1); 74     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New(1);
76     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING_ASCII(&constant_bin[ 179 ], 3, 0); 75     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING_ASCII(&constant_bin[ 179 ], 3, 0);
77     PyTuple_SET_ITEM(const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple, 0, const_str_digest_5ed1392909ad16e6227b8230f4582352); Py_INCREF(const_str_digest_5ed1392909ad16e6227b8230f4582352); 76     PyTuple_SET_ITEM(const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple, 0, const_str_digest_5ed1392909ad16e6227b8230f4582352); Py_INCREF(const_str_digest_5ed1392909ad16e6227b8230f4582352);
n 78     const_int_pos_1000 = PyLong_FromUnsignedLong(1000ul); n
79     const_str_plain_module_value1 = UNSTREAM_STRING_ASCII(&constant_bin[ 6 ], 13, 1); 77     const_str_plain_module_value1 = UNSTREAM_STRING_ASCII(&constant_bin[ 6 ], 13, 1);
80     const_tuple_str_plain_s_str_plain_local_value_tuple = PyTuple_New(2); 78     const_tuple_str_plain_s_str_plain_local_value_tuple = PyTuple_New(2);
81     PyTuple_SET_ITEM(const_tuple_str_plain_s_str_plain_local_value_tuple, 0, const_str_plain_s); Py_INCREF(const_str_plain_s); 79     PyTuple_SET_ITEM(const_tuple_str_plain_s_str_plain_local_value_tuple, 0, const_str_plain_s); Py_INCREF(const_str_plain_s);
82     PyTuple_SET_ITEM(const_tuple_str_plain_s_str_plain_local_value_tuple, 1, const_str_plain_local_value); Py_INCREF(const_str_plain_local_value); 80     PyTuple_SET_ITEM(const_tuple_str_plain_s_str_plain_local_value_tuple, 1, const_str_plain_local_value); Py_INCREF(const_str_plain_local_value);
83     const_str_plain_calledRepeatedly = UNSTREAM_STRING_ASCII(&constant_bin[ 76 ], 16, 1); 81     const_str_plain_calledRepeatedly = UNSTREAM_STRING_ASCII(&constant_bin[ 76 ], 16, 1);
252     } 250     }
253     { 251     {
254         PyObject *tmp_assign_source_3; 252         PyObject *tmp_assign_source_3;
255         PyObject *tmp_left_name_2; 253         PyObject *tmp_left_name_2;
256         PyObject *tmp_right_name_2; 254         PyObject *tmp_right_name_2;
n n 255         PyObject *tmp_mvar_value_4;
257         CHECK_OBJECT(var_s); 256         CHECK_OBJECT(var_s);
258         tmp_left_name_2 = var_s; 257         tmp_left_name_2 = var_s;
n 259         tmp_right_name_2 = const_int_pos_1000; n
260         tmp_result = BINARY_OPERATION_ADD_OBJECT_LONG_INPLACE(&tmp_left_name_2, tmp_right_name_2);
261         if (tmp_result == false) {
262             assert(ERROR_OCCURRED());
263  
264             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
265  
266  
267             exception_lineno = 35;
268             type_description_1 = "oo";
269             goto frame_exception_exit_1;
270         }
271         tmp_assign_source_3 = tmp_left_name_2;
272         var_s = tmp_assign_source_3;
273  
274     }
275     {
276         PyObject *tmp_assign_source_4;
277         PyObject *tmp_left_name_3;
278         PyObject *tmp_right_name_3;
279         PyObject *tmp_mvar_value_4;
280         CHECK_OBJECT(var_s);
281         tmp_left_name_3 = var_s;
282         tmp_mvar_value_4 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)const_str_plain_module_value2); 258         tmp_mvar_value_4 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)const_str_plain_module_value2);
283 259
284         if (unlikely(tmp_mvar_value_4 == NULL)) { 260         if (unlikely(tmp_mvar_value_4 == NULL)) {
285             tmp_mvar_value_4 = GET_STRING_DICT_VALUE(dict_builtin, (Nuitka_StringObject *)const_str_plain_module_value2); 261             tmp_mvar_value_4 = GET_STRING_DICT_VALUE(dict_builtin, (Nuitka_StringObject *)const_str_plain_module_value2);
286         } 262         }
297             exception_lineno = 37; 273             exception_lineno = 37;
298             type_description_1 = "oo"; 274             type_description_1 = "oo";
299             goto frame_exception_exit_1; 275             goto frame_exception_exit_1;
300         } 276         }
301 277
n 302         tmp_right_name_3 = tmp_mvar_value_4; n 278         tmp_right_name_2 = tmp_mvar_value_4;
303         tmp_result = BINARY_OPERATION_ADD_OBJECT_OBJECT_INPLACE(&tmp_left_name_3, tmp_right_name_3); 279         tmp_result = BINARY_OPERATION_ADD_OBJECT_OBJECT_INPLACE(&tmp_left_name_2, tmp_right_name_2);
304         if (tmp_result == false) { 280         if (tmp_result == false) {
305             assert(ERROR_OCCURRED()); 281             assert(ERROR_OCCURRED());
306 282
307             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb); 283             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
308 284
309 285
310             exception_lineno = 37; 286             exception_lineno = 37;
311             type_description_1 = "oo"; 287             type_description_1 = "oo";
312             goto frame_exception_exit_1; 288             goto frame_exception_exit_1;
313         } 289         }
t 314         tmp_assign_source_4 = tmp_left_name_3; t 290         tmp_assign_source_3 = tmp_left_name_2;
315         var_s = tmp_assign_source_4; 291         var_s = tmp_assign_source_3;
316 292
317     } 293     }
318 294
319 #if 0 295 #if 0
320     RESTORE_FRAME_EXCEPTION(frame_57319003b280a1049140305ef51505f8); 296     RESTORE_FRAME_EXCEPTION(frame_57319003b280a1049140305ef51505f8);