Construct InplaceOperationFloatAdd

Performance Diagrams

Construct InplaceOperationFloatAdd 0010000001000000200000020000003000000300000040000004000000500000050000006000000600000070000007000000800000080000009000000900000010000000100000001100000011000000120000001200000013000000130000001400000014000000CPython 2.7Nuitka (master)Nuitka (develop)Nuitka (factory)1413275988.95192307692307257.0CPython 2.71249399242.31730769230768482.26928121667265Nuitka (master)1250032395.6826923076923482.2582130283266Nuitka (develop)1249314549.0480769230769482.27076746629257Nuitka (factory)Construct InplaceOperationFloatAddTicks Construct InplaceOperationFloatAdd 00100000010000002000000200000030000003000000400000040000005000000500000060000006000000700000070000008000000800000090000009000000100000001000000011000000110000001200000012000000CPython 3.5Nuitka (master)Nuitka (develop)Nuitka (factory)1277076788.95192307692307257.0CPython 3.51302410242.31730769230768478.9136447295248Nuitka (master)1300073395.6826923076923478.9588658704199Nuitka (develop)1299966549.0480769230769478.96093632916006Nuitka (factory)Construct InplaceOperationFloatAddTicks

Source Code with Construct

module_value1 = 5.0
module_value2 = 3.0

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

    # Make sure we have a local variable s anyway
    s = 2.0

    local_value = module_value1

    s += module_value1
# construct_begin
    s += 1000.0
# 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.0
module_value2 = 3.0

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

    # Make sure we have a local variable s anyway
    s = 2.0

    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.0 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
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;
45 static PyObject *const_str_plain_module_value1; 45 static PyObject *const_str_plain_module_value1;
46 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;
47 static PyObject *const_str_digest_d39e082934c896a165e12e973e1957bd; 47 static PyObject *const_str_digest_d39e082934c896a165e12e973e1957bd;
n 48 static PyObject *const_float_1000_0; n
49 static PyObject *const_str_plain_calledRepeatedly; 48 static PyObject *const_str_plain_calledRepeatedly;
50 static PyObject *const_str_angle_module; 49 static PyObject *const_str_angle_module;
51 static PyObject *const_str_plain_None; 50 static PyObject *const_str_plain_None;
52 static PyObject *const_str_plain_x; 51 static PyObject *const_str_plain_x;
53 extern PyObject *const_tuple_empty; 52 extern PyObject *const_tuple_empty;
78     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 );
79     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 );
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); 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);
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); 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);
82     const_str_digest_d39e082934c896a165e12e973e1957bd = UNSTREAM_STRING_ASCII( &constant_bin[ 147 ], 49, 0 ); 81     const_str_digest_d39e082934c896a165e12e973e1957bd = UNSTREAM_STRING_ASCII( &constant_bin[ 147 ], 49, 0 );
n 83     const_float_1000_0 = UNSTREAM_FLOAT( &constant_bin[ 196 ] ); n
84     const_str_plain_calledRepeatedly = UNSTREAM_STRING_ASCII( &constant_bin[ 76 ], 16, 1 ); 82     const_str_plain_calledRepeatedly = UNSTREAM_STRING_ASCII( &constant_bin[ 76 ], 16, 1 );
n 85     const_str_angle_module = UNSTREAM_STRING_ASCII( &constant_bin[ 204 ], 8, 0 ); n 83     const_str_angle_module = UNSTREAM_STRING_ASCII( &constant_bin[ 196 ], 8, 0 );
86     const_str_plain_None = UNSTREAM_STRING_ASCII( &constant_bin[ 212 ], 4, 1 ); 84     const_str_plain_None = UNSTREAM_STRING_ASCII( &constant_bin[ 204 ], 4, 1 );
87     const_str_plain_x = UNSTREAM_STRING_ASCII( &constant_bin[ 216 ], 1, 1 ); 85     const_str_plain_x = UNSTREAM_STRING_ASCII( &constant_bin[ 208 ], 1, 1 );
88     const_str_plain_repeat = UNSTREAM_STRING_ASCII( &constant_bin[ 217 ], 6, 1 ); 86     const_str_plain_repeat = UNSTREAM_STRING_ASCII( &constant_bin[ 209 ], 6, 1 );
89     const_tuple_none_int_pos_50000_tuple = PyTuple_New( 2 ); 87     const_tuple_none_int_pos_50000_tuple = PyTuple_New( 2 );
90     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 0, Py_None ); Py_INCREF(Py_None); 88     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 0, Py_None ); Py_INCREF(Py_None);
91     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 1, const_int_pos_50000 ); Py_INCREF(const_int_pos_50000); 89     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 1, const_int_pos_50000 ); Py_INCREF(const_int_pos_50000);
n 92     const_float_3_0 = UNSTREAM_FLOAT( &constant_bin[ 223 ] ); n 90     const_float_3_0 = UNSTREAM_FLOAT( &constant_bin[ 215 ] );
93 91
94     constants_created = true; 92     constants_created = true;
95 } 93 }
96 94
97 /* Function to verify module private constants for non-corruption. */ 95 /* Function to verify module private constants for non-corruption. */
257     } 255     }
258     { 256     {
259         PyObject *tmp_assign_source_3; 257         PyObject *tmp_assign_source_3;
260         PyObject *tmp_left_name_2; 258         PyObject *tmp_left_name_2;
261         PyObject *tmp_right_name_2; 259         PyObject *tmp_right_name_2;
n n 260         PyObject *tmp_mvar_value_4;
262         CHECK_OBJECT(var_s); 261         CHECK_OBJECT(var_s);
263         tmp_left_name_2 = var_s; 262         tmp_left_name_2 = var_s;
n 264         tmp_right_name_2 = const_float_1000_0; n
265         tmp_result = BINARY_OPERATION_ADD_OBJECT_FLOAT_INPLACE( &tmp_left_name_2, tmp_right_name_2 );
266         if ( tmp_result == false )
267         {
268             assert(ERROR_OCCURRED());
269  
270             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
271  
272  
273             exception_lineno = 35;
274             type_description_1 = "oo";
275             goto frame_exception_exit_1;
276         }
277         tmp_assign_source_3 = tmp_left_name_2;
278         var_s = tmp_assign_source_3;
279  
280     }
281     {
282         PyObject *tmp_assign_source_4;
283         PyObject *tmp_left_name_3;
284         PyObject *tmp_right_name_3;
285         PyObject *tmp_mvar_value_4;
286         CHECK_OBJECT(var_s);
287         tmp_left_name_3 = var_s;
288         tmp_mvar_value_4 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)const_str_plain_module_value2); 263         tmp_mvar_value_4 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)const_str_plain_module_value2);
289 264
290         if (unlikely( tmp_mvar_value_4 == NULL )) { 265         if (unlikely( tmp_mvar_value_4 == NULL )) {
291             tmp_mvar_value_4 = GET_STRING_DICT_VALUE(dict_builtin, (Nuitka_StringObject *)const_str_plain_module_value2); 266             tmp_mvar_value_4 = GET_STRING_DICT_VALUE(dict_builtin, (Nuitka_StringObject *)const_str_plain_module_value2);
292         } 267         }
304             exception_lineno = 37; 279             exception_lineno = 37;
305             type_description_1 = "oo"; 280             type_description_1 = "oo";
306             goto frame_exception_exit_1; 281             goto frame_exception_exit_1;
307         } 282         }
308 283
n 309         tmp_right_name_3 = tmp_mvar_value_4; n 284         tmp_right_name_2 = tmp_mvar_value_4;
310         tmp_result = BINARY_OPERATION_ADD_OBJECT_OBJECT_INPLACE( &tmp_left_name_3, tmp_right_name_3 ); 285         tmp_result = BINARY_OPERATION_ADD_OBJECT_OBJECT_INPLACE( &tmp_left_name_2, tmp_right_name_2 );
311         if ( tmp_result == false ) 286         if ( tmp_result == false )
312         { 287         {
313             assert(ERROR_OCCURRED()); 288             assert(ERROR_OCCURRED());
314 289
315             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb); 290             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
317 292
318             exception_lineno = 37; 293             exception_lineno = 37;
319             type_description_1 = "oo"; 294             type_description_1 = "oo";
320             goto frame_exception_exit_1; 295             goto frame_exception_exit_1;
321         } 296         }
t 322         tmp_assign_source_4 = tmp_left_name_3; t 297         tmp_assign_source_3 = tmp_left_name_2;
323         var_s = tmp_assign_source_4; 298         var_s = tmp_assign_source_3;
324 299
325     } 300     }
326 301
327 #if 0 302 #if 0
328     RESTORE_FRAME_EXCEPTION(frame_ec428d72eed7e36aaf1d075aac1f13ba); 303     RESTORE_FRAME_EXCEPTION(frame_ec428d72eed7e36aaf1d075aac1f13ba);