IPA function summary for vPortGetHeapStats/20 inlinable global time: 106.909092 self size: 29 global size: 29 min size: 8 self stack: 0 global stack: 0 size:18.500000, time:61.409091 size:6.500000, time:5.500000, executed if:(not inlined) calls: vPortExitCritical/24 function body not available loop depth: 0 freq:1.00 size: 1 time: 10 vPortEnterCritical/23 function body not available loop depth: 0 freq:1.00 size: 1 time: 10 xTaskResumeAll/22 function body not available loop depth: 0 freq:1.00 size: 1 time: 10 vTaskSuspendAll/21 function body not available loop depth: 0 freq:1.00 size: 1 time: 10 IPA function summary for prvInsertBlockIntoFreeList/19 inlinable global time: 43.612727 self size: 30 global size: 30 min size: 0 self stack: 0 global stack: 0 size:26.000000, time:41.312727 size:3.000000, time:2.000000, executed if:(not inlined) size:0.500000, time:0.150000, executed if:(not inlined), nonconst if:(op0[ref offset: 32] changed) && (not inlined) size:0.500000, time:0.150000, nonconst if:(op0[ref offset: 32] changed) calls: IPA function summary for prvHeapInit/18 inlinable global time: 12.000000 self size: 13 global size: 13 min size: 0 self stack: 0 global stack: 0 size:10.000000, time:10.000000 size:3.000000, time:2.000000, executed if:(not inlined) calls: IPA function summary for vPortInitialiseBlocks/17 inlinable global time: 2.000000 self size: 3 global size: 3 min size: 0 self stack: 0 global stack: 0 size:0.000000, time:0.000000 size:3.000000, time:2.000000, executed if:(not inlined) calls: IPA function summary for xPortGetMinimumEverFreeHeapSize/16 inlinable global time: 3.000000 self size: 4 global size: 4 min size: 0 self stack: 0 global stack: 0 size:1.000000, time:1.000000 size:3.000000, time:2.000000, executed if:(not inlined) calls: IPA function summary for xPortGetFreeHeapSize/15 inlinable global time: 3.000000 self size: 4 global size: 4 min size: 0 self stack: 0 global stack: 0 size:1.000000, time:1.000000 size:3.000000, time:2.000000, executed if:(not inlined) calls: IPA function summary for vPortFree/14 inlinable global time: 13.668150 self size: 38 global size: 38 min size: 0 self stack: 0 global stack: 0 size:0.000000, time:0.000000 size:3.000000, time:0.722009, executed if:(not inlined) size:2.000000, time:2.000000, nonconst if:(op0 changed) size:1.000000, time:0.700000, executed if:(op0 != 0B), nonconst if:(op0 changed) && (op0 != 0B) size:2.000000, time:0.586004, executed if:(op0 != 0B) && (not inlined) size:26.000000, time:7.769013, executed if:(op0 != 0B) calls: xTaskResumeAll/22 function body not available loop depth: 0 freq:0.06 size: 1 time: 10 predicate: (op0 != 0B) prvInsertBlockIntoFreeList/19 function not considered for inlining loop depth: 0 freq:0.06 size: 2 time: 11callee size:15 stack: 0 predicate: (op0 != 0B) vTaskSuspendAll/21 function body not available loop depth: 0 freq:0.06 size: 1 time: 10 predicate: (op0 != 0B) IPA function summary for pvPortMalloc/13 inlinable global time: 61.960417 self size: 82 global size: 82 min size: 10 self stack: 0 global stack: 0 size:63.000000, time:33.578902 size:3.000000, time:0.927373, executed if:(not inlined) size:11.000000, time:6.043949, nonconst if:(op0 changed) calls: xTaskResumeAll/22 function body not available loop depth: 0 freq:0.93 size: 1 time: 10 prvInsertBlockIntoFreeList/19 function not considered for inlining loop depth: 0 freq:0.04 size: 2 time: 11callee size:15 stack: 0 prvHeapInit/18 function not considered for inlining loop depth: 0 freq:0.17 size: 1 time: 10callee size: 6 stack: 0 vTaskSuspendAll/21 function body not available loop depth: 0 freq:1.00 size: 1 time: 10 Flattening functions: Overall time estimate: 246.150386 weighted by profile: 0.000000 Deciding on inlining of small functions. Starting with size 0. Enqueueing calls in vPortGetHeapStats/20. Enqueueing calls in prvInsertBlockIntoFreeList/19. Enqueueing calls in prvHeapInit/18. Enqueueing calls in vPortInitialiseBlocks/17. Enqueueing calls in xPortGetMinimumEverFreeHeapSize/16. Enqueueing calls in xPortGetFreeHeapSize/15. Enqueueing calls in vPortFree/14. Enqueueing calls in pvPortMalloc/13. Considering prvHeapInit/18 with 13 size to be inlined into pvPortMalloc/13 in ../FreeRTOS/Source/portable/MemMang/heap_4.c:128 Estimated badness is -0.010215, frequency 0.17. Reclaiming functions: Reclaiming variables: Clearing address taken flags: Deciding on functions to be inlined into all callers and removing useless speculations: Overall time estimate: 234.150386 weighted by profile: 0.000000 Why inlining failed? function body not available : 8 calls, 6.049381 freq, 0 count call is unlikely and code size would grow : 2 calls, 0.096774 freq, 0 count IPA function summary for vPortGetHeapStats/20 inlinable global time: 106.909092 self size: 29 global size: 29 min size: 8 self stack: 0 global stack: 0 size:18.500000, time:61.409091 size:6.500000, time:5.500000, executed if:(not inlined) calls: vPortExitCritical/24 function body not available loop depth: 0 freq:1.00 size: 1 time: 10 vPortEnterCritical/23 function body not available loop depth: 0 freq:1.00 size: 1 time: 10 xTaskResumeAll/22 function body not available loop depth: 0 freq:1.00 size: 1 time: 10 vTaskSuspendAll/21 function body not available loop depth: 0 freq:1.00 size: 1 time: 10 IPA function summary for prvInsertBlockIntoFreeList/19 inlinable global time: 43.612727 self size: 30 global size: 30 min size: 26 self stack: 0 global stack: 0 estimated growth:20 size:26.000000, time:41.312727 size:3.000000, time:2.000000, executed if:(not inlined) size:0.500000, time:0.150000, executed if:(not inlined), nonconst if:(op0[ref offset: 32] changed) && (not inlined) size:0.500000, time:0.150000, nonconst if:(op0[ref offset: 32] changed) calls: IPA function summary for vPortInitialiseBlocks/17 inlinable global time: 2.000000 self size: 3 global size: 3 min size: 0 self stack: 0 global stack: 0 size:0.000000, time:0.000000 size:3.000000, time:2.000000, executed if:(not inlined) calls: IPA function summary for xPortGetMinimumEverFreeHeapSize/16 inlinable global time: 3.000000 self size: 4 global size: 4 min size: 0 self stack: 0 global stack: 0 size:1.000000, time:1.000000 size:3.000000, time:2.000000, executed if:(not inlined) calls: IPA function summary for xPortGetFreeHeapSize/15 inlinable global time: 3.000000 self size: 4 global size: 4 min size: 0 self stack: 0 global stack: 0 size:1.000000, time:1.000000 size:3.000000, time:2.000000, executed if:(not inlined) calls: IPA function summary for vPortFree/14 inlinable global time: 13.668150 self size: 38 global size: 38 min size: 0 self stack: 0 global stack: 0 size:0.000000, time:0.000000 size:3.000000, time:0.722009, executed if:(not inlined) size:2.000000, time:2.000000, nonconst if:(op0 changed) size:1.000000, time:0.700000, executed if:(op0 != 0B), nonconst if:(op0 changed) && (op0 != 0B) size:2.000000, time:0.586004, executed if:(op0 != 0B) && (not inlined) size:26.000000, time:7.769013, executed if:(op0 != 0B) calls: xTaskResumeAll/22 function body not available loop depth: 0 freq:0.06 size: 1 time: 10 predicate: (op0 != 0B) prvInsertBlockIntoFreeList/19 call is unlikely and code size would grow loop depth: 0 freq:0.06 size: 2 time: 11callee size:15 stack: 0 predicate: (op0 != 0B) vTaskSuspendAll/21 function body not available loop depth: 0 freq:0.06 size: 1 time: 10 predicate: (op0 != 0B) IPA function summary for pvPortMalloc/13 inlinable global time: 61.960417 self size: 82 global size: 91 min size: 18 self stack: 0 global stack: 0 size:73.000000, time:35.321904 size:3.000000, time:0.927373, executed if:(not inlined) size:11.000000, time:6.043949, nonconst if:(op0 changed) calls: xTaskResumeAll/22 function body not available loop depth: 0 freq:0.93 size: 1 time: 10 prvInsertBlockIntoFreeList/19 call is unlikely and code size would grow loop depth: 0 freq:0.04 size: 2 time: 11callee size:15 stack: 0 prvHeapInit/18 inlined loop depth: 0 freq:0.17 size: 1 time: 10callee size: 6 stack: 0 Stack frame offset 0, callee self size 0, callee size 0 vTaskSuspendAll/21 function body not available loop depth: 0 freq:1.00 size: 1 time: 10 Symbol table: vPortExitCritical/24 (vPortExitCritical) @06ad4e00 Type: function Visibility: external public References: Referring: Availability: not_available Function flags: optimize_size Called by: vPortGetHeapStats/20 (168730858 (estimated locally),1.00 per call) Calls: vPortEnterCritical/23 (vPortEnterCritical) @06ad4c40 Type: function Visibility: external public References: Referring: Availability: not_available Function flags: optimize_size Called by: vPortGetHeapStats/20 (168730858 (estimated locally),1.00 per call) Calls: xTaskResumeAll/22 (xTaskResumeAll) @06ad42a0 Type: function Visibility: external public References: Referring: Availability: not_available Function flags: optimize_size Called by: vPortGetHeapStats/20 (168730858 (estimated locally),1.00 per call) vPortFree/14 (18715 (estimated locally),0.06 per call) pvPortMalloc/13 (214748 (estimated locally),0.93 per call) Calls: vTaskSuspendAll/21 (vTaskSuspendAll) @06ad40e0 Type: function Visibility: external public References: Referring: Availability: not_available Function flags: optimize_size Called by: vPortGetHeapStats/20 (168730857 (estimated locally),1.00 per call) vPortFree/14 (18715 (estimated locally),0.06 per call) pvPortMalloc/13 (231566 (estimated locally),1.00 per call) Calls: vPortGetHeapStats/20 (vPortGetHeapStats) @06ac60e0 Type: function definition analyzed Visibility: externally_visible public References: xStart/6 (read)pxEnd/7 (read)xFreeBytesRemaining/8 (read)xNumberOfSuccessfulAllocations/10 (read)xNumberOfSuccessfulFrees/11 (read)xMinimumEverFreeBytesRemaining/9 (read) Referring: Availability: available Function flags: count:168730857 (estimated locally) body optimize_size Called by: Calls: vPortExitCritical/24 (168730858 (estimated locally),1.00 per call) vPortEnterCritical/23 (168730858 (estimated locally),1.00 per call) xTaskResumeAll/22 (168730858 (estimated locally),1.00 per call) vTaskSuspendAll/21 (168730857 (estimated locally),1.00 per call) prvInsertBlockIntoFreeList/19 (prvInsertBlockIntoFreeList) @06ac6d20 Type: function definition analyzed Visibility: prevailing_def_ironly References: xStart/6 (addr)pxEnd/7 (read) Referring: Availability: local Function flags: count:118111600 (estimated locally) body local optimize_size Called by: vPortFree/14 (18715 (estimated locally),0.06 per call) pvPortMalloc/13 (8283 (estimated locally),0.04 per call) Calls: prvHeapInit/18 (prvHeapInit) @06ac6a80 Type: function definition analyzed Visibility: prevailing_def_ironly References: ucHeap/4 (addr)xStart/6 (write)xStart/6 (write)pxEnd/7 (write)xMinimumEverFreeBytesRemaining/9 (write)xFreeBytesRemaining/8 (write)xBlockAllocatedBit/12 (write) Referring: Function prvHeapInit/18 is inline copy in pvPortMalloc/13 Availability: local Function flags: count:40362 (estimated locally) body local optimize_size Called by: pvPortMalloc/13 (inlined) (40362 (estimated locally),0.17 per call) Calls: vPortInitialiseBlocks/17 (vPortInitialiseBlocks) @06ac67e0 Type: function definition analyzed Visibility: externally_visible public References: Referring: Availability: available Function flags: count:1073741824 (estimated locally) body optimize_size Called by: Calls: xPortGetMinimumEverFreeHeapSize/16 (xPortGetMinimumEverFreeHeapSize) @06ac6540 Type: function definition analyzed Visibility: externally_visible public References: xMinimumEverFreeBytesRemaining/9 (read) Referring: Availability: available Function flags: count:1073741824 (estimated locally) body optimize_size Called by: Calls: xPortGetFreeHeapSize/15 (xPortGetFreeHeapSize) @06ac62a0 Type: function definition analyzed Visibility: externally_visible public References: xFreeBytesRemaining/8 (read) Referring: Availability: available Function flags: count:1073741824 (estimated locally) body optimize_size Called by: Calls: vPortFree/14 (vPortFree) @06ac6000 Type: function definition analyzed Visibility: externally_visible public References: xBlockAllocatedBit/12 (read)xFreeBytesRemaining/8 (read)xFreeBytesRemaining/8 (write)xNumberOfSuccessfulFrees/11 (read)xNumberOfSuccessfulFrees/11 (write) Referring: Availability: available Function flags: count:306783 (estimated locally) body optimize_size Called by: Calls: xTaskResumeAll/22 (18715 (estimated locally),0.06 per call) prvInsertBlockIntoFreeList/19 (18715 (estimated locally),0.06 per call) vTaskSuspendAll/21 (18715 (estimated locally),0.06 per call) pvPortMalloc/13 (pvPortMalloc) @06abeee0 Type: function definition analyzed Visibility: externally_visible public References: pxEnd/7 (read)xBlockAllocatedBit/12 (read)xFreeBytesRemaining/8 (read)xStart/6 (read)xStart/6 (addr)pxEnd/7 (read)xFreeBytesRemaining/8 (read)xFreeBytesRemaining/8 (write)xMinimumEverFreeBytesRemaining/9 (read)xMinimumEverFreeBytesRemaining/9 (write)xBlockAllocatedBit/12 (read)xNumberOfSuccessfulAllocations/10 (read)xNumberOfSuccessfulAllocations/10 (write) Referring: Availability: available Function flags: count:231566 (estimated locally) body optimize_size Called by: Calls: xTaskResumeAll/22 (214748 (estimated locally),0.93 per call) prvInsertBlockIntoFreeList/19 (8283 (estimated locally),0.04 per call) prvHeapInit/18 (inlined) (40362 (estimated locally),0.17 per call) vTaskSuspendAll/21 (231566 (estimated locally),1.00 per call) xBlockAllocatedBit/12 (xBlockAllocatedBit) @06b14678 Type: variable definition analyzed Visibility: prevailing_def_ironly References: Referring: pvPortMalloc/13 (read)pvPortMalloc/13 (read)prvHeapInit/18 (write)vPortFree/14 (read) Availability: available Varpool flags: initialized xNumberOfSuccessfulFrees/11 (xNumberOfSuccessfulFrees) @06b145e8 Type: variable definition analyzed Visibility: prevailing_def_ironly References: Referring: vPortFree/14 (write)vPortFree/14 (read)vPortGetHeapStats/20 (read) Availability: available Varpool flags: initialized xNumberOfSuccessfulAllocations/10 (xNumberOfSuccessfulAllocations) @06b145a0 Type: variable definition analyzed Visibility: prevailing_def_ironly References: Referring: pvPortMalloc/13 (write)pvPortMalloc/13 (read)vPortGetHeapStats/20 (read) Availability: available Varpool flags: initialized xMinimumEverFreeBytesRemaining/9 (xMinimumEverFreeBytesRemaining) @06b14558 Type: variable definition analyzed Visibility: prevailing_def_ironly References: Referring: prvHeapInit/18 (write)xPortGetMinimumEverFreeHeapSize/16 (read)pvPortMalloc/13 (write)pvPortMalloc/13 (read)vPortGetHeapStats/20 (read) Availability: available Varpool flags: initialized xFreeBytesRemaining/8 (xFreeBytesRemaining) @06b14510 Type: variable definition analyzed Visibility: prevailing_def_ironly References: Referring: vPortFree/14 (write)pvPortMalloc/13 (read)prvHeapInit/18 (write)pvPortMalloc/13 (write)xPortGetFreeHeapSize/15 (read)pvPortMalloc/13 (read)vPortFree/14 (read)vPortGetHeapStats/20 (read) Availability: available Varpool flags: initialized pxEnd/7 (pxEnd) @06b14480 Type: variable definition analyzed Visibility: prevailing_def_ironly References: Referring: pvPortMalloc/13 (read)prvHeapInit/18 (write)prvInsertBlockIntoFreeList/19 (read)pvPortMalloc/13 (read)vPortGetHeapStats/20 (read) Availability: available Varpool flags: initialized xStart/6 (xStart) @06b143f0 Type: variable definition analyzed Visibility: prevailing_def_ironly References: Referring: prvHeapInit/18 (write)prvHeapInit/18 (write)pvPortMalloc/13 (addr)prvInsertBlockIntoFreeList/19 (addr)pvPortMalloc/13 (read)vPortGetHeapStats/20 (read) Availability: available Varpool flags: ucHeap/4 (ucHeap) @06b14120 Type: variable definition analyzed Visibility: prevailing_def_ironly References: Referring: prvHeapInit/18 (addr) Availability: available Varpool flags: ;; Function prvInsertBlockIntoFreeList (prvInsertBlockIntoFreeList, funcdef_no=10, decl_uid=6217, cgraph_uid=11, symbol_order=19) prvInsertBlockIntoFreeList (struct BlockLink_t * pxBlockToInsert) { struct BlockLink_t * pxIterator; struct A_BLOCK_LINK * _1; unsigned int _2; uint8_t * _3; unsigned int _5; unsigned int _6; unsigned int _7; uint8_t * _8; struct BlockLink_t * pxEnd.19_9; unsigned int _10; unsigned int _11; struct A_BLOCK_LINK * _12; struct A_BLOCK_LINK * _20; [local count: 118111600]: # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG pxIterator => &xStart [local count: 1073741824]: # pxIterator_14 = PHI <&xStart(2), _1(14)> # DEBUG pxIterator => pxIterator_14 # DEBUG BEGIN_STMT _1 = pxIterator_14->pxNextFreeBlock; if (_1 < pxBlockToInsert_19(D)) goto ; [89.00%] else goto ; [11.00%] [local count: 955630223]: goto ; [100.00%] [local count: 118111601]: # _20 = PHI <_1(3)> # pxIterator_4 = PHI # DEBUG BEGIN_STMT # DEBUG puc => pxIterator_4 # DEBUG BEGIN_STMT _2 = pxIterator_4->xBlockSize; _3 = pxIterator_4 + _2; if (_3 == pxBlockToInsert_19(D)) goto ; [30.00%] else goto ; [70.00%] [local count: 35433480]: # DEBUG BEGIN_STMT _5 = pxBlockToInsert_19(D)->xBlockSize; _6 = _2 + _5; pxIterator_4->xBlockSize = _6; # DEBUG BEGIN_STMT # DEBUG pxBlockToInsert => pxIterator_4 [local count: 118111601]: # pxBlockToInsert_13 = PHI # DEBUG pxBlockToInsert => pxBlockToInsert_13 # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG puc => pxBlockToInsert_13 # DEBUG BEGIN_STMT _7 = pxBlockToInsert_13->xBlockSize; _8 = pxBlockToInsert_13 + _7; if (_8 == _20) goto ; [30.00%] else goto ; [70.00%] [local count: 35433480]: # DEBUG BEGIN_STMT pxEnd.19_9 = pxEnd; if (pxEnd.19_9 != _20) goto ; [70.00%] else goto ; [30.00%] [local count: 24803436]: # DEBUG BEGIN_STMT _10 = _20->xBlockSize; _11 = _7 + _10; pxBlockToInsert_13->xBlockSize = _11; # DEBUG BEGIN_STMT _12 = _20->pxNextFreeBlock; pxBlockToInsert_13->pxNextFreeBlock = _12; goto ; [100.00%] [local count: 10630044]: # DEBUG BEGIN_STMT pxBlockToInsert_13->pxNextFreeBlock = pxEnd.19_9; goto ; [100.00%] [local count: 82678120]: # DEBUG BEGIN_STMT pxBlockToInsert_13->pxNextFreeBlock = _20; [local count: 118111601]: # DEBUG BEGIN_STMT if (pxIterator_4 != pxBlockToInsert_13) goto ; [70.00%] else goto ; [30.00%] [local count: 82678120]: # DEBUG BEGIN_STMT pxIterator_4->pxNextFreeBlock = pxBlockToInsert_13; [local count: 118111601]: # DEBUG BEGIN_STMT return; } ;; Function pvPortMalloc (pvPortMalloc, funcdef_no=4, decl_uid=5892, cgraph_uid=5, symbol_order=13) Symbols to be put in SSA form { D.6362 } Incremental SSA update started at block: 0 Number of blocks in CFG: 33 Number of blocks to update: 32 ( 97%) Removing basic block 3 Merging blocks 17 and 26 Merging blocks 24 and 27 Removing basic block 28 Removing basic block 29 ;; 5 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 22 23 24 25 26 27 ;; ;; Loop 3 ;; header 19, latch 19 ;; depth 1, outer 0 ;; nodes: 19 ;; ;; Loop 2 ;; header 26, latch 26 ;; depth 1, outer 0 ;; nodes: 26 ;; ;; Loop 1 ;; header 13, latch 14 ;; depth 1, outer 0 ;; nodes: 13 14 ;; 2 succs { 3 6 } ;; 3 succs { 4 5 } ;; 4 succs { 5 } ;; 5 succs { 6 } ;; 6 succs { 7 24 } ;; 7 succs { 8 24 } ;; 8 succs { 9 10 } ;; 9 succs { 10 24 } ;; 10 succs { 11 24 } ;; 11 succs { 12 24 } ;; 12 succs { 13 } ;; 13 succs { 14 15 } ;; 14 succs { 13 15 } ;; 15 succs { 16 24 } ;; 16 succs { 17 21 } ;; 17 succs { 18 20 } ;; 18 succs { 19 } ;; 19 succs { 19 } ;; 20 succs { 21 } ;; 21 succs { 22 23 } ;; 22 succs { 23 } ;; 23 succs { 24 } ;; 24 succs { 25 27 } ;; 25 succs { 26 } ;; 26 succs { 26 } ;; 27 succs { 1 } pvPortMalloc (size_t xWantedSize) { uint8_t * pucAlignedHeap; size_t uxAddress; size_t xTotalHeapSize; uint32_t ulNewBASEPRI; uint32_t ulNewBASEPRI; void * pvReturn; struct BlockLink_t * pxNewBlockLink; struct BlockLink_t * pxPreviousBlock; struct BlockLink_t * pxBlock; struct BlockLink_t * pxEnd.0_1; unsigned int xBlockAllocatedBit.1_2; unsigned int _3; unsigned int _4; unsigned int _5; unsigned int _6; unsigned int _7; unsigned int xFreeBytesRemaining.2_9; unsigned int _10; struct A_BLOCK_LINK * _11; struct BlockLink_t * pxEnd.3_12; struct A_BLOCK_LINK * _13; struct A_BLOCK_LINK * _14; unsigned int _15; unsigned int pxNewBlockLink.4_16; unsigned int _17; unsigned int xFreeBytesRemaining.5_18; unsigned int _19; unsigned int _20; unsigned int xMinimumEverFreeBytesRemaining.7_21; unsigned int xBlockAllocatedBit.9_22; unsigned int _23; unsigned int xNumberOfSuccessfulAllocations.10_24; unsigned int _25; unsigned int pvReturn.11_26; unsigned int _27; unsigned int _57; unsigned int _61; unsigned int _64; struct BlockLink_t * uxAddress.14_72; unsigned int _73; [local count: 231566]: # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG pvReturn => 0B # DEBUG BEGIN_STMT vTaskSuspendAll (); # DEBUG BEGIN_STMT pxEnd.0_1 = pxEnd; if (pxEnd.0_1 == 0B) goto ; [17.43%] else goto ; [82.57%] [local count: 40362]: # DEBUG BEGIN_STMT # DEBUG INLINE_ENTRY prvHeapInit # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG xTotalHeapSize => 8192 # DEBUG BEGIN_STMT uxAddress_60 = (size_t) &ucHeap; # DEBUG uxAddress => uxAddress_60 # DEBUG BEGIN_STMT _61 = uxAddress_60 & 7; if (_61 != 0) goto ; [50.00%] else goto ; [50.00%] [local count: 20181]: # DEBUG BEGIN_STMT uxAddress_62 = uxAddress_60 + 7; # DEBUG uxAddress => uxAddress_62 # DEBUG BEGIN_STMT uxAddress_63 = uxAddress_62 & 4294967288; # DEBUG uxAddress => uxAddress_63 # DEBUG BEGIN_STMT _64 = 8192 - uxAddress_63; xTotalHeapSize_65 = uxAddress_60 + _64; # DEBUG xTotalHeapSize => xTotalHeapSize_65 [local count: 40362]: # uxAddress_66 = PHI # xTotalHeapSize_68 = PHI <8192(3), xTotalHeapSize_65(4)> # DEBUG xTotalHeapSize => xTotalHeapSize_68 # DEBUG uxAddress => uxAddress_66 # DEBUG BEGIN_STMT pucAlignedHeap_67 = (uint8_t *) uxAddress_66; # DEBUG pucAlignedHeap => pucAlignedHeap_67 # DEBUG BEGIN_STMT xStart.pxNextFreeBlock = pucAlignedHeap_67; # DEBUG BEGIN_STMT xStart.xBlockSize = 0; # DEBUG BEGIN_STMT uxAddress_69 = uxAddress_66 + xTotalHeapSize_68; # DEBUG uxAddress => uxAddress_69 # DEBUG BEGIN_STMT uxAddress_70 = uxAddress_69 + 4294967288; # DEBUG uxAddress => uxAddress_70 # DEBUG BEGIN_STMT uxAddress_71 = uxAddress_70 & 4294967288; # DEBUG uxAddress => uxAddress_71 # DEBUG BEGIN_STMT uxAddress.14_72 = (struct BlockLink_t *) uxAddress_71; pxEnd = uxAddress.14_72; # DEBUG BEGIN_STMT uxAddress.14_72->xBlockSize = 0; # DEBUG BEGIN_STMT uxAddress.14_72->pxNextFreeBlock = 0B; # DEBUG BEGIN_STMT # DEBUG pxFirstFreeBlock => pucAlignedHeap_67 # DEBUG BEGIN_STMT _73 = uxAddress_71 - uxAddress_66; MEM[(struct BlockLink_t *)pucAlignedHeap_67].xBlockSize = _73; # DEBUG BEGIN_STMT MEM[(struct BlockLink_t *)pucAlignedHeap_67].pxNextFreeBlock = uxAddress.14_72; # DEBUG BEGIN_STMT xMinimumEverFreeBytesRemaining = _73; # DEBUG BEGIN_STMT xFreeBytesRemaining = _73; # DEBUG BEGIN_STMT xBlockAllocatedBit = 2147483648; [local count: 231566]: # DEBUG xTotalHeapSize => NULL # DEBUG uxAddress => NULL # DEBUG pucAlignedHeap => NULL # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT xBlockAllocatedBit.1_2 = xBlockAllocatedBit; _3 = xBlockAllocatedBit.1_2 & xWantedSize_39(D); if (_3 == 0) goto ; [83.25%] else goto ; [16.75%] [local count: 192779]: # DEBUG BEGIN_STMT _4 = xWantedSize_39(D) + 4294967295; if (_4 <= 4294967286) goto ; [71.00%] else goto ; [29.00%] [local count: 136873]: # DEBUG BEGIN_STMT xWantedSize_40 = xWantedSize_39(D) + 8; # DEBUG xWantedSize => xWantedSize_40 # DEBUG BEGIN_STMT _5 = xWantedSize_40 & 7; if (_5 != 0) goto ; [50.00%] else goto ; [50.00%] [local count: 68436]: # DEBUG BEGIN_STMT _6 = xWantedSize_40 & 4294967288; _7 = _6 + 8; if (_7 > xWantedSize_40) goto ; [71.00%] else goto ; [29.00%] [local count: 117026]: # xWantedSize_28 = PHI <_7(9), xWantedSize_40(8)> # DEBUG xWantedSize => xWantedSize_28 # DEBUG BEGIN_STMT if (xWantedSize_28 != 0) goto ; [71.00%] else goto ; [29.00%] [local count: 83089]: xFreeBytesRemaining.2_9 = xFreeBytesRemaining; if (xFreeBytesRemaining.2_9 >= xWantedSize_28) goto ; [71.00%] else goto ; [29.00%] [local count: 58993]: # DEBUG BEGIN_STMT # DEBUG pxPreviousBlock => &xStart # DEBUG BEGIN_STMT pxBlock_41 = xStart.pxNextFreeBlock; # DEBUG pxBlock => pxBlock_41 # DEBUG BEGIN_STMT [local count: 551465]: # pxBlock_29 = PHI # pxPreviousBlock_30 = PHI <&xStart(12), pxBlock_29(14)> # DEBUG pxPreviousBlock => pxPreviousBlock_30 # DEBUG pxBlock => pxBlock_29 # DEBUG BEGIN_STMT _10 = pxBlock_29->xBlockSize; if (_10 < xWantedSize_28) goto ; [94.50%] else goto ; [5.50%] [local count: 521134]: _11 = pxBlock_29->pxNextFreeBlock; if (_11 != 0B) goto ; [94.50%] else goto ; [5.50%] [local count: 58993]: # _57 = PHI <_10(13), _10(14)> # pxBlock_54 = PHI # pxPreviousBlock_8 = PHI # DEBUG BEGIN_STMT pxEnd.3_12 = pxEnd; if (pxEnd.3_12 != pxBlock_54) goto ; [85.10%] else goto ; [14.90%] [local count: 50203]: # DEBUG BEGIN_STMT _13 = pxPreviousBlock_8->pxNextFreeBlock; pvReturn_42 = _13 + 8; # DEBUG pvReturn => pvReturn_42 # DEBUG BEGIN_STMT _14 = pxBlock_54->pxNextFreeBlock; pxPreviousBlock_8->pxNextFreeBlock = _14; # DEBUG BEGIN_STMT _15 = _57 - xWantedSize_28; if (_15 > 16) goto ; [50.00%] else goto ; [50.00%] [local count: 25102]: # DEBUG BEGIN_STMT pxNewBlockLink_44 = pxBlock_54 + xWantedSize_28; # DEBUG pxNewBlockLink => pxNewBlockLink_44 # DEBUG BEGIN_STMT pxNewBlockLink.4_16 = (unsigned int) pxNewBlockLink_44; _17 = pxNewBlockLink.4_16 & 7; if (_17 != 0) goto ; [67.00%] else goto ; [33.00%] [local count: 16818]: # DEBUG BEGIN_STMT # DEBUG INLINE_ENTRY vPortRaiseBASEPRI # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT __asm__ __volatile__(" mov %0, %1 msr basepri, %0 isb dsb " : "=r" ulNewBASEPRI_55 : "i" 16 : "memory"); # DEBUG ulNewBASEPRI => ulNewBASEPRI_55 [local count: 168180375]: # DEBUG ulNewBASEPRI => NULL # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT goto ; [100.00%] [local count: 8283]: # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT pxNewBlockLink_44->xBlockSize = _15; # DEBUG BEGIN_STMT pxBlock_54->xBlockSize = xWantedSize_28; # DEBUG BEGIN_STMT prvInsertBlockIntoFreeList (pxNewBlockLink_44); [local count: 33385]: # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT xFreeBytesRemaining.5_18 = xFreeBytesRemaining; _19 = pxBlock_54->xBlockSize; _20 = xFreeBytesRemaining.5_18 - _19; xFreeBytesRemaining = _20; # DEBUG BEGIN_STMT xMinimumEverFreeBytesRemaining.7_21 = xMinimumEverFreeBytesRemaining; if (_20 < xMinimumEverFreeBytesRemaining.7_21) goto ; [50.00%] else goto ; [50.00%] [local count: 16693]: # DEBUG BEGIN_STMT xMinimumEverFreeBytesRemaining = _20; [local count: 33385]: # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT xBlockAllocatedBit.9_22 = xBlockAllocatedBit; _23 = _19 | xBlockAllocatedBit.9_22; pxBlock_54->xBlockSize = _23; # DEBUG BEGIN_STMT pxBlock_54->pxNextFreeBlock = 0B; # DEBUG BEGIN_STMT xNumberOfSuccessfulAllocations.10_24 = xNumberOfSuccessfulAllocations; _25 = xNumberOfSuccessfulAllocations.10_24 + 1; xNumberOfSuccessfulAllocations = _25; [local count: 214748]: # pvReturn_31 = PHI <0B(6), 0B(11), 0B(10), 0B(15), pvReturn_42(23), 0B(9), 0B(7)> # DEBUG xWantedSize => NULL # DEBUG pvReturn => pvReturn_31 # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT xTaskResumeAll (); # DEBUG BEGIN_STMT pvReturn.11_26 = (unsigned int) pvReturn_31; _27 = pvReturn.11_26 & 7; if (_27 != 0) goto ; [50.00%] else goto ; [50.00%] [local count: 107374]: # DEBUG BEGIN_STMT # DEBUG INLINE_ENTRY vPortRaiseBASEPRI # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT __asm__ __volatile__(" mov %0, %1 msr basepri, %0 isb dsb " : "=r" ulNewBASEPRI_56 : "i" 16 : "memory"); # DEBUG ulNewBASEPRI => ulNewBASEPRI_56 [local count: 1073741824]: # DEBUG ulNewBASEPRI => NULL # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT goto ; [100.00%] [local count: 107374]: # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT return pvReturn_31; } ;; Function vPortFree (vPortFree, funcdef_no=5, decl_uid=5894, cgraph_uid=6, symbol_order=14) vPortFree (void * pv) { uint32_t ulNewBASEPRI; uint32_t ulNewBASEPRI; uint8_t * puc; unsigned int _1; unsigned int xBlockAllocatedBit.21_2; unsigned int _3; struct A_BLOCK_LINK * _4; unsigned int _5; unsigned int _6; unsigned int _7; unsigned int xFreeBytesRemaining.24_8; unsigned int _9; unsigned int xNumberOfSuccessfulFrees.25_10; unsigned int _11; [local count: 306783]: # DEBUG BEGIN_STMT # DEBUG puc => pv_13(D) # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT if (pv_13(D) != 0B) goto ; [70.00%] else goto ; [30.00%] [local count: 214748]: # DEBUG BEGIN_STMT puc_15 = pv_13(D) + 4294967288; # DEBUG puc => puc_15 # DEBUG BEGIN_STMT # DEBUG pxLink => puc_15 # DEBUG BEGIN_STMT _1 = MEM[(struct BlockLink_t *)pv_13(D) + 4294967288B].xBlockSize; xBlockAllocatedBit.21_2 = xBlockAllocatedBit; _3 = _1 & xBlockAllocatedBit.21_2; if (_3 == 0) goto ; [50.00%] else goto ; [50.00%] [local count: 107374]: # DEBUG BEGIN_STMT # DEBUG INLINE_ENTRY vPortRaiseBASEPRI # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT __asm__ __volatile__(" mov %0, %1 msr basepri, %0 isb dsb " : "=r" ulNewBASEPRI_22 : "i" 16 : "memory"); # DEBUG ulNewBASEPRI => ulNewBASEPRI_22 [local count: 1073741823]: # DEBUG ulNewBASEPRI => NULL # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT [local count: 1073741824]: goto ; [100.00%] [local count: 107374]: # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT _4 = MEM[(struct BlockLink_t *)pv_13(D) + 4294967288B].pxNextFreeBlock; if (_4 != 0B) goto ; [82.57%] else goto ; [17.43%] [local count: 88659]: # DEBUG BEGIN_STMT # DEBUG INLINE_ENTRY vPortRaiseBASEPRI # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT __asm__ __volatile__(" mov %0, %1 msr basepri, %0 isb dsb " : "=r" ulNewBASEPRI_23 : "i" 16 : "memory"); # DEBUG ulNewBASEPRI => ulNewBASEPRI_23 [local count: 886588623]: # DEBUG ulNewBASEPRI => NULL # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT [local count: 886588623]: goto ; [100.00%] [local count: 18715]: # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT _5 = ~xBlockAllocatedBit.21_2; _6 = _1 & _5; MEM[(struct BlockLink_t *)pv_13(D) + 4294967288B].xBlockSize = _6; # DEBUG BEGIN_STMT vTaskSuspendAll (); # DEBUG BEGIN_STMT _7 = MEM[(struct BlockLink_t *)pv_13(D) + 4294967288B].xBlockSize; xFreeBytesRemaining.24_8 = xFreeBytesRemaining; _9 = _7 + xFreeBytesRemaining.24_8; xFreeBytesRemaining = _9; # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT prvInsertBlockIntoFreeList (puc_15); # DEBUG BEGIN_STMT xNumberOfSuccessfulFrees.25_10 = xNumberOfSuccessfulFrees; _11 = xNumberOfSuccessfulFrees.25_10 + 1; xNumberOfSuccessfulFrees = _11; # DEBUG BEGIN_STMT xTaskResumeAll (); [local count: 110750]: # DEBUG BEGIN_STMT return; } ;; Function xPortGetFreeHeapSize (xPortGetFreeHeapSize, funcdef_no=6, decl_uid=5898, cgraph_uid=7, symbol_order=15) xPortGetFreeHeapSize () { size_t _2; [local count: 1073741824]: # DEBUG BEGIN_STMT _2 = xFreeBytesRemaining; return _2; } ;; Function xPortGetMinimumEverFreeHeapSize (xPortGetMinimumEverFreeHeapSize, funcdef_no=7, decl_uid=5900, cgraph_uid=8, symbol_order=16) xPortGetMinimumEverFreeHeapSize () { size_t _2; [local count: 1073741824]: # DEBUG BEGIN_STMT _2 = xMinimumEverFreeBytesRemaining; return _2; } ;; Function vPortInitialiseBlocks (vPortInitialiseBlocks, funcdef_no=8, decl_uid=5896, cgraph_uid=9, symbol_order=17) vPortInitialiseBlocks () { [local count: 1073741824]: # DEBUG BEGIN_STMT return; } ;; Function vPortGetHeapStats (vPortGetHeapStats, funcdef_no=11, decl_uid=5890, cgraph_uid=12, symbol_order=20) vPortGetHeapStats (struct HeapStats_t * pxHeapStats) { size_t xMinSize; size_t xMaxSize; size_t xBlocks; struct BlockLink_t * pxBlock; unsigned int _1; struct BlockLink_t * pxEnd.26_3; unsigned int xFreeBytesRemaining.27_4; unsigned int xNumberOfSuccessfulAllocations.28_5; unsigned int xNumberOfSuccessfulFrees.29_6; unsigned int xMinimumEverFreeBytesRemaining.30_7; [local count: 168730857]: # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT # DEBUG xBlocks => 0 # DEBUG xMaxSize => 0 # DEBUG xMinSize => 4294967295 # DEBUG BEGIN_STMT vTaskSuspendAll (); # DEBUG BEGIN_STMT pxBlock_17 = xStart.pxNextFreeBlock; # DEBUG pxBlock => pxBlock_17 # DEBUG BEGIN_STMT if (pxBlock_17 != 0B) goto ; [70.00%] else goto ; [30.00%] [local count: 118111600]: [local count: 1073741824]: # pxBlock_8 = PHI # xBlocks_9 = PHI <0(5), xBlocks_18(6)> # xMaxSize_11 = PHI <0(5), xMaxSize_2(6)> # xMinSize_13 = PHI <4294967295(5), xMinSize_19(6)> # DEBUG xMinSize => xMinSize_13 # DEBUG xMaxSize => xMaxSize_11 # DEBUG xBlocks => xBlocks_9 # DEBUG pxBlock => pxBlock_8 # DEBUG BEGIN_STMT # DEBUG BEGIN_STMT xBlocks_18 = xBlocks_9 + 1; # DEBUG xBlocks => xBlocks_18 # DEBUG BEGIN_STMT _1 = pxBlock_8->xBlockSize; xMaxSize_2 = MAX_EXPR <_1, xMaxSize_11>; # DEBUG xMaxSize => xMaxSize_2 # DEBUG BEGIN_STMT xMinSize_19 = MIN_EXPR <_1, xMinSize_13>; # DEBUG xMinSize => xMinSize_19 # DEBUG BEGIN_STMT pxBlock_20 = pxBlock_8->pxNextFreeBlock; # DEBUG pxBlock => pxBlock_20 # DEBUG BEGIN_STMT pxEnd.26_3 = pxEnd; if (pxEnd.26_3 != pxBlock_20) goto ; [89.00%] else goto ; [11.00%] [local count: 955630225]: goto ; [100.00%] [local count: 168730858]: # xBlocks_10 = PHI <0(2), xBlocks_18(3)> # xMaxSize_12 = PHI <0(2), xMaxSize_2(3)> # xMinSize_14 = PHI <4294967295(2), xMinSize_19(3)> # DEBUG xMinSize => xMinSize_14 # DEBUG xMaxSize => xMaxSize_12 # DEBUG xBlocks => xBlocks_10 # DEBUG BEGIN_STMT xTaskResumeAll (); # DEBUG BEGIN_STMT pxHeapStats_22(D)->xSizeOfLargestFreeBlockInBytes = xMaxSize_12; # DEBUG BEGIN_STMT pxHeapStats_22(D)->xSizeOfSmallestFreeBlockInBytes = xMinSize_14; # DEBUG BEGIN_STMT pxHeapStats_22(D)->xNumberOfFreeBlocks = xBlocks_10; # DEBUG BEGIN_STMT vPortEnterCritical (); # DEBUG BEGIN_STMT xFreeBytesRemaining.27_4 = xFreeBytesRemaining; pxHeapStats_22(D)->xAvailableHeapSpaceInBytes = xFreeBytesRemaining.27_4; # DEBUG BEGIN_STMT xNumberOfSuccessfulAllocations.28_5 = xNumberOfSuccessfulAllocations; pxHeapStats_22(D)->xNumberOfSuccessfulAllocations = xNumberOfSuccessfulAllocations.28_5; # DEBUG BEGIN_STMT xNumberOfSuccessfulFrees.29_6 = xNumberOfSuccessfulFrees; pxHeapStats_22(D)->xNumberOfSuccessfulFrees = xNumberOfSuccessfulFrees.29_6; # DEBUG BEGIN_STMT xMinimumEverFreeBytesRemaining.30_7 = xMinimumEverFreeBytesRemaining; pxHeapStats_22(D)->xMinimumEverFreeBytesRemaining = xMinimumEverFreeBytesRemaining.30_7; # DEBUG BEGIN_STMT vPortExitCritical (); return; }