heap_4.c.076i.inline 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227
  1. IPA function summary for vPortGetHeapStats/20 inlinable
  2. global time: 106.909092
  3. self size: 29
  4. global size: 29
  5. min size: 8
  6. self stack: 0
  7. global stack: 0
  8. size:18.500000, time:61.409091
  9. size:6.500000, time:5.500000, executed if:(not inlined)
  10. calls:
  11. vPortExitCritical/24 function body not available
  12. loop depth: 0 freq:1.00 size: 1 time: 10
  13. vPortEnterCritical/23 function body not available
  14. loop depth: 0 freq:1.00 size: 1 time: 10
  15. xTaskResumeAll/22 function body not available
  16. loop depth: 0 freq:1.00 size: 1 time: 10
  17. vTaskSuspendAll/21 function body not available
  18. loop depth: 0 freq:1.00 size: 1 time: 10
  19. IPA function summary for prvInsertBlockIntoFreeList/19 inlinable
  20. global time: 43.612727
  21. self size: 30
  22. global size: 30
  23. min size: 0
  24. self stack: 0
  25. global stack: 0
  26. size:26.000000, time:41.312727
  27. size:3.000000, time:2.000000, executed if:(not inlined)
  28. size:0.500000, time:0.150000, executed if:(not inlined), nonconst if:(op0[ref offset: 32] changed) && (not inlined)
  29. size:0.500000, time:0.150000, nonconst if:(op0[ref offset: 32] changed)
  30. calls:
  31. IPA function summary for prvHeapInit/18 inlinable
  32. global time: 12.000000
  33. self size: 13
  34. global size: 13
  35. min size: 0
  36. self stack: 0
  37. global stack: 0
  38. size:10.000000, time:10.000000
  39. size:3.000000, time:2.000000, executed if:(not inlined)
  40. calls:
  41. IPA function summary for vPortInitialiseBlocks/17 inlinable
  42. global time: 2.000000
  43. self size: 3
  44. global size: 3
  45. min size: 0
  46. self stack: 0
  47. global stack: 0
  48. size:0.000000, time:0.000000
  49. size:3.000000, time:2.000000, executed if:(not inlined)
  50. calls:
  51. IPA function summary for xPortGetMinimumEverFreeHeapSize/16 inlinable
  52. global time: 3.000000
  53. self size: 4
  54. global size: 4
  55. min size: 0
  56. self stack: 0
  57. global stack: 0
  58. size:1.000000, time:1.000000
  59. size:3.000000, time:2.000000, executed if:(not inlined)
  60. calls:
  61. IPA function summary for xPortGetFreeHeapSize/15 inlinable
  62. global time: 3.000000
  63. self size: 4
  64. global size: 4
  65. min size: 0
  66. self stack: 0
  67. global stack: 0
  68. size:1.000000, time:1.000000
  69. size:3.000000, time:2.000000, executed if:(not inlined)
  70. calls:
  71. IPA function summary for vPortFree/14 inlinable
  72. global time: 13.668150
  73. self size: 38
  74. global size: 38
  75. min size: 0
  76. self stack: 0
  77. global stack: 0
  78. size:0.000000, time:0.000000
  79. size:3.000000, time:0.722009, executed if:(not inlined)
  80. size:2.000000, time:2.000000, nonconst if:(op0 changed)
  81. size:1.000000, time:0.700000, executed if:(op0 != 0B), nonconst if:(op0 changed) && (op0 != 0B)
  82. size:2.000000, time:0.586004, executed if:(op0 != 0B) && (not inlined)
  83. size:26.000000, time:7.769013, executed if:(op0 != 0B)
  84. calls:
  85. xTaskResumeAll/22 function body not available
  86. loop depth: 0 freq:0.06 size: 1 time: 10 predicate: (op0 != 0B)
  87. prvInsertBlockIntoFreeList/19 function not considered for inlining
  88. loop depth: 0 freq:0.06 size: 2 time: 11callee size:15 stack: 0 predicate: (op0 != 0B)
  89. vTaskSuspendAll/21 function body not available
  90. loop depth: 0 freq:0.06 size: 1 time: 10 predicate: (op0 != 0B)
  91. IPA function summary for pvPortMalloc/13 inlinable
  92. global time: 61.960417
  93. self size: 82
  94. global size: 82
  95. min size: 10
  96. self stack: 0
  97. global stack: 0
  98. size:63.000000, time:33.578902
  99. size:3.000000, time:0.927373, executed if:(not inlined)
  100. size:11.000000, time:6.043949, nonconst if:(op0 changed)
  101. calls:
  102. xTaskResumeAll/22 function body not available
  103. loop depth: 0 freq:0.93 size: 1 time: 10
  104. prvInsertBlockIntoFreeList/19 function not considered for inlining
  105. loop depth: 0 freq:0.04 size: 2 time: 11callee size:15 stack: 0
  106. prvHeapInit/18 function not considered for inlining
  107. loop depth: 0 freq:0.17 size: 1 time: 10callee size: 6 stack: 0
  108. vTaskSuspendAll/21 function body not available
  109. loop depth: 0 freq:1.00 size: 1 time: 10
  110. Flattening functions:
  111. Overall time estimate: 246.150386 weighted by profile: 0.000000
  112. Deciding on inlining of small functions. Starting with size 0.
  113. Enqueueing calls in vPortGetHeapStats/20.
  114. Enqueueing calls in prvInsertBlockIntoFreeList/19.
  115. Enqueueing calls in prvHeapInit/18.
  116. Enqueueing calls in vPortInitialiseBlocks/17.
  117. Enqueueing calls in xPortGetMinimumEverFreeHeapSize/16.
  118. Enqueueing calls in xPortGetFreeHeapSize/15.
  119. Enqueueing calls in vPortFree/14.
  120. Enqueueing calls in pvPortMalloc/13.
  121. Considering prvHeapInit/18 with 13 size
  122. to be inlined into pvPortMalloc/13 in ../FreeRTOS/Source/portable/MemMang/heap_4.c:128
  123. Estimated badness is -0.010215, frequency 0.17.
  124. Reclaiming functions:
  125. Reclaiming variables:
  126. Clearing address taken flags:
  127. Deciding on functions to be inlined into all callers and removing useless speculations:
  128. Overall time estimate: 234.150386 weighted by profile: 0.000000
  129. Why inlining failed?
  130. function body not available : 8 calls, 6.049381 freq, 0 count
  131. call is unlikely and code size would grow : 2 calls, 0.096774 freq, 0 count
  132. IPA function summary for vPortGetHeapStats/20 inlinable
  133. global time: 106.909092
  134. self size: 29
  135. global size: 29
  136. min size: 8
  137. self stack: 0
  138. global stack: 0
  139. size:18.500000, time:61.409091
  140. size:6.500000, time:5.500000, executed if:(not inlined)
  141. calls:
  142. vPortExitCritical/24 function body not available
  143. loop depth: 0 freq:1.00 size: 1 time: 10
  144. vPortEnterCritical/23 function body not available
  145. loop depth: 0 freq:1.00 size: 1 time: 10
  146. xTaskResumeAll/22 function body not available
  147. loop depth: 0 freq:1.00 size: 1 time: 10
  148. vTaskSuspendAll/21 function body not available
  149. loop depth: 0 freq:1.00 size: 1 time: 10
  150. IPA function summary for prvInsertBlockIntoFreeList/19 inlinable
  151. global time: 43.612727
  152. self size: 30
  153. global size: 30
  154. min size: 26
  155. self stack: 0
  156. global stack: 0
  157. estimated growth:20
  158. size:26.000000, time:41.312727
  159. size:3.000000, time:2.000000, executed if:(not inlined)
  160. size:0.500000, time:0.150000, executed if:(not inlined), nonconst if:(op0[ref offset: 32] changed) && (not inlined)
  161. size:0.500000, time:0.150000, nonconst if:(op0[ref offset: 32] changed)
  162. calls:
  163. IPA function summary for vPortInitialiseBlocks/17 inlinable
  164. global time: 2.000000
  165. self size: 3
  166. global size: 3
  167. min size: 0
  168. self stack: 0
  169. global stack: 0
  170. size:0.000000, time:0.000000
  171. size:3.000000, time:2.000000, executed if:(not inlined)
  172. calls:
  173. IPA function summary for xPortGetMinimumEverFreeHeapSize/16 inlinable
  174. global time: 3.000000
  175. self size: 4
  176. global size: 4
  177. min size: 0
  178. self stack: 0
  179. global stack: 0
  180. size:1.000000, time:1.000000
  181. size:3.000000, time:2.000000, executed if:(not inlined)
  182. calls:
  183. IPA function summary for xPortGetFreeHeapSize/15 inlinable
  184. global time: 3.000000
  185. self size: 4
  186. global size: 4
  187. min size: 0
  188. self stack: 0
  189. global stack: 0
  190. size:1.000000, time:1.000000
  191. size:3.000000, time:2.000000, executed if:(not inlined)
  192. calls:
  193. IPA function summary for vPortFree/14 inlinable
  194. global time: 13.668150
  195. self size: 38
  196. global size: 38
  197. min size: 0
  198. self stack: 0
  199. global stack: 0
  200. size:0.000000, time:0.000000
  201. size:3.000000, time:0.722009, executed if:(not inlined)
  202. size:2.000000, time:2.000000, nonconst if:(op0 changed)
  203. size:1.000000, time:0.700000, executed if:(op0 != 0B), nonconst if:(op0 changed) && (op0 != 0B)
  204. size:2.000000, time:0.586004, executed if:(op0 != 0B) && (not inlined)
  205. size:26.000000, time:7.769013, executed if:(op0 != 0B)
  206. calls:
  207. xTaskResumeAll/22 function body not available
  208. loop depth: 0 freq:0.06 size: 1 time: 10 predicate: (op0 != 0B)
  209. prvInsertBlockIntoFreeList/19 call is unlikely and code size would grow
  210. loop depth: 0 freq:0.06 size: 2 time: 11callee size:15 stack: 0 predicate: (op0 != 0B)
  211. vTaskSuspendAll/21 function body not available
  212. loop depth: 0 freq:0.06 size: 1 time: 10 predicate: (op0 != 0B)
  213. IPA function summary for pvPortMalloc/13 inlinable
  214. global time: 61.960417
  215. self size: 82
  216. global size: 91
  217. min size: 18
  218. self stack: 0
  219. global stack: 0
  220. size:73.000000, time:35.321904
  221. size:3.000000, time:0.927373, executed if:(not inlined)
  222. size:11.000000, time:6.043949, nonconst if:(op0 changed)
  223. calls:
  224. xTaskResumeAll/22 function body not available
  225. loop depth: 0 freq:0.93 size: 1 time: 10
  226. prvInsertBlockIntoFreeList/19 call is unlikely and code size would grow
  227. loop depth: 0 freq:0.04 size: 2 time: 11callee size:15 stack: 0
  228. prvHeapInit/18 inlined
  229. loop depth: 0 freq:0.17 size: 1 time: 10callee size: 6 stack: 0
  230. Stack frame offset 0, callee self size 0, callee size 0
  231. vTaskSuspendAll/21 function body not available
  232. loop depth: 0 freq:1.00 size: 1 time: 10
  233. Symbol table:
  234. vPortExitCritical/24 (vPortExitCritical) @06ad4e00
  235. Type: function
  236. Visibility: external public
  237. References:
  238. Referring:
  239. Availability: not_available
  240. Function flags: optimize_size
  241. Called by: vPortGetHeapStats/20 (168730858 (estimated locally),1.00 per call)
  242. Calls:
  243. vPortEnterCritical/23 (vPortEnterCritical) @06ad4c40
  244. Type: function
  245. Visibility: external public
  246. References:
  247. Referring:
  248. Availability: not_available
  249. Function flags: optimize_size
  250. Called by: vPortGetHeapStats/20 (168730858 (estimated locally),1.00 per call)
  251. Calls:
  252. xTaskResumeAll/22 (xTaskResumeAll) @06ad42a0
  253. Type: function
  254. Visibility: external public
  255. References:
  256. Referring:
  257. Availability: not_available
  258. Function flags: optimize_size
  259. 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)
  260. Calls:
  261. vTaskSuspendAll/21 (vTaskSuspendAll) @06ad40e0
  262. Type: function
  263. Visibility: external public
  264. References:
  265. Referring:
  266. Availability: not_available
  267. Function flags: optimize_size
  268. 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)
  269. Calls:
  270. vPortGetHeapStats/20 (vPortGetHeapStats) @06ac60e0
  271. Type: function definition analyzed
  272. Visibility: externally_visible public
  273. References: xStart/6 (read)pxEnd/7 (read)xFreeBytesRemaining/8 (read)xNumberOfSuccessfulAllocations/10 (read)xNumberOfSuccessfulFrees/11 (read)xMinimumEverFreeBytesRemaining/9 (read)
  274. Referring:
  275. Availability: available
  276. Function flags: count:168730857 (estimated locally) body optimize_size
  277. Called by:
  278. 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)
  279. prvInsertBlockIntoFreeList/19 (prvInsertBlockIntoFreeList) @06ac6d20
  280. Type: function definition analyzed
  281. Visibility: prevailing_def_ironly
  282. References: xStart/6 (addr)pxEnd/7 (read)
  283. Referring:
  284. Availability: local
  285. Function flags: count:118111600 (estimated locally) body local optimize_size
  286. Called by: vPortFree/14 (18715 (estimated locally),0.06 per call) pvPortMalloc/13 (8283 (estimated locally),0.04 per call)
  287. Calls:
  288. prvHeapInit/18 (prvHeapInit) @06ac6a80
  289. Type: function definition analyzed
  290. Visibility: prevailing_def_ironly
  291. References: ucHeap/4 (addr)xStart/6 (write)xStart/6 (write)pxEnd/7 (write)xMinimumEverFreeBytesRemaining/9 (write)xFreeBytesRemaining/8 (write)xBlockAllocatedBit/12 (write)
  292. Referring:
  293. Function prvHeapInit/18 is inline copy in pvPortMalloc/13
  294. Availability: local
  295. Function flags: count:40362 (estimated locally) body local optimize_size
  296. Called by: pvPortMalloc/13 (inlined) (40362 (estimated locally),0.17 per call)
  297. Calls:
  298. vPortInitialiseBlocks/17 (vPortInitialiseBlocks) @06ac67e0
  299. Type: function definition analyzed
  300. Visibility: externally_visible public
  301. References:
  302. Referring:
  303. Availability: available
  304. Function flags: count:1073741824 (estimated locally) body optimize_size
  305. Called by:
  306. Calls:
  307. xPortGetMinimumEverFreeHeapSize/16 (xPortGetMinimumEverFreeHeapSize) @06ac6540
  308. Type: function definition analyzed
  309. Visibility: externally_visible public
  310. References: xMinimumEverFreeBytesRemaining/9 (read)
  311. Referring:
  312. Availability: available
  313. Function flags: count:1073741824 (estimated locally) body optimize_size
  314. Called by:
  315. Calls:
  316. xPortGetFreeHeapSize/15 (xPortGetFreeHeapSize) @06ac62a0
  317. Type: function definition analyzed
  318. Visibility: externally_visible public
  319. References: xFreeBytesRemaining/8 (read)
  320. Referring:
  321. Availability: available
  322. Function flags: count:1073741824 (estimated locally) body optimize_size
  323. Called by:
  324. Calls:
  325. vPortFree/14 (vPortFree) @06ac6000
  326. Type: function definition analyzed
  327. Visibility: externally_visible public
  328. References: xBlockAllocatedBit/12 (read)xFreeBytesRemaining/8 (read)xFreeBytesRemaining/8 (write)xNumberOfSuccessfulFrees/11 (read)xNumberOfSuccessfulFrees/11 (write)
  329. Referring:
  330. Availability: available
  331. Function flags: count:306783 (estimated locally) body optimize_size
  332. Called by:
  333. 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)
  334. pvPortMalloc/13 (pvPortMalloc) @06abeee0
  335. Type: function definition analyzed
  336. Visibility: externally_visible public
  337. 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)
  338. Referring:
  339. Availability: available
  340. Function flags: count:231566 (estimated locally) body optimize_size
  341. Called by:
  342. 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)
  343. xBlockAllocatedBit/12 (xBlockAllocatedBit) @06b14678
  344. Type: variable definition analyzed
  345. Visibility: prevailing_def_ironly
  346. References:
  347. Referring: pvPortMalloc/13 (read)pvPortMalloc/13 (read)prvHeapInit/18 (write)vPortFree/14 (read)
  348. Availability: available
  349. Varpool flags: initialized
  350. xNumberOfSuccessfulFrees/11 (xNumberOfSuccessfulFrees) @06b145e8
  351. Type: variable definition analyzed
  352. Visibility: prevailing_def_ironly
  353. References:
  354. Referring: vPortFree/14 (write)vPortFree/14 (read)vPortGetHeapStats/20 (read)
  355. Availability: available
  356. Varpool flags: initialized
  357. xNumberOfSuccessfulAllocations/10 (xNumberOfSuccessfulAllocations) @06b145a0
  358. Type: variable definition analyzed
  359. Visibility: prevailing_def_ironly
  360. References:
  361. Referring: pvPortMalloc/13 (write)pvPortMalloc/13 (read)vPortGetHeapStats/20 (read)
  362. Availability: available
  363. Varpool flags: initialized
  364. xMinimumEverFreeBytesRemaining/9 (xMinimumEverFreeBytesRemaining) @06b14558
  365. Type: variable definition analyzed
  366. Visibility: prevailing_def_ironly
  367. References:
  368. Referring: prvHeapInit/18 (write)xPortGetMinimumEverFreeHeapSize/16 (read)pvPortMalloc/13 (write)pvPortMalloc/13 (read)vPortGetHeapStats/20 (read)
  369. Availability: available
  370. Varpool flags: initialized
  371. xFreeBytesRemaining/8 (xFreeBytesRemaining) @06b14510
  372. Type: variable definition analyzed
  373. Visibility: prevailing_def_ironly
  374. References:
  375. 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)
  376. Availability: available
  377. Varpool flags: initialized
  378. pxEnd/7 (pxEnd) @06b14480
  379. Type: variable definition analyzed
  380. Visibility: prevailing_def_ironly
  381. References:
  382. Referring: pvPortMalloc/13 (read)prvHeapInit/18 (write)prvInsertBlockIntoFreeList/19 (read)pvPortMalloc/13 (read)vPortGetHeapStats/20 (read)
  383. Availability: available
  384. Varpool flags: initialized
  385. xStart/6 (xStart) @06b143f0
  386. Type: variable definition analyzed
  387. Visibility: prevailing_def_ironly
  388. References:
  389. Referring: prvHeapInit/18 (write)prvHeapInit/18 (write)pvPortMalloc/13 (addr)prvInsertBlockIntoFreeList/19 (addr)pvPortMalloc/13 (read)vPortGetHeapStats/20 (read)
  390. Availability: available
  391. Varpool flags:
  392. ucHeap/4 (ucHeap) @06b14120
  393. Type: variable definition analyzed
  394. Visibility: prevailing_def_ironly
  395. References:
  396. Referring: prvHeapInit/18 (addr)
  397. Availability: available
  398. Varpool flags:
  399. ;; Function prvInsertBlockIntoFreeList (prvInsertBlockIntoFreeList, funcdef_no=10, decl_uid=6217, cgraph_uid=11, symbol_order=19)
  400. prvInsertBlockIntoFreeList (struct BlockLink_t * pxBlockToInsert)
  401. {
  402. struct BlockLink_t * pxIterator;
  403. struct A_BLOCK_LINK * _1;
  404. unsigned int _2;
  405. uint8_t * _3;
  406. unsigned int _5;
  407. unsigned int _6;
  408. unsigned int _7;
  409. uint8_t * _8;
  410. struct BlockLink_t * pxEnd.19_9;
  411. unsigned int _10;
  412. unsigned int _11;
  413. struct A_BLOCK_LINK * _12;
  414. struct A_BLOCK_LINK * _20;
  415. <bb 2> [local count: 118111600]:
  416. # DEBUG BEGIN_STMT
  417. # DEBUG BEGIN_STMT
  418. # DEBUG BEGIN_STMT
  419. # DEBUG pxIterator => &xStart
  420. <bb 3> [local count: 1073741824]:
  421. # pxIterator_14 = PHI <&xStart(2), _1(14)>
  422. # DEBUG pxIterator => pxIterator_14
  423. # DEBUG BEGIN_STMT
  424. _1 = pxIterator_14->pxNextFreeBlock;
  425. if (_1 < pxBlockToInsert_19(D))
  426. goto <bb 14>; [89.00%]
  427. else
  428. goto <bb 4>; [11.00%]
  429. <bb 14> [local count: 955630223]:
  430. goto <bb 3>; [100.00%]
  431. <bb 4> [local count: 118111601]:
  432. # _20 = PHI <_1(3)>
  433. # pxIterator_4 = PHI <pxIterator_14(3)>
  434. # DEBUG BEGIN_STMT
  435. # DEBUG puc => pxIterator_4
  436. # DEBUG BEGIN_STMT
  437. _2 = pxIterator_4->xBlockSize;
  438. _3 = pxIterator_4 + _2;
  439. if (_3 == pxBlockToInsert_19(D))
  440. goto <bb 5>; [30.00%]
  441. else
  442. goto <bb 6>; [70.00%]
  443. <bb 5> [local count: 35433480]:
  444. # DEBUG BEGIN_STMT
  445. _5 = pxBlockToInsert_19(D)->xBlockSize;
  446. _6 = _2 + _5;
  447. pxIterator_4->xBlockSize = _6;
  448. # DEBUG BEGIN_STMT
  449. # DEBUG pxBlockToInsert => pxIterator_4
  450. <bb 6> [local count: 118111601]:
  451. # pxBlockToInsert_13 = PHI <pxBlockToInsert_19(D)(4), pxIterator_4(5)>
  452. # DEBUG pxBlockToInsert => pxBlockToInsert_13
  453. # DEBUG BEGIN_STMT
  454. # DEBUG BEGIN_STMT
  455. # DEBUG puc => pxBlockToInsert_13
  456. # DEBUG BEGIN_STMT
  457. _7 = pxBlockToInsert_13->xBlockSize;
  458. _8 = pxBlockToInsert_13 + _7;
  459. if (_8 == _20)
  460. goto <bb 7>; [30.00%]
  461. else
  462. goto <bb 10>; [70.00%]
  463. <bb 7> [local count: 35433480]:
  464. # DEBUG BEGIN_STMT
  465. pxEnd.19_9 = pxEnd;
  466. if (pxEnd.19_9 != _20)
  467. goto <bb 8>; [70.00%]
  468. else
  469. goto <bb 9>; [30.00%]
  470. <bb 8> [local count: 24803436]:
  471. # DEBUG BEGIN_STMT
  472. _10 = _20->xBlockSize;
  473. _11 = _7 + _10;
  474. pxBlockToInsert_13->xBlockSize = _11;
  475. # DEBUG BEGIN_STMT
  476. _12 = _20->pxNextFreeBlock;
  477. pxBlockToInsert_13->pxNextFreeBlock = _12;
  478. goto <bb 11>; [100.00%]
  479. <bb 9> [local count: 10630044]:
  480. # DEBUG BEGIN_STMT
  481. pxBlockToInsert_13->pxNextFreeBlock = pxEnd.19_9;
  482. goto <bb 11>; [100.00%]
  483. <bb 10> [local count: 82678120]:
  484. # DEBUG BEGIN_STMT
  485. pxBlockToInsert_13->pxNextFreeBlock = _20;
  486. <bb 11> [local count: 118111601]:
  487. # DEBUG BEGIN_STMT
  488. if (pxIterator_4 != pxBlockToInsert_13)
  489. goto <bb 12>; [70.00%]
  490. else
  491. goto <bb 13>; [30.00%]
  492. <bb 12> [local count: 82678120]:
  493. # DEBUG BEGIN_STMT
  494. pxIterator_4->pxNextFreeBlock = pxBlockToInsert_13;
  495. <bb 13> [local count: 118111601]:
  496. # DEBUG BEGIN_STMT
  497. return;
  498. }
  499. ;; Function pvPortMalloc (pvPortMalloc, funcdef_no=4, decl_uid=5892, cgraph_uid=5, symbol_order=13)
  500. Symbols to be put in SSA form
  501. { D.6362 }
  502. Incremental SSA update started at block: 0
  503. Number of blocks in CFG: 33
  504. Number of blocks to update: 32 ( 97%)
  505. Removing basic block 3
  506. Merging blocks 17 and 26
  507. Merging blocks 24 and 27
  508. Removing basic block 28
  509. Removing basic block 29
  510. ;; 5 loops found
  511. ;;
  512. ;; Loop 0
  513. ;; header 0, latch 1
  514. ;; depth 0, outer -1
  515. ;; 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
  516. ;;
  517. ;; Loop 3
  518. ;; header 19, latch 19
  519. ;; depth 1, outer 0
  520. ;; nodes: 19
  521. ;;
  522. ;; Loop 2
  523. ;; header 26, latch 26
  524. ;; depth 1, outer 0
  525. ;; nodes: 26
  526. ;;
  527. ;; Loop 1
  528. ;; header 13, latch 14
  529. ;; depth 1, outer 0
  530. ;; nodes: 13 14
  531. ;; 2 succs { 3 6 }
  532. ;; 3 succs { 4 5 }
  533. ;; 4 succs { 5 }
  534. ;; 5 succs { 6 }
  535. ;; 6 succs { 7 24 }
  536. ;; 7 succs { 8 24 }
  537. ;; 8 succs { 9 10 }
  538. ;; 9 succs { 10 24 }
  539. ;; 10 succs { 11 24 }
  540. ;; 11 succs { 12 24 }
  541. ;; 12 succs { 13 }
  542. ;; 13 succs { 14 15 }
  543. ;; 14 succs { 13 15 }
  544. ;; 15 succs { 16 24 }
  545. ;; 16 succs { 17 21 }
  546. ;; 17 succs { 18 20 }
  547. ;; 18 succs { 19 }
  548. ;; 19 succs { 19 }
  549. ;; 20 succs { 21 }
  550. ;; 21 succs { 22 23 }
  551. ;; 22 succs { 23 }
  552. ;; 23 succs { 24 }
  553. ;; 24 succs { 25 27 }
  554. ;; 25 succs { 26 }
  555. ;; 26 succs { 26 }
  556. ;; 27 succs { 1 }
  557. pvPortMalloc (size_t xWantedSize)
  558. {
  559. uint8_t * pucAlignedHeap;
  560. size_t uxAddress;
  561. size_t xTotalHeapSize;
  562. uint32_t ulNewBASEPRI;
  563. uint32_t ulNewBASEPRI;
  564. void * pvReturn;
  565. struct BlockLink_t * pxNewBlockLink;
  566. struct BlockLink_t * pxPreviousBlock;
  567. struct BlockLink_t * pxBlock;
  568. struct BlockLink_t * pxEnd.0_1;
  569. unsigned int xBlockAllocatedBit.1_2;
  570. unsigned int _3;
  571. unsigned int _4;
  572. unsigned int _5;
  573. unsigned int _6;
  574. unsigned int _7;
  575. unsigned int xFreeBytesRemaining.2_9;
  576. unsigned int _10;
  577. struct A_BLOCK_LINK * _11;
  578. struct BlockLink_t * pxEnd.3_12;
  579. struct A_BLOCK_LINK * _13;
  580. struct A_BLOCK_LINK * _14;
  581. unsigned int _15;
  582. unsigned int pxNewBlockLink.4_16;
  583. unsigned int _17;
  584. unsigned int xFreeBytesRemaining.5_18;
  585. unsigned int _19;
  586. unsigned int _20;
  587. unsigned int xMinimumEverFreeBytesRemaining.7_21;
  588. unsigned int xBlockAllocatedBit.9_22;
  589. unsigned int _23;
  590. unsigned int xNumberOfSuccessfulAllocations.10_24;
  591. unsigned int _25;
  592. unsigned int pvReturn.11_26;
  593. unsigned int _27;
  594. unsigned int _57;
  595. unsigned int _61;
  596. unsigned int _64;
  597. struct BlockLink_t * uxAddress.14_72;
  598. unsigned int _73;
  599. <bb 2> [local count: 231566]:
  600. # DEBUG BEGIN_STMT
  601. # DEBUG BEGIN_STMT
  602. # DEBUG pvReturn => 0B
  603. # DEBUG BEGIN_STMT
  604. vTaskSuspendAll ();
  605. # DEBUG BEGIN_STMT
  606. pxEnd.0_1 = pxEnd;
  607. if (pxEnd.0_1 == 0B)
  608. goto <bb 3>; [17.43%]
  609. else
  610. goto <bb 6>; [82.57%]
  611. <bb 3> [local count: 40362]:
  612. # DEBUG BEGIN_STMT
  613. # DEBUG INLINE_ENTRY prvHeapInit
  614. # DEBUG BEGIN_STMT
  615. # DEBUG BEGIN_STMT
  616. # DEBUG BEGIN_STMT
  617. # DEBUG BEGIN_STMT
  618. # DEBUG xTotalHeapSize => 8192
  619. # DEBUG BEGIN_STMT
  620. uxAddress_60 = (size_t) &ucHeap;
  621. # DEBUG uxAddress => uxAddress_60
  622. # DEBUG BEGIN_STMT
  623. _61 = uxAddress_60 & 7;
  624. if (_61 != 0)
  625. goto <bb 4>; [50.00%]
  626. else
  627. goto <bb 5>; [50.00%]
  628. <bb 4> [local count: 20181]:
  629. # DEBUG BEGIN_STMT
  630. uxAddress_62 = uxAddress_60 + 7;
  631. # DEBUG uxAddress => uxAddress_62
  632. # DEBUG BEGIN_STMT
  633. uxAddress_63 = uxAddress_62 & 4294967288;
  634. # DEBUG uxAddress => uxAddress_63
  635. # DEBUG BEGIN_STMT
  636. _64 = 8192 - uxAddress_63;
  637. xTotalHeapSize_65 = uxAddress_60 + _64;
  638. # DEBUG xTotalHeapSize => xTotalHeapSize_65
  639. <bb 5> [local count: 40362]:
  640. # uxAddress_66 = PHI <uxAddress_60(3), uxAddress_63(4)>
  641. # xTotalHeapSize_68 = PHI <8192(3), xTotalHeapSize_65(4)>
  642. # DEBUG xTotalHeapSize => xTotalHeapSize_68
  643. # DEBUG uxAddress => uxAddress_66
  644. # DEBUG BEGIN_STMT
  645. pucAlignedHeap_67 = (uint8_t *) uxAddress_66;
  646. # DEBUG pucAlignedHeap => pucAlignedHeap_67
  647. # DEBUG BEGIN_STMT
  648. xStart.pxNextFreeBlock = pucAlignedHeap_67;
  649. # DEBUG BEGIN_STMT
  650. xStart.xBlockSize = 0;
  651. # DEBUG BEGIN_STMT
  652. uxAddress_69 = uxAddress_66 + xTotalHeapSize_68;
  653. # DEBUG uxAddress => uxAddress_69
  654. # DEBUG BEGIN_STMT
  655. uxAddress_70 = uxAddress_69 + 4294967288;
  656. # DEBUG uxAddress => uxAddress_70
  657. # DEBUG BEGIN_STMT
  658. uxAddress_71 = uxAddress_70 & 4294967288;
  659. # DEBUG uxAddress => uxAddress_71
  660. # DEBUG BEGIN_STMT
  661. uxAddress.14_72 = (struct BlockLink_t *) uxAddress_71;
  662. pxEnd = uxAddress.14_72;
  663. # DEBUG BEGIN_STMT
  664. uxAddress.14_72->xBlockSize = 0;
  665. # DEBUG BEGIN_STMT
  666. uxAddress.14_72->pxNextFreeBlock = 0B;
  667. # DEBUG BEGIN_STMT
  668. # DEBUG pxFirstFreeBlock => pucAlignedHeap_67
  669. # DEBUG BEGIN_STMT
  670. _73 = uxAddress_71 - uxAddress_66;
  671. MEM[(struct BlockLink_t *)pucAlignedHeap_67].xBlockSize = _73;
  672. # DEBUG BEGIN_STMT
  673. MEM[(struct BlockLink_t *)pucAlignedHeap_67].pxNextFreeBlock = uxAddress.14_72;
  674. # DEBUG BEGIN_STMT
  675. xMinimumEverFreeBytesRemaining = _73;
  676. # DEBUG BEGIN_STMT
  677. xFreeBytesRemaining = _73;
  678. # DEBUG BEGIN_STMT
  679. xBlockAllocatedBit = 2147483648;
  680. <bb 6> [local count: 231566]:
  681. # DEBUG xTotalHeapSize => NULL
  682. # DEBUG uxAddress => NULL
  683. # DEBUG pucAlignedHeap => NULL
  684. # DEBUG BEGIN_STMT
  685. # DEBUG BEGIN_STMT
  686. xBlockAllocatedBit.1_2 = xBlockAllocatedBit;
  687. _3 = xBlockAllocatedBit.1_2 & xWantedSize_39(D);
  688. if (_3 == 0)
  689. goto <bb 7>; [83.25%]
  690. else
  691. goto <bb 24>; [16.75%]
  692. <bb 7> [local count: 192779]:
  693. # DEBUG BEGIN_STMT
  694. _4 = xWantedSize_39(D) + 4294967295;
  695. if (_4 <= 4294967286)
  696. goto <bb 8>; [71.00%]
  697. else
  698. goto <bb 24>; [29.00%]
  699. <bb 8> [local count: 136873]:
  700. # DEBUG BEGIN_STMT
  701. xWantedSize_40 = xWantedSize_39(D) + 8;
  702. # DEBUG xWantedSize => xWantedSize_40
  703. # DEBUG BEGIN_STMT
  704. _5 = xWantedSize_40 & 7;
  705. if (_5 != 0)
  706. goto <bb 9>; [50.00%]
  707. else
  708. goto <bb 10>; [50.00%]
  709. <bb 9> [local count: 68436]:
  710. # DEBUG BEGIN_STMT
  711. _6 = xWantedSize_40 & 4294967288;
  712. _7 = _6 + 8;
  713. if (_7 > xWantedSize_40)
  714. goto <bb 10>; [71.00%]
  715. else
  716. goto <bb 24>; [29.00%]
  717. <bb 10> [local count: 117026]:
  718. # xWantedSize_28 = PHI <_7(9), xWantedSize_40(8)>
  719. # DEBUG xWantedSize => xWantedSize_28
  720. # DEBUG BEGIN_STMT
  721. if (xWantedSize_28 != 0)
  722. goto <bb 11>; [71.00%]
  723. else
  724. goto <bb 24>; [29.00%]
  725. <bb 11> [local count: 83089]:
  726. xFreeBytesRemaining.2_9 = xFreeBytesRemaining;
  727. if (xFreeBytesRemaining.2_9 >= xWantedSize_28)
  728. goto <bb 12>; [71.00%]
  729. else
  730. goto <bb 24>; [29.00%]
  731. <bb 12> [local count: 58993]:
  732. # DEBUG BEGIN_STMT
  733. # DEBUG pxPreviousBlock => &xStart
  734. # DEBUG BEGIN_STMT
  735. pxBlock_41 = xStart.pxNextFreeBlock;
  736. # DEBUG pxBlock => pxBlock_41
  737. # DEBUG BEGIN_STMT
  738. <bb 13> [local count: 551465]:
  739. # pxBlock_29 = PHI <pxBlock_41(12), _11(14)>
  740. # pxPreviousBlock_30 = PHI <&xStart(12), pxBlock_29(14)>
  741. # DEBUG pxPreviousBlock => pxPreviousBlock_30
  742. # DEBUG pxBlock => pxBlock_29
  743. # DEBUG BEGIN_STMT
  744. _10 = pxBlock_29->xBlockSize;
  745. if (_10 < xWantedSize_28)
  746. goto <bb 14>; [94.50%]
  747. else
  748. goto <bb 15>; [5.50%]
  749. <bb 14> [local count: 521134]:
  750. _11 = pxBlock_29->pxNextFreeBlock;
  751. if (_11 != 0B)
  752. goto <bb 13>; [94.50%]
  753. else
  754. goto <bb 15>; [5.50%]
  755. <bb 15> [local count: 58993]:
  756. # _57 = PHI <_10(13), _10(14)>
  757. # pxBlock_54 = PHI <pxBlock_29(13), pxBlock_29(14)>
  758. # pxPreviousBlock_8 = PHI <pxPreviousBlock_30(13), pxPreviousBlock_30(14)>
  759. # DEBUG BEGIN_STMT
  760. pxEnd.3_12 = pxEnd;
  761. if (pxEnd.3_12 != pxBlock_54)
  762. goto <bb 16>; [85.10%]
  763. else
  764. goto <bb 24>; [14.90%]
  765. <bb 16> [local count: 50203]:
  766. # DEBUG BEGIN_STMT
  767. _13 = pxPreviousBlock_8->pxNextFreeBlock;
  768. pvReturn_42 = _13 + 8;
  769. # DEBUG pvReturn => pvReturn_42
  770. # DEBUG BEGIN_STMT
  771. _14 = pxBlock_54->pxNextFreeBlock;
  772. pxPreviousBlock_8->pxNextFreeBlock = _14;
  773. # DEBUG BEGIN_STMT
  774. _15 = _57 - xWantedSize_28;
  775. if (_15 > 16)
  776. goto <bb 17>; [50.00%]
  777. else
  778. goto <bb 21>; [50.00%]
  779. <bb 17> [local count: 25102]:
  780. # DEBUG BEGIN_STMT
  781. pxNewBlockLink_44 = pxBlock_54 + xWantedSize_28;
  782. # DEBUG pxNewBlockLink => pxNewBlockLink_44
  783. # DEBUG BEGIN_STMT
  784. pxNewBlockLink.4_16 = (unsigned int) pxNewBlockLink_44;
  785. _17 = pxNewBlockLink.4_16 & 7;
  786. if (_17 != 0)
  787. goto <bb 18>; [67.00%]
  788. else
  789. goto <bb 20>; [33.00%]
  790. <bb 18> [local count: 16818]:
  791. # DEBUG BEGIN_STMT
  792. # DEBUG INLINE_ENTRY vPortRaiseBASEPRI
  793. # DEBUG BEGIN_STMT
  794. # DEBUG BEGIN_STMT
  795. __asm__ __volatile__(" mov %0, %1
  796. msr basepri, %0
  797. isb
  798. dsb
  799. " : "=r" ulNewBASEPRI_55 : "i" 16 : "memory");
  800. # DEBUG ulNewBASEPRI => ulNewBASEPRI_55
  801. <bb 19> [local count: 168180375]:
  802. # DEBUG ulNewBASEPRI => NULL
  803. # DEBUG BEGIN_STMT
  804. # DEBUG BEGIN_STMT
  805. # DEBUG BEGIN_STMT
  806. goto <bb 19>; [100.00%]
  807. <bb 20> [local count: 8283]:
  808. # DEBUG BEGIN_STMT
  809. # DEBUG BEGIN_STMT
  810. pxNewBlockLink_44->xBlockSize = _15;
  811. # DEBUG BEGIN_STMT
  812. pxBlock_54->xBlockSize = xWantedSize_28;
  813. # DEBUG BEGIN_STMT
  814. prvInsertBlockIntoFreeList (pxNewBlockLink_44);
  815. <bb 21> [local count: 33385]:
  816. # DEBUG BEGIN_STMT
  817. # DEBUG BEGIN_STMT
  818. xFreeBytesRemaining.5_18 = xFreeBytesRemaining;
  819. _19 = pxBlock_54->xBlockSize;
  820. _20 = xFreeBytesRemaining.5_18 - _19;
  821. xFreeBytesRemaining = _20;
  822. # DEBUG BEGIN_STMT
  823. xMinimumEverFreeBytesRemaining.7_21 = xMinimumEverFreeBytesRemaining;
  824. if (_20 < xMinimumEverFreeBytesRemaining.7_21)
  825. goto <bb 22>; [50.00%]
  826. else
  827. goto <bb 23>; [50.00%]
  828. <bb 22> [local count: 16693]:
  829. # DEBUG BEGIN_STMT
  830. xMinimumEverFreeBytesRemaining = _20;
  831. <bb 23> [local count: 33385]:
  832. # DEBUG BEGIN_STMT
  833. # DEBUG BEGIN_STMT
  834. xBlockAllocatedBit.9_22 = xBlockAllocatedBit;
  835. _23 = _19 | xBlockAllocatedBit.9_22;
  836. pxBlock_54->xBlockSize = _23;
  837. # DEBUG BEGIN_STMT
  838. pxBlock_54->pxNextFreeBlock = 0B;
  839. # DEBUG BEGIN_STMT
  840. xNumberOfSuccessfulAllocations.10_24 = xNumberOfSuccessfulAllocations;
  841. _25 = xNumberOfSuccessfulAllocations.10_24 + 1;
  842. xNumberOfSuccessfulAllocations = _25;
  843. <bb 24> [local count: 214748]:
  844. # pvReturn_31 = PHI <0B(6), 0B(11), 0B(10), 0B(15), pvReturn_42(23), 0B(9), 0B(7)>
  845. # DEBUG xWantedSize => NULL
  846. # DEBUG pvReturn => pvReturn_31
  847. # DEBUG BEGIN_STMT
  848. # DEBUG BEGIN_STMT
  849. # DEBUG BEGIN_STMT
  850. xTaskResumeAll ();
  851. # DEBUG BEGIN_STMT
  852. pvReturn.11_26 = (unsigned int) pvReturn_31;
  853. _27 = pvReturn.11_26 & 7;
  854. if (_27 != 0)
  855. goto <bb 25>; [50.00%]
  856. else
  857. goto <bb 27>; [50.00%]
  858. <bb 25> [local count: 107374]:
  859. # DEBUG BEGIN_STMT
  860. # DEBUG INLINE_ENTRY vPortRaiseBASEPRI
  861. # DEBUG BEGIN_STMT
  862. # DEBUG BEGIN_STMT
  863. __asm__ __volatile__(" mov %0, %1
  864. msr basepri, %0
  865. isb
  866. dsb
  867. " : "=r" ulNewBASEPRI_56 : "i" 16 : "memory");
  868. # DEBUG ulNewBASEPRI => ulNewBASEPRI_56
  869. <bb 26> [local count: 1073741824]:
  870. # DEBUG ulNewBASEPRI => NULL
  871. # DEBUG BEGIN_STMT
  872. # DEBUG BEGIN_STMT
  873. # DEBUG BEGIN_STMT
  874. goto <bb 26>; [100.00%]
  875. <bb 27> [local count: 107374]:
  876. # DEBUG BEGIN_STMT
  877. # DEBUG BEGIN_STMT
  878. return pvReturn_31;
  879. }
  880. ;; Function vPortFree (vPortFree, funcdef_no=5, decl_uid=5894, cgraph_uid=6, symbol_order=14)
  881. vPortFree (void * pv)
  882. {
  883. uint32_t ulNewBASEPRI;
  884. uint32_t ulNewBASEPRI;
  885. uint8_t * puc;
  886. unsigned int _1;
  887. unsigned int xBlockAllocatedBit.21_2;
  888. unsigned int _3;
  889. struct A_BLOCK_LINK * _4;
  890. unsigned int _5;
  891. unsigned int _6;
  892. unsigned int _7;
  893. unsigned int xFreeBytesRemaining.24_8;
  894. unsigned int _9;
  895. unsigned int xNumberOfSuccessfulFrees.25_10;
  896. unsigned int _11;
  897. <bb 2> [local count: 306783]:
  898. # DEBUG BEGIN_STMT
  899. # DEBUG puc => pv_13(D)
  900. # DEBUG BEGIN_STMT
  901. # DEBUG BEGIN_STMT
  902. if (pv_13(D) != 0B)
  903. goto <bb 3>; [70.00%]
  904. else
  905. goto <bb 10>; [30.00%]
  906. <bb 3> [local count: 214748]:
  907. # DEBUG BEGIN_STMT
  908. puc_15 = pv_13(D) + 4294967288;
  909. # DEBUG puc => puc_15
  910. # DEBUG BEGIN_STMT
  911. # DEBUG pxLink => puc_15
  912. # DEBUG BEGIN_STMT
  913. _1 = MEM[(struct BlockLink_t *)pv_13(D) + 4294967288B].xBlockSize;
  914. xBlockAllocatedBit.21_2 = xBlockAllocatedBit;
  915. _3 = _1 & xBlockAllocatedBit.21_2;
  916. if (_3 == 0)
  917. goto <bb 4>; [50.00%]
  918. else
  919. goto <bb 6>; [50.00%]
  920. <bb 4> [local count: 107374]:
  921. # DEBUG BEGIN_STMT
  922. # DEBUG INLINE_ENTRY vPortRaiseBASEPRI
  923. # DEBUG BEGIN_STMT
  924. # DEBUG BEGIN_STMT
  925. __asm__ __volatile__(" mov %0, %1
  926. msr basepri, %0
  927. isb
  928. dsb
  929. " : "=r" ulNewBASEPRI_22 : "i" 16 : "memory");
  930. # DEBUG ulNewBASEPRI => ulNewBASEPRI_22
  931. <bb 5> [local count: 1073741823]:
  932. # DEBUG ulNewBASEPRI => NULL
  933. # DEBUG BEGIN_STMT
  934. # DEBUG BEGIN_STMT
  935. # DEBUG BEGIN_STMT
  936. <bb 11> [local count: 1073741824]:
  937. goto <bb 5>; [100.00%]
  938. <bb 6> [local count: 107374]:
  939. # DEBUG BEGIN_STMT
  940. # DEBUG BEGIN_STMT
  941. _4 = MEM[(struct BlockLink_t *)pv_13(D) + 4294967288B].pxNextFreeBlock;
  942. if (_4 != 0B)
  943. goto <bb 7>; [82.57%]
  944. else
  945. goto <bb 9>; [17.43%]
  946. <bb 7> [local count: 88659]:
  947. # DEBUG BEGIN_STMT
  948. # DEBUG INLINE_ENTRY vPortRaiseBASEPRI
  949. # DEBUG BEGIN_STMT
  950. # DEBUG BEGIN_STMT
  951. __asm__ __volatile__(" mov %0, %1
  952. msr basepri, %0
  953. isb
  954. dsb
  955. " : "=r" ulNewBASEPRI_23 : "i" 16 : "memory");
  956. # DEBUG ulNewBASEPRI => ulNewBASEPRI_23
  957. <bb 8> [local count: 886588623]:
  958. # DEBUG ulNewBASEPRI => NULL
  959. # DEBUG BEGIN_STMT
  960. # DEBUG BEGIN_STMT
  961. # DEBUG BEGIN_STMT
  962. <bb 12> [local count: 886588623]:
  963. goto <bb 8>; [100.00%]
  964. <bb 9> [local count: 18715]:
  965. # DEBUG BEGIN_STMT
  966. # DEBUG BEGIN_STMT
  967. # DEBUG BEGIN_STMT
  968. # DEBUG BEGIN_STMT
  969. _5 = ~xBlockAllocatedBit.21_2;
  970. _6 = _1 & _5;
  971. MEM[(struct BlockLink_t *)pv_13(D) + 4294967288B].xBlockSize = _6;
  972. # DEBUG BEGIN_STMT
  973. vTaskSuspendAll ();
  974. # DEBUG BEGIN_STMT
  975. _7 = MEM[(struct BlockLink_t *)pv_13(D) + 4294967288B].xBlockSize;
  976. xFreeBytesRemaining.24_8 = xFreeBytesRemaining;
  977. _9 = _7 + xFreeBytesRemaining.24_8;
  978. xFreeBytesRemaining = _9;
  979. # DEBUG BEGIN_STMT
  980. # DEBUG BEGIN_STMT
  981. prvInsertBlockIntoFreeList (puc_15);
  982. # DEBUG BEGIN_STMT
  983. xNumberOfSuccessfulFrees.25_10 = xNumberOfSuccessfulFrees;
  984. _11 = xNumberOfSuccessfulFrees.25_10 + 1;
  985. xNumberOfSuccessfulFrees = _11;
  986. # DEBUG BEGIN_STMT
  987. xTaskResumeAll ();
  988. <bb 10> [local count: 110750]:
  989. # DEBUG BEGIN_STMT
  990. return;
  991. }
  992. ;; Function xPortGetFreeHeapSize (xPortGetFreeHeapSize, funcdef_no=6, decl_uid=5898, cgraph_uid=7, symbol_order=15)
  993. xPortGetFreeHeapSize ()
  994. {
  995. size_t _2;
  996. <bb 2> [local count: 1073741824]:
  997. # DEBUG BEGIN_STMT
  998. _2 = xFreeBytesRemaining;
  999. return _2;
  1000. }
  1001. ;; Function xPortGetMinimumEverFreeHeapSize (xPortGetMinimumEverFreeHeapSize, funcdef_no=7, decl_uid=5900, cgraph_uid=8, symbol_order=16)
  1002. xPortGetMinimumEverFreeHeapSize ()
  1003. {
  1004. size_t _2;
  1005. <bb 2> [local count: 1073741824]:
  1006. # DEBUG BEGIN_STMT
  1007. _2 = xMinimumEverFreeBytesRemaining;
  1008. return _2;
  1009. }
  1010. ;; Function vPortInitialiseBlocks (vPortInitialiseBlocks, funcdef_no=8, decl_uid=5896, cgraph_uid=9, symbol_order=17)
  1011. vPortInitialiseBlocks ()
  1012. {
  1013. <bb 2> [local count: 1073741824]:
  1014. # DEBUG BEGIN_STMT
  1015. return;
  1016. }
  1017. ;; Function vPortGetHeapStats (vPortGetHeapStats, funcdef_no=11, decl_uid=5890, cgraph_uid=12, symbol_order=20)
  1018. vPortGetHeapStats (struct HeapStats_t * pxHeapStats)
  1019. {
  1020. size_t xMinSize;
  1021. size_t xMaxSize;
  1022. size_t xBlocks;
  1023. struct BlockLink_t * pxBlock;
  1024. unsigned int _1;
  1025. struct BlockLink_t * pxEnd.26_3;
  1026. unsigned int xFreeBytesRemaining.27_4;
  1027. unsigned int xNumberOfSuccessfulAllocations.28_5;
  1028. unsigned int xNumberOfSuccessfulFrees.29_6;
  1029. unsigned int xMinimumEverFreeBytesRemaining.30_7;
  1030. <bb 2> [local count: 168730857]:
  1031. # DEBUG BEGIN_STMT
  1032. # DEBUG BEGIN_STMT
  1033. # DEBUG xBlocks => 0
  1034. # DEBUG xMaxSize => 0
  1035. # DEBUG xMinSize => 4294967295
  1036. # DEBUG BEGIN_STMT
  1037. vTaskSuspendAll ();
  1038. # DEBUG BEGIN_STMT
  1039. pxBlock_17 = xStart.pxNextFreeBlock;
  1040. # DEBUG pxBlock => pxBlock_17
  1041. # DEBUG BEGIN_STMT
  1042. if (pxBlock_17 != 0B)
  1043. goto <bb 5>; [70.00%]
  1044. else
  1045. goto <bb 4>; [30.00%]
  1046. <bb 5> [local count: 118111600]:
  1047. <bb 3> [local count: 1073741824]:
  1048. # pxBlock_8 = PHI <pxBlock_17(5), pxBlock_20(6)>
  1049. # xBlocks_9 = PHI <0(5), xBlocks_18(6)>
  1050. # xMaxSize_11 = PHI <0(5), xMaxSize_2(6)>
  1051. # xMinSize_13 = PHI <4294967295(5), xMinSize_19(6)>
  1052. # DEBUG xMinSize => xMinSize_13
  1053. # DEBUG xMaxSize => xMaxSize_11
  1054. # DEBUG xBlocks => xBlocks_9
  1055. # DEBUG pxBlock => pxBlock_8
  1056. # DEBUG BEGIN_STMT
  1057. # DEBUG BEGIN_STMT
  1058. xBlocks_18 = xBlocks_9 + 1;
  1059. # DEBUG xBlocks => xBlocks_18
  1060. # DEBUG BEGIN_STMT
  1061. _1 = pxBlock_8->xBlockSize;
  1062. xMaxSize_2 = MAX_EXPR <_1, xMaxSize_11>;
  1063. # DEBUG xMaxSize => xMaxSize_2
  1064. # DEBUG BEGIN_STMT
  1065. xMinSize_19 = MIN_EXPR <_1, xMinSize_13>;
  1066. # DEBUG xMinSize => xMinSize_19
  1067. # DEBUG BEGIN_STMT
  1068. pxBlock_20 = pxBlock_8->pxNextFreeBlock;
  1069. # DEBUG pxBlock => pxBlock_20
  1070. # DEBUG BEGIN_STMT
  1071. pxEnd.26_3 = pxEnd;
  1072. if (pxEnd.26_3 != pxBlock_20)
  1073. goto <bb 6>; [89.00%]
  1074. else
  1075. goto <bb 4>; [11.00%]
  1076. <bb 6> [local count: 955630225]:
  1077. goto <bb 3>; [100.00%]
  1078. <bb 4> [local count: 168730858]:
  1079. # xBlocks_10 = PHI <0(2), xBlocks_18(3)>
  1080. # xMaxSize_12 = PHI <0(2), xMaxSize_2(3)>
  1081. # xMinSize_14 = PHI <4294967295(2), xMinSize_19(3)>
  1082. # DEBUG xMinSize => xMinSize_14
  1083. # DEBUG xMaxSize => xMaxSize_12
  1084. # DEBUG xBlocks => xBlocks_10
  1085. # DEBUG BEGIN_STMT
  1086. xTaskResumeAll ();
  1087. # DEBUG BEGIN_STMT
  1088. pxHeapStats_22(D)->xSizeOfLargestFreeBlockInBytes = xMaxSize_12;
  1089. # DEBUG BEGIN_STMT
  1090. pxHeapStats_22(D)->xSizeOfSmallestFreeBlockInBytes = xMinSize_14;
  1091. # DEBUG BEGIN_STMT
  1092. pxHeapStats_22(D)->xNumberOfFreeBlocks = xBlocks_10;
  1093. # DEBUG BEGIN_STMT
  1094. vPortEnterCritical ();
  1095. # DEBUG BEGIN_STMT
  1096. xFreeBytesRemaining.27_4 = xFreeBytesRemaining;
  1097. pxHeapStats_22(D)->xAvailableHeapSpaceInBytes = xFreeBytesRemaining.27_4;
  1098. # DEBUG BEGIN_STMT
  1099. xNumberOfSuccessfulAllocations.28_5 = xNumberOfSuccessfulAllocations;
  1100. pxHeapStats_22(D)->xNumberOfSuccessfulAllocations = xNumberOfSuccessfulAllocations.28_5;
  1101. # DEBUG BEGIN_STMT
  1102. xNumberOfSuccessfulFrees.29_6 = xNumberOfSuccessfulFrees;
  1103. pxHeapStats_22(D)->xNumberOfSuccessfulFrees = xNumberOfSuccessfulFrees.29_6;
  1104. # DEBUG BEGIN_STMT
  1105. xMinimumEverFreeBytesRemaining.30_7 = xMinimumEverFreeBytesRemaining;
  1106. pxHeapStats_22(D)->xMinimumEverFreeBytesRemaining = xMinimumEverFreeBytesRemaining.30_7;
  1107. # DEBUG BEGIN_STMT
  1108. vPortExitCritical ();
  1109. return;
  1110. }