Construct InplaceOperationIntegerAdd

Performance Diagrams

Construct InplaceOperationIntegerAdd 00100000010000002000000200000030000003000000400000040000005000000500000060000006000000700000070000008000000800000090000009000000100000001000000011000000110000001200000012000000CPython 2.7Nuitka (master)Nuitka (develop)Nuitka (factory)1238290688.95192307692307257.0CPython 2.74549885242.31730769230768413.31710336130993Nuitka (master)4550089395.6826923076923413.31303230250825Nuitka (develop)4549825549.0480769230769413.3183007315457Nuitka (factory)Construct InplaceOperationIntegerAddTicks Construct InplaceOperationIntegerAdd 00200000020000004000000400000060000006000000800000080000001000000010000000120000001200000014000000140000001600000016000000180000001800000020000000200000002200000022000000CPython 3.5Nuitka (master)Nuitka (develop)Nuitka (factory)2277187188.95192307692307257.0CPython 3.517754683242.31730769230768311.44543148464584Nuitka (master)17796459395.6826923076923310.99208743102406Nuitka (develop)17800131549.0480769230769310.9522396867474Nuitka (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;
72     const_int_pos_50000 = PyLong_FromUnsignedLong( 50000ul ); 71     const_int_pos_50000 = PyLong_FromUnsignedLong( 50000ul );
73     const_str_plain_module_value2 = UNSTREAM_STRING_ASCII( &constant_bin[ 97 ], 13, 1 ); 72     const_str_plain_module_value2 = UNSTREAM_STRING_ASCII( &constant_bin[ 97 ], 13, 1 );
74     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New( 1 ); 73     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New( 1 );
75     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING_ASCII( &constant_bin[ 110 ], 3, 0 ); 74     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING_ASCII( &constant_bin[ 110 ], 3, 0 );
76     PyTuple_SET_ITEM( const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple, 0, const_str_digest_5ed1392909ad16e6227b8230f4582352 ); Py_INCREF( const_str_digest_5ed1392909ad16e6227b8230f4582352 ); 75     PyTuple_SET_ITEM( const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple, 0, const_str_digest_5ed1392909ad16e6227b8230f4582352 ); Py_INCREF( const_str_digest_5ed1392909ad16e6227b8230f4582352 );
n 77     const_int_pos_1000 = PyLong_FromUnsignedLong( 1000ul ); n
78     const_str_plain_module_value1 = UNSTREAM_STRING_ASCII( &constant_bin[ 113 ], 13, 1 ); 76     const_str_plain_module_value1 = UNSTREAM_STRING_ASCII( &constant_bin[ 113 ], 13, 1 );
79     const_tuple_str_plain_s_str_plain_local_value_tuple = PyTuple_New( 2 ); 77     const_tuple_str_plain_s_str_plain_local_value_tuple = PyTuple_New( 2 );
80     PyTuple_SET_ITEM( const_tuple_str_plain_s_str_plain_local_value_tuple, 0, const_str_plain_s ); Py_INCREF( const_str_plain_s ); 78     PyTuple_SET_ITEM( const_tuple_str_plain_s_str_plain_local_value_tuple, 0, const_str_plain_s ); Py_INCREF( const_str_plain_s );
81     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 ); 79     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 );
82     const_str_plain_calledRepeatedly = UNSTREAM_STRING_ASCII( &constant_bin[ 126 ], 16, 1 ); 80     const_str_plain_calledRepeatedly = UNSTREAM_STRING_ASCII( &constant_bin[ 126 ], 16, 1 );
262     } 260     }
263     { 261     {
264     PyObject *tmp_assign_source_3; 262     PyObject *tmp_assign_source_3;
265     PyObject *tmp_left_name_2; 263     PyObject *tmp_left_name_2;
266     PyObject *tmp_right_name_2; 264     PyObject *tmp_right_name_2;
n n 265     PyObject *tmp_mvar_value_4;
267     CHECK_OBJECT( var_s ); 266     CHECK_OBJECT( var_s );
268     tmp_left_name_2 = var_s; 267     tmp_left_name_2 = var_s;
n 269     tmp_right_name_2 = const_int_pos_1000; n
270     tmp_result = BINARY_OPERATION_ADD_OBJECT_OBJECT_INPLACE( &tmp_left_name_2, tmp_right_name_2 );
271     if ( tmp_result == false )
272     {
273         assert( ERROR_OCCURRED() );
274  
275         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
276  
277  
278         exception_lineno = 35;
279         type_description_1 = "oo";
280         goto frame_exception_exit_1;
281     }
282     tmp_assign_source_3 = tmp_left_name_2;
283     var_s = tmp_assign_source_3;
284  
285     }
286     {
287     PyObject *tmp_assign_source_4;
288     PyObject *tmp_left_name_3;
289     PyObject *tmp_right_name_3;
290     PyObject *tmp_mvar_value_4;
291     CHECK_OBJECT( var_s );
292     tmp_left_name_3 = var_s;
293     tmp_mvar_value_4 = GET_STRING_DICT_VALUE( moduledict___main__, (Nuitka_StringObject *)const_str_plain_module_value2 ); 268     tmp_mvar_value_4 = GET_STRING_DICT_VALUE( moduledict___main__, (Nuitka_StringObject *)const_str_plain_module_value2 );
294 269
295     if (unlikely( tmp_mvar_value_4 == NULL )) 270     if (unlikely( tmp_mvar_value_4 == NULL ))
296     { 271     {
297         tmp_mvar_value_4 = GET_STRING_DICT_VALUE( dict_builtin, (Nuitka_StringObject *)const_str_plain_module_value2 ); 272         tmp_mvar_value_4 = GET_STRING_DICT_VALUE( dict_builtin, (Nuitka_StringObject *)const_str_plain_module_value2 );
310         exception_lineno = 37; 285         exception_lineno = 37;
311         type_description_1 = "oo"; 286         type_description_1 = "oo";
312         goto frame_exception_exit_1; 287         goto frame_exception_exit_1;
313     } 288     }
314 289
n 315     tmp_right_name_3 = tmp_mvar_value_4; n 290     tmp_right_name_2 = tmp_mvar_value_4;
316     tmp_result = BINARY_OPERATION_ADD_OBJECT_OBJECT_INPLACE( &tmp_left_name_3, tmp_right_name_3 ); 291     tmp_result = BINARY_OPERATION_ADD_OBJECT_OBJECT_INPLACE( &tmp_left_name_2, tmp_right_name_2 );
317     if ( tmp_result == false ) 292     if ( tmp_result == false )
318     { 293     {
319         assert( ERROR_OCCURRED() ); 294         assert( ERROR_OCCURRED() );
320 295
321         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb ); 296         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
323 298
324         exception_lineno = 37; 299         exception_lineno = 37;
325         type_description_1 = "oo"; 300         type_description_1 = "oo";
326         goto frame_exception_exit_1; 301         goto frame_exception_exit_1;
327     } 302     }
t 328     tmp_assign_source_4 = tmp_left_name_3; t 303     tmp_assign_source_3 = tmp_left_name_2;
329     var_s = tmp_assign_source_4; 304     var_s = tmp_assign_source_3;
330 305
331     } 306     }
332 307
333 #if 0 308 #if 0
334     RESTORE_FRAME_EXCEPTION( frame_29958dc8f1896a8975d1a1fbf5781286 ); 309     RESTORE_FRAME_EXCEPTION( frame_29958dc8f1896a8975d1a1fbf5781286 );