IPA function summary for Emios_Pwm_Ip_IrqHandler/42 inlinable global time: 33.600000 self size: 19 global size: 19 min size: 14 self stack: 0 global stack: 0 size:9.000000, time:8.400000 size:3.000000, time:2.000000, executed if:(not inlined) array index:(op1 changed) && (op0 changed) calls: Emios_Pwm_Ip_IrqDaocHandler/41 function not considered for inlining loop depth: 0 freq:1.00 size: 3 time: 12callee size:34 stack: 0 indirect call loop depth: 0 freq:0.70 size: 4 time: 16 IPA function summary for Emios_Pwm_Ip_IrqDaocHandler/41 inlinable global time: 65.599164 self size: 69 global size: 69 min size: 24 self stack: 0 global stack: 0 size:54.000000, time:31.244764 size:3.000000, time:2.000000, executed if:(not inlined) array index:(op1 changed) && (op0 changed) calls: Emios_Pwm_Ip_GetPwmMode/27 function not considered for inlining loop depth: 0 freq:0.49 size: 4 time: 13callee size:15 stack: 0 Emios_Pwm_Ip_GetPwmMode/27 function not considered for inlining loop depth: 0 freq:1.00 size: 4 time: 13callee size:15 stack: 0 Emios_Pwm_Ip_GetMasterBusChannel/45 function body not available loop depth: 0 freq:1.00 size: 4 time: 13 IPA function summary for Emios_Pwm_Ip_GetPwmMode/27 inlinable global time: 9.999400 self size: 31 global size: 31 min size: 0 self stack: 0 global stack: 0 size:27.500000, time:7.500000 size:3.500000, time:2.499400, executed if:(not inlined) array index:(op1 changed) calls: Flattening functions: Overall time estimate: 109.198564 weighted by profile: 0.000000 Deciding on inlining of small functions. Starting with size 0. Enqueueing calls in Emios_Pwm_Ip_IrqHandler/42. Enqueueing calls in Emios_Pwm_Ip_IrqDaocHandler/41. Enqueueing calls in Emios_Pwm_Ip_GetPwmMode/27. Considering Emios_Pwm_Ip_IrqDaocHandler/41 with 69 size to be inlined into Emios_Pwm_Ip_IrqHandler/42 in ../RTD/src/Emios_Pwm_Ip_Irq.c:247 Estimated badness is -0.010840, frequency 1.00. Reclaiming functions: Reclaiming variables: Clearing address taken flags: Deciding on functions to be inlined into all callers and removing useless speculations: Overall time estimate: 95.198564 weighted by profile: 0.000000 Why inlining failed? function body not available : 1 calls, 1.000000 freq, 0 count call is unlikely and code size would grow : 2 calls, 1.488800 freq, 0 count IPA function summary for Emios_Pwm_Ip_IrqHandler/42 inlinable global time: 85.199164 self size: 19 global size: 82 min size: 46 self stack: 0 global stack: 0 size:63.000000, time:39.644764 size:3.000000, time:2.000000, executed if:(not inlined) array index:(op1 changed) && (op0 changed) calls: Emios_Pwm_Ip_IrqDaocHandler/41 inlined loop depth: 0 freq:1.00 size: 3 time: 12callee size:34 stack: 0 Stack frame offset 0, callee self size 0, callee size 0 Emios_Pwm_Ip_GetPwmMode/27 call is unlikely and code size would grow loop depth: 0 freq:0.49 size: 4 time: 13callee size:15 stack: 0 Emios_Pwm_Ip_GetPwmMode/27 call is unlikely and code size would grow loop depth: 0 freq:1.00 size: 4 time: 13callee size:15 stack: 0 Emios_Pwm_Ip_GetMasterBusChannel/45 function body not available loop depth: 0 freq:1.00 size: 4 time: 13 indirect call loop depth: 0 freq:0.70 size: 4 time: 16 IPA function summary for Emios_Pwm_Ip_GetPwmMode/27 inlinable global time: 9.999400 self size: 31 global size: 31 min size: 28 self stack: 0 global stack: 0 estimated growth:17 size:27.500000, time:7.500000 size:3.500000, time:2.499400, executed if:(not inlined) array index:(op1 changed) calls: Symbol table: Emios_Pwm_Ip_aDaocDuty/47 (Emios_Pwm_Ip_aDaocDuty) @05ee40d8 Type: variable Body removed by symtab_remove_unreachable_nodes Visibility: external public References: Referring: Emios_Pwm_Ip_IrqDaocHandler/41 (read)Emios_Pwm_Ip_IrqDaocHandler/41 (read) Availability: not_available Varpool flags: Emios_Pwm_Ip_aPeriod/46 (Emios_Pwm_Ip_aPeriod) @05ee4090 Type: variable Body removed by symtab_remove_unreachable_nodes Visibility: external public References: Referring: Emios_Pwm_Ip_IrqDaocHandler/41 (read)Emios_Pwm_Ip_IrqDaocHandler/41 (read) Availability: not_available Varpool flags: Emios_Pwm_Ip_GetMasterBusChannel/45 (Emios_Pwm_Ip_GetMasterBusChannel) @05edb540 Type: function Visibility: external public References: Referring: Availability: not_available Function flags: optimize_size Called by: Emios_Pwm_Ip_IrqDaocHandler/41 (1073741824 (estimated locally),1.00 per call) Calls: Emios_Pwm_Ip_aNotificationPtr/44 (Emios_Pwm_Ip_aNotificationPtr) @05ed84c8 Type: variable Body removed by symtab_remove_unreachable_nodes Visibility: external public References: Referring: Emios_Pwm_Ip_IrqHandler/42 (read) Availability: not_available Varpool flags: Emios_Pwm_Ip_aBasePtr/43 (Emios_Pwm_Ip_aBasePtr) @05ed83f0 Type: variable Body removed by symtab_remove_unreachable_nodes Visibility: external public References: Referring: Emios_Pwm_Ip_IrqDaocHandler/41 (read)Emios_Pwm_Ip_IrqHandler/42 (read) Availability: not_available Varpool flags: read-only Emios_Pwm_Ip_IrqHandler/42 (Emios_Pwm_Ip_IrqHandler) @05d87c40 Type: function definition analyzed Visibility: externally_visible public References: Emios_Pwm_Ip_aBasePtr/43 (read)Emios_Pwm_Ip_aNotificationPtr/44 (read) Referring: Availability: available Function flags: count:1073741824 (estimated locally) body optimize_size Called by: Calls: Emios_Pwm_Ip_IrqDaocHandler/41 (inlined) (1073741824 (estimated locally),1.00 per call) Indirect call(751619278 (estimated locally),0.70 per call) Emios_Pwm_Ip_IrqDaocHandler/41 (Emios_Pwm_Ip_IrqDaocHandler) @05d872a0 Type: function definition analyzed Visibility: prevailing_def_ironly References: Emios_Pwm_Ip_aBasePtr/43 (read)Emios_Pwm_Ip_aPeriod/46 (read)Emios_Pwm_Ip_aDaocDuty/47 (read)Emios_Pwm_Ip_aPeriod/46 (read)Emios_Pwm_Ip_aDaocDuty/47 (read) Referring: Function Emios_Pwm_Ip_IrqDaocHandler/41 is inline copy in Emios_Pwm_Ip_IrqHandler/42 Availability: local Function flags: count:1073741824 (estimated locally) body local optimize_size Called by: Emios_Pwm_Ip_IrqHandler/42 (inlined) (1073741824 (estimated locally),1.00 per call) Calls: Emios_Pwm_Ip_GetPwmMode/27 (524845004 (estimated locally),0.49 per call) Emios_Pwm_Ip_GetPwmMode/27 (1073741824 (estimated locally),1.00 per call) Emios_Pwm_Ip_GetMasterBusChannel/45 (1073741824 (estimated locally),1.00 per call) Emios_Pwm_Ip_GetPwmMode/27 (Emios_Pwm_Ip_GetPwmMode) @05d77380 Type: function definition analyzed Visibility: prevailing_def_ironly References: Referring: Availability: local Function flags: count:1073741824 (estimated locally) body local optimize_size Called by: Emios_Pwm_Ip_IrqDaocHandler/41 (524845004 (estimated locally),0.49 per call) Emios_Pwm_Ip_IrqDaocHandler/41 (1073741824 (estimated locally),1.00 per call) Calls: ;; Function Emios_Pwm_Ip_GetPwmMode (Emios_Pwm_Ip_GetPwmMode, funcdef_no=27, decl_uid=4592, cgraph_uid=28, symbol_order=27) Emios_Pwm_Ip_GetPwmMode (const struct Emios_Pwm_Ip_HwAddrType * const base, uint8 channel) { Emios_Pwm_Ip_PwmModeType mode; int _1; long unsigned int _2; long unsigned int _3; [local count: 1073741824]: # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT _1 = (int) channel_5(D); _2 ={v} base_7(D)->CH.UC[_1].C; _3 = _2 & 127; switch (_3) [7.69%], case 1: [7.69%], case 6: [7.69%], case 7: [7.69%], case 38: [7.69%], case 88: [7.69%], case 90: [7.69%], case 92: [7.69%], case 93: [7.69%], case 94: [7.69%], case 95: [7.69%], case 96: [7.69%], case 98: [7.69%]> [local count: 82570746]: : # DEBUG BEGIN_STMT # DEBUG mode => 6 # DEBUG BEGIN_STMT goto ; [100.00%] [local count: 82570746]: : # DEBUG BEGIN_STMT # DEBUG mode => 7 # DEBUG BEGIN_STMT goto ; [100.00%] [local count: 82570746]: : # DEBUG BEGIN_STMT # DEBUG mode => 38 # DEBUG BEGIN_STMT goto ; [100.00%] [local count: 82570746]: : # DEBUG BEGIN_STMT # DEBUG mode => 88 # DEBUG BEGIN_STMT goto ; [100.00%] [local count: 82570746]: : # DEBUG BEGIN_STMT # DEBUG mode => 90 # DEBUG BEGIN_STMT goto ; [100.00%] [local count: 82570746]: : # DEBUG BEGIN_STMT # DEBUG mode => 92 # DEBUG BEGIN_STMT goto ; [100.00%] [local count: 82570746]: : # DEBUG BEGIN_STMT # DEBUG mode => 94 # DEBUG BEGIN_STMT goto ; [100.00%] [local count: 82570746]: : # DEBUG BEGIN_STMT # DEBUG mode => 93 # DEBUG BEGIN_STMT goto ; [100.00%] [local count: 82570746]: : # DEBUG BEGIN_STMT # DEBUG mode => 95 # DEBUG BEGIN_STMT goto ; [100.00%] [local count: 82570746]: : # DEBUG BEGIN_STMT # DEBUG mode => 96 # DEBUG BEGIN_STMT goto ; [100.00%] [local count: 82570746]: : # DEBUG BEGIN_STMT # DEBUG mode => 98 # DEBUG BEGIN_STMT goto ; [100.00%] [local count: 82570746]: : # DEBUG BEGIN_STMT # DEBUG mode => 255 # DEBUG BEGIN_STMT [local count: 1073419702]: # mode_4 = PHI <1(2), 6(3), 7(4), 38(5), 88(6), 90(7), 92(8), 94(9), 93(10), 95(11), 96(12), 98(13), 255(14)> : # DEBUG mode => mode_4 # DEBUG BEGIN_STMT return mode_4; } ;; Function Emios_Pwm_Ip_IrqHandler (Emios_Pwm_Ip_IrqHandler, funcdef_no=42, decl_uid=4676, cgraph_uid=43, symbol_order=42) Symbols to be put in SSA form { D.4748 } Incremental SSA update started at block: 0 Number of blocks in CFG: 24 Number of blocks to update: 23 ( 96%) Merging blocks 2 and 6 Merging blocks 23 and 5 ;; 1 loops found ;; ;; Loop 0 ;; header 0, latch 1 ;; depth 0, outer -1 ;; nodes: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ;; 2 succs { 3 8 } ;; 3 succs { 5 4 } ;; 4 succs { 5 } ;; 5 succs { 7 6 } ;; 6 succs { 7 } ;; 7 succs { 19 } ;; 8 succs { 9 19 } ;; 9 succs { 10 11 } ;; 10 succs { 13 11 } ;; 11 succs { 12 16 } ;; 12 succs { 13 16 } ;; 13 succs { 15 14 } ;; 14 succs { 15 } ;; 15 succs { 19 } ;; 16 succs { 18 17 } ;; 17 succs { 18 } ;; 18 succs { 19 } ;; 19 succs { 20 21 } ;; 20 succs { 21 } ;; 21 succs { 1 } Emios_Pwm_Ip_IrqHandler (uint8 instance, uint8 channel) { uint16 daocDuty; uint16 daocRegA; uint16 daocRegB; int _1; struct Emios_Pwm_Ip_HwAddrType * _2; const struct Emios_Pwm_Ip_NotificationType * _3; void (*) (void *) _4; void * _5; int _12; long unsigned int _13; long unsigned int _14; int _16; struct Emios_Pwm_Ip_HwAddrType * _17; unsigned char _18; int _19; long unsigned int _20; short unsigned int _21; int _22; long unsigned int _23; long unsigned int _24; long unsigned int _25; long unsigned int _26; _27; short unsigned int _28; short unsigned int _29; int _31; long unsigned int _32; long unsigned int _33; int _34; int _35; long unsigned int _36; int _37; int _38; short unsigned int iftmp.0_40; long unsigned int _41; int _42; long unsigned int _43; long unsigned int _44; int _45; int _46; int _47; short unsigned int iftmp.1_49; long unsigned int _50; _51; short unsigned int _52; int _53; long unsigned int _54; long unsigned int _55; int _56; int _57; long unsigned int _58; int _59; int _60; short unsigned int iftmp.2_62; long unsigned int _63; short unsigned int _64; int _65; long unsigned int _66; long unsigned int _67; int _68; int _69; long unsigned int _70; int _71; int _72; short unsigned int iftmp.3_74; long unsigned int _75; [local count: 1073741824]: # DEBUG BEGIN_STMT _1 = (int) instance_7(D); _2 = Emios_Pwm_Ip_aBasePtr[_1]; # DEBUG base => _2 # DEBUG channel => channel_9(D) # DEBUG INLINE_ENTRY Emios_Pwm_Ip_ClearFlagEvent # DEBUG BEGIN_STMT _12 = (int) channel_9(D); _13 ={v} _2->CH.UC[_12].S; _14 = _13 | 1; _2->CH.UC[_12].S ={v} _14; # DEBUG base => NULL # DEBUG channel => NULL # DEBUG BEGIN_STMT # DEBUG instance => instance_7(D) # DEBUG channel => channel_9(D) # DEBUG INLINE_ENTRY Emios_Pwm_Ip_IrqDaocHandler # DEBUG BEGIN_STMT # DEBUG daocDuty => 0 # DEBUG BEGIN_STMT # DEBUG daocRegA => 0 # DEBUG BEGIN_STMT # DEBUG daocRegB => 0 # DEBUG BEGIN_STMT _16 = (int) instance_7(D); _17 = Emios_Pwm_Ip_aBasePtr[_16]; _18 = Emios_Pwm_Ip_GetMasterBusChannel (instance_7(D), channel_9(D)); # DEBUG base => _17 # DEBUG channel => _18 # DEBUG INLINE_ENTRY Emios_Pwm_Ip_GetUCRegA # DEBUG BEGIN_STMT _19 = (int) _18; _20 ={v} MEM[(const struct Emios_Pwm_Ip_HwAddrType *)_17].CH.UC[_19].A; _21 = (short unsigned int) _20; # DEBUG base => NULL # DEBUG channel => NULL # DEBUG counterMax => _21 # DEBUG BEGIN_STMT # DEBUG base => _17 # DEBUG channel => channel_9(D) # DEBUG INLINE_ENTRY Emios_Pwm_Ip_GetEdgePolarity # DEBUG BEGIN_STMT _22 = (int) channel_9(D); _23 ={v} MEM[(const struct Emios_Pwm_Ip_HwAddrType *)_17].CH.UC[_22].C; _24 = _23 & 128; # DEBUG D#1 => _24 != 0 # DEBUG base => NULL # DEBUG channel => NULL # DEBUG polarity => () D#1 # DEBUG BEGIN_STMT # DEBUG base => _17 # DEBUG channel => channel_9(D) # DEBUG INLINE_ENTRY Emios_Pwm_Ip_GetOutputPinState # DEBUG BEGIN_STMT _25 ={v} MEM[(const struct Emios_Pwm_Ip_HwAddrType *)_17].CH.UC[_22].S; _26 = _25 & 2; # DEBUG base => NULL # DEBUG channel => NULL # DEBUG outputPin => _26 != 0 # DEBUG BEGIN_STMT _27 = Emios_Pwm_Ip_GetPwmMode (_17, channel_9(D)); if (_27 == 6) goto ; [51.12%] else goto ; [48.88%] [local count: 548896821]: # DEBUG BEGIN_STMT _28 = Emios_Pwm_Ip_aPeriod[_16][_22]; _29 = Emios_Pwm_Ip_aDaocDuty[_16][_22]; daocDuty_30 = _28 - _29; # DEBUG daocDuty => daocDuty_30 # DEBUG BEGIN_STMT _31 = (int) daocDuty_30; # DEBUG base => _17 # DEBUG channel => channel_9(D) # DEBUG INLINE_ENTRY Emios_Pwm_Ip_GetUCRegB # DEBUG BEGIN_STMT _32 ={v} MEM[(const struct Emios_Pwm_Ip_HwAddrType *)_17].CH.UC[_22].B; # DEBUG base => NULL # DEBUG channel => NULL _33 = _32 & 65535; _34 = (int) _33; _35 = _31 + _34; _36 = _20 & 65535; _37 = (int) _36; _38 = _35 % _37; daocRegA_39 = (uint16) _38; # DEBUG daocRegA => daocRegA_39 # DEBUG BEGIN_STMT if (daocRegA_39 == 0) goto ; [50.00%] else goto ; [50.00%] [local count: 274448410]: [local count: 548896820]: # iftmp.0_40 = PHI <_21(3), daocRegA_39(4)> # DEBUG base => _17 # DEBUG channel => channel_9(D) # DEBUG value => iftmp.0_40 # DEBUG INLINE_ENTRY Emios_Pwm_Ip_SetUCRegA # DEBUG BEGIN_STMT _41 = (long unsigned int) iftmp.0_40; _17->CH.UC[_22].A ={v} _41; # DEBUG base => NULL # DEBUG channel => NULL # DEBUG value => NULL # DEBUG BEGIN_STMT _42 = (int) _28; # DEBUG base => _17 # DEBUG channel => channel_9(D) # DEBUG INLINE_ENTRY Emios_Pwm_Ip_GetUCRegB # DEBUG BEGIN_STMT _43 ={v} MEM[(const struct Emios_Pwm_Ip_HwAddrType *)_17].CH.UC[_22].B; # DEBUG base => NULL # DEBUG channel => NULL _44 = _43 & 65535; _45 = (int) _44; _46 = _42 + _45; _47 = _46 % _37; daocRegB_48 = (uint16) _47; # DEBUG daocRegB => daocRegB_48 # DEBUG BEGIN_STMT if (daocRegB_48 == 0) goto ; [50.00%] else goto ; [50.00%] [local count: 274448410]: [local count: 548896820]: # iftmp.1_49 = PHI <_21(5), daocRegB_48(6)> # DEBUG base => _17 # DEBUG channel => channel_9(D) # DEBUG value => iftmp.1_49 # DEBUG INLINE_ENTRY Emios_Pwm_Ip_SetUCRegB # DEBUG BEGIN_STMT _50 = (long unsigned int) iftmp.1_49; _17->CH.UC[_22].B ={v} _50; goto ; [100.00%] [local count: 524845004]: # DEBUG BEGIN_STMT _51 = Emios_Pwm_Ip_GetPwmMode (_17, channel_9(D)); if (_51 == 7) goto ; [34.00%] else goto ; [66.00%] [local count: 178447301]: # DEBUG BEGIN_STMT if (_24 != 0) goto ; [50.00%] else goto ; [50.00%] [local count: 89223651]: if (_26 == 0) goto ; [50.00%] else goto ; [50.00%] [local count: 133835476]: if (_24 == 0) goto ; [50.00%] else goto ; [50.00%] [local count: 66917738]: if (_26 != 0) goto ; [50.00%] else goto ; [50.00%] [local count: 78070694]: # DEBUG BEGIN_STMT _52 = Emios_Pwm_Ip_aPeriod[_16][_22]; _53 = (int) _52; # DEBUG base => _17 # DEBUG channel => channel_9(D) # DEBUG INLINE_ENTRY Emios_Pwm_Ip_GetUCRegA # DEBUG BEGIN_STMT _54 ={v} MEM[(const struct Emios_Pwm_Ip_HwAddrType *)_17].CH.UC[_22].A; # DEBUG base => NULL # DEBUG channel => NULL _55 = _54 & 65535; _56 = (int) _55; _57 = _53 + _56; _58 = _20 & 65535; _59 = (int) _58; _60 = _57 % _59; daocRegA_61 = (uint16) _60; # DEBUG daocRegA => daocRegA_61 # DEBUG BEGIN_STMT if (daocRegA_61 == 0) goto ; [50.00%] else goto ; [50.00%] [local count: 39035347]: [local count: 78070694]: # iftmp.2_62 = PHI <_21(13), daocRegA_61(14)> # DEBUG base => _17 # DEBUG channel => channel_9(D) # DEBUG value => iftmp.2_62 # DEBUG INLINE_ENTRY Emios_Pwm_Ip_SetUCRegA # DEBUG BEGIN_STMT _63 = (long unsigned int) iftmp.2_62; _17->CH.UC[_22].A ={v} _63; goto ; [100.00%] [local count: 100376607]: # DEBUG BEGIN_STMT _64 = Emios_Pwm_Ip_aDaocDuty[_16][_22]; _65 = (int) _64; # DEBUG base => _17 # DEBUG channel => channel_9(D) # DEBUG INLINE_ENTRY Emios_Pwm_Ip_GetUCRegA # DEBUG BEGIN_STMT _66 ={v} MEM[(const struct Emios_Pwm_Ip_HwAddrType *)_17].CH.UC[_22].A; # DEBUG base => NULL # DEBUG channel => NULL _67 = _66 & 65535; _68 = (int) _67; _69 = _65 + _68; _70 = _20 & 65535; _71 = (int) _70; _72 = _69 % _71; daocRegB_73 = (uint16) _72; # DEBUG daocRegB => daocRegB_73 # DEBUG BEGIN_STMT if (daocRegB_73 == 0) goto ; [50.00%] else goto ; [50.00%] [local count: 50188304]: [local count: 100376607]: # iftmp.3_74 = PHI <_21(16), daocRegB_73(17)> # DEBUG base => _17 # DEBUG channel => channel_9(D) # DEBUG value => iftmp.3_74 # DEBUG INLINE_ENTRY Emios_Pwm_Ip_SetUCRegB # DEBUG BEGIN_STMT _75 = (long unsigned int) iftmp.3_74; _17->CH.UC[_22].B ={v} _75; [local count: 1073741823]: # DEBUG base => NULL # DEBUG channel => NULL # DEBUG value => NULL # DEBUG base => NULL # DEBUG channel => NULL # DEBUG value => NULL # DEBUG base => NULL # DEBUG channel => NULL # DEBUG value => NULL # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG instance => NULL # DEBUG channel => NULL # DEBUG daocRegB => NULL # DEBUG daocRegA => NULL # DEBUG daocDuty => NULL # DEBUG BEGIN_STMT _3 = Emios_Pwm_Ip_aNotificationPtr[_1][_12]; if (_3 != 0B) goto ; [70.00%] else goto ; [30.00%] [local count: 751619276]: # DEBUG BEGIN_STMT _4 = _3->cbFunction; _5 = _3->cbParameter; _4 (_5); [local count: 1073741823]: return; }