IPA constant propagation start: Determining dynamic type for call: OutStr (&str); Starting walk at: OutStr (&str); instance pointer: &str Outer instance pointer: str offset: 0 (bits) vtbl reference: Function call may change dynamic type:vsprintf (&str, msg_3(D), argptr); Function call may change dynamic type:__builtin_va_start (&argptr, 0); IPA structures before propagation: Jump functions: Jump functions of caller __builtin_va_end/40: Jump functions of caller vsprintf/39: Jump functions of caller __builtin_va_start/38: Jump functions of caller Lpuart_Uart_Ip_SyncSend/37: Jump functions of caller programDword_data_flash/36: Jump functions of caller string_to_int/35: Jump functions of caller put_charp/34: callsite put_charp/34 -> OutDev0/30 : param 0: CONST: 44 value: 0x2c, mask: 0x0 Unknown VR callsite put_charp/34 -> OutDev0/30 : param 0: UNKNOWN value: 0x0, mask: 0xff Unknown VR callsite put_charp/34 -> D2C/29 : param 0: PASS THROUGH: 0, op bit_and_expr 15 value: 0x0, mask: 0xf VR [0, 15] callsite put_charp/34 -> OutDev0/30 : param 0: UNKNOWN value: 0x0, mask: 0xff Unknown VR callsite put_charp/34 -> D2C/29 : param 0: PASS THROUGH: 0, op rshift_expr 4 value: 0x0, mask: 0xf VR [0, 15] Jump functions of caller put_cr/33: callsite put_cr/33 -> OutDev0/30 : param 0: CONST: 10 value: 0xa, mask: 0x0 Unknown VR callsite put_cr/33 -> OutDev0/30 : param 0: CONST: 13 value: 0xd, mask: 0x0 Unknown VR Jump functions of caller monprintf/32: callsite monprintf/32 -> OutStr/31 : param 0: UNKNOWN Aggregate passed by reference: offset: 2024, cst: 0 offset: 2032, cst: 0 value: 0x0, mask: 0xfffffffc VR ~[0, 0] Jump functions of caller OutStr/31: callsite OutStr/31 -> OutDev0/30 : param 0: UNKNOWN value: 0x0, mask: 0xff Unknown VR Jump functions of caller OutDev0/30: Jump functions of caller D2C/29: Jump functions of caller delayN/28: Propagating constants: Not considering programDword_data_flash for cloning; -fipa-cp-clone disabled. Not considering string_to_int for cloning; -fipa-cp-clone disabled. Not considering put_charp for cloning; -fipa-cp-clone disabled. Not considering put_cr for cloning; -fipa-cp-clone disabled. Not considering monprintf for cloning; -fipa-cp-clone disabled. Not considering OutStr for cloning; -fipa-cp-clone disabled. Not considering OutDev0 for cloning; -fipa-cp-clone disabled. Not considering D2C for cloning; -fipa-cp-clone disabled. Not considering delayN for cloning; -fipa-cp-clone disabled. overall_size: 94, max_new_size: 11001 - context independent values, size: 3, time_benefit: 2.000000 - context independent values, size: 3, time_benefit: 1.000000 IPA lattices after all propagation: Lattices: Node: programDword_data_flash/36: param [0]: BOTTOM ctxs: BOTTOM Bits unusable (BOTTOM) VARYING AGGS BOTTOM param [1]: BOTTOM ctxs: BOTTOM Bits unusable (BOTTOM) VARYING AGGS BOTTOM Node: string_to_int/35: param [0]: BOTTOM ctxs: BOTTOM Bits unusable (BOTTOM) VARYING AGGS BOTTOM Node: put_charp/34: param [0]: BOTTOM ctxs: BOTTOM Bits unusable (BOTTOM) VARYING AGGS BOTTOM Node: put_cr/33: Node: monprintf/32: param [0]: BOTTOM ctxs: BOTTOM Bits unusable (BOTTOM) VARYING AGGS BOTTOM Node: OutStr/31: param [0]: BOTTOM ctxs: BOTTOM Bits unusable (BOTTOM) VARYING AGGS BOTTOM Node: OutDev0/30: param [0]: BOTTOM ctxs: BOTTOM Bits unusable (BOTTOM) VARYING AGGS BOTTOM Node: D2C/29: param [0]: BOTTOM ctxs: BOTTOM Bits unusable (BOTTOM) VARYING AGGS BOTTOM Node: delayN/28: param [0]: BOTTOM ctxs: BOTTOM Bits unusable (BOTTOM) VARYING AGGS BOTTOM IPA decision stage: IPA constant propagation end Reclaiming functions: Reclaiming variables: Clearing address taken flags: Symbol table: __builtin_va_end/40 (__builtin_va_end) @06d591c0 Type: function Visibility: external public References: Referring: Availability: not_available Function flags: optimize_size Called by: monprintf/32 (1073741824 (estimated locally),1.00 per call) Calls: vsprintf/39 (vsprintf) @06d590e0 Type: function Visibility: external public References: Referring: Availability: not_available Function flags: optimize_size Called by: monprintf/32 (1073741824 (estimated locally),1.00 per call) Calls: __builtin_va_start/38 (__builtin_va_start) @06d59000 Type: function Visibility: external public References: Referring: Availability: not_available Function flags: optimize_size Called by: monprintf/32 (1073741824 (estimated locally),1.00 per call) Calls: Lpuart_Uart_Ip_SyncSend/37 (Lpuart_Uart_Ip_SyncSend) @06bd5d20 Type: function Visibility: external public References: Referring: Availability: not_available Function flags: optimize_size Called by: OutDev0/30 (1073741824 (estimated locally),1.00 per call) Calls: programDword_data_flash/36 (programDword_data_flash) @06bd5700 Type: function definition analyzed Visibility: externally_visible public References: Referring: Availability: available Function flags: count:1073741824 (estimated locally) body optimize_size Called by: Calls: string_to_int/35 (string_to_int) @06bd5460 Type: function definition analyzed Visibility: externally_visible public References: Referring: Availability: available Function flags: count:118207164 (estimated locally) body optimize_size Called by: Calls: put_charp/34 (put_charp) @06bd51c0 Type: function definition analyzed Visibility: externally_visible public References: Referring: Availability: available Function flags: count:1073741824 (estimated locally) body optimize_size Called by: Calls: OutDev0/30 (1073741824 (estimated locally),1.00 per call) OutDev0/30 (1073741824 (estimated locally),1.00 per call) D2C/29 (1073741824 (estimated locally),1.00 per call) OutDev0/30 (1073741824 (estimated locally),1.00 per call) D2C/29 (1073741824 (estimated locally),1.00 per call) put_cr/33 (put_cr) @06bd1ee0 Type: function definition analyzed Visibility: externally_visible public References: Referring: Availability: available Function flags: count:1073741824 (estimated locally) body optimize_size Called by: Calls: OutDev0/30 (1073741824 (estimated locally),1.00 per call) OutDev0/30 (1073741824 (estimated locally),1.00 per call) monprintf/32 (monprintf) @06bd1700 Type: function definition analyzed Visibility: externally_visible public References: Referring: Availability: available Function flags: count:1073741824 (estimated locally) body optimize_size Called by: Calls: OutStr/31 (1073741824 (estimated locally),1.00 per call) __builtin_va_end/40 (1073741824 (estimated locally),1.00 per call) vsprintf/39 (1073741824 (estimated locally),1.00 per call) __builtin_va_start/38 (1073741824 (estimated locally),1.00 per call) OutStr/31 (OutStr) @06bd1e00 Type: function definition analyzed Visibility: externally_visible public References: Referring: Availability: available Function flags: count:118111600 (estimated locally) body optimize_size Called by: monprintf/32 (1073741824 (estimated locally),1.00 per call) Calls: OutDev0/30 (955630223 (estimated locally),8.09 per call) OutDev0/30 (OutDev0) @06bd1b60 Type: function definition analyzed Visibility: externally_visible public References: Referring: Availability: available Function flags: count:1073741824 (estimated locally) body optimize_size Called by: put_charp/34 (1073741824 (estimated locally),1.00 per call) put_charp/34 (1073741824 (estimated locally),1.00 per call) put_charp/34 (1073741824 (estimated locally),1.00 per call) put_cr/33 (1073741824 (estimated locally),1.00 per call) put_cr/33 (1073741824 (estimated locally),1.00 per call) OutStr/31 (955630223 (estimated locally),8.09 per call) Calls: Lpuart_Uart_Ip_SyncSend/37 (1073741824 (estimated locally),1.00 per call) D2C/29 (D2C) @06bd18c0 Type: function definition analyzed Visibility: externally_visible public References: Referring: Availability: available Function flags: count:1073741824 (estimated locally) body optimize_size Called by: put_charp/34 (1073741824 (estimated locally),1.00 per call) put_charp/34 (1073741824 (estimated locally),1.00 per call) Calls: delayN/28 (delayN) @06bd1620 Type: function definition analyzed Visibility: externally_visible public References: Referring: Availability: available Function flags: count:1073741824 (estimated locally) body optimize_size Called by: Calls: ;; Function delayN (delayN, funcdef_no=28, decl_uid=5896, cgraph_uid=29, symbol_order=28) Modification phase of node delayN/28 delayN (uint32_t n) { [local count: 1073741824]: # DEBUG BEGIN_STMT # DEBUG n => NULL # DEBUG BEGIN_STMT return; } ;; Function D2C (D2C, funcdef_no=29, decl_uid=5898, cgraph_uid=30, symbol_order=29) Modification phase of node D2C/29 D2C (uint8_t c) { uint8_t _1; uint8_t _3; uint8_t _4; [local count: 1073741824]: # DEBUG BEGIN_STMT if (c_2(D) <= 9) goto ; [34.00%] else goto ; [66.00%] [local count: 365072220]: # DEBUG BEGIN_STMT _4 = c_2(D) + 48; goto ; [100.00%] [local count: 708669605]: # DEBUG BEGIN_STMT _3 = c_2(D) + 55; [local count: 1073741824]: # _1 = PHI <_4(3), _3(4)> return _1; } ;; Function OutDev0 (OutDev0, funcdef_no=30, decl_uid=5900, cgraph_uid=31, symbol_order=30) Modification phase of node OutDev0/30 OutDev0 (char c) { [local count: 1073741824]: # DEBUG BEGIN_STMT Lpuart_Uart_Ip_SyncSend (0, &c, 1); return; } ;; Function OutStr (OutStr, funcdef_no=31, decl_uid=5902, cgraph_uid=32, symbol_order=31) Modification phase of node OutStr/31 OutStr (const char * text) { char _1; [local count: 118111600]: # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT goto ; [100.00%] [local count: 955630223]: # DEBUG BEGIN_STMT text_6 = text_2 + 1; # DEBUG text => text_6 OutDev0 (_1); [local count: 1073741824]: # text_2 = PHI # DEBUG text => text_2 # DEBUG BEGIN_STMT _1 = *text_2; if (_1 != 0) goto ; [89.00%] else goto ; [11.00%] [local count: 118111601]: return; } ;; Function monprintf (monprintf, funcdef_no=32, decl_uid=5904, cgraph_uid=33, symbol_order=32) Modification phase of node monprintf/32 monprintf (char * msg) { struct va_list argptr; char str[256]; [local count: 1073741824]: # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT __builtin_va_start (&argptr, 0); # DEBUG BEGIN_STMT vsprintf (&str, msg_3(D), argptr); # DEBUG BEGIN_STMT __builtin_va_end (&argptr); # DEBUG BEGIN_STMT str[253] = 0; # DEBUG BEGIN_STMT str[254] = 0; # DEBUG BEGIN_STMT OutStr (&str); str ={v} {CLOBBER}; argptr ={v} {CLOBBER}; return; } ;; Function put_cr (put_cr, funcdef_no=33, decl_uid=6619, cgraph_uid=34, symbol_order=33) Modification phase of node put_cr/33 put_cr () { [local count: 1073741824]: # DEBUG BEGIN_STMT OutDev0 (13); # DEBUG BEGIN_STMT OutDev0 (10); return; } ;; Function put_charp (put_charp, funcdef_no=34, decl_uid=6622, cgraph_uid=35, symbol_order=34) Modification phase of node put_charp/34 put_charp (unsigned char a) { unsigned char i; unsigned char _1; unsigned char _2; [local count: 1073741824]: # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT i_4 = a_3(D) >> 4; # DEBUG i => i_4 # DEBUG BEGIN_STMT # DEBUG i => i_4 # DEBUG BEGIN_STMT _1 = D2C (i_4); OutDev0 (_1); # DEBUG BEGIN_STMT i_7 = a_3(D) & 15; # DEBUG i => i_7 # DEBUG BEGIN_STMT _2 = D2C (i_7); OutDev0 (_2); # DEBUG BEGIN_STMT OutDev0 (44); return; } ;; Function string_to_int (string_to_int, funcdef_no=35, decl_uid=6626, cgraph_uid=36, symbol_order=35) Modification phase of node string_to_int/35 string_to_int (uint8_t * buf) { uint32_t n; uint32_t p; uint32_t k; uint32_t j; uint32_t i; uint8_t * _1; unsigned char _2; int _3; int _5; long unsigned int _6; unsigned char _15; [local count: 118207164]: # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG j => 0 # DEBUG BEGIN_STMT # DEBUG p => 0 # DEBUG BEGIN_STMT # DEBUG n => 0 # DEBUG BEGIN_STMT # DEBUG i => 0 goto ; [100.00%] [local count: 955630225]: # DEBUG BEGIN_STMT # DEBUG k => 0 # DEBUG BEGIN_STMT _1 = buf_17(D) + n_14; _2 = *_1; _3 = (int) _2; switch (_2) [33.33%], case 48 ... 57: [33.33%], case 65 ... 70: [33.33%]> [local count: 318511554]: : # DEBUG BEGIN_STMT _15 = _2 & 15; k_20 = (uint32_t) _15; # DEBUG k => k_20 # DEBUG BEGIN_STMT p_21 = p_13 + 1; # DEBUG p => p_21 # DEBUG BEGIN_STMT goto ; [100.00%] [local count: 318511554]: : # DEBUG BEGIN_STMT _5 = _3 + -55; k_18 = (uint32_t) _5; # DEBUG k => k_18 # DEBUG BEGIN_STMT p_19 = p_13 + 1; # DEBUG p => p_19 # DEBUG BEGIN_STMT goto ; [100.00%] [local count: 318511554]: : # DEBUG BEGIN_STMT if (j_10 != 0) goto ; [50.00%] else goto ; [50.00%] [local count: 159255777]: if (p_13 != 0) goto ; [50.00%] else goto ; [50.00%] [local count: 238883666]: # DEBUG BEGIN_STMT # DEBUG i => 8 [local count: 955534663]: # i_7 = PHI # k_11 = PHI # p_12 = PHI # DEBUG p => p_12 # DEBUG k => k_11 # DEBUG i => i_7 # DEBUG BEGIN_STMT if (i_7 != 8) goto ; [66.00%] else goto ; [34.00%] [local count: 630652877]: # DEBUG BEGIN_STMT _6 = j_10 << 4; j_22 = _6 + k_11; # DEBUG j => j_22 [local count: 955534663]: # j_9 = PHI # DEBUG j => j_9 # DEBUG BEGIN_STMT n_23 = n_14 + 1; # DEBUG n => n_23 # DEBUG BEGIN_STMT i_24 = i_7 + 1; # DEBUG i => i_24 [local count: 1073741824]: # i_8 = PHI <0(2), i_24(11)> # j_10 = PHI <0(2), j_9(11)> # p_13 = PHI <0(2), p_12(11)> # n_14 = PHI <0(2), n_23(11)> # DEBUG n => n_14 # DEBUG p => p_13 # DEBUG j => j_10 # DEBUG i => i_8 # DEBUG BEGIN_STMT if (i_8 <= 7) goto ; [89.00%] else goto ; [11.00%] [local count: 118111601]: # j_4 = PHI # DEBUG BEGIN_STMT return j_4; } ;; Function programDword_data_flash (programDword_data_flash, funcdef_no=36, decl_uid=6656, cgraph_uid=37, symbol_order=36) Modification phase of node programDword_data_flash/36 programDword_data_flash (uint32_t address, uint32_t * data) { uint16_t ret; [local count: 1073741824]: # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG size => 8 # DEBUG BEGIN_STMT return ret_1(D); }