log_module_fusion.txt 200 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194
  1. [INFO][runOnModule] Starting analysis for module: <stdin>
  2. [INFO][buildCallGraph] Building complete call graph
  3. ```mermaid
  4. graph TD
  5. %% Project Call Graph
  6. calculateCircleArea["calculateCircleArea\nDepth: 3\nCritical Points: 2"]
  7. calculateDistance["calculateDistance\nDepth: 3\nCritical Points: 2"]
  8. countSetBits["countSetBits\nDepth: 2\nCritical Points: 3"]:::target
  9. createDynamicArray["createDynamicArray\nDepth: 2\nCritical Points: 2"]
  10. createMatrix["createMatrix\nDepth: 2\nCritical Points: 2"]
  11. factorial["factorial\nDepth: 3\nCritical Points: 2"]
  12. findCentroid["findCentroid\nDepth: 3\nCritical Points: 2"]
  13. getErrorMessage["getErrorMessage\nDepth: 3\nCritical Points: 2"]
  14. insertNode["insertNode\nDepth: 2\nCritical Points: 2"]
  15. longestIncreasingSubsequence["longestIncreasingSubsequence\nDepth: 2\nCritical Points: 7"]:::target
  16. memoizedFib["memoizedFib\nDepth: 2\nCritical Points: 2"]:::target
  17. multiplyMatrices["multiplyMatrices\nDepth: 2\nCritical Points: 2"]
  18. performSimpleCalculations["performSimpleCalculations\nDepth: 3\nCritical Points: 7"]
  19. processMatrix["processMatrix\nDepth: 2\nCritical Points: 3"]:::target
  20. projectA_main["projectA_main\nDepth: 2\nCritical Points: 2"]
  21. projectB_main["projectB_main\nDepth: 1\nCritical Points: 5"]:::target
  22. pushBack["pushBack\nDepth: 2\nCritical Points: 2"]
  23. quickSort["quickSort\nDepth: 3\nCritical Points: 2"]
  24. removeDuplicates["removeDuplicates\nDepth: 3\nCritical Points: 2"]
  25. reverseString["reverseString\nDepth: 2\nCritical Points: 3"]:::target
  26. setErrorMessage["setErrorMessage\nDepth: 2\nCritical Points: 3"]
  27. testPoints["testPoints\nDepth: 2\nCritical Points: 3"]:::target
  28. validateMatrix["validateMatrix\nDepth: 3\nCritical Points: 2"]
  29. calculateCircleArea --> setErrorMessage
  30. calculateDistance --> setErrorMessage
  31. createDynamicArray --> setErrorMessage
  32. createMatrix --> setErrorMessage
  33. factorial --> factorial
  34. factorial --> setErrorMessage
  35. findCentroid --> setErrorMessage
  36. insertNode --> setErrorMessage
  37. memoizedFib --> memoizedFib
  38. multiplyMatrices --> createMatrix
  39. multiplyMatrices --> setErrorMessage
  40. processMatrix --> countSetBits
  41. projectA_main --> createDynamicArray
  42. projectA_main --> createMatrix
  43. projectA_main --> getErrorMessage
  44. projectA_main --> insertNode
  45. projectA_main --> multiplyMatrices
  46. projectA_main --> performSimpleCalculations
  47. projectA_main --> pushBack
  48. projectA_main --> setErrorMessage
  49. projectB_main --> countSetBits
  50. projectB_main --> longestIncreasingSubsequence
  51. projectB_main --> memoizedFib
  52. projectB_main --> processMatrix
  53. projectB_main --> reverseString
  54. projectB_main --> testPoints
  55. pushBack --> setErrorMessage
  56. quickSort --> quickSort
  57. quickSort --> setErrorMessage
  58. removeDuplicates --> quickSort
  59. removeDuplicates --> setErrorMessage
  60. validateMatrix --> setErrorMessage
  61. classDef target fill:#f96,stroke:#333,stroke-width:4px
  62. ```
  63. ```mermaid: getErrorMessage
  64. graph TD
  65. 0["Block 0:\n %1 = load i8*, i8** @globalErrorMessage, align 8\n %2 = icmp ne i8* %1, null\n br i1 %2, label %3, label %5\n"]:::critical
  66. 0 -->|true| 3
  67. 0 -->|false| 5
  68. 3["Block 3:\n %4 = load i8*, i8** @globalErrorMessage, align 8\n br label %6\n"]
  69. 3 --> 6
  70. 5["Block 5:\n br label %6\n"]
  71. 5 --> 6
  72. 6["Block 6:\n %7 = phi i8* [ %4, %3 ], [ getelementptr inbo...\n ret i8* %7\n"]:::critical
  73. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  74. ```
  75. ```mermaid: setErrorMessage
  76. graph TD
  77. 1["Block 1:\n %2 = alloca i8*, align 8\n store i8* %0, i8** %2, align 8\n %3 = load i8*, i8** @globalErrorMessage, align 8\n %4 = icmp ne i8* %3, null\n br i1 %4, label %5, label %7\n"]:::critical
  78. 1 -->|true| 5
  79. 1 -->|false| 7
  80. 5["Block 5:\n %6 = load i8*, i8** @globalErrorMessage, align 8\n call void @free(i8* %6) #7\n br label %7\n"]
  81. 5 --> 7
  82. 7["Block 7:\n %8 = load i8*, i8** %2, align 8\n %9 = icmp ne i8* %8, null\n br i1 %9, label %10, label %19\n"]:::critical
  83. 7 -->|true| 10
  84. 7 -->|false| 19
  85. 10["Block 10:\n %11 = load i8*, i8** %2, align 8\n %12 = call noalias i8* @strdup(i8* %11) #7\n store i8* %12, i8** @globalErrorMessage, align 8\n %13 = load i8*, i8** @globalErrorMessage, ali...\n %14 = icmp eq i8* %13, null\n br i1 %14, label %15, label %18\n"]
  86. 10 -->|true| 15
  87. 10 -->|false| 18
  88. 15["Block 15:\n %16 = load %struct._IO_FILE*, %struct._IO_FIL...\n %17 = call i32 (%struct._IO_FILE*, i8*, ...) ...\n br label %18\n"]
  89. 15 --> 18
  90. 18["Block 18:\n br label %20\n"]
  91. 18 --> 20
  92. 19["Block 19:\n store i8* null, i8** @globalErrorMessage, ali...\n br label %20\n"]
  93. 19 --> 20
  94. 20["Block 20:\n ret void\n"]:::critical
  95. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  96. ```
  97. ```mermaid: factorial
  98. graph TD
  99. 1["Block 1:\n %2 = alloca i32, align 4\n %3 = alloca i32, align 4\n %4 = alloca i32, align 4\n %5 = alloca i32, align 4\n store i32 %0, i32* %3, align 4\n %6 = load i32, i32* @recursionDepth, align 4\n %7 = add nsw i32 %6, 1\n store i32 %7, i32* @recursionDepth, align 4\n %8 = icmp sgt i32 %7, 1000\n br i1 %8, label %9, label %12\n"]:::critical
  100. 1 -->|true| 9
  101. 1 -->|false| 12
  102. 9["Block 9:\n call void @setErrorMessage(i8* getelementptr ...\n %10 = load i32, i32* @recursionDepth, align 4\n %11 = add nsw i32 %10, -1\n store i32 %11, i32* @recursionDepth, align 4\n store i32 -1, i32* %2, align 4\n br label %53\n"]
  103. 9 --> 53
  104. 12["Block 12:\n %13 = load i32, i32* %3, align 4\n %14 = icmp slt i32 %13, 0\n br i1 %14, label %15, label %18\n"]
  105. 12 -->|true| 15
  106. 12 -->|false| 18
  107. 15["Block 15:\n call void @setErrorMessage(i8* getelementptr ...\n %16 = load i32, i32* @recursionDepth, align 4\n %17 = add nsw i32 %16, -1\n store i32 %17, i32* @recursionDepth, align 4\n store i32 -1, i32* %2, align 4\n br label %53\n"]
  108. 15 --> 53
  109. 18["Block 18:\n %19 = load i32, i32* %3, align 4\n %20 = icmp sgt i32 %19, 20\n br i1 %20, label %21, label %24\n"]
  110. 18 -->|true| 21
  111. 18 -->|false| 24
  112. 21["Block 21:\n call void @setErrorMessage(i8* getelementptr ...\n %22 = load i32, i32* @recursionDepth, align 4\n %23 = add nsw i32 %22, -1\n store i32 %23, i32* @recursionDepth, align 4\n store i32 -1, i32* %2, align 4\n br label %53\n"]
  113. 21 --> 53
  114. 24["Block 24:\n %25 = load i32, i32* %3, align 4\n %26 = icmp sle i32 %25, 1\n br i1 %26, label %27, label %28\n"]
  115. 24 -->|true| 27
  116. 24 -->|false| 28
  117. 27["Block 27:\n store i32 1, i32* %4, align 4\n br label %49\n"]
  118. 27 --> 49
  119. 28["Block 28:\n %29 = load i32, i32* %3, align 4\n %30 = sub nsw i32 %29, 1\n %31 = call i32 @factorial(i32 %30)\n store i32 %31, i32* %5, align 4\n %32 = load i32, i32* %5, align 4\n %33 = icmp eq i32 %32, -1\n br i1 %33, label %34, label %37\n"]
  120. 28 -->|true| 34
  121. 28 -->|false| 37
  122. 34["Block 34:\n %35 = load i32, i32* @recursionDepth, align 4\n %36 = add nsw i32 %35, -1\n store i32 %36, i32* @recursionDepth, align 4\n store i32 -1, i32* %2, align 4\n br label %53\n"]
  123. 34 --> 53
  124. 37["Block 37:\n %38 = load i32, i32* %5, align 4\n %39 = load i32, i32* %3, align 4\n %40 = sdiv i32 2147483647, %39\n %41 = icmp sgt i32 %38, %40\n br i1 %41, label %42, label %45\n"]
  125. 37 -->|true| 42
  126. 37 -->|false| 45
  127. 42["Block 42:\n call void @setErrorMessage(i8* getelementptr ...\n %43 = load i32, i32* @recursionDepth, align 4\n %44 = add nsw i32 %43, -1\n store i32 %44, i32* @recursionDepth, align 4\n store i32 -1, i32* %2, align 4\n br label %53\n"]
  128. 42 --> 53
  129. 45["Block 45:\n %46 = load i32, i32* %3, align 4\n %47 = load i32, i32* %5, align 4\n %48 = mul nsw i32 %46, %47\n store i32 %48, i32* %4, align 4\n br label %49\n"]
  130. 45 --> 49
  131. 49["Block 49:\n %50 = load i32, i32* @recursionDepth, align 4\n %51 = add nsw i32 %50, -1\n store i32 %51, i32* @recursionDepth, align 4\n %52 = load i32, i32* %4, align 4\n store i32 %52, i32* %2, align 4\n br label %53\n"]
  132. 49 --> 53
  133. 53["Block 53:\n %54 = load i32, i32* %2, align 4\n ret i32 %54\n"]:::critical
  134. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  135. ```
  136. ```mermaid: createDynamicArray
  137. graph TD
  138. 1["Block 1:\n %2 = alloca %struct.DynamicArray*, align 8\n %3 = alloca i32, align 4\n %4 = alloca %struct.DynamicArray*, align 8\n store i32 %0, i32* %3, align 4\n %5 = load i32, i32* %3, align 4\n %6 = icmp sle i32 %5, 0\n br i1 %6, label %7, label %8\n"]:::critical
  139. 1 -->|true| 7
  140. 1 -->|false| 8
  141. 7["Block 7:\n call void @setErrorMessage(i8* getelementptr ...\n store %struct.DynamicArray* null, %struct.Dyn...\n br label %44\n"]
  142. 7 --> 44
  143. 8["Block 8:\n %9 = load i32, i32* %3, align 4\n %10 = icmp sgt i32 %9, 1000\n br i1 %10, label %11, label %12\n"]
  144. 8 -->|true| 11
  145. 8 -->|false| 12
  146. 11["Block 11:\n call void @setErrorMessage(i8* getelementptr ...\n store %struct.DynamicArray* null, %struct.Dyn...\n br label %44\n"]
  147. 11 --> 44
  148. 12["Block 12:\n %13 = call noalias i8* @malloc(i64 24) #7\n %14 = bitcast i8* %13 to %struct.DynamicArray*\n store %struct.DynamicArray* %14, %struct.Dyna...\n %15 = load %struct.DynamicArray*, %struct.Dyn...\n %16 = icmp ne %struct.DynamicArray* %15, null\n br i1 %16, label %18, label %17\n"]
  149. 12 -->|true| 18
  150. 12 -->|false| 17
  151. 17["Block 17:\n call void @setErrorMessage(i8* getelementptr ...\n store %struct.DynamicArray* null, %struct.Dyn...\n br label %44\n"]
  152. 17 --> 44
  153. 18["Block 18:\n %19 = load i32, i32* %3, align 4\n %20 = sext i32 %19 to i64\n %21 = mul i64 4, %20\n %22 = call noalias i8* @malloc(i64 %21) #7\n %23 = bitcast i8* %22 to i32*\n %24 = load %struct.DynamicArray*, %struct.Dyn...\n %25 = getelementptr inbounds %struct.DynamicA...\n store i32* %23, i32** %25, align 8\n %26 = load %struct.DynamicArray*, %struct.Dyn...\n %27 = getelementptr inbounds %struct.DynamicA...\n %28 = load i32*, i32** %27, align 8\n %29 = icmp ne i32* %28, null\n br i1 %29, label %33, label %30\n"]
  154. 18 -->|true| 33
  155. 18 -->|false| 30
  156. 30["Block 30:\n %31 = load %struct.DynamicArray*, %struct.Dyn...\n %32 = bitcast %struct.DynamicArray* %31 to i8*\n call void @free(i8* %32) #7\n call void @setErrorMessage(i8* getelementptr ...\n store %struct.DynamicArray* null, %struct.Dyn...\n br label %44\n"]
  157. 30 --> 44
  158. 33["Block 33:\n %34 = load %struct.DynamicArray*, %struct.Dyn...\n %35 = getelementptr inbounds %struct.DynamicA...\n store i32 0, i32* %35, align 8\n %36 = load i32, i32* %3, align 4\n %37 = load %struct.DynamicArray*, %struct.Dyn...\n %38 = getelementptr inbounds %struct.DynamicA...\n store i32 %36, i32* %38, align 4\n %39 = load %struct.DynamicArray*, %struct.Dyn...\n %40 = getelementptr inbounds %struct.DynamicA...\n store i32 1, i32* %40, align 8\n %41 = load %struct.DynamicArray*, %struct.Dyn...\n %42 = getelementptr inbounds %struct.DynamicA...\n store i32 0, i32* %42, align 4\n %43 = load %struct.DynamicArray*, %struct.Dyn...\n store %struct.DynamicArray* %43, %struct.Dyna...\n br label %44\n"]
  159. 33 --> 44
  160. 44["Block 44:\n %45 = load %struct.DynamicArray*, %struct.Dyn...\n ret %struct.DynamicArray* %45\n"]:::critical
  161. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  162. ```
  163. ```mermaid: pushBack
  164. graph TD
  165. 2["Block 2:\n %3 = alloca %struct.DynamicArray*, align 8\n %4 = alloca i32, align 4\n %5 = alloca i32, align 4\n %6 = alloca i32*, align 8\n store %struct.DynamicArray* %0, %struct.Dynam...\n store i32 %1, i32* %4, align 4\n %7 = load %struct.DynamicArray*, %struct.Dyna...\n %8 = icmp ne %struct.DynamicArray* %7, null\n br i1 %8, label %10, label %9\n"]:::critical
  166. 2 -->|true| 10
  167. 2 -->|false| 9
  168. 9["Block 9:\n call void @setErrorMessage(i8* getelementptr ...\n br label %91\n"]
  169. 9 --> 91
  170. 10["Block 10:\n %11 = load %struct.DynamicArray*, %struct.Dyn...\n %12 = getelementptr inbounds %struct.DynamicA...\n %13 = load i32, i32* %12, align 8\n %14 = icmp sge i32 %13, 1000\n br i1 %14, label %15, label %16\n"]
  171. 10 -->|true| 15
  172. 10 -->|false| 16
  173. 15["Block 15:\n call void @setErrorMessage(i8* getelementptr ...\n br label %91\n"]
  174. 15 --> 91
  175. 16["Block 16:\n %17 = load %struct.DynamicArray*, %struct.Dyn...\n %18 = getelementptr inbounds %struct.DynamicA...\n %19 = load i32, i32* %18, align 8\n %20 = load %struct.DynamicArray*, %struct.Dyn...\n %21 = getelementptr inbounds %struct.DynamicA...\n %22 = load i32, i32* %21, align 4\n %23 = icmp sge i32 %19, %22\n br i1 %23, label %24, label %52\n"]
  176. 16 -->|true| 24
  177. 16 -->|false| 52
  178. 24["Block 24:\n %25 = load %struct.DynamicArray*, %struct.Dyn...\n %26 = getelementptr inbounds %struct.DynamicA...\n %27 = load i32, i32* %26, align 4\n %28 = mul nsw i32 %27, 2\n store i32 %28, i32* %5, align 4\n %29 = load i32, i32* %5, align 4\n %30 = icmp sgt i32 %29, 1000\n br i1 %30, label %31, label %32\n"]
  179. 24 -->|true| 31
  180. 24 -->|false| 32
  181. 31["Block 31:\n store i32 1000, i32* %5, align 4\n br label %32\n"]
  182. 31 --> 32
  183. 32["Block 32:\n %33 = load %struct.DynamicArray*, %struct.Dyn...\n %34 = getelementptr inbounds %struct.DynamicA...\n %35 = load i32*, i32** %34, align 8\n %36 = bitcast i32* %35 to i8*\n %37 = load i32, i32* %5, align 4\n %38 = sext i32 %37 to i64\n %39 = mul i64 4, %38\n %40 = call i8* @realloc(i8* %36, i64 %39) #7\n %41 = bitcast i8* %40 to i32*\n store i32* %41, i32** %6, align 8\n %42 = load i32*, i32** %6, align 8\n %43 = icmp ne i32* %42, null\n br i1 %43, label %45, label %44\n"]
  184. 32 -->|true| 45
  185. 32 -->|false| 44
  186. 44["Block 44:\n call void @setErrorMessage(i8* getelementptr ...\n br label %91\n"]
  187. 44 --> 91
  188. 45["Block 45:\n %46 = load i32*, i32** %6, align 8\n %47 = load %struct.DynamicArray*, %struct.Dyn...\n %48 = getelementptr inbounds %struct.DynamicA...\n store i32* %46, i32** %48, align 8\n %49 = load i32, i32* %5, align 4\n %50 = load %struct.DynamicArray*, %struct.Dyn...\n %51 = getelementptr inbounds %struct.DynamicA...\n store i32 %49, i32* %51, align 4\n br label %52\n"]
  189. 45 --> 52
  190. 52["Block 52:\n %53 = load %struct.DynamicArray*, %struct.Dyn...\n %54 = getelementptr inbounds %struct.DynamicA...\n %55 = load i32, i32* %54, align 8\n %56 = icmp ne i32 %55, 0\n br i1 %56, label %57, label %78\n"]
  191. 52 -->|true| 57
  192. 52 -->|false| 78
  193. 57["Block 57:\n %58 = load %struct.DynamicArray*, %struct.Dyn...\n %59 = getelementptr inbounds %struct.DynamicA...\n %60 = load i32, i32* %59, align 8\n %61 = icmp sgt i32 %60, 0\n br i1 %61, label %62, label %78\n"]
  194. 57 -->|true| 62
  195. 57 -->|false| 78
  196. 62["Block 62:\n %63 = load i32, i32* %4, align 4\n %64 = load %struct.DynamicArray*, %struct.Dyn...\n %65 = getelementptr inbounds %struct.DynamicA...\n %66 = load i32*, i32** %65, align 8\n %67 = load %struct.DynamicArray*, %struct.Dyn...\n %68 = getelementptr inbounds %struct.DynamicA...\n %69 = load i32, i32* %68, align 8\n %70 = sub nsw i32 %69, 1\n %71 = sext i32 %70 to i64\n %72 = getelementptr inbounds i32, i32* %66, i...\n %73 = load i32, i32* %72, align 4\n %74 = icmp slt i32 %63, %73\n br i1 %74, label %75, label %78\n"]
  197. 62 -->|true| 75
  198. 62 -->|false| 78
  199. 75["Block 75:\n %76 = load %struct.DynamicArray*, %struct.Dyn...\n %77 = getelementptr inbounds %struct.DynamicA...\n store i32 0, i32* %77, align 8\n br label %78\n"]
  200. 75 --> 78
  201. 78["Block 78:\n %79 = load i32, i32* %4, align 4\n %80 = load %struct.DynamicArray*, %struct.Dyn...\n %81 = getelementptr inbounds %struct.DynamicA...\n %82 = load i32*, i32** %81, align 8\n %83 = load %struct.DynamicArray*, %struct.Dyn...\n %84 = getelementptr inbounds %struct.DynamicA...\n %85 = load i32, i32* %84, align 8\n %86 = add nsw i32 %85, 1\n store i32 %86, i32* %84, align 8\n %87 = sext i32 %85 to i64\n %88 = getelementptr inbounds i32, i32* %82, i...\n store i32 %79, i32* %88, align 4\n %89 = load %struct.DynamicArray*, %struct.Dyn...\n %90 = getelementptr inbounds %struct.DynamicA...\n store i32 1, i32* %90, align 4\n br label %91\n"]
  202. 78 --> 91
  203. 91["Block 91:\n ret void\n"]:::critical
  204. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  205. ```
  206. ```mermaid: quickSort
  207. graph TD
  208. 4["Block 4:\n %5 = alloca i32*, align 8\n %6 = alloca i32, align 4\n %7 = alloca i32, align 4\n %8 = alloca i32*, align 8\n %9 = alloca i32, align 4\n %10 = alloca i32, align 4\n %11 = alloca i32, align 4\n %12 = alloca i32, align 4\n %13 = alloca i32, align 4\n %14 = alloca i32, align 4\n store i32* %0, i32** %5, align 8\n store i32 %1, i32* %6, align 4\n store i32 %2, i32* %7, align 4\n store i32* %3, i32** %8, align 8\n %15 = load i32, i32* @recursionDepth, align 4\n %16 = add nsw i32 %15, 1\n store i32 %16, i32* @recursionDepth, align 4\n %17 = icmp sgt i32 %16, 1000\n br i1 %17, label %18, label %22\n"]:::critical
  209. 4 -->|true| 18
  210. 4 -->|false| 22
  211. 18["Block 18:\n call void @setErrorMessage(i8* getelementptr ...\n %19 = load i32*, i32** %8, align 8\n store i32 1, i32* %19, align 4\n %20 = load i32, i32* @recursionDepth, align 4\n %21 = add nsw i32 %20, -1\n store i32 %21, i32* @recursionDepth, align 4\n br label %247\n"]
  212. 18 --> 247
  213. 22["Block 22:\n %23 = load i32*, i32** %5, align 8\n %24 = icmp ne i32* %23, null\n br i1 %24, label %29, label %25\n"]
  214. 22 -->|true| 29
  215. 22 -->|false| 25
  216. 25["Block 25:\n call void @setErrorMessage(i8* getelementptr ...\n %26 = load i32*, i32** %8, align 8\n store i32 1, i32* %26, align 4\n %27 = load i32, i32* @recursionDepth, align 4\n %28 = add nsw i32 %27, -1\n store i32 %28, i32* @recursionDepth, align 4\n br label %247\n"]
  217. 25 --> 247
  218. 29["Block 29:\n %30 = load i32, i32* %6, align 4\n %31 = icmp slt i32 %30, 0\n br i1 %31, label %41, label %32\n"]
  219. 29 -->|true| 41
  220. 29 -->|false| 32
  221. 32["Block 32:\n %33 = load i32, i32* %7, align 4\n %34 = icmp slt i32 %33, 0\n br i1 %34, label %41, label %35\n"]
  222. 32 -->|true| 41
  223. 32 -->|false| 35
  224. 35["Block 35:\n %36 = load i32, i32* %6, align 4\n %37 = icmp sge i32 %36, 1000\n br i1 %37, label %41, label %38\n"]
  225. 35 -->|true| 41
  226. 35 -->|false| 38
  227. 38["Block 38:\n %39 = load i32, i32* %7, align 4\n %40 = icmp sge i32 %39, 1000\n br i1 %40, label %41, label %45\n"]
  228. 38 -->|true| 41
  229. 38 -->|false| 45
  230. 41["Block 41:\n call void @setErrorMessage(i8* getelementptr ...\n %42 = load i32*, i32** %8, align 8\n store i32 1, i32* %42, align 4\n %43 = load i32, i32* @recursionDepth, align 4\n %44 = add nsw i32 %43, -1\n store i32 %44, i32* @recursionDepth, align 4\n br label %247\n"]
  231. 41 --> 247
  232. 45["Block 45:\n %46 = load i32, i32* %6, align 4\n %47 = load i32, i32* %7, align 4\n %48 = icmp slt i32 %46, %47\n br i1 %48, label %49, label %244\n"]
  233. 45 -->|true| 49
  234. 45 -->|false| 244
  235. 49["Block 49:\n %50 = load i32, i32* %6, align 4\n %51 = load i32, i32* %7, align 4\n %52 = load i32, i32* %6, align 4\n %53 = sub nsw i32 %51, %52\n %54 = sdiv i32 %53, 2\n %55 = add nsw i32 %50, %54\n store i32 %55, i32* %9, align 4\n %56 = load i32*, i32** %5, align 8\n %57 = load i32, i32* %6, align 4\n %58 = sext i32 %57 to i64\n %59 = getelementptr inbounds i32, i32* %56, i...\n %60 = load i32, i32* %59, align 4\n %61 = load i32*, i32** %5, align 8\n %62 = load i32, i32* %9, align 4\n %63 = sext i32 %62 to i64\n %64 = getelementptr inbounds i32, i32* %61, i...\n %65 = load i32, i32* %64, align 4\n %66 = icmp sle i32 %60, %65\n br i1 %66, label %67, label %99\n"]
  236. 49 -->|true| 67
  237. 49 -->|false| 99
  238. 67["Block 67:\n %68 = load i32*, i32** %5, align 8\n %69 = load i32, i32* %9, align 4\n %70 = sext i32 %69 to i64\n %71 = getelementptr inbounds i32, i32* %68, i...\n %72 = load i32, i32* %71, align 4\n %73 = load i32*, i32** %5, align 8\n %74 = load i32, i32* %7, align 4\n %75 = sext i32 %74 to i64\n %76 = getelementptr inbounds i32, i32* %73, i...\n %77 = load i32, i32* %76, align 4\n %78 = icmp sle i32 %72, %77\n br i1 %78, label %79, label %81\n"]
  239. 67 -->|true| 79
  240. 67 -->|false| 81
  241. 79["Block 79:\n %80 = load i32, i32* %9, align 4\n store i32 %80, i32* %10, align 4\n br label %98\n"]
  242. 79 --> 98
  243. 81["Block 81:\n %82 = load i32*, i32** %5, align 8\n %83 = load i32, i32* %6, align 4\n %84 = sext i32 %83 to i64\n %85 = getelementptr inbounds i32, i32* %82, i...\n %86 = load i32, i32* %85, align 4\n %87 = load i32*, i32** %5, align 8\n %88 = load i32, i32* %7, align 4\n %89 = sext i32 %88 to i64\n %90 = getelementptr inbounds i32, i32* %87, i...\n %91 = load i32, i32* %90, align 4\n %92 = icmp sle i32 %86, %91\n br i1 %92, label %93, label %95\n"]
  244. 81 -->|true| 93
  245. 81 -->|false| 95
  246. 93["Block 93:\n %94 = load i32, i32* %7, align 4\n store i32 %94, i32* %10, align 4\n br label %97\n"]
  247. 93 --> 97
  248. 95["Block 95:\n %96 = load i32, i32* %6, align 4\n store i32 %96, i32* %10, align 4\n br label %97\n"]
  249. 95 --> 97
  250. 97["Block 97:\n br label %98\n"]
  251. 97 --> 98
  252. 98["Block 98:\n br label %131\n"]
  253. 98 --> 131
  254. 99["Block 99:\n %100 = load i32*, i32** %5, align 8\n %101 = load i32, i32* %6, align 4\n %102 = sext i32 %101 to i64\n %103 = getelementptr inbounds i32, i32* %100,...\n %104 = load i32, i32* %103, align 4\n %105 = load i32*, i32** %5, align 8\n %106 = load i32, i32* %7, align 4\n %107 = sext i32 %106 to i64\n %108 = getelementptr inbounds i32, i32* %105,...\n %109 = load i32, i32* %108, align 4\n %110 = icmp sle i32 %104, %109\n br i1 %110, label %111, label %113\n"]
  255. 99 -->|true| 111
  256. 99 -->|false| 113
  257. 111["Block 111:\n %112 = load i32, i32* %6, align 4\n store i32 %112, i32* %10, align 4\n br label %130\n"]
  258. 111 --> 130
  259. 113["Block 113:\n %114 = load i32*, i32** %5, align 8\n %115 = load i32, i32* %9, align 4\n %116 = sext i32 %115 to i64\n %117 = getelementptr inbounds i32, i32* %114,...\n %118 = load i32, i32* %117, align 4\n %119 = load i32*, i32** %5, align 8\n %120 = load i32, i32* %7, align 4\n %121 = sext i32 %120 to i64\n %122 = getelementptr inbounds i32, i32* %119,...\n %123 = load i32, i32* %122, align 4\n %124 = icmp sle i32 %118, %123\n br i1 %124, label %125, label %127\n"]
  260. 113 -->|true| 125
  261. 113 -->|false| 127
  262. 125["Block 125:\n %126 = load i32, i32* %7, align 4\n store i32 %126, i32* %10, align 4\n br label %129\n"]
  263. 125 --> 129
  264. 127["Block 127:\n %128 = load i32, i32* %9, align 4\n store i32 %128, i32* %10, align 4\n br label %129\n"]
  265. 127 --> 129
  266. 129["Block 129:\n br label %130\n"]
  267. 129 --> 130
  268. 130["Block 130:\n br label %131\n"]
  269. 130 --> 131
  270. 131["Block 131:\n %132 = load i32*, i32** %5, align 8\n %133 = load i32, i32* %7, align 4\n %134 = sext i32 %133 to i64\n %135 = getelementptr inbounds i32, i32* %132,...\n %136 = load i32, i32* %135, align 4\n store i32 %136, i32* %11, align 4\n %137 = load i32*, i32** %5, align 8\n %138 = load i32, i32* %10, align 4\n %139 = sext i32 %138 to i64\n %140 = getelementptr inbounds i32, i32* %137,...\n %141 = load i32, i32* %140, align 4\n %142 = load i32*, i32** %5, align 8\n %143 = load i32, i32* %7, align 4\n %144 = sext i32 %143 to i64\n %145 = getelementptr inbounds i32, i32* %142,...\n store i32 %141, i32* %145, align 4\n %146 = load i32, i32* %11, align 4\n %147 = load i32*, i32** %5, align 8\n %148 = load i32, i32* %10, align 4\n %149 = sext i32 %148 to i64\n %150 = getelementptr inbounds i32, i32* %147,...\n store i32 %146, i32* %150, align 4\n %151 = load i32*, i32** %5, align 8\n %152 = load i32, i32* %7, align 4\n %153 = sext i32 %152 to i64\n %154 = getelementptr inbounds i32, i32* %151,...\n %155 = load i32, i32* %154, align 4\n store i32 %155, i32* %12, align 4\n %156 = load i32, i32* %6, align 4\n %157 = sub nsw i32 %156, 1\n store i32 %157, i32* %13, align 4\n %158 = load i32, i32* %6, align 4\n store i32 %158, i32* %14, align 4\n br label %159\n"]
  271. 131 --> 159
  272. 159["Block 159:\n %160 = load i32, i32* %14, align 4\n %161 = load i32, i32* %7, align 4\n %162 = icmp slt i32 %160, %161\n br i1 %162, label %163, label %199\n"]
  273. 159 -->|true| 163
  274. 159 -->|false| 199
  275. 163["Block 163:\n %164 = load i32*, i32** %5, align 8\n %165 = load i32, i32* %14, align 4\n %166 = sext i32 %165 to i64\n %167 = getelementptr inbounds i32, i32* %164,...\n %168 = load i32, i32* %167, align 4\n %169 = load i32, i32* %12, align 4\n %170 = icmp sle i32 %168, %169\n br i1 %170, label %171, label %195\n"]
  276. 163 -->|true| 171
  277. 163 -->|false| 195
  278. 171["Block 171:\n %172 = load i32, i32* %13, align 4\n %173 = add nsw i32 %172, 1\n store i32 %173, i32* %13, align 4\n %174 = load i32*, i32** %5, align 8\n %175 = load i32, i32* %13, align 4\n %176 = sext i32 %175 to i64\n %177 = getelementptr inbounds i32, i32* %174,...\n %178 = load i32, i32* %177, align 4\n store i32 %178, i32* %11, align 4\n %179 = load i32*, i32** %5, align 8\n %180 = load i32, i32* %14, align 4\n %181 = sext i32 %180 to i64\n %182 = getelementptr inbounds i32, i32* %179,...\n %183 = load i32, i32* %182, align 4\n %184 = load i32*, i32** %5, align 8\n %185 = load i32, i32* %13, align 4\n %186 = sext i32 %185 to i64\n %187 = getelementptr inbounds i32, i32* %184,...\n store i32 %183, i32* %187, align 4\n %188 = load i32, i32* %11, align 4\n %189 = load i32*, i32** %5, align 8\n %190 = load i32, i32* %14, align 4\n %191 = sext i32 %190 to i64\n %192 = getelementptr inbounds i32, i32* %189,...\n store i32 %188, i32* %192, align 4\n %193 = load i32, i32* @globalCounter, align 4\n %194 = add nsw i32 %193, 1\n store i32 %194, i32* @globalCounter, align 4\n br label %195\n"]
  279. 171 --> 195
  280. 195["Block 195:\n br label %196\n"]
  281. 195 --> 196
  282. 196["Block 196:\n %197 = load i32, i32* %14, align 4\n %198 = add nsw i32 %197, 1\n store i32 %198, i32* %14, align 4\n br label %159\n"]
  283. 196 --> 159
  284. 199["Block 199:\n %200 = load i32*, i32** %5, align 8\n %201 = load i32, i32* %13, align 4\n %202 = add nsw i32 %201, 1\n %203 = sext i32 %202 to i64\n %204 = getelementptr inbounds i32, i32* %200,...\n %205 = load i32, i32* %204, align 4\n store i32 %205, i32* %11, align 4\n %206 = load i32*, i32** %5, align 8\n %207 = load i32, i32* %7, align 4\n %208 = sext i32 %207 to i64\n %209 = getelementptr inbounds i32, i32* %206,...\n %210 = load i32, i32* %209, align 4\n %211 = load i32*, i32** %5, align 8\n %212 = load i32, i32* %13, align 4\n %213 = add nsw i32 %212, 1\n %214 = sext i32 %213 to i64\n %215 = getelementptr inbounds i32, i32* %211,...\n store i32 %210, i32* %215, align 4\n %216 = load i32, i32* %11, align 4\n %217 = load i32*, i32** %5, align 8\n %218 = load i32, i32* %7, align 4\n %219 = sext i32 %218 to i64\n %220 = getelementptr inbounds i32, i32* %217,...\n store i32 %216, i32* %220, align 4\n %221 = load i32*, i32** %5, align 8\n %222 = load i32, i32* %6, align 4\n %223 = load i32, i32* %13, align 4\n %224 = load i32*, i32** %8, align 8\n call void @quickSort(i32* %221, i32 %222, i32...\n %225 = load i32*, i32** %8, align 8\n %226 = load i32, i32* %225, align 4\n %227 = icmp ne i32 %226, 0\n br i1 %227, label %228, label %231\n"]
  285. 199 -->|true| 228
  286. 199 -->|false| 231
  287. 228["Block 228:\n %229 = load i32, i32* @recursionDepth, align 4\n %230 = add nsw i32 %229, -1\n store i32 %230, i32* @recursionDepth, align 4\n br label %247\n"]
  288. 228 --> 247
  289. 231["Block 231:\n %232 = load i32*, i32** %5, align 8\n %233 = load i32, i32* %13, align 4\n %234 = add nsw i32 %233, 2\n %235 = load i32, i32* %7, align 4\n %236 = load i32*, i32** %8, align 8\n call void @quickSort(i32* %232, i32 %234, i32...\n %237 = load i32*, i32** %8, align 8\n %238 = load i32, i32* %237, align 4\n %239 = icmp ne i32 %238, 0\n br i1 %239, label %240, label %243\n"]
  290. 231 -->|true| 240
  291. 231 -->|false| 243
  292. 240["Block 240:\n %241 = load i32, i32* @recursionDepth, align 4\n %242 = add nsw i32 %241, -1\n store i32 %242, i32* @recursionDepth, align 4\n br label %247\n"]
  293. 240 --> 247
  294. 243["Block 243:\n br label %244\n"]
  295. 243 --> 244
  296. 244["Block 244:\n %245 = load i32, i32* @recursionDepth, align 4\n %246 = add nsw i32 %245, -1\n store i32 %246, i32* @recursionDepth, align 4\n br label %247\n"]
  297. 244 --> 247
  298. 247["Block 247:\n ret void\n"]:::critical
  299. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  300. ```
  301. ```mermaid: createMatrix
  302. graph TD
  303. 2["Block 2:\n %3 = alloca %struct.Matrix*, align 8\n %4 = alloca i32, align 4\n %5 = alloca i32, align 4\n %6 = alloca %struct.Matrix*, align 8\n %7 = alloca i32, align 4\n %8 = alloca i32, align 4\n store i32 %0, i32* %4, align 4\n store i32 %1, i32* %5, align 4\n %9 = load i32, i32* %4, align 4\n %10 = icmp slt i32 %9, 1\n br i1 %10, label %14, label %11\n"]:::critical
  304. 2 -->|true| 14
  305. 2 -->|false| 11
  306. 11["Block 11:\n %12 = load i32, i32* %5, align 4\n %13 = icmp slt i32 %12, 1\n br i1 %13, label %14, label %15\n"]
  307. 11 -->|true| 14
  308. 11 -->|false| 15
  309. 14["Block 14:\n call void @setErrorMessage(i8* getelementptr ...\n store %struct.Matrix* null, %struct.Matrix** ...\n br label %111\n"]
  310. 14 --> 111
  311. 15["Block 15:\n %16 = load i32, i32* %4, align 4\n %17 = icmp sgt i32 %16, 100\n br i1 %17, label %21, label %18\n"]
  312. 15 -->|true| 21
  313. 15 -->|false| 18
  314. 18["Block 18:\n %19 = load i32, i32* %5, align 4\n %20 = icmp sgt i32 %19, 100\n br i1 %20, label %21, label %22\n"]
  315. 18 -->|true| 21
  316. 18 -->|false| 22
  317. 21["Block 21:\n call void @setErrorMessage(i8* getelementptr ...\n store %struct.Matrix* null, %struct.Matrix** ...\n br label %111\n"]
  318. 21 --> 111
  319. 22["Block 22:\n %23 = call noalias i8* @malloc(i64 32) #7\n %24 = bitcast i8* %23 to %struct.Matrix*\n store %struct.Matrix* %24, %struct.Matrix** %...\n %25 = load %struct.Matrix*, %struct.Matrix** ...\n %26 = icmp ne %struct.Matrix* %25, null\n br i1 %26, label %28, label %27\n"]
  320. 22 -->|true| 28
  321. 22 -->|false| 27
  322. 27["Block 27:\n call void @setErrorMessage(i8* getelementptr ...\n store %struct.Matrix* null, %struct.Matrix** ...\n br label %111\n"]
  323. 27 --> 111
  324. 28["Block 28:\n %29 = load i32, i32* %4, align 4\n %30 = load %struct.Matrix*, %struct.Matrix** ...\n %31 = getelementptr inbounds %struct.Matrix, ...\n store i32 %29, i32* %31, align 8\n %32 = load i32, i32* %5, align 4\n %33 = load %struct.Matrix*, %struct.Matrix** ...\n %34 = getelementptr inbounds %struct.Matrix, ...\n store i32 %32, i32* %34, align 4\n %35 = load i32, i32* %4, align 4\n %36 = load i32, i32* %5, align 4\n %37 = icmp eq i32 %35, %36\n %38 = zext i1 %37 to i32\n %39 = load %struct.Matrix*, %struct.Matrix** ...\n %40 = getelementptr inbounds %struct.Matrix, ...\n store i32 %38, i32* %40, align 8\n %41 = load %struct.Matrix*, %struct.Matrix** ...\n %42 = getelementptr inbounds %struct.Matrix, ...\n store double 0.000000e+00, double* %42, align 8\n %43 = load i32, i32* %4, align 4\n %44 = sext i32 %43 to i64\n %45 = mul i64 %44, 8\n %46 = call noalias i8* @malloc(i64 %45) #7\n %47 = bitcast i8* %46 to i32**\n %48 = load %struct.Matrix*, %struct.Matrix** ...\n %49 = getelementptr inbounds %struct.Matrix, ...\n store i32** %47, i32*** %49, align 8\n %50 = load %struct.Matrix*, %struct.Matrix** ...\n %51 = getelementptr inbounds %struct.Matrix, ...\n %52 = load i32**, i32*** %51, align 8\n %53 = icmp ne i32** %52, null\n br i1 %53, label %57, label %54\n"]
  325. 28 -->|true| 57
  326. 28 -->|false| 54
  327. 54["Block 54:\n %55 = load %struct.Matrix*, %struct.Matrix** ...\n %56 = bitcast %struct.Matrix* %55 to i8*\n call void @free(i8* %56) #7\n call void @setErrorMessage(i8* getelementptr ...\n store %struct.Matrix* null, %struct.Matrix** ...\n br label %111\n"]
  328. 54 --> 111
  329. 57["Block 57:\n store i32 0, i32* %7, align 4\n br label %58\n"]
  330. 57 --> 58
  331. 58["Block 58:\n %59 = load i32, i32* %7, align 4\n %60 = load i32, i32* %4, align 4\n %61 = icmp slt i32 %59, %60\n br i1 %61, label %62, label %109\n"]
  332. 58 -->|true| 62
  333. 58 -->|false| 109
  334. 62["Block 62:\n %63 = load i32, i32* %5, align 4\n %64 = sext i32 %63 to i64\n %65 = call noalias i8* @calloc(i64 %64, i64 4...\n %66 = bitcast i8* %65 to i32*\n %67 = load %struct.Matrix*, %struct.Matrix** ...\n %68 = getelementptr inbounds %struct.Matrix, ...\n %69 = load i32**, i32*** %68, align 8\n %70 = load i32, i32* %7, align 4\n %71 = sext i32 %70 to i64\n %72 = getelementptr inbounds i32*, i32** %69,...\n store i32* %66, i32** %72, align 8\n %73 = load %struct.Matrix*, %struct.Matrix** ...\n %74 = getelementptr inbounds %struct.Matrix, ...\n %75 = load i32**, i32*** %74, align 8\n %76 = load i32, i32* %7, align 4\n %77 = sext i32 %76 to i64\n %78 = getelementptr inbounds i32*, i32** %75,...\n %79 = load i32*, i32** %78, align 8\n %80 = icmp ne i32* %79, null\n br i1 %80, label %105, label %81\n"]
  335. 62 -->|true| 105
  336. 62 -->|false| 81
  337. 81["Block 81:\n store i32 0, i32* %8, align 4\n br label %82\n"]
  338. 81 --> 82
  339. 82["Block 82:\n %83 = load i32, i32* %8, align 4\n %84 = load i32, i32* %7, align 4\n %85 = icmp slt i32 %83, %84\n br i1 %85, label %86, label %98\n"]
  340. 82 -->|true| 86
  341. 82 -->|false| 98
  342. 86["Block 86:\n %87 = load %struct.Matrix*, %struct.Matrix** ...\n %88 = getelementptr inbounds %struct.Matrix, ...\n %89 = load i32**, i32*** %88, align 8\n %90 = load i32, i32* %8, align 4\n %91 = sext i32 %90 to i64\n %92 = getelementptr inbounds i32*, i32** %89,...\n %93 = load i32*, i32** %92, align 8\n %94 = bitcast i32* %93 to i8*\n call void @free(i8* %94) #7\n br label %95\n"]
  343. 86 --> 95
  344. 95["Block 95:\n %96 = load i32, i32* %8, align 4\n %97 = add nsw i32 %96, 1\n store i32 %97, i32* %8, align 4\n br label %82\n"]
  345. 95 --> 82
  346. 98["Block 98:\n %99 = load %struct.Matrix*, %struct.Matrix** ...\n %100 = getelementptr inbounds %struct.Matrix,...\n %101 = load i32**, i32*** %100, align 8\n %102 = bitcast i32** %101 to i8*\n call void @free(i8* %102) #7\n %103 = load %struct.Matrix*, %struct.Matrix**...\n %104 = bitcast %struct.Matrix* %103 to i8*\n call void @free(i8* %104) #7\n call void @setErrorMessage(i8* getelementptr ...\n store %struct.Matrix* null, %struct.Matrix** ...\n br label %111\n"]
  347. 98 --> 111
  348. 105["Block 105:\n br label %106\n"]
  349. 105 --> 106
  350. 106["Block 106:\n %107 = load i32, i32* %7, align 4\n %108 = add nsw i32 %107, 1\n store i32 %108, i32* %7, align 4\n br label %58\n"]
  351. 106 --> 58
  352. 109["Block 109:\n %110 = load %struct.Matrix*, %struct.Matrix**...\n store %struct.Matrix* %110, %struct.Matrix** ...\n br label %111\n"]
  353. 109 --> 111
  354. 111["Block 111:\n %112 = load %struct.Matrix*, %struct.Matrix**...\n ret %struct.Matrix* %112\n"]:::critical
  355. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  356. ```
  357. ```mermaid: multiplyMatrices
  358. graph TD
  359. 2["Block 2:\n %3 = alloca %struct.Matrix*, align 8\n %4 = alloca %struct.Matrix*, align 8\n %5 = alloca %struct.Matrix*, align 8\n %6 = alloca %struct.Matrix*, align 8\n %7 = alloca i64, align 8\n %8 = alloca i32, align 4\n %9 = alloca i32, align 4\n %10 = alloca i64, align 8\n %11 = alloca i32, align 4\n %12 = alloca i64, align 8\n %13 = alloca i32, align 4\n store %struct.Matrix* %0, %struct.Matrix** %4...\n store %struct.Matrix* %1, %struct.Matrix** %5...\n %14 = load %struct.Matrix*, %struct.Matrix** ...\n %15 = icmp ne %struct.Matrix* %14, null\n br i1 %15, label %16, label %19\n"]:::critical
  360. 2 -->|true| 16
  361. 2 -->|false| 19
  362. 16["Block 16:\n %17 = load %struct.Matrix*, %struct.Matrix** ...\n %18 = icmp ne %struct.Matrix* %17, null\n br i1 %18, label %20, label %19\n"]
  363. 16 -->|true| 20
  364. 16 -->|false| 19
  365. 19["Block 19:\n call void @setErrorMessage(i8* getelementptr ...\n store %struct.Matrix* null, %struct.Matrix** ...\n br label %209\n"]
  366. 19 --> 209
  367. 20["Block 20:\n %21 = load %struct.Matrix*, %struct.Matrix** ...\n %22 = getelementptr inbounds %struct.Matrix, ...\n %23 = load i32**, i32*** %22, align 8\n %24 = icmp ne i32** %23, null\n br i1 %24, label %25, label %30\n"]
  368. 20 -->|true| 25
  369. 20 -->|false| 30
  370. 25["Block 25:\n %26 = load %struct.Matrix*, %struct.Matrix** ...\n %27 = getelementptr inbounds %struct.Matrix, ...\n %28 = load i32**, i32*** %27, align 8\n %29 = icmp ne i32** %28, null\n br i1 %29, label %31, label %30\n"]
  371. 25 -->|true| 31
  372. 25 -->|false| 30
  373. 30["Block 30:\n call void @setErrorMessage(i8* getelementptr ...\n store %struct.Matrix* null, %struct.Matrix** ...\n br label %209\n"]
  374. 30 --> 209
  375. 31["Block 31:\n %32 = load %struct.Matrix*, %struct.Matrix** ...\n %33 = getelementptr inbounds %struct.Matrix, ...\n %34 = load i32, i32* %33, align 4\n %35 = load %struct.Matrix*, %struct.Matrix** ...\n %36 = getelementptr inbounds %struct.Matrix, ...\n %37 = load i32, i32* %36, align 8\n %38 = icmp ne i32 %34, %37\n br i1 %38, label %39, label %40\n"]
  376. 31 -->|true| 39
  377. 31 -->|false| 40
  378. 39["Block 39:\n call void @setErrorMessage(i8* getelementptr ...\n store %struct.Matrix* null, %struct.Matrix** ...\n br label %209\n"]
  379. 39 --> 209
  380. 40["Block 40:\n %41 = load %struct.Matrix*, %struct.Matrix** ...\n %42 = getelementptr inbounds %struct.Matrix, ...\n %43 = load i32, i32* %42, align 4\n %44 = icmp sgt i32 %43, 100\n br i1 %44, label %50, label %45\n"]
  381. 40 -->|true| 50
  382. 40 -->|false| 45
  383. 45["Block 45:\n %46 = load %struct.Matrix*, %struct.Matrix** ...\n %47 = getelementptr inbounds %struct.Matrix, ...\n %48 = load i32, i32* %47, align 8\n %49 = icmp sgt i32 %48, 100\n br i1 %49, label %50, label %51\n"]
  384. 45 -->|true| 50
  385. 45 -->|false| 51
  386. 50["Block 50:\n call void @setErrorMessage(i8* getelementptr ...\n store %struct.Matrix* null, %struct.Matrix** ...\n br label %209\n"]
  387. 50 --> 209
  388. 51["Block 51:\n %52 = load %struct.Matrix*, %struct.Matrix** ...\n %53 = getelementptr inbounds %struct.Matrix, ...\n %54 = load i32, i32* %53, align 8\n %55 = load %struct.Matrix*, %struct.Matrix** ...\n %56 = getelementptr inbounds %struct.Matrix, ...\n %57 = load i32, i32* %56, align 4\n %58 = call %struct.Matrix* @createMatrix(i32 ...\n store %struct.Matrix* %58, %struct.Matrix** %...\n %59 = load %struct.Matrix*, %struct.Matrix** ...\n %60 = icmp ne %struct.Matrix* %59, null\n br i1 %60, label %62, label %61\n"]
  389. 51 -->|true| 62
  390. 51 -->|false| 61
  391. 61["Block 61:\n store %struct.Matrix* null, %struct.Matrix** ...\n br label %209\n"]
  392. 61 --> 209
  393. 62["Block 62:\n store i64 0, i64* %7, align 8\n store i32 0, i32* %8, align 4\n br label %63\n"]
  394. 62 --> 63
  395. 63["Block 63:\n %64 = load i32, i32* %8, align 4\n %65 = load %struct.Matrix*, %struct.Matrix** ...\n %66 = getelementptr inbounds %struct.Matrix, ...\n %67 = load i32, i32* %66, align 8\n %68 = icmp slt i32 %64, %67\n br i1 %68, label %69, label %197\n"]
  396. 63 -->|true| 69
  397. 63 -->|false| 197
  398. 69["Block 69:\n store i32 0, i32* %9, align 4\n br label %70\n"]
  399. 69 --> 70
  400. 70["Block 70:\n %71 = load i32, i32* %9, align 4\n %72 = load %struct.Matrix*, %struct.Matrix** ...\n %73 = getelementptr inbounds %struct.Matrix, ...\n %74 = load i32, i32* %73, align 4\n %75 = icmp slt i32 %71, %74\n br i1 %75, label %76, label %193\n"]
  401. 70 -->|true| 76
  402. 70 -->|false| 193
  403. 76["Block 76:\n store i64 0, i64* %10, align 8\n store i32 0, i32* %11, align 4\n br label %77\n"]
  404. 76 --> 77
  405. 77["Block 77:\n %78 = load i32, i32* %11, align 4\n %79 = load %struct.Matrix*, %struct.Matrix** ...\n %80 = getelementptr inbounds %struct.Matrix, ...\n %81 = load i32, i32* %80, align 4\n %82 = icmp slt i32 %78, %81\n br i1 %82, label %83, label %147\n"]
  406. 77 -->|true| 83
  407. 77 -->|false| 147
  408. 83["Block 83:\n %84 = load %struct.Matrix*, %struct.Matrix** ...\n %85 = getelementptr inbounds %struct.Matrix, ...\n %86 = load i32**, i32*** %85, align 8\n %87 = load i32, i32* %8, align 4\n %88 = sext i32 %87 to i64\n %89 = getelementptr inbounds i32*, i32** %86,...\n %90 = load i32*, i32** %89, align 8\n %91 = load i32, i32* %11, align 4\n %92 = sext i32 %91 to i64\n %93 = getelementptr inbounds i32, i32* %90, i...\n %94 = load i32, i32* %93, align 4\n %95 = sext i32 %94 to i64\n %96 = load %struct.Matrix*, %struct.Matrix** ...\n %97 = getelementptr inbounds %struct.Matrix, ...\n %98 = load i32**, i32*** %97, align 8\n %99 = load i32, i32* %11, align 4\n %100 = sext i32 %99 to i64\n %101 = getelementptr inbounds i32*, i32** %98...\n %102 = load i32*, i32** %101, align 8\n %103 = load i32, i32* %9, align 4\n %104 = sext i32 %103 to i64\n %105 = getelementptr inbounds i32, i32* %102,...\n %106 = load i32, i32* %105, align 4\n %107 = sext i32 %106 to i64\n %108 = mul nsw i64 %95, %107\n store i64 %108, i64* %12, align 8\n %109 = load i64, i64* %12, align 8\n %110 = load i64, i64* %10, align 8\n %111 = add nsw i64 %110, %109\n store i64 %111, i64* %10, align 8\n %112 = load i64, i64* %10, align 8\n %113 = icmp sgt i64 %112, 2147483647\n br i1 %113, label %117, label %114\n"]
  409. 83 -->|true| 117
  410. 83 -->|false| 114
  411. 114["Block 114:\n %115 = load i64, i64* %10, align 8\n %116 = icmp slt i64 %115, -2147483648\n br i1 %116, label %117, label %143\n"]
  412. 114 -->|true| 117
  413. 114 -->|false| 143
  414. 117["Block 117:\n call void @setErrorMessage(i8* getelementptr ...\n store i32 0, i32* %13, align 4\n br label %118\n"]
  415. 117 --> 118
  416. 118["Block 118:\n %119 = load i32, i32* %13, align 4\n %120 = load %struct.Matrix*, %struct.Matrix**...\n %121 = getelementptr inbounds %struct.Matrix,...\n %122 = load i32, i32* %121, align 8\n %123 = icmp slt i32 %119, %122\n br i1 %123, label %124, label %136\n"]
  417. 118 -->|true| 124
  418. 118 -->|false| 136
  419. 124["Block 124:\n %125 = load %struct.Matrix*, %struct.Matrix**...\n %126 = getelementptr inbounds %struct.Matrix,...\n %127 = load i32**, i32*** %126, align 8\n %128 = load i32, i32* %13, align 4\n %129 = sext i32 %128 to i64\n %130 = getelementptr inbounds i32*, i32** %12...\n %131 = load i32*, i32** %130, align 8\n %132 = bitcast i32* %131 to i8*\n call void @free(i8* %132) #7\n br label %133\n"]
  420. 124 --> 133
  421. 133["Block 133:\n %134 = load i32, i32* %13, align 4\n %135 = add nsw i32 %134, 1\n store i32 %135, i32* %13, align 4\n br label %118\n"]
  422. 133 --> 118
  423. 136["Block 136:\n %137 = load %struct.Matrix*, %struct.Matrix**...\n %138 = getelementptr inbounds %struct.Matrix,...\n %139 = load i32**, i32*** %138, align 8\n %140 = bitcast i32** %139 to i8*\n call void @free(i8* %140) #7\n %141 = load %struct.Matrix*, %struct.Matrix**...\n %142 = bitcast %struct.Matrix* %141 to i8*\n call void @free(i8* %142) #7\n store %struct.Matrix* null, %struct.Matrix** ...\n br label %209\n"]
  424. 136 --> 209
  425. 143["Block 143:\n br label %144\n"]
  426. 143 --> 144
  427. 144["Block 144:\n %145 = load i32, i32* %11, align 4\n %146 = add nsw i32 %145, 1\n store i32 %146, i32* %11, align 4\n br label %77\n"]
  428. 144 --> 77
  429. 147["Block 147:\n %148 = load i64, i64* %10, align 8\n %149 = trunc i64 %148 to i32\n %150 = load %struct.Matrix*, %struct.Matrix**...\n %151 = getelementptr inbounds %struct.Matrix,...\n %152 = load i32**, i32*** %151, align 8\n %153 = load i32, i32* %8, align 4\n %154 = sext i32 %153 to i64\n %155 = getelementptr inbounds i32*, i32** %15...\n %156 = load i32*, i32** %155, align 8\n %157 = load i32, i32* %9, align 4\n %158 = sext i32 %157 to i64\n %159 = getelementptr inbounds i32, i32* %156,...\n store i32 %149, i32* %159, align 4\n %160 = load %struct.Matrix*, %struct.Matrix**...\n %161 = getelementptr inbounds %struct.Matrix,...\n %162 = load i32**, i32*** %161, align 8\n %163 = load i32, i32* %8, align 4\n %164 = sext i32 %163 to i64\n %165 = getelementptr inbounds i32*, i32** %16...\n %166 = load i32*, i32** %165, align 8\n %167 = load i32, i32* %9, align 4\n %168 = sext i32 %167 to i64\n %169 = getelementptr inbounds i32, i32* %166,...\n %170 = load i32, i32* %169, align 4\n %171 = call i32 @abs(i32 %170) #8\n %172 = sext i32 %171 to i64\n %173 = load i64, i64* %7, align 8\n %174 = icmp sgt i64 %172, %173\n br i1 %174, label %175, label %189\n"]
  430. 147 -->|true| 175
  431. 147 -->|false| 189
  432. 175["Block 175:\n %176 = load %struct.Matrix*, %struct.Matrix**...\n %177 = getelementptr inbounds %struct.Matrix,...\n %178 = load i32**, i32*** %177, align 8\n %179 = load i32, i32* %8, align 4\n %180 = sext i32 %179 to i64\n %181 = getelementptr inbounds i32*, i32** %17...\n %182 = load i32*, i32** %181, align 8\n %183 = load i32, i32* %9, align 4\n %184 = sext i32 %183 to i64\n %185 = getelementptr inbounds i32, i32* %182,...\n %186 = load i32, i32* %185, align 4\n %187 = call i32 @abs(i32 %186) #8\n %188 = sext i32 %187 to i64\n store i64 %188, i64* %7, align 8\n br label %189\n"]
  433. 175 --> 189
  434. 189["Block 189:\n br label %190\n"]
  435. 189 --> 190
  436. 190["Block 190:\n %191 = load i32, i32* %9, align 4\n %192 = add nsw i32 %191, 1\n store i32 %192, i32* %9, align 4\n br label %70\n"]
  437. 190 --> 70
  438. 193["Block 193:\n br label %194\n"]
  439. 193 --> 194
  440. 194["Block 194:\n %195 = load i32, i32* %8, align 4\n %196 = add nsw i32 %195, 1\n store i32 %196, i32* %8, align 4\n br label %63\n"]
  441. 194 --> 63
  442. 197["Block 197:\n %198 = load %struct.Matrix*, %struct.Matrix**...\n %199 = getelementptr inbounds %struct.Matrix,...\n %200 = load i32, i32* %199, align 8\n %201 = load %struct.Matrix*, %struct.Matrix**...\n %202 = getelementptr inbounds %struct.Matrix,...\n %203 = load i32, i32* %202, align 4\n %204 = icmp eq i32 %200, %203\n %205 = zext i1 %204 to i32\n %206 = load %struct.Matrix*, %struct.Matrix**...\n %207 = getelementptr inbounds %struct.Matrix,...\n store i32 %205, i32* %207, align 8\n %208 = load %struct.Matrix*, %struct.Matrix**...\n store %struct.Matrix* %208, %struct.Matrix** ...\n br label %209\n"]
  443. 197 --> 209
  444. 209["Block 209:\n %210 = load %struct.Matrix*, %struct.Matrix**...\n ret %struct.Matrix* %210\n"]:::critical
  445. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  446. ```
  447. ```mermaid: insertNode
  448. graph TD
  449. 2["Block 2:\n %3 = alloca %struct.Node*, align 8\n %4 = alloca %struct.Node*, align 8\n %5 = alloca i32, align 4\n %6 = alloca %struct.Node*, align 8\n %7 = alloca %struct.Node*, align 8\n %8 = alloca %struct.Node*, align 8\n %9 = alloca i32, align 4\n store %struct.Node* %0, %struct.Node** %4, al...\n store i32 %1, i32* %5, align 4\n %10 = call noalias i8* @malloc(i64 32) #7\n %11 = bitcast i8* %10 to %struct.Node*\n store %struct.Node* %11, %struct.Node** %6, a...\n %12 = load %struct.Node*, %struct.Node** %6, ...\n %13 = icmp ne %struct.Node* %12, null\n br i1 %13, label %16, label %14\n"]:::critical
  450. 2 -->|true| 16
  451. 2 -->|false| 14
  452. 14["Block 14:\n call void @setErrorMessage(i8* getelementptr ...\n %15 = load %struct.Node*, %struct.Node** %4, ...\n store %struct.Node* %15, %struct.Node** %3, a...\n br label %92\n"]
  453. 14 --> 92
  454. 16["Block 16:\n %17 = load i32, i32* %5, align 4\n %18 = load %struct.Node*, %struct.Node** %6, ...\n %19 = getelementptr inbounds %struct.Node, %s...\n store i32 %17, i32* %19, align 8\n %20 = load %struct.Node*, %struct.Node** %6, ...\n %21 = getelementptr inbounds %struct.Node, %s...\n store %struct.Node* null, %struct.Node** %21,...\n %22 = load %struct.Node*, %struct.Node** %6, ...\n %23 = getelementptr inbounds %struct.Node, %s...\n store %struct.Node* null, %struct.Node** %23,...\n %24 = load %struct.Node*, %struct.Node** %6, ...\n %25 = getelementptr inbounds %struct.Node, %s...\n store i32 0, i32* %25, align 8\n %26 = load %struct.Node*, %struct.Node** %4, ...\n %27 = icmp ne %struct.Node* %26, null\n br i1 %27, label %32, label %28\n"]
  455. 16 -->|true| 32
  456. 16 -->|false| 28
  457. 28["Block 28:\n %29 = load %struct.Node*, %struct.Node** %6, ...\n %30 = getelementptr inbounds %struct.Node, %s...\n store i32 0, i32* %30, align 4\n store i32 0, i32* @insertNode.maxDepth, align 4\n %31 = load %struct.Node*, %struct.Node** %6, ...\n store %struct.Node* %31, %struct.Node** %3, a...\n br label %92\n"]
  458. 28 --> 92
  459. 32["Block 32:\n %33 = load %struct.Node*, %struct.Node** %4, ...\n store %struct.Node* %33, %struct.Node** %7, a...\n store %struct.Node* null, %struct.Node** %8, ...\n store i32 0, i32* %9, align 4\n br label %34\n"]
  460. 32 --> 34
  461. 34["Block 34:\n %35 = load %struct.Node*, %struct.Node** %7, ...\n %36 = icmp ne %struct.Node* %35, null\n br i1 %36, label %37, label %43\n"]
  462. 34 -->|true| 37
  463. 34 -->|false| 43
  464. 37["Block 37:\n %38 = load %struct.Node*, %struct.Node** %7, ...\n %39 = getelementptr inbounds %struct.Node, %s...\n %40 = load i32, i32* %39, align 8\n %41 = load i32, i32* %5, align 4\n %42 = icmp slt i32 %40, %41\n br label %43\n"]
  465. 37 --> 43
  466. 43["Block 43:\n %44 = phi i1 [ false, %34 ], [ %42, %37 ]\n br i1 %44, label %45, label %59\n"]
  467. 43 -->|true| 45
  468. 43 -->|false| 59
  469. 45["Block 45:\n %46 = load %struct.Node*, %struct.Node** %7, ...\n store %struct.Node* %46, %struct.Node** %8, a...\n %47 = load %struct.Node*, %struct.Node** %7, ...\n %48 = getelementptr inbounds %struct.Node, %s...\n %49 = load %struct.Node*, %struct.Node** %48,...\n store %struct.Node* %49, %struct.Node** %7, a...\n %50 = load i32, i32* %9, align 4\n %51 = add nsw i32 %50, 1\n store i32 %51, i32* %9, align 4\n %52 = load i32, i32* %9, align 4\n %53 = icmp sgt i32 %52, 1000\n br i1 %53, label %54, label %58\n"]
  470. 45 -->|true| 54
  471. 45 -->|false| 58
  472. 54["Block 54:\n call void @setErrorMessage(i8* getelementptr ...\n %55 = load %struct.Node*, %struct.Node** %6, ...\n %56 = bitcast %struct.Node* %55 to i8*\n call void @free(i8* %56) #7\n %57 = load %struct.Node*, %struct.Node** %4, ...\n store %struct.Node* %57, %struct.Node** %3, a...\n br label %92\n"]
  473. 54 --> 92
  474. 58["Block 58:\n br label %34\n"]
  475. 58 --> 34
  476. 59["Block 59:\n %60 = load i32, i32* %9, align 4\n %61 = load i32, i32* @insertNode.maxDepth, al...\n %62 = icmp sgt i32 %60, %61\n br i1 %62, label %63, label %65\n"]
  477. 59 -->|true| 63
  478. 59 -->|false| 65
  479. 63["Block 63:\n %64 = load i32, i32* %9, align 4\n store i32 %64, i32* @insertNode.maxDepth, ali...\n br label %65\n"]
  480. 63 --> 65
  481. 65["Block 65:\n %66 = load i32, i32* %9, align 4\n %67 = load %struct.Node*, %struct.Node** %6, ...\n %68 = getelementptr inbounds %struct.Node, %s...\n store i32 %66, i32* %68, align 4\n %69 = load %struct.Node*, %struct.Node** %7, ...\n %70 = load %struct.Node*, %struct.Node** %6, ...\n %71 = getelementptr inbounds %struct.Node, %s...\n store %struct.Node* %69, %struct.Node** %71, ...\n %72 = load %struct.Node*, %struct.Node** %8, ...\n %73 = icmp ne %struct.Node* %72, null\n br i1 %73, label %74, label %81\n"]
  482. 65 -->|true| 74
  483. 65 -->|false| 81
  484. 74["Block 74:\n %75 = load %struct.Node*, %struct.Node** %6, ...\n %76 = load %struct.Node*, %struct.Node** %8, ...\n %77 = getelementptr inbounds %struct.Node, %s...\n store %struct.Node* %75, %struct.Node** %77, ...\n %78 = load %struct.Node*, %struct.Node** %8, ...\n %79 = load %struct.Node*, %struct.Node** %6, ...\n %80 = getelementptr inbounds %struct.Node, %s...\n store %struct.Node* %78, %struct.Node** %80, ...\n br label %83\n"]
  485. 74 --> 83
  486. 81["Block 81:\n %82 = load %struct.Node*, %struct.Node** %6, ...\n store %struct.Node* %82, %struct.Node** %3, a...\n br label %92\n"]
  487. 81 --> 92
  488. 83["Block 83:\n %84 = load %struct.Node*, %struct.Node** %7, ...\n %85 = icmp ne %struct.Node* %84, null\n br i1 %85, label %86, label %90\n"]
  489. 83 -->|true| 86
  490. 83 -->|false| 90
  491. 86["Block 86:\n %87 = load %struct.Node*, %struct.Node** %6, ...\n %88 = load %struct.Node*, %struct.Node** %7, ...\n %89 = getelementptr inbounds %struct.Node, %s...\n store %struct.Node* %87, %struct.Node** %89, ...\n br label %90\n"]
  492. 86 --> 90
  493. 90["Block 90:\n %91 = load %struct.Node*, %struct.Node** %4, ...\n store %struct.Node* %91, %struct.Node** %3, a...\n br label %92\n"]
  494. 90 --> 92
  495. 92["Block 92:\n %93 = load %struct.Node*, %struct.Node** %3, ...\n ret %struct.Node* %93\n"]:::critical
  496. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  497. ```
  498. ```mermaid: performSimpleCalculations
  499. graph TD
  500. 0["Block 0:\n %1 = alloca i32, align 4\n store i32 100, i32* %1, align 4\n %2 = load i32, i32* %1, align 4\n %3 = icmp sgt i32 %2, 50\n br i1 %3, label %4, label %9\n"]:::critical
  501. 0 -->|true| 4
  502. 0 -->|false| 9
  503. 4["Block 4:\n %5 = load i32, i32* %1, align 4\n %6 = mul nsw i32 %5, 2\n %7 = load i32, i32* @calculationResult, align 4\n %8 = add nsw i32 %7, %6\n store i32 %8, i32* @calculationResult, align 4\n br label %14\n"]
  504. 4 --> 14
  505. 9["Block 9:\n %10 = load i32, i32* %1, align 4\n %11 = sdiv i32 %10, 2\n %12 = load i32, i32* @calculationResult, align 4\n %13 = add nsw i32 %12, %11\n store i32 %13, i32* @calculationResult, align 4\n br label %14\n"]
  506. 9 --> 14
  507. 14["Block 14:\n %15 = load i32, i32* %1, align 4\n %16 = srem i32 %15, 3\n %17 = icmp eq i32 %16, 0\n br i1 %17, label %18, label %21\n"]:::critical
  508. 14 -->|true| 18
  509. 14 -->|false| 21
  510. 18["Block 18:\n %19 = load i32, i32* @calculationResult, align 4\n %20 = mul nsw i32 %19, 3\n store i32 %20, i32* @calculationResult, align 4\n br label %24\n"]
  511. 18 --> 24
  512. 21["Block 21:\n %22 = load i32, i32* @calculationResult, align 4\n %23 = add nsw i32 %22, 3\n store i32 %23, i32* @calculationResult, align 4\n br label %24\n"]
  513. 21 --> 24
  514. 24["Block 24:\n %25 = load i32, i32* @calculationResult, align 4\n %26 = icmp sge i32 %25, 150\n br i1 %26, label %27, label %33\n"]:::critical
  515. 24 -->|true| 27
  516. 24 -->|false| 33
  517. 27["Block 27:\n %28 = load i32, i32* @calculationResult, align 4\n %29 = icmp sle i32 %28, 300\n br i1 %29, label %30, label %33\n"]
  518. 27 -->|true| 30
  519. 27 -->|false| 33
  520. 30["Block 30:\n %31 = load i32, i32* @calculationResult, align 4\n %32 = sub nsw i32 %31, 50\n store i32 %32, i32* @calculationResult, align 4\n br label %36\n"]
  521. 30 --> 36
  522. 33["Block 33:\n %34 = load i32, i32* @calculationResult, align 4\n %35 = add nsw i32 %34, 50\n store i32 %35, i32* @calculationResult, align 4\n br label %36\n"]
  523. 33 --> 36
  524. 36["Block 36:\n %37 = load i32, i32* @calculationResult, align 4\n %38 = srem i32 %37, 2\n %39 = icmp eq i32 %38, 0\n br i1 %39, label %40, label %43\n"]:::critical
  525. 36 -->|true| 40
  526. 36 -->|false| 43
  527. 40["Block 40:\n %41 = load i32, i32* @calculationResult, align 4\n %42 = sdiv i32 %41, 2\n store i32 %42, i32* @calculationResult, align 4\n br label %46\n"]
  528. 40 --> 46
  529. 43["Block 43:\n %44 = load i32, i32* @calculationResult, align 4\n %45 = mul nsw i32 %44, 2\n store i32 %45, i32* @calculationResult, align 4\n br label %46\n"]
  530. 43 --> 46
  531. 46["Block 46:\n %47 = load i32, i32* @calculationResult, align 4\n %48 = srem i32 %47, 10\n %49 = icmp slt i32 %48, 5\n br i1 %49, label %50, label %53\n"]:::critical
  532. 46 -->|true| 50
  533. 46 -->|false| 53
  534. 50["Block 50:\n %51 = load i32, i32* @calculationResult, align 4\n %52 = add nsw i32 %51, 5\n store i32 %52, i32* @calculationResult, align 4\n br label %56\n"]
  535. 50 --> 56
  536. 53["Block 53:\n %54 = load i32, i32* @calculationResult, align 4\n %55 = sub nsw i32 %54, 5\n store i32 %55, i32* @calculationResult, align 4\n br label %56\n"]
  537. 53 --> 56
  538. 56["Block 56:\n %57 = load i32, i32* @calculationResult, align 4\n %58 = icmp sgt i32 %57, 1000\n br i1 %58, label %59, label %60\n"]:::critical
  539. 56 -->|true| 59
  540. 56 -->|false| 60
  541. 59["Block 59:\n store i32 1000, i32* @calculationResult, align 4\n br label %63\n"]
  542. 59 --> 63
  543. 60["Block 60:\n %61 = load i32, i32* @calculationResult, align 4\n %62 = add nsw i32 %61, 10\n store i32 %62, i32* @calculationResult, align 4\n br label %63\n"]
  544. 60 --> 63
  545. 63["Block 63:\n %64 = load i32, i32* @calculationResult, align 4\n %65 = call i32 (i8*, ...) @printf(i8* getelem...\n ret void\n"]:::critical
  546. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  547. ```
  548. ```mermaid: projectA_main
  549. graph TD
  550. 0["Block 0:\n %1 = alloca i32, align 4\n %2 = alloca %struct.DynamicArray*, align 8\n %3 = alloca i32, align 4\n %4 = alloca %struct.Matrix*, align 8\n %5 = alloca %struct.Matrix*, align 8\n %6 = alloca i32, align 4\n %7 = alloca i32, align 4\n %8 = alloca %struct.Matrix*, align 8\n %9 = alloca i32, align 4\n %10 = alloca %struct.Node*, align 8\n %11 = alloca i32, align 4\n %12 = alloca i32, align 4\n %13 = alloca %struct.Node*, align 8\n %14 = alloca %struct.Node*, align 8\n %15 = alloca i32, align 4\n %16 = alloca %struct.Node*, align 8\n %17 = alloca i32, align 4\n %18 = alloca i32, align 4\n %19 = alloca %struct.Node*, align 8\n %20 = call i64 @time(i64* null) #7\n %21 = trunc i64 %20 to i32\n call void @srand(i32 %21) #7\n %22 = call %struct.DynamicArray* @createDynam...\n store %struct.DynamicArray* %22, %struct.Dyna...\n %23 = load %struct.DynamicArray*, %struct.Dyn...\n %24 = icmp ne %struct.DynamicArray* %23, null\n br i1 %24, label %28, label %25\n"]:::critical
  551. 0 -->|true| 28
  552. 0 -->|false| 25
  553. 25["Block 25:\n %26 = call i8* @getErrorMessage()\n %27 = call i32 (i8*, ...) @printf(i8* getelem...\n store i32 -1, i32* %1, align 4\n br label %322\n"]
  554. 25 --> 322
  555. 28["Block 28:\n store i32 0, i32* %3, align 4\n br label %29\n"]
  556. 28 --> 29
  557. 29["Block 29:\n %30 = load i32, i32* %3, align 4\n %31 = icmp slt i32 %30, 15\n br i1 %31, label %32, label %45\n"]
  558. 29 -->|true| 32
  559. 29 -->|false| 45
  560. 32["Block 32:\n %33 = load %struct.DynamicArray*, %struct.Dyn...\n %34 = call i32 @rand() #7\n %35 = srem i32 %34, 100\n call void @pushBack(%struct.DynamicArray* %33...\n %36 = load i8*, i8** @globalErrorMessage, ali...\n %37 = icmp ne i8* %36, null\n br i1 %37, label %38, label %41\n"]
  561. 32 -->|true| 38
  562. 32 -->|false| 41
  563. 38["Block 38:\n %39 = call i8* @getErrorMessage()\n %40 = call i32 (i8*, ...) @printf(i8* getelem...\n br label %45\n"]
  564. 38 --> 45
  565. 41["Block 41:\n br label %42\n"]
  566. 41 --> 42
  567. 42["Block 42:\n %43 = load i32, i32* %3, align 4\n %44 = add nsw i32 %43, 1\n store i32 %44, i32* %3, align 4\n br label %29\n"]
  568. 42 --> 29
  569. 45["Block 45:\n %46 = call %struct.Matrix* @createMatrix(i32 ...\n store %struct.Matrix* %46, %struct.Matrix** %...\n %47 = call %struct.Matrix* @createMatrix(i32 ...\n store %struct.Matrix* %47, %struct.Matrix** %...\n %48 = load %struct.Matrix*, %struct.Matrix** ...\n %49 = icmp ne %struct.Matrix* %48, null\n br i1 %49, label %50, label %53\n"]
  570. 45 -->|true| 50
  571. 45 -->|false| 53
  572. 50["Block 50:\n %51 = load %struct.Matrix*, %struct.Matrix** ...\n %52 = icmp ne %struct.Matrix* %51, null\n br i1 %52, label %74, label %53\n"]
  573. 50 -->|true| 74
  574. 50 -->|false| 53
  575. 53["Block 53:\n %54 = call i8* @getErrorMessage()\n %55 = call i32 (i8*, ...) @printf(i8* getelem...\n %56 = load %struct.Matrix*, %struct.Matrix** ...\n %57 = icmp ne %struct.Matrix* %56, null\n br i1 %57, label %58, label %61\n"]
  576. 53 -->|true| 58
  577. 53 -->|false| 61
  578. 58["Block 58:\n %59 = load %struct.Matrix*, %struct.Matrix** ...\n %60 = bitcast %struct.Matrix* %59 to i8*\n call void @free(i8* %60) #7\n br label %61\n"]
  579. 58 --> 61
  580. 61["Block 61:\n %62 = load %struct.Matrix*, %struct.Matrix** ...\n %63 = icmp ne %struct.Matrix* %62, null\n br i1 %63, label %64, label %67\n"]
  581. 61 -->|true| 64
  582. 61 -->|false| 67
  583. 64["Block 64:\n %65 = load %struct.Matrix*, %struct.Matrix** ...\n %66 = bitcast %struct.Matrix* %65 to i8*\n call void @free(i8* %66) #7\n br label %67\n"]
  584. 64 --> 67
  585. 67["Block 67:\n %68 = load %struct.DynamicArray*, %struct.Dyn...\n %69 = getelementptr inbounds %struct.DynamicA...\n %70 = load i32*, i32** %69, align 8\n %71 = bitcast i32* %70 to i8*\n call void @free(i8* %71) #7\n %72 = load %struct.DynamicArray*, %struct.Dyn...\n %73 = bitcast %struct.DynamicArray* %72 to i8*\n call void @free(i8* %73) #7\n store i32 -1, i32* %1, align 4\n br label %322\n"]
  586. 67 --> 322
  587. 74["Block 74:\n store i32 0, i32* %6, align 4\n br label %75\n"]
  588. 74 --> 75
  589. 75["Block 75:\n %76 = load i32, i32* %6, align 4\n %77 = icmp slt i32 %76, 3\n br i1 %77, label %78, label %114\n"]
  590. 75 -->|true| 78
  591. 75 -->|false| 114
  592. 78["Block 78:\n store i32 0, i32* %7, align 4\n br label %79\n"]
  593. 78 --> 79
  594. 79["Block 79:\n %80 = load i32, i32* %7, align 4\n %81 = icmp slt i32 %80, 3\n br i1 %81, label %82, label %110\n"]
  595. 79 -->|true| 82
  596. 79 -->|false| 110
  597. 82["Block 82:\n %83 = call i32 @rand() #7\n %84 = srem i32 %83, 10\n %85 = load %struct.Matrix*, %struct.Matrix** ...\n %86 = getelementptr inbounds %struct.Matrix, ...\n %87 = load i32**, i32*** %86, align 8\n %88 = load i32, i32* %6, align 4\n %89 = sext i32 %88 to i64\n %90 = getelementptr inbounds i32*, i32** %87,...\n %91 = load i32*, i32** %90, align 8\n %92 = load i32, i32* %7, align 4\n %93 = sext i32 %92 to i64\n %94 = getelementptr inbounds i32, i32* %91, i...\n store i32 %84, i32* %94, align 4\n %95 = call i32 @rand() #7\n %96 = srem i32 %95, 10\n %97 = load %struct.Matrix*, %struct.Matrix** ...\n %98 = getelementptr inbounds %struct.Matrix, ...\n %99 = load i32**, i32*** %98, align 8\n %100 = load i32, i32* %6, align 4\n %101 = sext i32 %100 to i64\n %102 = getelementptr inbounds i32*, i32** %99...\n %103 = load i32*, i32** %102, align 8\n %104 = load i32, i32* %7, align 4\n %105 = sext i32 %104 to i64\n %106 = getelementptr inbounds i32, i32* %103,...\n store i32 %96, i32* %106, align 4\n br label %107\n"]
  598. 82 --> 107
  599. 107["Block 107:\n %108 = load i32, i32* %7, align 4\n %109 = add nsw i32 %108, 1\n store i32 %109, i32* %7, align 4\n br label %79\n"]
  600. 107 --> 79
  601. 110["Block 110:\n br label %111\n"]
  602. 110 --> 111
  603. 111["Block 111:\n %112 = load i32, i32* %6, align 4\n %113 = add nsw i32 %112, 1\n store i32 %113, i32* %6, align 4\n br label %75\n"]
  604. 111 --> 75
  605. 114["Block 114:\n %115 = load %struct.Matrix*, %struct.Matrix**...\n %116 = load %struct.Matrix*, %struct.Matrix**...\n %117 = call %struct.Matrix* @multiplyMatrices...\n store %struct.Matrix* %117, %struct.Matrix** ...\n %118 = load %struct.Matrix*, %struct.Matrix**...\n %119 = icmp ne %struct.Matrix* %118, null\n br i1 %119, label %168, label %120\n"]
  606. 114 -->|true| 168
  607. 114 -->|false| 120
  608. 120["Block 120:\n %121 = call i8* @getErrorMessage()\n %122 = call i32 (i8*, ...) @printf(i8* getele...\n store i32 0, i32* %9, align 4\n br label %123\n"]
  609. 120 --> 123
  610. 123["Block 123:\n %124 = load i32, i32* %9, align 4\n %125 = load %struct.Matrix*, %struct.Matrix**...\n %126 = getelementptr inbounds %struct.Matrix,...\n %127 = load i32, i32* %126, align 8\n %128 = icmp slt i32 %124, %127\n br i1 %128, label %129, label %149\n"]
  611. 123 -->|true| 129
  612. 123 -->|false| 149
  613. 129["Block 129:\n %130 = load %struct.Matrix*, %struct.Matrix**...\n %131 = getelementptr inbounds %struct.Matrix,...\n %132 = load i32**, i32*** %131, align 8\n %133 = load i32, i32* %9, align 4\n %134 = sext i32 %133 to i64\n %135 = getelementptr inbounds i32*, i32** %13...\n %136 = load i32*, i32** %135, align 8\n %137 = bitcast i32* %136 to i8*\n call void @free(i8* %137) #7\n %138 = load %struct.Matrix*, %struct.Matrix**...\n %139 = getelementptr inbounds %struct.Matrix,...\n %140 = load i32**, i32*** %139, align 8\n %141 = load i32, i32* %9, align 4\n %142 = sext i32 %141 to i64\n %143 = getelementptr inbounds i32*, i32** %14...\n %144 = load i32*, i32** %143, align 8\n %145 = bitcast i32* %144 to i8*\n call void @free(i8* %145) #7\n br label %146\n"]
  614. 129 --> 146
  615. 146["Block 146:\n %147 = load i32, i32* %9, align 4\n %148 = add nsw i32 %147, 1\n store i32 %148, i32* %9, align 4\n br label %123\n"]
  616. 146 --> 123
  617. 149["Block 149:\n %150 = load %struct.Matrix*, %struct.Matrix**...\n %151 = getelementptr inbounds %struct.Matrix,...\n %152 = load i32**, i32*** %151, align 8\n %153 = bitcast i32** %152 to i8*\n call void @free(i8* %153) #7\n %154 = load %struct.Matrix*, %struct.Matrix**...\n %155 = getelementptr inbounds %struct.Matrix,...\n %156 = load i32**, i32*** %155, align 8\n %157 = bitcast i32** %156 to i8*\n call void @free(i8* %157) #7\n %158 = load %struct.Matrix*, %struct.Matrix**...\n %159 = bitcast %struct.Matrix* %158 to i8*\n call void @free(i8* %159) #7\n %160 = load %struct.Matrix*, %struct.Matrix**...\n %161 = bitcast %struct.Matrix* %160 to i8*\n call void @free(i8* %161) #7\n %162 = load %struct.DynamicArray*, %struct.Dy...\n %163 = getelementptr inbounds %struct.Dynamic...\n %164 = load i32*, i32** %163, align 8\n %165 = bitcast i32* %164 to i8*\n call void @free(i8* %165) #7\n %166 = load %struct.DynamicArray*, %struct.Dy...\n %167 = bitcast %struct.DynamicArray* %166 to i8*\n call void @free(i8* %167) #7\n store i32 -1, i32* %1, align 4\n br label %322\n"]
  618. 149 --> 322
  619. 168["Block 168:\n store %struct.Node* null, %struct.Node** %10,...\n store i32 0, i32* %11, align 4\n br label %169\n"]
  620. 168 --> 169
  621. 169["Block 169:\n %170 = load i32, i32* %11, align 4\n %171 = icmp slt i32 %170, 5\n br i1 %171, label %172, label %186\n"]
  622. 169 -->|true| 172
  623. 169 -->|false| 186
  624. 172["Block 172:\n %173 = load %struct.Node*, %struct.Node** %10...\n %174 = call i32 @rand() #7\n %175 = srem i32 %174, 50\n %176 = call %struct.Node* @insertNode(%struct...\n store %struct.Node* %176, %struct.Node** %10,...\n %177 = load i8*, i8** @globalErrorMessage, al...\n %178 = icmp ne i8* %177, null\n br i1 %178, label %179, label %182\n"]
  625. 172 -->|true| 179
  626. 172 -->|false| 182
  627. 179["Block 179:\n %180 = call i8* @getErrorMessage()\n %181 = call i32 (i8*, ...) @printf(i8* getele...\n br label %186\n"]
  628. 179 --> 186
  629. 182["Block 182:\n br label %183\n"]
  630. 182 --> 183
  631. 183["Block 183:\n %184 = load i32, i32* %11, align 4\n %185 = add nsw i32 %184, 1\n store i32 %185, i32* %11, align 4\n br label %169\n"]
  632. 183 --> 169
  633. 186["Block 186:\n %187 = load %struct.DynamicArray*, %struct.Dy...\n %188 = getelementptr inbounds %struct.Dynamic...\n %189 = load i32*, i32** %188, align 8\n %190 = bitcast i32* %189 to i8*\n call void @free(i8* %190) #7\n %191 = load %struct.DynamicArray*, %struct.Dy...\n %192 = bitcast %struct.DynamicArray* %191 to i8*\n call void @free(i8* %192) #7\n store i32 0, i32* %12, align 4\n br label %193\n"]
  634. 186 --> 193
  635. 193["Block 193:\n %194 = load i32, i32* %12, align 4\n %195 = load %struct.Matrix*, %struct.Matrix**...\n %196 = getelementptr inbounds %struct.Matrix,...\n %197 = load i32, i32* %196, align 8\n %198 = icmp slt i32 %194, %197\n br i1 %198, label %199, label %227\n"]
  636. 193 -->|true| 199
  637. 193 -->|false| 227
  638. 199["Block 199:\n %200 = load %struct.Matrix*, %struct.Matrix**...\n %201 = getelementptr inbounds %struct.Matrix,...\n %202 = load i32**, i32*** %201, align 8\n %203 = load i32, i32* %12, align 4\n %204 = sext i32 %203 to i64\n %205 = getelementptr inbounds i32*, i32** %20...\n %206 = load i32*, i32** %205, align 8\n %207 = bitcast i32* %206 to i8*\n call void @free(i8* %207) #7\n %208 = load %struct.Matrix*, %struct.Matrix**...\n %209 = getelementptr inbounds %struct.Matrix,...\n %210 = load i32**, i32*** %209, align 8\n %211 = load i32, i32* %12, align 4\n %212 = sext i32 %211 to i64\n %213 = getelementptr inbounds i32*, i32** %21...\n %214 = load i32*, i32** %213, align 8\n %215 = bitcast i32* %214 to i8*\n call void @free(i8* %215) #7\n %216 = load %struct.Matrix*, %struct.Matrix**...\n %217 = getelementptr inbounds %struct.Matrix,...\n %218 = load i32**, i32*** %217, align 8\n %219 = load i32, i32* %12, align 4\n %220 = sext i32 %219 to i64\n %221 = getelementptr inbounds i32*, i32** %21...\n %222 = load i32*, i32** %221, align 8\n %223 = bitcast i32* %222 to i8*\n call void @free(i8* %223) #7\n br label %224\n"]
  639. 199 --> 224
  640. 224["Block 224:\n %225 = load i32, i32* %12, align 4\n %226 = add nsw i32 %225, 1\n store i32 %226, i32* %12, align 4\n br label %193\n"]
  641. 224 --> 193
  642. 227["Block 227:\n %228 = load %struct.Matrix*, %struct.Matrix**...\n %229 = getelementptr inbounds %struct.Matrix,...\n %230 = load i32**, i32*** %229, align 8\n %231 = bitcast i32** %230 to i8*\n call void @free(i8* %231) #7\n %232 = load %struct.Matrix*, %struct.Matrix**...\n %233 = getelementptr inbounds %struct.Matrix,...\n %234 = load i32**, i32*** %233, align 8\n %235 = bitcast i32** %234 to i8*\n call void @free(i8* %235) #7\n %236 = load %struct.Matrix*, %struct.Matrix**...\n %237 = getelementptr inbounds %struct.Matrix,...\n %238 = load i32**, i32*** %237, align 8\n %239 = bitcast i32** %238 to i8*\n call void @free(i8* %239) #7\n %240 = load %struct.Matrix*, %struct.Matrix**...\n %241 = bitcast %struct.Matrix* %240 to i8*\n call void @free(i8* %241) #7\n %242 = load %struct.Matrix*, %struct.Matrix**...\n %243 = bitcast %struct.Matrix* %242 to i8*\n call void @free(i8* %243) #7\n %244 = load %struct.Matrix*, %struct.Matrix**...\n %245 = bitcast %struct.Matrix* %244 to i8*\n call void @free(i8* %245) #7\n %246 = load %struct.Node*, %struct.Node** %10...\n %247 = icmp ne %struct.Node* %246, null\n br i1 %247, label %248, label %316\n"]
  643. 227 -->|true| 248
  644. 227 -->|false| 316
  645. 248["Block 248:\n %249 = load %struct.Node*, %struct.Node** %10...\n store %struct.Node* %249, %struct.Node** %13,...\n %250 = load %struct.Node*, %struct.Node** %10...\n store %struct.Node* %250, %struct.Node** %14,...\n store i32 0, i32* %15, align 4\n br label %251\n"]
  646. 248 --> 251
  647. 251["Block 251:\n %252 = load %struct.Node*, %struct.Node** %14...\n %253 = icmp ne %struct.Node* %252, null\n br i1 %253, label %254, label %259\n"]
  648. 251 -->|true| 254
  649. 251 -->|false| 259
  650. 254["Block 254:\n %255 = load %struct.Node*, %struct.Node** %14...\n %256 = getelementptr inbounds %struct.Node, %...\n %257 = load %struct.Node*, %struct.Node** %25...\n %258 = icmp ne %struct.Node* %257, null\n br label %259\n"]
  651. 254 --> 259
  652. 259["Block 259:\n %260 = phi i1 [ false, %251 ], [ %258, %254 ]\n br i1 %260, label %261, label %275\n"]
  653. 259 -->|true| 261
  654. 259 -->|false| 275
  655. 261["Block 261:\n %262 = load %struct.Node*, %struct.Node** %13...\n %263 = getelementptr inbounds %struct.Node, %...\n %264 = load %struct.Node*, %struct.Node** %26...\n store %struct.Node* %264, %struct.Node** %13,...\n %265 = load %struct.Node*, %struct.Node** %14...\n %266 = getelementptr inbounds %struct.Node, %...\n %267 = load %struct.Node*, %struct.Node** %26...\n %268 = getelementptr inbounds %struct.Node, %...\n %269 = load %struct.Node*, %struct.Node** %26...\n store %struct.Node* %269, %struct.Node** %14,...\n %270 = load %struct.Node*, %struct.Node** %13...\n %271 = load %struct.Node*, %struct.Node** %14...\n %272 = icmp eq %struct.Node* %270, %271\n br i1 %272, label %273, label %274\n"]
  656. 261 -->|true| 273
  657. 261 -->|false| 274
  658. 273["Block 273:\n store i32 1, i32* %15, align 4\n br label %275\n"]
  659. 273 --> 275
  660. 274["Block 274:\n br label %251\n"]
  661. 274 --> 251
  662. 275["Block 275:\n %276 = load i32, i32* %15, align 4\n %277 = icmp ne i32 %276, 0\n br i1 %277, label %278, label %304\n"]
  663. 275 -->|true| 278
  664. 275 -->|false| 304
  665. 278["Block 278:\n call void @setErrorMessage(i8* getelementptr ...\n %279 = load %struct.Node*, %struct.Node** %10...\n store %struct.Node* %279, %struct.Node** %16,...\n store i32 1000, i32* %17, align 4\n store i32 0, i32* %18, align 4\n br label %280\n"]
  666. 278 --> 280
  667. 280["Block 280:\n %281 = load %struct.Node*, %struct.Node** %16...\n %282 = icmp ne %struct.Node* %281, null\n br i1 %282, label %283, label %287\n"]
  668. 280 -->|true| 283
  669. 280 -->|false| 287
  670. 283["Block 283:\n %284 = load i32, i32* %18, align 4\n %285 = load i32, i32* %17, align 4\n %286 = icmp slt i32 %284, %285\n br label %287\n"]
  671. 283 --> 287
  672. 287["Block 287:\n %288 = phi i1 [ false, %280 ], [ %286, %283 ]\n br i1 %288, label %289, label %303\n"]
  673. 287 -->|true| 289
  674. 287 -->|false| 303
  675. 289["Block 289:\n %290 = load %struct.Node*, %struct.Node** %16...\n %291 = getelementptr inbounds %struct.Node, %...\n %292 = load i32, i32* %291, align 8\n %293 = icmp ne i32 %292, 0\n br i1 %293, label %294, label %295\n"]
  676. 289 -->|true| 294
  677. 289 -->|false| 295
  678. 294["Block 294:\n br label %303\n"]
  679. 294 --> 303
  680. 295["Block 295:\n %296 = load %struct.Node*, %struct.Node** %16...\n %297 = getelementptr inbounds %struct.Node, %...\n store i32 1, i32* %297, align 8\n %298 = load %struct.Node*, %struct.Node** %16...\n %299 = getelementptr inbounds %struct.Node, %...\n %300 = load %struct.Node*, %struct.Node** %29...\n store %struct.Node* %300, %struct.Node** %16,...\n %301 = load i32, i32* %18, align 4\n %302 = add nsw i32 %301, 1\n store i32 %302, i32* %18, align 4\n br label %280\n"]
  681. 295 --> 280
  682. 303["Block 303:\n br label %304\n"]
  683. 303 --> 304
  684. 304["Block 304:\n br label %305\n"]
  685. 304 --> 305
  686. 305["Block 305:\n %306 = load %struct.Node*, %struct.Node** %10...\n %307 = icmp ne %struct.Node* %306, null\n br i1 %307, label %308, label %315\n"]
  687. 305 -->|true| 308
  688. 305 -->|false| 315
  689. 308["Block 308:\n %309 = load %struct.Node*, %struct.Node** %10...\n store %struct.Node* %309, %struct.Node** %19,...\n %310 = load %struct.Node*, %struct.Node** %10...\n %311 = getelementptr inbounds %struct.Node, %...\n %312 = load %struct.Node*, %struct.Node** %31...\n store %struct.Node* %312, %struct.Node** %10,...\n %313 = load %struct.Node*, %struct.Node** %19...\n %314 = bitcast %struct.Node* %313 to i8*\n call void @free(i8* %314) #7\n br label %305\n"]
  690. 308 --> 305
  691. 315["Block 315:\n br label %316\n"]
  692. 315 --> 316
  693. 316["Block 316:\n %317 = load i8*, i8** @globalErrorMessage, al...\n %318 = icmp ne i8* %317, null\n br i1 %318, label %319, label %321\n"]
  694. 316 -->|true| 319
  695. 316 -->|false| 321
  696. 319["Block 319:\n %320 = load i8*, i8** @globalErrorMessage, al...\n call void @free(i8* %320) #7\n br label %321\n"]
  697. 319 --> 321
  698. 321["Block 321:\n call void @performSimpleCalculations()\n store i32 0, i32* %1, align 4\n br label %322\n"]
  699. 321 --> 322
  700. 322["Block 322:\n %323 = load i32, i32* %1, align 4\n ret i32 %323\n"]:::critical
  701. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  702. ```
  703. ```mermaid: calculateDistance
  704. graph TD
  705. 3["Block 3:\n %4 = alloca double, align 8\n %5 = alloca i32*, align 8\n %6 = alloca double, align 8\n %7 = alloca double, align 8\n %8 = alloca double, align 8\n store i32* %2, i32** %5, align 8\n %9 = load i32*, i32** %5, align 8\n store i32 0, i32* %9, align 4\n %10 = getelementptr inbounds %struct.Point, %...\n %11 = load double, double* %10, align 8\n %12 = fcmp ole double %11, 0.000000e+00\n br i1 %12, label %17, label %13\n"]:::critical
  706. 3 -->|true| 17
  707. 3 -->|false| 13
  708. 13["Block 13:\n %14 = getelementptr inbounds %struct.Point, %...\n %15 = load double, double* %14, align 8\n %16 = fcmp ole double %15, 0.000000e+00\n br i1 %16, label %17, label %19\n"]
  709. 13 -->|true| 17
  710. 13 -->|false| 19
  711. 17["Block 17:\n %18 = load i32*, i32** %5, align 8\n store i32 1, i32* %18, align 4\n call void @setErrorMessage(i8* getelementptr ...\n store double -1.000000e+00, double* %4, align 8\n br label %101\n"]
  712. 17 --> 101
  713. 19["Block 19:\n %20 = getelementptr inbounds %struct.Point, %...\n %21 = load i32, i32* %20, align 8\n %22 = call i32 @abs(i32 %21) #7\n %23 = icmp sgt i32 %22, 1000\n br i1 %23, label %39, label %24\n"]
  714. 19 -->|true| 39
  715. 19 -->|false| 24
  716. 24["Block 24:\n %25 = getelementptr inbounds %struct.Point, %...\n %26 = load i32, i32* %25, align 4\n %27 = call i32 @abs(i32 %26) #7\n %28 = icmp sgt i32 %27, 1000\n br i1 %28, label %39, label %29\n"]
  717. 24 -->|true| 39
  718. 24 -->|false| 29
  719. 29["Block 29:\n %30 = getelementptr inbounds %struct.Point, %...\n %31 = load i32, i32* %30, align 8\n %32 = call i32 @abs(i32 %31) #7\n %33 = icmp sgt i32 %32, 1000\n br i1 %33, label %39, label %34\n"]
  720. 29 -->|true| 39
  721. 29 -->|false| 34
  722. 34["Block 34:\n %35 = getelementptr inbounds %struct.Point, %...\n %36 = load i32, i32* %35, align 4\n %37 = call i32 @abs(i32 %36) #7\n %38 = icmp sgt i32 %37, 1000\n br i1 %38, label %39, label %41\n"]
  723. 34 -->|true| 39
  724. 34 -->|false| 41
  725. 39["Block 39:\n %40 = load i32*, i32** %5, align 8\n store i32 3, i32* %40, align 4\n call void @setErrorMessage(i8* getelementptr ...\n store double -1.000000e+00, double* %4, align 8\n br label %101\n"]
  726. 39 --> 101
  727. 41["Block 41:\n %42 = getelementptr inbounds %struct.Point, %...\n %43 = load i32, i32* %42, align 8\n %44 = getelementptr inbounds %struct.Point, %...\n %45 = load i32, i32* %44, align 8\n %46 = sub nsw i32 %43, %45\n %47 = sitofp i32 %46 to double\n %48 = getelementptr inbounds %struct.Point, %...\n %49 = load double, double* %48, align 8\n %50 = getelementptr inbounds %struct.Point, %...\n %51 = load double, double* %50, align 8\n %52 = fdiv double %49, %51\n %53 = call double @sqrt(double %52) #8\n %54 = fmul double %47, %53\n store double %54, double* %6, align 8\n %55 = getelementptr inbounds %struct.Point, %...\n %56 = load i32, i32* %55, align 4\n %57 = getelementptr inbounds %struct.Point, %...\n %58 = load i32, i32* %57, align 4\n %59 = sub nsw i32 %56, %58\n %60 = sitofp i32 %59 to double\n %61 = getelementptr inbounds %struct.Point, %...\n %62 = load double, double* %61, align 8\n %63 = getelementptr inbounds %struct.Point, %...\n %64 = load double, double* %63, align 8\n %65 = fdiv double %62, %64\n %66 = call double @sqrt(double %65) #8\n %67 = fmul double %60, %66\n store double %67, double* %7, align 8\n %68 = load double, double* %6, align 8\n %69 = call double @llvm.fabs.f64(double %68)\n %70 = fcmp ogt double %69, 1.000000e+03\n br i1 %70, label %75, label %71\n"]
  728. 41 -->|true| 75
  729. 41 -->|false| 71
  730. 71["Block 71:\n %72 = load double, double* %7, align 8\n %73 = call double @llvm.fabs.f64(double %72)\n %74 = fcmp ogt double %73, 1.000000e+03\n br i1 %74, label %75, label %77\n"]
  731. 71 -->|true| 75
  732. 71 -->|false| 77
  733. 75["Block 75:\n %76 = load i32*, i32** %5, align 8\n store i32 5, i32* %76, align 4\n call void @setErrorMessage(i8* getelementptr ...\n store double -1.000000e+00, double* %4, align 8\n br label %101\n"]
  734. 75 --> 101
  735. 77["Block 77:\n %78 = load double, double* %6, align 8\n %79 = load double, double* %6, align 8\n %80 = fmul double %78, %79\n %81 = load double, double* %7, align 8\n %82 = load double, double* %7, align 8\n %83 = fmul double %81, %82\n %84 = fadd double %80, %83\n %85 = call double @sqrt(double %84) #8\n store double %85, double* %8, align 8\n %86 = load double, double* %8, align 8\n %87 = fcmp uno double %86, %86\n br i1 %87, label %97, label %88\n"]
  736. 77 -->|true| 97
  737. 77 -->|false| 88
  738. 88["Block 88:\n %89 = load double, double* %8, align 8\n %90 = call double @llvm.fabs.f64(double %89) #9\n %91 = fcmp oeq double %90, 0x7FF0000000000000\n %92 = bitcast double %89 to i64\n %93 = icmp slt i64 %92, 0\n %94 = select i1 %93, i32 -1, i32 1\n %95 = select i1 %91, i32 %94, i32 0\n %96 = icmp ne i32 %95, 0\n br i1 %96, label %97, label %99\n"]
  739. 88 -->|true| 97
  740. 88 -->|false| 99
  741. 97["Block 97:\n %98 = load i32*, i32** %5, align 8\n store i32 8, i32* %98, align 4\n call void @setErrorMessage(i8* getelementptr ...\n store double -1.000000e+00, double* %4, align 8\n br label %101\n"]
  742. 97 --> 101
  743. 99["Block 99:\n %100 = load double, double* %8, align 8\n store double %100, double* %4, align 8\n br label %101\n"]
  744. 99 --> 101
  745. 101["Block 101:\n %102 = load double, double* %4, align 8\n ret double %102\n"]:::critical
  746. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  747. ```
  748. ```mermaid: calculateCircleArea
  749. graph TD
  750. 2["Block 2:\n %3 = alloca double, align 8\n %4 = alloca i32*, align 8\n %5 = alloca double, align 8\n store i32* %1, i32** %4, align 8\n %6 = load i32*, i32** %4, align 8\n store i32 0, i32* %6, align 4\n %7 = getelementptr inbounds %struct.Circle, %...\n %8 = load i32, i32* %7, align 8\n %9 = icmp ne i32 %8, 0\n br i1 %9, label %12, label %10\n"]:::critical
  751. 2 -->|true| 12
  752. 2 -->|false| 10
  753. 10["Block 10:\n %11 = load i32*, i32** %4, align 8\n store i32 1, i32* %11, align 4\n call void @setErrorMessage(i8* getelementptr ...\n store double -1.000000e+00, double* %3, align 8\n br label %85\n"]
  754. 10 --> 85
  755. 12["Block 12:\n %13 = getelementptr inbounds %struct.Circle, ...\n %14 = load double, double* %13, align 8\n %15 = fcmp ole double %14, 0.000000e+00\n br i1 %15, label %16, label %18\n"]
  756. 12 -->|true| 16
  757. 12 -->|false| 18
  758. 16["Block 16:\n %17 = load i32*, i32** %4, align 8\n store i32 1, i32* %17, align 4\n call void @setErrorMessage(i8* getelementptr ...\n store double -1.000000e+00, double* %3, align 8\n br label %85\n"]
  759. 16 --> 85
  760. 18["Block 18:\n %19 = getelementptr inbounds %struct.Circle, ...\n %20 = load double, double* %19, align 8\n %21 = fcmp ogt double %20, 1.000000e+03\n br i1 %21, label %22, label %24\n"]
  761. 18 -->|true| 22
  762. 18 -->|false| 24
  763. 22["Block 22:\n %23 = load i32*, i32** %4, align 8\n store i32 3, i32* %23, align 4\n call void @setErrorMessage(i8* getelementptr ...\n store double -1.000000e+00, double* %3, align 8\n br label %85\n"]
  764. 22 --> 85
  765. 24["Block 24:\n %25 = getelementptr inbounds %struct.Circle, ...\n %26 = getelementptr inbounds %struct.Point, %...\n %27 = load i32, i32* %26, align 8\n %28 = call i32 @abs(i32 %27) #7\n %29 = icmp sgt i32 %28, 1000\n br i1 %29, label %36, label %30\n"]
  766. 24 -->|true| 36
  767. 24 -->|false| 30
  768. 30["Block 30:\n %31 = getelementptr inbounds %struct.Circle, ...\n %32 = getelementptr inbounds %struct.Point, %...\n %33 = load i32, i32* %32, align 4\n %34 = call i32 @abs(i32 %33) #7\n %35 = icmp sgt i32 %34, 1000\n br i1 %35, label %36, label %38\n"]
  769. 30 -->|true| 36
  770. 30 -->|false| 38
  771. 36["Block 36:\n %37 = load i32*, i32** %4, align 8\n store i32 3, i32* %37, align 4\n call void @setErrorMessage(i8* getelementptr ...\n store double -1.000000e+00, double* %3, align 8\n br label %85\n"]
  772. 36 --> 85
  773. 38["Block 38:\n %39 = getelementptr inbounds %struct.Circle, ...\n %40 = load double, double* %39, align 8\n %41 = fmul double 3.141590e+00, %40\n %42 = getelementptr inbounds %struct.Circle, ...\n %43 = load double, double* %42, align 8\n %44 = fmul double %41, %43\n store double %44, double* %5, align 8\n %45 = load double, double* %5, align 8\n %46 = fcmp uno double %45, %45\n br i1 %46, label %56, label %47\n"]
  774. 38 -->|true| 56
  775. 38 -->|false| 47
  776. 47["Block 47:\n %48 = load double, double* %5, align 8\n %49 = call double @llvm.fabs.f64(double %48) #8\n %50 = fcmp oeq double %49, 0x7FF0000000000000\n %51 = bitcast double %48 to i64\n %52 = icmp slt i64 %51, 0\n %53 = select i1 %52, i32 -1, i32 1\n %54 = select i1 %50, i32 %53, i32 0\n %55 = icmp ne i32 %54, 0\n br i1 %55, label %56, label %58\n"]
  777. 47 -->|true| 56
  778. 47 -->|false| 58
  779. 56["Block 56:\n %57 = load i32*, i32** %4, align 8\n store i32 5, i32* %57, align 4\n call void @setErrorMessage(i8* getelementptr ...\n store double -1.000000e+00, double* %3, align 8\n br label %85\n"]
  780. 56 --> 85
  781. 58["Block 58:\n %59 = getelementptr inbounds %struct.Circle, ...\n %60 = getelementptr inbounds [256 x i8], [256...\n %61 = call i32 @strcmp(i8* %60, i8* getelemen...\n %62 = icmp eq i32 %61, 0\n br i1 %62, label %63, label %65\n"]
  782. 58 -->|true| 63
  783. 58 -->|false| 65
  784. 63["Block 63:\n %64 = load double, double* %5, align 8\n store double %64, double* %3, align 8\n br label %85\n"]
  785. 63 --> 85
  786. 65["Block 65:\n %66 = getelementptr inbounds %struct.Circle, ...\n %67 = getelementptr inbounds [256 x i8], [256...\n %68 = call i32 @strcmp(i8* %67, i8* getelemen...\n %69 = icmp eq i32 %68, 0\n br i1 %69, label %70, label %83\n"]
  787. 65 -->|true| 70
  788. 65 -->|false| 83
  789. 70["Block 70:\n %71 = getelementptr inbounds %struct.Circle, ...\n %72 = getelementptr inbounds %struct.Point, %...\n %73 = load double, double* %72, align 8\n %74 = fcmp ole double %73, 0.000000e+00\n br i1 %74, label %75, label %77\n"]
  790. 70 -->|true| 75
  791. 70 -->|false| 77
  792. 75["Block 75:\n %76 = load i32*, i32** %4, align 8\n store i32 1, i32* %76, align 4\n call void @setErrorMessage(i8* getelementptr ...\n store double -1.000000e+00, double* %3, align 8\n br label %85\n"]
  793. 75 --> 85
  794. 77["Block 77:\n %78 = load double, double* %5, align 8\n %79 = getelementptr inbounds %struct.Circle, ...\n %80 = getelementptr inbounds %struct.Point, %...\n %81 = load double, double* %80, align 8\n %82 = fmul double %78, %81\n store double %82, double* %3, align 8\n br label %85\n"]
  795. 77 --> 85
  796. 83["Block 83:\n %84 = load i32*, i32** %4, align 8\n store i32 1, i32* %84, align 4\n call void @setErrorMessage(i8* getelementptr ...\n store double -1.000000e+00, double* %3, align 8\n br label %85\n"]
  797. 83 --> 85
  798. 85["Block 85:\n %86 = load double, double* %3, align 8\n ret double %86\n"]:::critical
  799. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  800. ```
  801. ```mermaid: validateMatrix
  802. graph TD
  803. 1["Block 1:\n %2 = alloca i32, align 4\n %3 = alloca %struct.Matrix*, align 8\n %4 = alloca i32, align 4\n store %struct.Matrix* %0, %struct.Matrix** %3...\n %5 = load %struct.Matrix*, %struct.Matrix** %...\n %6 = icmp ne %struct.Matrix* %5, null\n br i1 %6, label %8, label %7\n"]:::critical
  804. 1 -->|true| 8
  805. 1 -->|false| 7
  806. 7["Block 7:\n call void @setErrorMessage(i8* getelementptr ...\n store i32 7, i32* %2, align 4\n br label %72\n"]
  807. 7 --> 72
  808. 8["Block 8:\n %9 = load %struct.Matrix*, %struct.Matrix** %...\n %10 = getelementptr inbounds %struct.Matrix, ...\n %11 = load i32**, i32*** %10, align 8\n %12 = icmp ne i32** %11, null\n br i1 %12, label %14, label %13\n"]
  809. 8 -->|true| 14
  810. 8 -->|false| 13
  811. 13["Block 13:\n call void @setErrorMessage(i8* getelementptr ...\n store i32 7, i32* %2, align 4\n br label %72\n"]
  812. 13 --> 72
  813. 14["Block 14:\n %15 = load %struct.Matrix*, %struct.Matrix** ...\n %16 = getelementptr inbounds %struct.Matrix, ...\n %17 = load i32, i32* %16, align 8\n %18 = icmp slt i32 %17, 1\n br i1 %18, label %24, label %19\n"]
  814. 14 -->|true| 24
  815. 14 -->|false| 19
  816. 19["Block 19:\n %20 = load %struct.Matrix*, %struct.Matrix** ...\n %21 = getelementptr inbounds %struct.Matrix, ...\n %22 = load i32, i32* %21, align 4\n %23 = icmp slt i32 %22, 1\n br i1 %23, label %24, label %25\n"]
  817. 19 -->|true| 24
  818. 19 -->|false| 25
  819. 24["Block 24:\n call void @setErrorMessage(i8* getelementptr ...\n store i32 1, i32* %2, align 4\n br label %72\n"]
  820. 24 --> 72
  821. 25["Block 25:\n %26 = load %struct.Matrix*, %struct.Matrix** ...\n %27 = getelementptr inbounds %struct.Matrix, ...\n %28 = load i32, i32* %27, align 8\n %29 = icmp sgt i32 %28, 100\n br i1 %29, label %35, label %30\n"]
  822. 25 -->|true| 35
  823. 25 -->|false| 30
  824. 30["Block 30:\n %31 = load %struct.Matrix*, %struct.Matrix** ...\n %32 = getelementptr inbounds %struct.Matrix, ...\n %33 = load i32, i32* %32, align 4\n %34 = icmp sgt i32 %33, 100\n br i1 %34, label %35, label %36\n"]
  825. 30 -->|true| 35
  826. 30 -->|false| 36
  827. 35["Block 35:\n call void @setErrorMessage(i8* getelementptr ...\n store i32 3, i32* %2, align 4\n br label %72\n"]
  828. 35 --> 72
  829. 36["Block 36:\n store i32 0, i32* %4, align 4\n br label %37\n"]
  830. 36 --> 37
  831. 37["Block 37:\n %38 = load i32, i32* %4, align 4\n %39 = load %struct.Matrix*, %struct.Matrix** ...\n %40 = getelementptr inbounds %struct.Matrix, ...\n %41 = load i32, i32* %40, align 8\n %42 = icmp slt i32 %38, %41\n br i1 %42, label %43, label %57\n"]
  832. 37 -->|true| 43
  833. 37 -->|false| 57
  834. 43["Block 43:\n %44 = load %struct.Matrix*, %struct.Matrix** ...\n %45 = getelementptr inbounds %struct.Matrix, ...\n %46 = load i32**, i32*** %45, align 8\n %47 = load i32, i32* %4, align 4\n %48 = sext i32 %47 to i64\n %49 = getelementptr inbounds i32*, i32** %46,...\n %50 = load i32*, i32** %49, align 8\n %51 = icmp ne i32* %50, null\n br i1 %51, label %53, label %52\n"]
  835. 43 -->|true| 53
  836. 43 -->|false| 52
  837. 52["Block 52:\n call void @setErrorMessage(i8* getelementptr ...\n store i32 7, i32* %2, align 4\n br label %72\n"]
  838. 52 --> 72
  839. 53["Block 53:\n br label %54\n"]
  840. 53 --> 54
  841. 54["Block 54:\n %55 = load i32, i32* %4, align 4\n %56 = add nsw i32 %55, 1\n store i32 %56, i32* %4, align 4\n br label %37\n"]
  842. 54 --> 37
  843. 57["Block 57:\n %58 = load %struct.Matrix*, %struct.Matrix** ...\n %59 = getelementptr inbounds %struct.Matrix, ...\n %60 = load i32, i32* %59, align 8\n %61 = load %struct.Matrix*, %struct.Matrix** ...\n %62 = getelementptr inbounds %struct.Matrix, ...\n %63 = load i32, i32* %62, align 4\n %64 = icmp eq i32 %60, %63\n %65 = zext i1 %64 to i32\n %66 = load %struct.Matrix*, %struct.Matrix** ...\n %67 = getelementptr inbounds %struct.Matrix, ...\n %68 = load i32, i32* %67, align 8\n %69 = icmp ne i32 %65, %68\n br i1 %69, label %70, label %71\n"]
  844. 57 -->|true| 70
  845. 57 -->|false| 71
  846. 70["Block 70:\n call void @setErrorMessage(i8* getelementptr ...\n store i32 1, i32* %2, align 4\n br label %72\n"]
  847. 70 --> 72
  848. 71["Block 71:\n store i32 0, i32* %2, align 4\n br label %72\n"]
  849. 71 --> 72
  850. 72["Block 72:\n %73 = load i32, i32* %2, align 4\n ret i32 %73\n"]:::critical
  851. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  852. ```
  853. ```mermaid: removeDuplicates
  854. graph TD
  855. 1["Block 1:\n %2 = alloca %struct.DynamicArray*, align 8\n %3 = alloca i32, align 4\n %4 = alloca i32, align 4\n %5 = alloca i32, align 4\n store %struct.DynamicArray* %0, %struct.Dynam...\n %6 = load %struct.DynamicArray*, %struct.Dyna...\n %7 = icmp ne %struct.DynamicArray* %6, null\n br i1 %7, label %8, label %13\n"]:::critical
  856. 1 -->|true| 8
  857. 1 -->|false| 13
  858. 8["Block 8:\n %9 = load %struct.DynamicArray*, %struct.Dyna...\n %10 = getelementptr inbounds %struct.DynamicA...\n %11 = load i32*, i32** %10, align 8\n %12 = icmp ne i32* %11, null\n br i1 %12, label %14, label %13\n"]
  859. 8 -->|true| 14
  860. 8 -->|false| 13
  861. 13["Block 13:\n call void @setErrorMessage(i8* getelementptr ...\n br label %81\n"]
  862. 13 --> 81
  863. 14["Block 14:\n %15 = load %struct.DynamicArray*, %struct.Dyn...\n %16 = getelementptr inbounds %struct.DynamicA...\n %17 = load i32, i32* %16, align 8\n %18 = icmp sle i32 %17, 1\n br i1 %18, label %19, label %20\n"]
  864. 14 -->|true| 19
  865. 14 -->|false| 20
  866. 19["Block 19:\n br label %81\n"]
  867. 19 --> 81
  868. 20["Block 20:\n store i32 0, i32* %3, align 4\n %21 = load %struct.DynamicArray*, %struct.Dyn...\n %22 = getelementptr inbounds %struct.DynamicA...\n %23 = load i32*, i32** %22, align 8\n %24 = load %struct.DynamicArray*, %struct.Dyn...\n %25 = getelementptr inbounds %struct.DynamicA...\n %26 = load i32, i32* %25, align 8\n %27 = sub nsw i32 %26, 1\n call void @quickSort(i32* %23, i32 0, i32 %27...\n %28 = load i32, i32* %3, align 4\n %29 = icmp ne i32 %28, 0\n br i1 %29, label %30, label %31\n"]
  869. 20 -->|true| 30
  870. 20 -->|false| 31
  871. 30["Block 30:\n br label %81\n"]
  872. 30 --> 81
  873. 31["Block 31:\n store i32 1, i32* %4, align 4\n store i32 1, i32* %5, align 4\n br label %32\n"]
  874. 31 --> 32
  875. 32["Block 32:\n %33 = load i32, i32* %5, align 4\n %34 = load %struct.DynamicArray*, %struct.Dyn...\n %35 = getelementptr inbounds %struct.DynamicA...\n %36 = load i32, i32* %35, align 8\n %37 = icmp slt i32 %33, %36\n br i1 %37, label %38, label %75\n"]
  876. 32 -->|true| 38
  877. 32 -->|false| 75
  878. 38["Block 38:\n %39 = load %struct.DynamicArray*, %struct.Dyn...\n %40 = getelementptr inbounds %struct.DynamicA...\n %41 = load i32*, i32** %40, align 8\n %42 = load i32, i32* %5, align 4\n %43 = sext i32 %42 to i64\n %44 = getelementptr inbounds i32, i32* %41, i...\n %45 = load i32, i32* %44, align 4\n %46 = load %struct.DynamicArray*, %struct.Dyn...\n %47 = getelementptr inbounds %struct.DynamicA...\n %48 = load i32*, i32** %47, align 8\n %49 = load i32, i32* %5, align 4\n %50 = sub nsw i32 %49, 1\n %51 = sext i32 %50 to i64\n %52 = getelementptr inbounds i32, i32* %48, i...\n %53 = load i32, i32* %52, align 4\n %54 = icmp ne i32 %45, %53\n br i1 %54, label %55, label %71\n"]
  879. 38 -->|true| 55
  880. 38 -->|false| 71
  881. 55["Block 55:\n %56 = load %struct.DynamicArray*, %struct.Dyn...\n %57 = getelementptr inbounds %struct.DynamicA...\n %58 = load i32*, i32** %57, align 8\n %59 = load i32, i32* %5, align 4\n %60 = sext i32 %59 to i64\n %61 = getelementptr inbounds i32, i32* %58, i...\n %62 = load i32, i32* %61, align 4\n %63 = load %struct.DynamicArray*, %struct.Dyn...\n %64 = getelementptr inbounds %struct.DynamicA...\n %65 = load i32*, i32** %64, align 8\n %66 = load i32, i32* %4, align 4\n %67 = sext i32 %66 to i64\n %68 = getelementptr inbounds i32, i32* %65, i...\n store i32 %62, i32* %68, align 4\n %69 = load i32, i32* %4, align 4\n %70 = add nsw i32 %69, 1\n store i32 %70, i32* %4, align 4\n br label %71\n"]
  882. 55 --> 71
  883. 71["Block 71:\n br label %72\n"]
  884. 71 --> 72
  885. 72["Block 72:\n %73 = load i32, i32* %5, align 4\n %74 = add nsw i32 %73, 1\n store i32 %74, i32* %5, align 4\n br label %32\n"]
  886. 72 --> 32
  887. 75["Block 75:\n %76 = load i32, i32* %4, align 4\n %77 = load %struct.DynamicArray*, %struct.Dyn...\n %78 = getelementptr inbounds %struct.DynamicA...\n store i32 %76, i32* %78, align 8\n %79 = load %struct.DynamicArray*, %struct.Dyn...\n %80 = getelementptr inbounds %struct.DynamicA...\n store i32 1, i32* %80, align 8\n br label %81\n"]
  888. 75 --> 81
  889. 81["Block 81:\n ret void\n"]:::critical
  890. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  891. ```
  892. ```mermaid: findCentroid
  893. graph TD
  894. 3["Block 3:\n %4 = alloca %struct.Point*, align 8\n %5 = alloca %struct.Point*, align 8\n %6 = alloca i32, align 4\n %7 = alloca i32*, align 8\n %8 = alloca %struct.Point*, align 8\n %9 = alloca double, align 8\n %10 = alloca double, align 8\n %11 = alloca double, align 8\n %12 = alloca i32, align 4\n store %struct.Point* %0, %struct.Point** %5, ...\n store i32 %1, i32* %6, align 4\n store i32* %2, i32** %7, align 8\n %13 = load i32*, i32** %7, align 8\n store i32 0, i32* %13, align 4\n %14 = load %struct.Point*, %struct.Point** %5...\n %15 = icmp ne %struct.Point* %14, null\n br i1 %15, label %16, label %19\n"]:::critical
  895. 3 -->|true| 16
  896. 3 -->|false| 19
  897. 16["Block 16:\n %17 = load i32, i32* %6, align 4\n %18 = icmp sle i32 %17, 0\n br i1 %18, label %19, label %21\n"]
  898. 16 -->|true| 19
  899. 16 -->|false| 21
  900. 19["Block 19:\n %20 = load i32*, i32** %7, align 8\n store i32 1, i32* %20, align 4\n call void @setErrorMessage(i8* getelementptr ...\n store %struct.Point* null, %struct.Point** %4...\n br label %165\n"]
  901. 19 --> 165
  902. 21["Block 21:\n %22 = load i32, i32* %6, align 4\n %23 = icmp sgt i32 %22, 1000\n br i1 %23, label %24, label %26\n"]
  903. 21 -->|true| 24
  904. 21 -->|false| 26
  905. 24["Block 24:\n %25 = load i32*, i32** %7, align 8\n store i32 3, i32* %25, align 4\n call void @setErrorMessage(i8* getelementptr ...\n store %struct.Point* null, %struct.Point** %4...\n br label %165\n"]
  906. 24 --> 165
  907. 26["Block 26:\n %27 = call noalias i8* @malloc(i64 272) #7\n %28 = bitcast i8* %27 to %struct.Point*\n store %struct.Point* %28, %struct.Point** %8,...\n %29 = load %struct.Point*, %struct.Point** %8...\n %30 = icmp ne %struct.Point* %29, null\n br i1 %30, label %33, label %31\n"]
  908. 26 -->|true| 33
  909. 26 -->|false| 31
  910. 31["Block 31:\n %32 = load i32*, i32** %7, align 8\n store i32 2, i32* %32, align 4\n call void @setErrorMessage(i8* getelementptr ...\n store %struct.Point* null, %struct.Point** %4...\n br label %165\n"]
  911. 31 --> 165
  912. 33["Block 33:\n store double 0.000000e+00, double* %9, align 8\n store double 0.000000e+00, double* %10, align 8\n store double 0.000000e+00, double* %11, align 8\n store i32 0, i32* %12, align 4\n br label %34\n"]
  913. 33 --> 34
  914. 34["Block 34:\n %35 = load i32, i32* %12, align 4\n %36 = load i32, i32* %6, align 4\n %37 = icmp slt i32 %35, %36\n br i1 %37, label %38, label %134\n"]
  915. 34 -->|true| 38
  916. 34 -->|false| 134
  917. 38["Block 38:\n %39 = load %struct.Point*, %struct.Point** %5...\n %40 = load i32, i32* %12, align 4\n %41 = sext i32 %40 to i64\n %42 = getelementptr inbounds %struct.Point, %...\n %43 = getelementptr inbounds %struct.Point, %...\n %44 = load double, double* %43, align 8\n %45 = fcmp ole double %44, 0.000000e+00\n br i1 %45, label %46, label %50\n"]
  918. 38 -->|true| 46
  919. 38 -->|false| 50
  920. 46["Block 46:\n %47 = load i32*, i32** %7, align 8\n store i32 1, i32* %47, align 4\n call void @setErrorMessage(i8* getelementptr ...\n %48 = load %struct.Point*, %struct.Point** %8...\n %49 = bitcast %struct.Point* %48 to i8*\n call void @free(i8* %49) #7\n store %struct.Point* null, %struct.Point** %4...\n br label %165\n"]
  921. 46 --> 165
  922. 50["Block 50:\n %51 = load %struct.Point*, %struct.Point** %5...\n %52 = load i32, i32* %12, align 4\n %53 = sext i32 %52 to i64\n %54 = getelementptr inbounds %struct.Point, %...\n %55 = getelementptr inbounds %struct.Point, %...\n %56 = load double, double* %55, align 8\n %57 = load double, double* %9, align 8\n %58 = fadd double %57, %56\n store double %58, double* %9, align 8\n %59 = load %struct.Point*, %struct.Point** %5...\n %60 = load i32, i32* %12, align 4\n %61 = sext i32 %60 to i64\n %62 = getelementptr inbounds %struct.Point, %...\n %63 = getelementptr inbounds %struct.Point, %...\n %64 = load i32, i32* %63, align 8\n %65 = sitofp i32 %64 to double\n %66 = load %struct.Point*, %struct.Point** %5...\n %67 = load i32, i32* %12, align 4\n %68 = sext i32 %67 to i64\n %69 = getelementptr inbounds %struct.Point, %...\n %70 = getelementptr inbounds %struct.Point, %...\n %71 = load double, double* %70, align 8\n %72 = fmul double %65, %71\n %73 = load double, double* %10, align 8\n %74 = fadd double %73, %72\n store double %74, double* %10, align 8\n %75 = load %struct.Point*, %struct.Point** %5...\n %76 = load i32, i32* %12, align 4\n %77 = sext i32 %76 to i64\n %78 = getelementptr inbounds %struct.Point, %...\n %79 = getelementptr inbounds %struct.Point, %...\n %80 = load i32, i32* %79, align 4\n %81 = sitofp i32 %80 to double\n %82 = load %struct.Point*, %struct.Point** %5...\n %83 = load i32, i32* %12, align 4\n %84 = sext i32 %83 to i64\n %85 = getelementptr inbounds %struct.Point, %...\n %86 = getelementptr inbounds %struct.Point, %...\n %87 = load double, double* %86, align 8\n %88 = fmul double %81, %87\n %89 = load double, double* %11, align 8\n %90 = fadd double %89, %88\n store double %90, double* %11, align 8\n %91 = load double, double* %9, align 8\n %92 = fcmp uno double %91, %91\n br i1 %92, label %126, label %93\n"]
  923. 50 -->|true| 126
  924. 50 -->|false| 93
  925. 93["Block 93:\n %94 = load double, double* %10, align 8\n %95 = fcmp uno double %94, %94\n br i1 %95, label %126, label %96\n"]
  926. 93 -->|true| 126
  927. 93 -->|false| 96
  928. 96["Block 96:\n %97 = load double, double* %11, align 8\n %98 = fcmp uno double %97, %97\n br i1 %98, label %126, label %99\n"]
  929. 96 -->|true| 126
  930. 96 -->|false| 99
  931. 99["Block 99:\n %100 = load double, double* %9, align 8\n %101 = call double @llvm.fabs.f64(double %100...\n %102 = fcmp oeq double %101, 0x7FF0000000000000\n %103 = bitcast double %100 to i64\n %104 = icmp slt i64 %103, 0\n %105 = select i1 %104, i32 -1, i32 1\n %106 = select i1 %102, i32 %105, i32 0\n %107 = icmp ne i32 %106, 0\n br i1 %107, label %126, label %108\n"]
  932. 99 -->|true| 126
  933. 99 -->|false| 108
  934. 108["Block 108:\n %109 = load double, double* %10, align 8\n %110 = call double @llvm.fabs.f64(double %109...\n %111 = fcmp oeq double %110, 0x7FF0000000000000\n %112 = bitcast double %109 to i64\n %113 = icmp slt i64 %112, 0\n %114 = select i1 %113, i32 -1, i32 1\n %115 = select i1 %111, i32 %114, i32 0\n %116 = icmp ne i32 %115, 0\n br i1 %116, label %126, label %117\n"]
  935. 108 -->|true| 126
  936. 108 -->|false| 117
  937. 117["Block 117:\n %118 = load double, double* %11, align 8\n %119 = call double @llvm.fabs.f64(double %118...\n %120 = fcmp oeq double %119, 0x7FF0000000000000\n %121 = bitcast double %118 to i64\n %122 = icmp slt i64 %121, 0\n %123 = select i1 %122, i32 -1, i32 1\n %124 = select i1 %120, i32 %123, i32 0\n %125 = icmp ne i32 %124, 0\n br i1 %125, label %126, label %130\n"]
  938. 117 -->|true| 126
  939. 117 -->|false| 130
  940. 126["Block 126:\n %127 = load i32*, i32** %7, align 8\n store i32 5, i32* %127, align 4\n call void @setErrorMessage(i8* getelementptr ...\n %128 = load %struct.Point*, %struct.Point** %...\n %129 = bitcast %struct.Point* %128 to i8*\n call void @free(i8* %129) #7\n store %struct.Point* null, %struct.Point** %4...\n br label %165\n"]
  941. 126 --> 165
  942. 130["Block 130:\n br label %131\n"]
  943. 130 --> 131
  944. 131["Block 131:\n %132 = load i32, i32* %12, align 4\n %133 = add nsw i32 %132, 1\n store i32 %133, i32* %12, align 4\n br label %34\n"]
  945. 131 --> 34
  946. 134["Block 134:\n %135 = load double, double* %9, align 8\n %136 = fcmp oeq double %135, 0.000000e+00\n br i1 %136, label %137, label %141\n"]
  947. 134 -->|true| 137
  948. 134 -->|false| 141
  949. 137["Block 137:\n %138 = load i32*, i32** %7, align 8\n store i32 1, i32* %138, align 4\n call void @setErrorMessage(i8* getelementptr ...\n %139 = load %struct.Point*, %struct.Point** %...\n %140 = bitcast %struct.Point* %139 to i8*\n call void @free(i8* %140) #7\n store %struct.Point* null, %struct.Point** %4...\n br label %165\n"]
  950. 137 --> 165
  951. 141["Block 141:\n %142 = load double, double* %10, align 8\n %143 = load double, double* %9, align 8\n %144 = fdiv double %142, %143\n %145 = fptosi double %144 to i32\n %146 = load %struct.Point*, %struct.Point** %...\n %147 = getelementptr inbounds %struct.Point, ...\n store i32 %145, i32* %147, align 8\n %148 = load double, double* %11, align 8\n %149 = load double, double* %9, align 8\n %150 = fdiv double %148, %149\n %151 = fptosi double %150 to i32\n %152 = load %struct.Point*, %struct.Point** %...\n %153 = getelementptr inbounds %struct.Point, ...\n store i32 %151, i32* %153, align 4\n %154 = load double, double* %9, align 8\n %155 = load i32, i32* %6, align 4\n %156 = sitofp i32 %155 to double\n %157 = fdiv double %154, %156\n %158 = load %struct.Point*, %struct.Point** %...\n %159 = getelementptr inbounds %struct.Point, ...\n store double %157, double* %159, align 8\n %160 = load %struct.Point*, %struct.Point** %...\n %161 = getelementptr inbounds %struct.Point, ...\n %162 = getelementptr inbounds [256 x i8], [25...\n %163 = call i8* @strcpy(i8* %162, i8* getelem...\n %164 = load %struct.Point*, %struct.Point** %...\n store %struct.Point* %164, %struct.Point** %4...\n br label %165\n"]
  952. 141 --> 165
  953. 165["Block 165:\n %166 = load %struct.Point*, %struct.Point** %...\n ret %struct.Point* %166\n"]:::critical
  954. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  955. ```
  956. ```mermaid: reverseString
  957. graph TD
  958. 1["Block 1:\n %2 = alloca i8*, align 8\n %3 = alloca i32, align 4\n %4 = alloca i32, align 4\n %5 = alloca i8, align 1\n store i8* %0, i8** %2, align 8\n %6 = load i8*, i8** %2, align 8\n %7 = call i64 @strlen(i8* %6) #7\n %8 = trunc i64 %7 to i32\n store i32 %8, i32* %3, align 4\n store i32 0, i32* %4, align 4\n br label %9\n"]:::critical
  959. 1 --> 9
  960. 9["Block 9:\n %10 = load i32, i32* %4, align 4\n %11 = load i32, i32* %3, align 4\n %12 = sdiv i32 %11, 2\n %13 = icmp slt i32 %10, %12\n br i1 %13, label %14, label %43\n"]:::critical
  961. 9 -->|true| 14
  962. 9 -->|false| 43
  963. 14["Block 14:\n %15 = load i8*, i8** %2, align 8\n %16 = load i32, i32* %4, align 4\n %17 = sext i32 %16 to i64\n %18 = getelementptr inbounds i8, i8* %15, i64...\n %19 = load i8, i8* %18, align 1\n store i8 %19, i8* %5, align 1\n %20 = load i8*, i8** %2, align 8\n %21 = load i32, i32* %3, align 4\n %22 = sub nsw i32 %21, 1\n %23 = load i32, i32* %4, align 4\n %24 = sub nsw i32 %22, %23\n %25 = sext i32 %24 to i64\n %26 = getelementptr inbounds i8, i8* %20, i64...\n %27 = load i8, i8* %26, align 1\n %28 = load i8*, i8** %2, align 8\n %29 = load i32, i32* %4, align 4\n %30 = sext i32 %29 to i64\n %31 = getelementptr inbounds i8, i8* %28, i64...\n store i8 %27, i8* %31, align 1\n %32 = load i8, i8* %5, align 1\n %33 = load i8*, i8** %2, align 8\n %34 = load i32, i32* %3, align 4\n %35 = sub nsw i32 %34, 1\n %36 = load i32, i32* %4, align 4\n %37 = sub nsw i32 %35, %36\n %38 = sext i32 %37 to i64\n %39 = getelementptr inbounds i8, i8* %33, i64...\n store i8 %32, i8* %39, align 1\n br label %40\n"]
  964. 14 --> 40
  965. 40["Block 40:\n %41 = load i32, i32* %4, align 4\n %42 = add nsw i32 %41, 1\n store i32 %42, i32* %4, align 4\n br label %9\n"]
  966. 40 --> 9
  967. 43["Block 43:\n ret void\n"]:::critical
  968. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  969. ```
  970. ```mermaid: longestIncreasingSubsequence
  971. graph TD
  972. 2["Block 2:\n %3 = alloca i32*, align 8\n %4 = alloca i32, align 4\n %5 = alloca [100 x i32], align 16\n %6 = alloca i32, align 4\n %7 = alloca i32, align 4\n %8 = alloca i32, align 4\n %9 = alloca i32, align 4\n %10 = alloca i32, align 4\n store i32* %0, i32** %3, align 8\n store i32 %1, i32* %4, align 4\n store i32 0, i32* %6, align 4\n br label %11\n"]:::critical
  973. 2 --> 11
  974. 11["Block 11:\n %12 = load i32, i32* %6, align 4\n %13 = load i32, i32* %4, align 4\n %14 = icmp slt i32 %12, %13\n br i1 %14, label %15, label %22\n"]:::critical
  975. 11 -->|true| 15
  976. 11 -->|false| 22
  977. 15["Block 15:\n %16 = load i32, i32* %6, align 4\n %17 = sext i32 %16 to i64\n %18 = getelementptr inbounds [100 x i32], [10...\n store i32 1, i32* %18, align 4\n br label %19\n"]
  978. 15 --> 19
  979. 19["Block 19:\n %20 = load i32, i32* %6, align 4\n %21 = add nsw i32 %20, 1\n store i32 %21, i32* %6, align 4\n br label %11\n"]
  980. 19 --> 11
  981. 22["Block 22:\n store i32 1, i32* %7, align 4\n br label %23\n"]:::critical
  982. 22 --> 23
  983. 23["Block 23:\n %24 = load i32, i32* %7, align 4\n %25 = load i32, i32* %4, align 4\n %26 = icmp slt i32 %24, %25\n br i1 %26, label %27, label %72\n"]:::critical
  984. 23 -->|true| 27
  985. 23 -->|false| 72
  986. 27["Block 27:\n store i32 0, i32* %8, align 4\n br label %28\n"]
  987. 27 --> 28
  988. 28["Block 28:\n %29 = load i32, i32* %8, align 4\n %30 = load i32, i32* %7, align 4\n %31 = icmp slt i32 %29, %30\n br i1 %31, label %32, label %68\n"]
  989. 28 -->|true| 32
  990. 28 -->|false| 68
  991. 32["Block 32:\n %33 = load i32*, i32** %3, align 8\n %34 = load i32, i32* %7, align 4\n %35 = sext i32 %34 to i64\n %36 = getelementptr inbounds i32, i32* %33, i...\n %37 = load i32, i32* %36, align 4\n %38 = load i32*, i32** %3, align 8\n %39 = load i32, i32* %8, align 4\n %40 = sext i32 %39 to i64\n %41 = getelementptr inbounds i32, i32* %38, i...\n %42 = load i32, i32* %41, align 4\n %43 = icmp sgt i32 %37, %42\n br i1 %43, label %44, label %64\n"]
  992. 32 -->|true| 44
  993. 32 -->|false| 64
  994. 44["Block 44:\n %45 = load i32, i32* %7, align 4\n %46 = sext i32 %45 to i64\n %47 = getelementptr inbounds [100 x i32], [10...\n %48 = load i32, i32* %47, align 4\n %49 = load i32, i32* %8, align 4\n %50 = sext i32 %49 to i64\n %51 = getelementptr inbounds [100 x i32], [10...\n %52 = load i32, i32* %51, align 4\n %53 = add nsw i32 %52, 1\n %54 = icmp slt i32 %48, %53\n br i1 %54, label %55, label %64\n"]
  995. 44 -->|true| 55
  996. 44 -->|false| 64
  997. 55["Block 55:\n %56 = load i32, i32* %8, align 4\n %57 = sext i32 %56 to i64\n %58 = getelementptr inbounds [100 x i32], [10...\n %59 = load i32, i32* %58, align 4\n %60 = add nsw i32 %59, 1\n %61 = load i32, i32* %7, align 4\n %62 = sext i32 %61 to i64\n %63 = getelementptr inbounds [100 x i32], [10...\n store i32 %60, i32* %63, align 4\n br label %64\n"]
  998. 55 --> 64
  999. 64["Block 64:\n br label %65\n"]
  1000. 64 --> 65
  1001. 65["Block 65:\n %66 = load i32, i32* %8, align 4\n %67 = add nsw i32 %66, 1\n store i32 %67, i32* %8, align 4\n br label %28\n"]
  1002. 65 --> 28
  1003. 68["Block 68:\n br label %69\n"]
  1004. 68 --> 69
  1005. 69["Block 69:\n %70 = load i32, i32* %7, align 4\n %71 = add nsw i32 %70, 1\n store i32 %71, i32* %7, align 4\n br label %23\n"]
  1006. 69 --> 23
  1007. 72["Block 72:\n store i32 0, i32* %9, align 4\n store i32 0, i32* %10, align 4\n br label %73\n"]:::critical
  1008. 72 --> 73
  1009. 73["Block 73:\n %74 = load i32, i32* %10, align 4\n %75 = load i32, i32* %4, align 4\n %76 = icmp slt i32 %74, %75\n br i1 %76, label %77, label %93\n"]:::critical
  1010. 73 -->|true| 77
  1011. 73 -->|false| 93
  1012. 77["Block 77:\n %78 = load i32, i32* %9, align 4\n %79 = load i32, i32* %10, align 4\n %80 = sext i32 %79 to i64\n %81 = getelementptr inbounds [100 x i32], [10...\n %82 = load i32, i32* %81, align 4\n %83 = icmp slt i32 %78, %82\n br i1 %83, label %84, label %89\n"]
  1013. 77 -->|true| 84
  1014. 77 -->|false| 89
  1015. 84["Block 84:\n %85 = load i32, i32* %10, align 4\n %86 = sext i32 %85 to i64\n %87 = getelementptr inbounds [100 x i32], [10...\n %88 = load i32, i32* %87, align 4\n store i32 %88, i32* %9, align 4\n br label %89\n"]
  1016. 84 --> 89
  1017. 89["Block 89:\n br label %90\n"]
  1018. 89 --> 90
  1019. 90["Block 90:\n %91 = load i32, i32* %10, align 4\n %92 = add nsw i32 %91, 1\n store i32 %92, i32* %10, align 4\n br label %73\n"]
  1020. 90 --> 73
  1021. 93["Block 93:\n %94 = load i32, i32* %9, align 4\n ret i32 %94\n"]:::critical
  1022. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  1023. ```
  1024. ```mermaid: testPoints
  1025. graph TD
  1026. 1["Block 1:\n %2 = alloca i32, align 4\n %3 = alloca i32, align 4\n %4 = alloca i32, align 4\n %5 = alloca i32, align 4\n store i32 %0, i32* %3, align 4\n store i32 0, i32* %4, align 4\n store i32 1, i32* %5, align 4\n br label %6\n"]:::critical
  1027. 1 --> 6
  1028. 6["Block 6:\n %7 = load i32, i32* %5, align 4\n %8 = icmp slt i32 %7, 5\n br i1 %8, label %9, label %19\n"]:::critical
  1029. 6 -->|true| 9
  1030. 6 -->|false| 19
  1031. 9["Block 9:\n %10 = load i32, i32* %4, align 4\n %11 = add nsw i32 %10, 1\n store i32 %11, i32* %4, align 4\n %12 = load i32, i32* %3, align 4\n %13 = icmp sgt i32 %12, 2\n br i1 %13, label %14, label %15\n"]
  1032. 9 -->|true| 14
  1033. 9 -->|false| 15
  1034. 14["Block 14:\n store i32 23, i32* %2, align 4\n br label %21\n"]
  1035. 14 --> 21
  1036. 15["Block 15:\n br label %16\n"]
  1037. 15 --> 16
  1038. 16["Block 16:\n %17 = load i32, i32* %5, align 4\n %18 = add nsw i32 %17, 1\n store i32 %18, i32* %5, align 4\n br label %6\n"]
  1039. 16 --> 6
  1040. 19["Block 19:\n %20 = load i32, i32* %4, align 4\n store i32 %20, i32* %2, align 4\n br label %21\n"]
  1041. 19 --> 21
  1042. 21["Block 21:\n %22 = load i32, i32* %2, align 4\n ret i32 %22\n"]:::critical
  1043. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  1044. ```
  1045. ```mermaid: countSetBits
  1046. graph TD
  1047. 1["Block 1:\n %2 = alloca i32, align 4\n %3 = alloca i32, align 4\n store i32 %0, i32* %2, align 4\n store i32 0, i32* %3, align 4\n br label %4\n"]:::critical
  1048. 1 --> 4
  1049. 4["Block 4:\n %5 = load i32, i32* %2, align 4\n %6 = icmp ne i32 %5, 0\n br i1 %6, label %7, label %14\n"]:::critical
  1050. 4 -->|true| 7
  1051. 4 -->|false| 14
  1052. 7["Block 7:\n %8 = load i32, i32* %2, align 4\n %9 = and i32 %8, 1\n %10 = load i32, i32* %3, align 4\n %11 = add nsw i32 %10, %9\n store i32 %11, i32* %3, align 4\n %12 = load i32, i32* %2, align 4\n %13 = ashr i32 %12, 1\n store i32 %13, i32* %2, align 4\n br label %4\n"]
  1053. 7 --> 4
  1054. 14["Block 14:\n %15 = load i32, i32* %3, align 4\n ret i32 %15\n"]:::critical
  1055. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  1056. ```
  1057. ```mermaid: memoizedFib
  1058. graph TD
  1059. 1["Block 1:\n %2 = alloca i32, align 4\n %3 = alloca i32, align 4\n store i32 %0, i32* %3, align 4\n %4 = load i32, i32* %3, align 4\n %5 = sext i32 %4 to i64\n %6 = getelementptr inbounds [100 x i32], [100...\n %7 = load i32, i32* %6, align 4\n %8 = icmp ne i32 %7, -1\n br i1 %8, label %9, label %14\n"]:::critical
  1060. 1 -->|true| 9
  1061. 1 -->|false| 14
  1062. 9["Block 9:\n %10 = load i32, i32* %3, align 4\n %11 = sext i32 %10 to i64\n %12 = getelementptr inbounds [100 x i32], [10...\n %13 = load i32, i32* %12, align 4\n store i32 %13, i32* %2, align 4\n br label %34\n"]
  1063. 9 --> 34
  1064. 14["Block 14:\n %15 = load i32, i32* %3, align 4\n %16 = icmp sle i32 %15, 1\n br i1 %16, label %17, label %19\n"]
  1065. 14 -->|true| 17
  1066. 14 -->|false| 19
  1067. 17["Block 17:\n %18 = load i32, i32* %3, align 4\n store i32 %18, i32* %2, align 4\n br label %34\n"]
  1068. 17 --> 34
  1069. 19["Block 19:\n %20 = load i32, i32* %3, align 4\n %21 = sub nsw i32 %20, 1\n %22 = call i32 @memoizedFib(i32 %21)\n %23 = load i32, i32* %3, align 4\n %24 = sub nsw i32 %23, 2\n %25 = call i32 @memoizedFib(i32 %24)\n %26 = add nsw i32 %22, %25\n %27 = load i32, i32* %3, align 4\n %28 = sext i32 %27 to i64\n %29 = getelementptr inbounds [100 x i32], [10...\n store i32 %26, i32* %29, align 4\n %30 = load i32, i32* %3, align 4\n %31 = sext i32 %30 to i64\n %32 = getelementptr inbounds [100 x i32], [10...\n %33 = load i32, i32* %32, align 4\n store i32 %33, i32* %2, align 4\n br label %34\n"]
  1070. 19 --> 34
  1071. 34["Block 34:\n %35 = load i32, i32* %2, align 4\n ret i32 %35\n"]:::critical
  1072. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  1073. ```
  1074. ```mermaid: processMatrix
  1075. graph TD
  1076. 2["Block 2:\n %3 = alloca [100 x i32]*, align 8\n %4 = alloca i32, align 4\n %5 = alloca i32, align 4\n %6 = alloca i32, align 4\n %7 = alloca i32, align 4\n store [100 x i32]* %0, [100 x i32]** %3, align 8\n store i32 %1, i32* %4, align 4\n store i32 0, i32* %5, align 4\n store i32 0, i32* %6, align 4\n br label %8\n"]:::critical
  1077. 2 --> 8
  1078. 8["Block 8:\n %9 = load i32, i32* %6, align 4\n %10 = load i32, i32* %4, align 4\n %11 = icmp slt i32 %9, %10\n br i1 %11, label %12, label %80\n"]:::critical
  1079. 8 -->|true| 12
  1080. 8 -->|false| 80
  1081. 12["Block 12:\n store i32 0, i32* %7, align 4\n br label %13\n"]
  1082. 12 --> 13
  1083. 13["Block 13:\n %14 = load i32, i32* %7, align 4\n %15 = load i32, i32* %4, align 4\n %16 = icmp slt i32 %14, %15\n br i1 %16, label %17, label %76\n"]
  1084. 13 -->|true| 17
  1085. 13 -->|false| 76
  1086. 17["Block 17:\n %18 = load i32, i32* %6, align 4\n %19 = load i32, i32* %7, align 4\n %20 = icmp eq i32 %18, %19\n br i1 %20, label %21, label %55\n"]
  1087. 17 -->|true| 21
  1088. 17 -->|false| 55
  1089. 21["Block 21:\n %22 = load [100 x i32]*, [100 x i32]** %3, al...\n %23 = load i32, i32* %6, align 4\n %24 = sext i32 %23 to i64\n %25 = getelementptr inbounds [100 x i32], [10...\n %26 = load i32, i32* %7, align 4\n %27 = sext i32 %26 to i64\n %28 = getelementptr inbounds [100 x i32], [10...\n %29 = load i32, i32* %28, align 4\n %30 = srem i32 %29, 2\n %31 = icmp eq i32 %30, 0\n br i1 %31, label %32, label %43\n"]
  1090. 21 -->|true| 32
  1091. 21 -->|false| 43
  1092. 32["Block 32:\n %33 = load [100 x i32]*, [100 x i32]** %3, al...\n %34 = load i32, i32* %6, align 4\n %35 = sext i32 %34 to i64\n %36 = getelementptr inbounds [100 x i32], [10...\n %37 = load i32, i32* %7, align 4\n %38 = sext i32 %37 to i64\n %39 = getelementptr inbounds [100 x i32], [10...\n %40 = load i32, i32* %39, align 4\n %41 = load i32, i32* %5, align 4\n %42 = add nsw i32 %41, %40\n store i32 %42, i32* %5, align 4\n br label %54\n"]
  1093. 32 --> 54
  1094. 43["Block 43:\n %44 = load [100 x i32]*, [100 x i32]** %3, al...\n %45 = load i32, i32* %6, align 4\n %46 = sext i32 %45 to i64\n %47 = getelementptr inbounds [100 x i32], [10...\n %48 = load i32, i32* %7, align 4\n %49 = sext i32 %48 to i64\n %50 = getelementptr inbounds [100 x i32], [10...\n %51 = load i32, i32* %50, align 4\n %52 = load i32, i32* %5, align 4\n %53 = sub nsw i32 %52, %51\n store i32 %53, i32* %5, align 4\n br label %54\n"]
  1095. 43 --> 54
  1096. 54["Block 54:\n br label %72\n"]
  1097. 54 --> 72
  1098. 55["Block 55:\n %56 = load i32, i32* %6, align 4\n %57 = load i32, i32* %7, align 4\n %58 = icmp slt i32 %56, %57\n br i1 %58, label %59, label %71\n"]
  1099. 55 -->|true| 59
  1100. 55 -->|false| 71
  1101. 59["Block 59:\n %60 = load [100 x i32]*, [100 x i32]** %3, al...\n %61 = load i32, i32* %6, align 4\n %62 = sext i32 %61 to i64\n %63 = getelementptr inbounds [100 x i32], [10...\n %64 = load i32, i32* %7, align 4\n %65 = sext i32 %64 to i64\n %66 = getelementptr inbounds [100 x i32], [10...\n %67 = load i32, i32* %66, align 4\n %68 = call i32 @countSetBits(i32 %67)\n %69 = load i32, i32* %5, align 4\n %70 = add nsw i32 %69, %68\n store i32 %70, i32* %5, align 4\n br label %71\n"]
  1102. 59 --> 71
  1103. 71["Block 71:\n br label %72\n"]
  1104. 71 --> 72
  1105. 72["Block 72:\n br label %73\n"]
  1106. 72 --> 73
  1107. 73["Block 73:\n %74 = load i32, i32* %7, align 4\n %75 = add nsw i32 %74, 1\n store i32 %75, i32* %7, align 4\n br label %13\n"]
  1108. 73 --> 13
  1109. 76["Block 76:\n br label %77\n"]
  1110. 76 --> 77
  1111. 77["Block 77:\n %78 = load i32, i32* %6, align 4\n %79 = add nsw i32 %78, 1\n store i32 %79, i32* %6, align 4\n br label %8\n"]
  1112. 77 --> 8
  1113. 80["Block 80:\n %81 = load i32, i32* %5, align 4\n ret i32 %81\n"]:::critical
  1114. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  1115. ```
  1116. ```mermaid: projectB_main
  1117. graph TD
  1118. 0["Block 0:\n %1 = alloca [14 x i8], align 1\n %2 = alloca [8 x i32], align 16\n %3 = alloca i32, align 4\n %4 = alloca i32, align 4\n %5 = alloca [100 x [100 x i32]], align 16\n %6 = alloca i32, align 4\n %7 = alloca i32, align 4\n %8 = alloca i32, align 4\n %9 = call i32 @testPoints(i32 5)\n call void @llvm.memset.p0i8.i64(i8* align 16 ...\n %10 = bitcast [14 x i8]* %1 to i8*\n call void @llvm.memcpy.p0i8.p0i8.i64(i8* alig...\n %11 = getelementptr inbounds [14 x i8], [14 x...\n call void @reverseString(i8* %11)\n %12 = bitcast [8 x i32]* %2 to i8*\n call void @llvm.memcpy.p0i8.p0i8.i64(i8* alig...\n store i32 8, i32* %3, align 4\n %13 = getelementptr inbounds [8 x i32], [8 x ...\n %14 = load i32, i32* %3, align 4\n %15 = call i32 @longestIncreasingSubsequence(...\n store i32 %15, i32* %4, align 4\n %16 = bitcast [100 x [100 x i32]]* %5 to i8*\n call void @llvm.memcpy.p0i8.p0i8.i64(i8* alig...\n %17 = getelementptr inbounds [100 x [100 x i3...\n %18 = call i32 @processMatrix([100 x i32]* %1...\n store i32 %18, i32* %6, align 4\n store i32 0, i32* %7, align 4\n br label %19\n"]:::critical
  1119. 0 --> 19
  1120. 19["Block 19:\n %20 = load i32, i32* %7, align 4\n %21 = call i32 @memoizedFib(i32 %20)\n %22 = load i32, i32* %7, align 4\n %23 = add nsw i32 %22, 1\n store i32 %23, i32* %7, align 4\n br label %24\n"]:::critical
  1121. 19 --> 24
  1122. 24["Block 24:\n %25 = load i32, i32* %7, align 4\n %26 = icmp slt i32 %25, 10\n br i1 %26, label %19, label %27\n"]:::critical
  1123. 24 -->|true| 19
  1124. 24 -->|false| 27
  1125. 27["Block 27:\n %28 = load i32, i32* %4, align 4\n %29 = icmp sgt i32 %28, 5\n br i1 %29, label %30, label %40\n"]:::critical
  1126. 27 -->|true| 30
  1127. 27 -->|false| 40
  1128. 30["Block 30:\n %31 = load i32, i32* %6, align 4\n %32 = icmp sgt i32 %31, 0\n br i1 %32, label %33, label %36\n"]
  1129. 30 -->|true| 33
  1130. 30 -->|false| 36
  1131. 33["Block 33:\n %34 = load i32, i32* %4, align 4\n %35 = call i32 @memoizedFib(i32 %34)\n store i32 %35, i32* %8, align 4\n br label %39\n"]
  1132. 33 --> 39
  1133. 36["Block 36:\n %37 = load i32, i32* %6, align 4\n %38 = call i32 @countSetBits(i32 %37)\n store i32 %38, i32* %8, align 4\n br label %39\n"]
  1134. 36 --> 39
  1135. 39["Block 39:\n br label %47\n"]
  1136. 39 --> 47
  1137. 40["Block 40:\n %41 = getelementptr inbounds [14 x i8], [14 x...\n %42 = call i64 @strlen(i8* %41) #7\n %43 = load i32, i32* %6, align 4\n %44 = sext i32 %43 to i64\n %45 = add i64 %42, %44\n %46 = trunc i64 %45 to i32\n store i32 %46, i32* %8, align 4\n br label %47\n"]
  1138. 40 --> 47
  1139. 47["Block 47:\n %48 = load i32, i32* %8, align 4\n ret i32 %48\n"]:::critical
  1140. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  1141. ```
  1142. [INFO][runOnModule] Creating slices for target functions
  1143. [INFO][runOnModule] targetFuncName: countSetBits
  1144. [INFO][createFunctionSlices] Created 2 slices for target function countSetBits
  1145. [DEBUG][createFunctionSlices] Slice 0 of function countSetBits contains blocks: %1
  1146. [DEBUG][createFunctionSlices] Slice 1 of function countSetBits contains blocks: %4, %7, %14
  1147. [INFO][runOnModule] targetFuncName: longestIncreasingSubsequence
  1148. [INFO][createFunctionSlices] Created 4 slices for target function longestIncreasingSubsequence
  1149. [DEBUG][createFunctionSlices] Slice 0 of function longestIncreasingSubsequence contains blocks: %2
  1150. [DEBUG][createFunctionSlices] Slice 1 of function longestIncreasingSubsequence contains blocks: %11, %15, %22, %19
  1151. [DEBUG][createFunctionSlices] Slice 2 of function longestIncreasingSubsequence contains blocks: %23, %27, %72, %28, %32, %68, %44, %64, %69, %55, %65
  1152. [DEBUG][createFunctionSlices] Slice 3 of function longestIncreasingSubsequence contains blocks: %73, %77, %93, %84, %89, %90
  1153. [INFO][runOnModule] targetFuncName: memoizedFib
  1154. [INFO][createFunctionSlices] Created 1 slices for target function memoizedFib
  1155. [DEBUG][createFunctionSlices] Slice 0 of function memoizedFib contains blocks: %1, %9, %14, %34, %17, %19
  1156. [INFO][runOnModule] targetFuncName: processMatrix
  1157. [INFO][createFunctionSlices] Created 2 slices for target function processMatrix
  1158. [DEBUG][createFunctionSlices] Slice 0 of function processMatrix contains blocks: %2
  1159. [DEBUG][createFunctionSlices] Slice 1 of function processMatrix contains blocks: %8, %12, %80, %13, %17, %76, %21, %55, %77, %32, %43, %59, %71, %54, %72, %73
  1160. [INFO][runOnModule] targetFuncName: projectB_main
  1161. [INFO][createFunctionSlices] Created 3 slices for target function projectB_main
  1162. [DEBUG][createFunctionSlices] Slice 0 of function projectB_main contains blocks: %0
  1163. [DEBUG][createFunctionSlices] Slice 1 of function projectB_main contains blocks: %19, %24
  1164. [DEBUG][createFunctionSlices] Slice 2 of function projectB_main contains blocks: %27, %30, %40, %33, %36, %47, %39
  1165. [INFO][runOnModule] targetFuncName: reverseString
  1166. [INFO][createFunctionSlices] Created 2 slices for target function reverseString
  1167. [DEBUG][createFunctionSlices] Slice 0 of function reverseString contains blocks: %1
  1168. [DEBUG][createFunctionSlices] Slice 1 of function reverseString contains blocks: %9, %14, %43, %40
  1169. [INFO][runOnModule] targetFuncName: testPoints
  1170. [INFO][createFunctionSlices] Created 2 slices for target function testPoints
  1171. [DEBUG][createFunctionSlices] Slice 0 of function testPoints contains blocks: %1
  1172. [DEBUG][createFunctionSlices] Slice 1 of function testPoints contains blocks: %6, %9, %19, %14, %15, %21, %16
  1173. [INFO][runOnModule] Creating fusion points for bunker functions
  1174. [INFO][runOnModule] bunkerFuncName: calculateCircleArea
  1175. [INFO][countFusionPoints] Counted 2 fusion points for bunker function calculateCircleArea
  1176. [INFO][runOnModule] bunkerFuncName: calculateDistance
  1177. [INFO][countFusionPoints] Counted 2 fusion points for bunker function calculateDistance
  1178. [INFO][runOnModule] bunkerFuncName: createDynamicArray
  1179. [INFO][countFusionPoints] Counted 2 fusion points for bunker function createDynamicArray
  1180. [INFO][runOnModule] bunkerFuncName: createMatrix
  1181. [INFO][countFusionPoints] Counted 2 fusion points for bunker function createMatrix
  1182. [INFO][runOnModule] bunkerFuncName: factorial
  1183. [INFO][countFusionPoints] Counted 2 fusion points for bunker function factorial
  1184. [INFO][runOnModule] bunkerFuncName: findCentroid
  1185. [INFO][countFusionPoints] Counted 2 fusion points for bunker function findCentroid
  1186. [INFO][runOnModule] bunkerFuncName: getErrorMessage
  1187. [INFO][countFusionPoints] Counted 2 fusion points for bunker function getErrorMessage
  1188. [INFO][runOnModule] bunkerFuncName: insertNode
  1189. [INFO][countFusionPoints] Counted 2 fusion points for bunker function insertNode
  1190. [INFO][runOnModule] bunkerFuncName: multiplyMatrices
  1191. [INFO][countFusionPoints] Counted 2 fusion points for bunker function multiplyMatrices
  1192. [INFO][runOnModule] bunkerFuncName: performSimpleCalculations
  1193. [INFO][countFusionPoints] Counted 7 fusion points for bunker function performSimpleCalculations
  1194. [INFO][runOnModule] bunkerFuncName: projectA_main
  1195. [INFO][countFusionPoints] Counted 2 fusion points for bunker function projectA_main
  1196. [INFO][runOnModule] bunkerFuncName: pushBack
  1197. [INFO][countFusionPoints] Counted 2 fusion points for bunker function pushBack
  1198. [INFO][runOnModule] bunkerFuncName: quickSort
  1199. [INFO][countFusionPoints] Counted 2 fusion points for bunker function quickSort
  1200. [INFO][runOnModule] bunkerFuncName: removeDuplicates
  1201. [INFO][countFusionPoints] Counted 2 fusion points for bunker function removeDuplicates
  1202. [INFO][runOnModule] bunkerFuncName: setErrorMessage
  1203. [INFO][countFusionPoints] Counted 3 fusion points for bunker function setErrorMessage
  1204. [INFO][runOnModule] bunkerFuncName: validateMatrix
  1205. [INFO][countFusionPoints] Counted 2 fusion points for bunker function validateMatrix
  1206. [INFO][matchFunctionsForFusion] Starting function matching process
  1207. [INFO][matchFunctionsForFusion] Matched target longestIncreasingSubsequence (4 slices) with bunker projectA_main (7 fusion points)
  1208. [INFO][matchFunctionsForFusion] Matched target projectB_main (3 slices) with bunker setErrorMessage (3 fusion points)
  1209. [INFO][matchFunctionsForFusion] Matched target countSetBits (2 slices) with bunker removeDuplicates (2 fusion points)
  1210. [INFO][matchFunctionsForFusion] Matched target processMatrix (2 slices) with bunker createMatrix (2 fusion points)
  1211. [INFO][matchFunctionsForFusion] Matched target reverseString (2 slices) with bunker factorial (2 fusion points)
  1212. [INFO][matchFunctionsForFusion] Matched target testPoints (2 slices) with bunker matchFunctionsFo (2 fusion points)
  1213. [INFO][matchFunctionsForFusion] Matched target memoizedFib (1 slices) with bunker ÐRk<���� e<� (2 fusion points)
  1214. [INFO][generateFusionMatchGraph] Generating fusion match visualization
  1215. ```mermaid
  1216. graph LR
  1217. %% Fusion Match Graph
  1218. %% Left side: Target Project, Right side: Bunker Project
  1219. subgraph Target["Target Project"]
  1220. direction TB
  1221. countSetBits["countSetBits\nSliceNum: 2"]:::target
  1222. longestIncreasingSubsequence["longestIncreasingSubsequence\nSliceNum: 4"]:::target
  1223. memoizedFib["memoizedFib\nSliceNum: 1"]:::target
  1224. processMatrix["processMatrix\nSliceNum: 2"]:::target
  1225. projectB_main["projectB_main\nSliceNum: 3"]:::target
  1226. reverseString["reverseString\nSliceNum: 2"]:::target
  1227. testPoints["testPoints\nSliceNum: 2"]:::target
  1228. end
  1229. subgraph Bunker["Bunker Project"]
  1230. direction TB
  1231. calculateCircleArea["calculateCircleArea\nCritical Points: 2"]:::bunker
  1232. calculateDistance["calculateDistance\nCritical Points: 2"]:::bunker
  1233. createDynamicArray["createDynamicArray\nCritical Points: 2"]:::bunker
  1234. createMatrix["createMatrix\nCritical Points: 2"]:::bunker
  1235. factorial["factorial\nCritical Points: 2"]:::bunker
  1236. findCentroid["findCentroid\nCritical Points: 2"]:::bunker
  1237. getErrorMessage["getErrorMessage\nCritical Points: 2"]:::bunker
  1238. insertNode["insertNode\nCritical Points: 2"]:::bunker
  1239. multiplyMatrices["multiplyMatrices\nCritical Points: 2"]:::bunker
  1240. performSimpleCalculations["performSimpleCalculations\nCritical Points: 7"]:::bunker
  1241. projectA_main["projectA_main\nCritical Points: 2"]:::bunker
  1242. pushBack["pushBack\nCritical Points: 2"]:::bunker
  1243. quickSort["quickSort\nCritical Points: 2"]:::bunker
  1244. removeDuplicates["removeDuplicates\nCritical Points: 2"]:::bunker
  1245. setErrorMessage["setErrorMessage\nCritical Points: 3"]:::bunker
  1246. validateMatrix["validateMatrix\nCritical Points: 2"]:::bunker
  1247. end
  1248. %% Fusion Matches
  1249. countSetBits ==>|fusion| quickSort
  1250. longestIncreasingSubsequence ==>|fusion| performSimpleCalculations
  1251. memoizedFib ==>|fusion| projectA_main
  1252. processMatrix ==>|fusion| createDynamicArray
  1253. projectB_main ==>|fusion| setErrorMessage
  1254. reverseString ==>|fusion| createMatrix
  1255. testPoints ==>|fusion| removeDuplicates
  1256. %% Styles
  1257. classDef target fill:#f96,stroke:#333,stroke-width:2px
  1258. classDef bunker fill:#9cf,stroke:#333,stroke-width:2px
  1259. style Target fill:#fff,stroke:#f96,stroke-width:2px
  1260. style Bunker fill:#fff,stroke:#9cf,stroke-width:2px
  1261. ```
  1262. [INFO][generateFusionMatchGraph] Generated visualization with 7 target functions and 16 bunker functions
  1263. [INFO][generateFusionMatchGraph] Total fusion matches: 7
  1264. [INFO][performCodeFusion] Starting code fusion
  1265. [INFO][performCodeFusion] Processing function pair: target=countSetBits, bunker=quickSort
  1266. [DEBUG][performCodeFusion] Processing return values for fused function: fused_quickSort
  1267. [DEBUG][performCodeFusion] Fused function return type: i32
  1268. [DEBUG][performCodeFusion] Non-struct return type detected: i32
  1269. [DEBUG][performCodeFusion] Updated bunker return in block %264 with value type i32
  1270. [DEBUG][performCodeFusion] Updated target return in block %262 with value type i32
  1271. [DEBUG][updateCallSite] Original call instruction:
  1272. call void @quickSort(i32* %237, i32 %239, i32 %240, i32* %241)
  1273. [DEBUG][updateCallSite] Adding bunker control parameter
  1274. [DEBUG][updateCallSite] Adding original call parameters:
  1275. [DEBUG][updateCallSite] Argument 0: type=i32*
  1276. [DEBUG][updateCallSite] Argument 1: type=i32
  1277. [DEBUG][updateCallSite] Argument 2: type=i32
  1278. [DEBUG][updateCallSite] Argument 3: type=i32*
  1279. [DEBUG][updateCallSite] Adding default target parameters:
  1280. [DEBUG][updateCallSite] Parameter type: i32
  1281. [DEBUG][updateCallSite] New call instruction:
  1282. %242 = call i32 @fused_quickSort(i1 false, i32* %237, i32 %239, i32 %240, i32* %241, i32 0)
  1283. [DEBUG][updateCallSite] Void return type, no value processing needed
  1284. [INFO][updateCallSite] Successfully updated call site from call void @quickSort(i32* %237, i32 %239, i32 %240, i32* %241) to %242 = call i32 @fused_quickSort(i1 false, i32* %237, i32 %239, i32 %240, i32* %241, i32 0)
  1285. [DEBUG][updateCallSite] Original call instruction:
  1286. call void @quickSort(i32* %226, i32 %227, i32 %228, i32* %229)
  1287. [DEBUG][updateCallSite] Adding bunker control parameter
  1288. [DEBUG][updateCallSite] Adding original call parameters:
  1289. [DEBUG][updateCallSite] Argument 0: type=i32*
  1290. [DEBUG][updateCallSite] Argument 1: type=i32
  1291. [DEBUG][updateCallSite] Argument 2: type=i32
  1292. [DEBUG][updateCallSite] Argument 3: type=i32*
  1293. [DEBUG][updateCallSite] Adding default target parameters:
  1294. [DEBUG][updateCallSite] Parameter type: i32
  1295. [DEBUG][updateCallSite] New call instruction:
  1296. %230 = call i32 @fused_quickSort(i1 false, i32* %226, i32 %227, i32 %228, i32* %229, i32 0)
  1297. [DEBUG][updateCallSite] Void return type, no value processing needed
  1298. [INFO][updateCallSite] Successfully updated call site from call void @quickSort(i32* %226, i32 %227, i32 %228, i32* %229) to %230 = call i32 @fused_quickSort(i1 false, i32* %226, i32 %227, i32 %228, i32* %229, i32 0)
  1299. [DEBUG][updateCallSite] Original call instruction:
  1300. call void @quickSort(i32* %23, i32 0, i32 %27, i32* %3)
  1301. [DEBUG][updateCallSite] Adding bunker control parameter
  1302. [DEBUG][updateCallSite] Adding original call parameters:
  1303. [DEBUG][updateCallSite] Argument 0: type=i32*
  1304. [DEBUG][updateCallSite] Argument 1: type=i32
  1305. [DEBUG][updateCallSite] Argument 2: type=i32
  1306. [DEBUG][updateCallSite] Argument 3: type=i32*
  1307. [DEBUG][updateCallSite] Adding default target parameters:
  1308. [DEBUG][updateCallSite] Parameter type: i32
  1309. [DEBUG][updateCallSite] New call instruction:
  1310. %28 = call i32 @fused_quickSort(i1 false, i32* %23, i32 0, i32 %27, i32* %3, i32 0)
  1311. [DEBUG][updateCallSite] Void return type, no value processing needed
  1312. [INFO][updateCallSite] Successfully updated call site from call void @quickSort(i32* %23, i32 0, i32 %27, i32* %3) to %28 = call i32 @fused_quickSort(i1 false, i32* %23, i32 0, i32 %27, i32* %3, i32 0)
  1313. [DEBUG][updateCallSite] Original call instruction:
  1314. call void @quickSort(i32* %232, i32 %234, i32 %235, i32* %236)
  1315. [DEBUG][updateCallSite] Adding bunker control parameter
  1316. [DEBUG][updateCallSite] Adding original call parameters:
  1317. [DEBUG][updateCallSite] Argument 0: type=i32*
  1318. [DEBUG][updateCallSite] Argument 1: type=i32
  1319. [DEBUG][updateCallSite] Argument 2: type=i32
  1320. [DEBUG][updateCallSite] Argument 3: type=i32*
  1321. [DEBUG][updateCallSite] Adding default target parameters:
  1322. [DEBUG][updateCallSite] Parameter type: i32
  1323. [DEBUG][updateCallSite] New call instruction:
  1324. %237 = call i32 @fused_quickSort(i1 false, i32* %232, i32 %234, i32 %235, i32* %236, i32 0)
  1325. [DEBUG][updateCallSite] Void return type, no value processing needed
  1326. [INFO][updateCallSite] Successfully updated call site from call void @quickSort(i32* %232, i32 %234, i32 %235, i32* %236) to %237 = call i32 @fused_quickSort(i1 false, i32* %232, i32 %234, i32 %235, i32* %236, i32 0)
  1327. [DEBUG][updateCallSite] Original call instruction:
  1328. call void @quickSort(i32* %221, i32 %222, i32 %223, i32* %224)
  1329. [DEBUG][updateCallSite] Adding bunker control parameter
  1330. [DEBUG][updateCallSite] Adding original call parameters:
  1331. [DEBUG][updateCallSite] Argument 0: type=i32*
  1332. [DEBUG][updateCallSite] Argument 1: type=i32
  1333. [DEBUG][updateCallSite] Argument 2: type=i32
  1334. [DEBUG][updateCallSite] Argument 3: type=i32*
  1335. [DEBUG][updateCallSite] Adding default target parameters:
  1336. [DEBUG][updateCallSite] Parameter type: i32
  1337. [DEBUG][updateCallSite] New call instruction:
  1338. %225 = call i32 @fused_quickSort(i1 false, i32* %221, i32 %222, i32 %223, i32* %224, i32 0)
  1339. [DEBUG][updateCallSite] Void return type, no value processing needed
  1340. [INFO][updateCallSite] Successfully updated call site from call void @quickSort(i32* %221, i32 %222, i32 %223, i32* %224) to %225 = call i32 @fused_quickSort(i1 false, i32* %221, i32 %222, i32 %223, i32* %224, i32 0)
  1341. [DEBUG][updateCallSite] Original call instruction:
  1342. %38 = call i32 @countSetBits(i32 %37)
  1343. [DEBUG][updateCallSite] Adding target control parameter
  1344. [DEBUG][updateCallSite] Adding default bunker parameters:
  1345. [DEBUG][updateCallSite] Parameter type: i32*
  1346. [DEBUG][updateCallSite] Parameter type: i32
  1347. [DEBUG][updateCallSite] Parameter type: i32
  1348. [DEBUG][updateCallSite] Parameter type: i32*
  1349. [DEBUG][updateCallSite] Adding original call parameters:
  1350. [DEBUG][updateCallSite] Argument 0: type=i32
  1351. [DEBUG][updateCallSite] New call instruction:
  1352. %38 = call i32 @fused_quickSort(i1 true, i32* null, i32 0, i32 0, i32* null, i32 %37)
  1353. [DEBUG][updateCallSite] Processing non-void return value of type: i32
  1354. [DEBUG][updateCallSite] Using direct return value
  1355. [DEBUG][updateCallSite] Successfully replaced all uses of original call
  1356. [INFO][updateCallSite] Successfully updated call site from %38 = call i32 @countSetBits(i32 %37) to %38 = call i32 @fused_quickSort(i1 true, i32* null, i32 0, i32 0, i32* null, i32 %37)
  1357. [DEBUG][updateCallSite] Original call instruction:
  1358. %68 = call i32 @countSetBits(i32 %67)
  1359. [DEBUG][updateCallSite] Adding target control parameter
  1360. [DEBUG][updateCallSite] Adding default bunker parameters:
  1361. [DEBUG][updateCallSite] Parameter type: i32*
  1362. [DEBUG][updateCallSite] Parameter type: i32
  1363. [DEBUG][updateCallSite] Parameter type: i32
  1364. [DEBUG][updateCallSite] Parameter type: i32*
  1365. [DEBUG][updateCallSite] Adding original call parameters:
  1366. [DEBUG][updateCallSite] Argument 0: type=i32
  1367. [DEBUG][updateCallSite] New call instruction:
  1368. %68 = call i32 @fused_quickSort(i1 true, i32* null, i32 0, i32 0, i32* null, i32 %67)
  1369. [DEBUG][updateCallSite] Processing non-void return value of type: i32
  1370. [DEBUG][updateCallSite] Using direct return value
  1371. [DEBUG][updateCallSite] Successfully replaced all uses of original call
  1372. [INFO][updateCallSite] Successfully updated call site from %68 = call i32 @countSetBits(i32 %67) to %68 = call i32 @fused_quickSort(i1 true, i32* null, i32 0, i32 0, i32* null, i32 %67)
  1373. [INFO][performCodeFusion] Listing all return instructions in fused function: fused_quickSort
  1374. [INFO][performCodeFusion] Return instruction in block :
  1375. ret i32 %265
  1376. [INFO][performCodeFusion] Return value type: i32
  1377. [INFO][performCodeFusion] Return instruction in block :
  1378. ret i32 0
  1379. [INFO][performCodeFusion] Return value type: i32
  1380. [INFO][performCodeFusion] Completed function fusion: fused_quickSort
  1381. [INFO][performCodeFusion] Processing function pair: target=longestIncreasingSubsequence, bunker=performSimpleCalculations
  1382. [DEBUG][performCodeFusion] Processing return values for fused function: fused_performSimpleCalculations
  1383. [DEBUG][performCodeFusion] Fused function return type: i32
  1384. [DEBUG][performCodeFusion] Non-struct return type detected: i32
  1385. [DEBUG][performCodeFusion] Updated bunker return in block %159 with value type i32
  1386. [DEBUG][performCodeFusion] Updated target return in block %121 with value type i32
  1387. [DEBUG][updateCallSite] Original call instruction:
  1388. call void @performSimpleCalculations()
  1389. [DEBUG][updateCallSite] Adding bunker control parameter
  1390. [DEBUG][updateCallSite] Adding original call parameters:
  1391. [DEBUG][updateCallSite] Adding default target parameters:
  1392. [DEBUG][updateCallSite] Parameter type: i32*
  1393. [DEBUG][updateCallSite] Parameter type: i32
  1394. [DEBUG][updateCallSite] New call instruction:
  1395. %322 = call i32 @fused_performSimpleCalculations(i1 false, i32* null, i32 0)
  1396. [DEBUG][updateCallSite] Void return type, no value processing needed
  1397. [INFO][updateCallSite] Successfully updated call site from call void @performSimpleCalculations() to %322 = call i32 @fused_performSimpleCalculations(i1 false, i32* null, i32 0)
  1398. [DEBUG][updateCallSite] Original call instruction:
  1399. %15 = call i32 @longestIncreasingSubsequence(i32* %13, i32 %14)
  1400. [DEBUG][updateCallSite] Adding target control parameter
  1401. [DEBUG][updateCallSite] Adding default bunker parameters:
  1402. [DEBUG][updateCallSite] Adding original call parameters:
  1403. [DEBUG][updateCallSite] Argument 0: type=i32*
  1404. [DEBUG][updateCallSite] Argument 1: type=i32
  1405. [DEBUG][updateCallSite] New call instruction:
  1406. %15 = call i32 @fused_performSimpleCalculations(i1 true, i32* %13, i32 %14)
  1407. [DEBUG][updateCallSite] Processing non-void return value of type: i32
  1408. [DEBUG][updateCallSite] Using direct return value
  1409. [DEBUG][updateCallSite] Successfully replaced all uses of original call
  1410. [INFO][updateCallSite] Successfully updated call site from %15 = call i32 @longestIncreasingSubsequence(i32* %13, i32 %14) to %15 = call i32 @fused_performSimpleCalculations(i1 true, i32* %13, i32 %14)
  1411. [INFO][performCodeFusion] Listing all return instructions in fused function: fused_performSimpleCalculations
  1412. [INFO][performCodeFusion] Return instruction in block :
  1413. ret i32 %122
  1414. [INFO][performCodeFusion] Return value type: i32
  1415. [INFO][performCodeFusion] Return instruction in block :
  1416. ret i32 0
  1417. [INFO][performCodeFusion] Return value type: i32
  1418. [INFO][performCodeFusion] Completed function fusion: fused_performSimpleCalculations
  1419. [INFO][performCodeFusion] Processing function pair: target=memoizedFib, bunker=projectA_main
  1420. [DEBUG][performCodeFusion] Processing return values for fused function: fused_projectA_main
  1421. [DEBUG][performCodeFusion] Fused function return type: fused_return_projectA_main_memoizedFib
  1422. [DEBUG][performCodeFusion] Processing struct return type with 2 elements
  1423. [DEBUG][performCodeFusion] Setting default target return value
  1424. [DEBUG][performCodeFusion] Target type is integer type, setting to 0
  1425. [DEBUG][performCodeFusion] Created struct return for bunker block: %360 with types: target=i32, bunker=i32
  1426. [DEBUG][performCodeFusion] Created struct return for target block: %18 with types: target=i32, bunker=i32
  1427. [DEBUG][updateCallSite] Original call instruction:
  1428. %29 = call i32 @memoizedFib(i32 %28)
  1429. [DEBUG][updateCallSite] Adding target control parameter
  1430. [DEBUG][updateCallSite] Adding default bunker parameters:
  1431. [DEBUG][updateCallSite] Adding original call parameters:
  1432. [DEBUG][updateCallSite] Argument 0: type=i32
  1433. [DEBUG][updateCallSite] New call instruction:
  1434. %29 = call %fused_return_projectA_main_memoizedFib @fused_projectA_main(i1 true, i32 %28)
  1435. [DEBUG][updateCallSite] Processing non-void return value of type: i32
  1436. [DEBUG][updateCallSite] Extracting value from struct return type
  1437. [DEBUG][updateCallSite] Extracted value type: i32
  1438. [DEBUG][updateCallSite] Successfully replaced all uses of original call
  1439. [INFO][updateCallSite] Successfully updated call site from %29 = call i32 @memoizedFib(i32 %28) to %29 = call %fused_return_projectA_main_memoizedFib @fused_projectA_main(i1 true, i32 %28)
  1440. [DEBUG][updateCallSite] Original call instruction:
  1441. %26 = call i32 @memoizedFib(i32 %25)
  1442. [DEBUG][updateCallSite] Adding target control parameter
  1443. [DEBUG][updateCallSite] Adding default bunker parameters:
  1444. [DEBUG][updateCallSite] Adding original call parameters:
  1445. [DEBUG][updateCallSite] Argument 0: type=i32
  1446. [DEBUG][updateCallSite] New call instruction:
  1447. %26 = call %fused_return_projectA_main_memoizedFib @fused_projectA_main(i1 true, i32 %25)
  1448. [DEBUG][updateCallSite] Processing non-void return value of type: i32
  1449. [DEBUG][updateCallSite] Extracting value from struct return type
  1450. [DEBUG][updateCallSite] Extracted value type: i32
  1451. [DEBUG][updateCallSite] Successfully replaced all uses of original call
  1452. [INFO][updateCallSite] Successfully updated call site from %26 = call i32 @memoizedFib(i32 %25) to %26 = call %fused_return_projectA_main_memoizedFib @fused_projectA_main(i1 true, i32 %25)
  1453. [DEBUG][updateCallSite] Original call instruction:
  1454. %35 = call i32 @memoizedFib(i32 %34)
  1455. [DEBUG][updateCallSite] Adding target control parameter
  1456. [DEBUG][updateCallSite] Adding default bunker parameters:
  1457. [DEBUG][updateCallSite] Adding original call parameters:
  1458. [DEBUG][updateCallSite] Argument 0: type=i32
  1459. [DEBUG][updateCallSite] New call instruction:
  1460. %35 = call %fused_return_projectA_main_memoizedFib @fused_projectA_main(i1 true, i32 %34)
  1461. [DEBUG][updateCallSite] Processing non-void return value of type: i32
  1462. [DEBUG][updateCallSite] Extracting value from struct return type
  1463. [DEBUG][updateCallSite] Extracted value type: i32
  1464. [DEBUG][updateCallSite] Successfully replaced all uses of original call
  1465. [INFO][updateCallSite] Successfully updated call site from %35 = call i32 @memoizedFib(i32 %34) to %35 = call %fused_return_projectA_main_memoizedFib @fused_projectA_main(i1 true, i32 %34)
  1466. [DEBUG][updateCallSite] Original call instruction:
  1467. %21 = call i32 @memoizedFib(i32 %20)
  1468. [DEBUG][updateCallSite] Adding target control parameter
  1469. [DEBUG][updateCallSite] Adding default bunker parameters:
  1470. [DEBUG][updateCallSite] Adding original call parameters:
  1471. [DEBUG][updateCallSite] Argument 0: type=i32
  1472. [DEBUG][updateCallSite] New call instruction:
  1473. %21 = call %fused_return_projectA_main_memoizedFib @fused_projectA_main(i1 true, i32 %20)
  1474. [DEBUG][updateCallSite] Processing non-void return value of type: i32
  1475. [DEBUG][updateCallSite] Extracting value from struct return type
  1476. [DEBUG][updateCallSite] Extracted value type: i32
  1477. [DEBUG][updateCallSite] Successfully replaced all uses of original call
  1478. [INFO][updateCallSite] Successfully updated call site from %21 = call i32 @memoizedFib(i32 %20) to %21 = call %fused_return_projectA_main_memoizedFib @fused_projectA_main(i1 true, i32 %20)
  1479. [DEBUG][updateCallSite] Original call instruction:
  1480. %25 = call i32 @memoizedFib(i32 %24)
  1481. [DEBUG][updateCallSite] Adding target control parameter
  1482. [DEBUG][updateCallSite] Adding default bunker parameters:
  1483. [DEBUG][updateCallSite] Adding original call parameters:
  1484. [DEBUG][updateCallSite] Argument 0: type=i32
  1485. [DEBUG][updateCallSite] New call instruction:
  1486. %25 = call %fused_return_projectA_main_memoizedFib @fused_projectA_main(i1 true, i32 %24)
  1487. [DEBUG][updateCallSite] Processing non-void return value of type: i32
  1488. [DEBUG][updateCallSite] Extracting value from struct return type
  1489. [DEBUG][updateCallSite] Extracted value type: i32
  1490. [DEBUG][updateCallSite] Successfully replaced all uses of original call
  1491. [INFO][updateCallSite] Successfully updated call site from %25 = call i32 @memoizedFib(i32 %24) to %25 = call %fused_return_projectA_main_memoizedFib @fused_projectA_main(i1 true, i32 %24)
  1492. [DEBUG][updateCallSite] Original call instruction:
  1493. %22 = call i32 @memoizedFib(i32 %21)
  1494. [DEBUG][updateCallSite] Adding target control parameter
  1495. [DEBUG][updateCallSite] Adding default bunker parameters:
  1496. [DEBUG][updateCallSite] Adding original call parameters:
  1497. [DEBUG][updateCallSite] Argument 0: type=i32
  1498. [DEBUG][updateCallSite] New call instruction:
  1499. %22 = call %fused_return_projectA_main_memoizedFib @fused_projectA_main(i1 true, i32 %21)
  1500. [DEBUG][updateCallSite] Processing non-void return value of type: i32
  1501. [DEBUG][updateCallSite] Extracting value from struct return type
  1502. [DEBUG][updateCallSite] Extracted value type: i32
  1503. [DEBUG][updateCallSite] Successfully replaced all uses of original call
  1504. [INFO][updateCallSite] Successfully updated call site from %22 = call i32 @memoizedFib(i32 %21) to %22 = call %fused_return_projectA_main_memoizedFib @fused_projectA_main(i1 true, i32 %21)
  1505. [INFO][performCodeFusion] Listing all return instructions in fused function: fused_projectA_main
  1506. [INFO][performCodeFusion] Return instruction in block :
  1507. ret %fused_return_projectA_main_memoizedFib %20
  1508. [INFO][performCodeFusion] Return value type: fused_return_projectA_main_memoizedFib
  1509. [INFO][performCodeFusion] Return instruction in block :
  1510. ret %fused_return_projectA_main_memoizedFib %363
  1511. [INFO][performCodeFusion] Return value type: fused_return_projectA_main_memoizedFib
  1512. [INFO][performCodeFusion] Completed function fusion: fused_projectA_main
  1513. [INFO][performCodeFusion] Processing function pair: target=processMatrix, bunker=createDynamicArray
  1514. [DEBUG][performCodeFusion] Processing return values for fused function: fused_createDynamicArray
  1515. [DEBUG][performCodeFusion] Fused function return type: fused_return_createDynamicArray_processMatrix
  1516. [DEBUG][performCodeFusion] Processing struct return type with 2 elements
  1517. [DEBUG][performCodeFusion] Setting default target return value
  1518. [DEBUG][performCodeFusion] Target type is integer type, setting to 0
  1519. [DEBUG][performCodeFusion] Created struct return for bunker block: %127 with types: target=i32, bunker=struct.DynamicArray*
  1520. [DEBUG][performCodeFusion] Created struct return for target block: %58 with types: target=i32, bunker=struct.DynamicArray*
  1521. [DEBUG][updateCallSite] Original call instruction:
  1522. %60 = call %struct.DynamicArray* @createDynamicArray(i32 10)
  1523. [DEBUG][updateCallSite] Adding bunker control parameter
  1524. [DEBUG][updateCallSite] Adding original call parameters:
  1525. [DEBUG][updateCallSite] Argument 0: type=i32
  1526. [DEBUG][updateCallSite] Adding default target parameters:
  1527. [DEBUG][updateCallSite] Parameter type: array of i32*
  1528. [DEBUG][updateCallSite] Parameter type: i32
  1529. [DEBUG][updateCallSite] New call instruction:
  1530. %60 = call %fused_return_createDynamicArray_processMatrix @fused_createDynamicArray(i1 false, i32 10, [100 x i32]* null, i32 0)
  1531. [DEBUG][updateCallSite] Processing non-void return value of type: struct.DynamicArray*
  1532. [DEBUG][updateCallSite] Extracting value from struct return type
  1533. [DEBUG][updateCallSite] Extracted value type: struct.DynamicArray*
  1534. [DEBUG][updateCallSite] Successfully replaced all uses of original call
  1535. [INFO][updateCallSite] Successfully updated call site from %60 = call %struct.DynamicArray* @createDynamicArray(i32 10) to %60 = call %fused_return_createDynamicArray_processMatrix @fused_createDynamicArray(i1 false, i32 10, [100 x i32]* null, i32 0)
  1536. [DEBUG][updateCallSite] Original call instruction:
  1537. %18 = call i32 @processMatrix([100 x i32]* %17, i32 3)
  1538. [DEBUG][updateCallSite] Adding target control parameter
  1539. [DEBUG][updateCallSite] Adding default bunker parameters:
  1540. [DEBUG][updateCallSite] Parameter type: i32
  1541. [DEBUG][updateCallSite] Adding original call parameters:
  1542. [DEBUG][updateCallSite] Argument 0: type=array of i32*
  1543. [DEBUG][updateCallSite] Argument 1: type=i32
  1544. [DEBUG][updateCallSite] New call instruction:
  1545. %18 = call %fused_return_createDynamicArray_processMatrix @fused_createDynamicArray(i1 true, i32 0, [100 x i32]* %17, i32 3)
  1546. [DEBUG][updateCallSite] Processing non-void return value of type: i32
  1547. [DEBUG][updateCallSite] Extracting value from struct return type
  1548. [DEBUG][updateCallSite] Extracted value type: i32
  1549. [DEBUG][updateCallSite] Successfully replaced all uses of original call
  1550. [INFO][updateCallSite] Successfully updated call site from %18 = call i32 @processMatrix([100 x i32]* %17, i32 3) to %18 = call %fused_return_createDynamicArray_processMatrix @fused_createDynamicArray(i1 true, i32 0, [100 x i32]* %17, i32 3)
  1551. [INFO][performCodeFusion] Listing all return instructions in fused function: fused_createDynamicArray
  1552. [INFO][performCodeFusion] Return instruction in block :
  1553. ret %fused_return_createDynamicArray_processMatrix %60
  1554. [INFO][performCodeFusion] Return value type: fused_return_createDynamicArray_processMatrix
  1555. [INFO][performCodeFusion] Return instruction in block :
  1556. ret %fused_return_createDynamicArray_processMatrix %130
  1557. [INFO][performCodeFusion] Return value type: fused_return_createDynamicArray_processMatrix
  1558. [INFO][performCodeFusion] Completed function fusion: fused_createDynamicArray
  1559. [INFO][performCodeFusion] Processing function pair: target=projectB_main, bunker=setErrorMessage
  1560. [DEBUG][performCodeFusion] Processing return values for fused function: fused_setErrorMessage
  1561. [DEBUG][performCodeFusion] Fused function return type: i32
  1562. [DEBUG][performCodeFusion] Non-struct return type detected: i32
  1563. [DEBUG][performCodeFusion] Updated bunker return in block %70 with value type i32
  1564. [DEBUG][performCodeFusion] Updated target return in block %67 with value type i32
  1565. [DEBUG][updateCallSite] Original call instruction:
  1566. call void @setErrorMessage(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.9, i64 0, i64 0))
  1567. [DEBUG][updateCallSite] Adding bunker control parameter
  1568. [DEBUG][updateCallSite] Adding original call parameters:
  1569. [DEBUG][updateCallSite] Argument 0: type=i8*
  1570. [DEBUG][updateCallSite] Adding default target parameters:
  1571. [DEBUG][updateCallSite] New call instruction:
  1572. %42 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.9, i64 0, i64 0))
  1573. [DEBUG][updateCallSite] Void return type, no value processing needed
  1574. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.9, i64 0, i64 0)) to %42 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.9, i64 0, i64 0))
  1575. [DEBUG][updateCallSite] Original call instruction:
  1576. call void @setErrorMessage(i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.8, i64 0, i64 0))
  1577. [DEBUG][updateCallSite] Adding bunker control parameter
  1578. [DEBUG][updateCallSite] Adding original call parameters:
  1579. [DEBUG][updateCallSite] Argument 0: type=i8*
  1580. [DEBUG][updateCallSite] Adding default target parameters:
  1581. [DEBUG][updateCallSite] New call instruction:
  1582. %27 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.8, i64 0, i64 0))
  1583. [DEBUG][updateCallSite] Void return type, no value processing needed
  1584. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.8, i64 0, i64 0)) to %27 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.8, i64 0, i64 0))
  1585. [DEBUG][updateCallSite] Original call instruction:
  1586. call void @setErrorMessage(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.6, i64 0, i64 0))
  1587. [DEBUG][updateCallSite] Adding bunker control parameter
  1588. [DEBUG][updateCallSite] Adding original call parameters:
  1589. [DEBUG][updateCallSite] Argument 0: type=i8*
  1590. [DEBUG][updateCallSite] Adding default target parameters:
  1591. [DEBUG][updateCallSite] New call instruction:
  1592. %17 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.6, i64 0, i64 0))
  1593. [DEBUG][updateCallSite] Void return type, no value processing needed
  1594. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.6, i64 0, i64 0)) to %17 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.6, i64 0, i64 0))
  1595. [DEBUG][updateCallSite] Original call instruction:
  1596. call void @setErrorMessage(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.7, i64 0, i64 0))
  1597. [DEBUG][updateCallSite] Adding bunker control parameter
  1598. [DEBUG][updateCallSite] Adding original call parameters:
  1599. [DEBUG][updateCallSite] Argument 0: type=i8*
  1600. [DEBUG][updateCallSite] Adding default target parameters:
  1601. [DEBUG][updateCallSite] New call instruction:
  1602. %22 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.7, i64 0, i64 0))
  1603. [DEBUG][updateCallSite] Void return type, no value processing needed
  1604. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.7, i64 0, i64 0)) to %22 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.7, i64 0, i64 0))
  1605. [DEBUG][updateCallSite] Original call instruction:
  1606. call void @setErrorMessage(i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.31, i64 0, i64 0))
  1607. [DEBUG][updateCallSite] Adding bunker control parameter
  1608. [DEBUG][updateCallSite] Adding original call parameters:
  1609. [DEBUG][updateCallSite] Argument 0: type=i8*
  1610. [DEBUG][updateCallSite] Adding default target parameters:
  1611. [DEBUG][updateCallSite] New call instruction:
  1612. %317 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.31, i64 0, i64 0))
  1613. [DEBUG][updateCallSite] Void return type, no value processing needed
  1614. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.31, i64 0, i64 0)) to %317 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.31, i64 0, i64 0))
  1615. [DEBUG][updateCallSite] Original call instruction:
  1616. call void @setErrorMessage(i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.15, i64 0, i64 0))
  1617. [DEBUG][updateCallSite] Adding bunker control parameter
  1618. [DEBUG][updateCallSite] Adding original call parameters:
  1619. [DEBUG][updateCallSite] Argument 0: type=i8*
  1620. [DEBUG][updateCallSite] Adding default target parameters:
  1621. [DEBUG][updateCallSite] New call instruction:
  1622. %47 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.15, i64 0, i64 0))
  1623. [DEBUG][updateCallSite] Void return type, no value processing needed
  1624. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.15, i64 0, i64 0)) to %47 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.15, i64 0, i64 0))
  1625. [DEBUG][updateCallSite] Original call instruction:
  1626. call void @setErrorMessage(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.14, i64 0, i64 0))
  1627. [DEBUG][updateCallSite] Adding bunker control parameter
  1628. [DEBUG][updateCallSite] Adding original call parameters:
  1629. [DEBUG][updateCallSite] Argument 0: type=i8*
  1630. [DEBUG][updateCallSite] Adding default target parameters:
  1631. [DEBUG][updateCallSite] New call instruction:
  1632. %31 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.14, i64 0, i64 0))
  1633. [DEBUG][updateCallSite] Void return type, no value processing needed
  1634. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.14, i64 0, i64 0)) to %31 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.14, i64 0, i64 0))
  1635. [DEBUG][updateCallSite] Original call instruction:
  1636. call void @setErrorMessage(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.13, i64 0, i64 0))
  1637. [DEBUG][updateCallSite] Adding bunker control parameter
  1638. [DEBUG][updateCallSite] Adding original call parameters:
  1639. [DEBUG][updateCallSite] Argument 0: type=i8*
  1640. [DEBUG][updateCallSite] Adding default target parameters:
  1641. [DEBUG][updateCallSite] New call instruction:
  1642. %24 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.13, i64 0, i64 0))
  1643. [DEBUG][updateCallSite] Void return type, no value processing needed
  1644. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.13, i64 0, i64 0)) to %24 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.13, i64 0, i64 0))
  1645. [DEBUG][updateCallSite] Original call instruction:
  1646. call void @setErrorMessage(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.55, i64 0, i64 0))
  1647. [DEBUG][updateCallSite] Adding bunker control parameter
  1648. [DEBUG][updateCallSite] Adding original call parameters:
  1649. [DEBUG][updateCallSite] Argument 0: type=i8*
  1650. [DEBUG][updateCallSite] Adding default target parameters:
  1651. [DEBUG][updateCallSite] New call instruction:
  1652. %139 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.55, i64 0, i64 0))
  1653. [DEBUG][updateCallSite] Void return type, no value processing needed
  1654. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.55, i64 0, i64 0)) to %139 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.55, i64 0, i64 0))
  1655. [DEBUG][updateCallSite] Original call instruction:
  1656. call void @setErrorMessage(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.54, i64 0, i64 0))
  1657. [DEBUG][updateCallSite] Adding bunker control parameter
  1658. [DEBUG][updateCallSite] Adding original call parameters:
  1659. [DEBUG][updateCallSite] Argument 0: type=i8*
  1660. [DEBUG][updateCallSite] Adding default target parameters:
  1661. [DEBUG][updateCallSite] New call instruction:
  1662. %128 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.54, i64 0, i64 0))
  1663. [DEBUG][updateCallSite] Void return type, no value processing needed
  1664. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.54, i64 0, i64 0)) to %128 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.54, i64 0, i64 0))
  1665. [DEBUG][updateCallSite] Original call instruction:
  1666. call void @setErrorMessage(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.53, i64 0, i64 0))
  1667. [DEBUG][updateCallSite] Adding bunker control parameter
  1668. [DEBUG][updateCallSite] Adding original call parameters:
  1669. [DEBUG][updateCallSite] Argument 0: type=i8*
  1670. [DEBUG][updateCallSite] Adding default target parameters:
  1671. [DEBUG][updateCallSite] New call instruction:
  1672. %48 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.53, i64 0, i64 0))
  1673. [DEBUG][updateCallSite] Void return type, no value processing needed
  1674. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.53, i64 0, i64 0)) to %48 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.53, i64 0, i64 0))
  1675. [DEBUG][updateCallSite] Original call instruction:
  1676. call void @setErrorMessage(i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.52, i64 0, i64 0))
  1677. [DEBUG][updateCallSite] Adding bunker control parameter
  1678. [DEBUG][updateCallSite] Adding original call parameters:
  1679. [DEBUG][updateCallSite] Argument 0: type=i8*
  1680. [DEBUG][updateCallSite] Adding default target parameters:
  1681. [DEBUG][updateCallSite] New call instruction:
  1682. %33 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.52, i64 0, i64 0))
  1683. [DEBUG][updateCallSite] Void return type, no value processing needed
  1684. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.52, i64 0, i64 0)) to %33 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.52, i64 0, i64 0))
  1685. [DEBUG][updateCallSite] Original call instruction:
  1686. call void @setErrorMessage(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.51, i64 0, i64 0))
  1687. [DEBUG][updateCallSite] Adding bunker control parameter
  1688. [DEBUG][updateCallSite] Adding original call parameters:
  1689. [DEBUG][updateCallSite] Argument 0: type=i8*
  1690. [DEBUG][updateCallSite] Adding default target parameters:
  1691. [DEBUG][updateCallSite] New call instruction:
  1692. %26 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.51, i64 0, i64 0))
  1693. [DEBUG][updateCallSite] Void return type, no value processing needed
  1694. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.51, i64 0, i64 0)) to %26 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.51, i64 0, i64 0))
  1695. [DEBUG][updateCallSite] Original call instruction:
  1696. call void @setErrorMessage(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.50, i64 0, i64 0))
  1697. [DEBUG][updateCallSite] Adding bunker control parameter
  1698. [DEBUG][updateCallSite] Adding original call parameters:
  1699. [DEBUG][updateCallSite] Argument 0: type=i8*
  1700. [DEBUG][updateCallSite] Adding default target parameters:
  1701. [DEBUG][updateCallSite] New call instruction:
  1702. %21 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.50, i64 0, i64 0))
  1703. [DEBUG][updateCallSite] Void return type, no value processing needed
  1704. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.50, i64 0, i64 0)) to %21 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.50, i64 0, i64 0))
  1705. [DEBUG][updateCallSite] Original call instruction:
  1706. call void @setErrorMessage(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.49, i64 0, i64 0))
  1707. [DEBUG][updateCallSite] Adding bunker control parameter
  1708. [DEBUG][updateCallSite] Adding original call parameters:
  1709. [DEBUG][updateCallSite] Argument 0: type=i8*
  1710. [DEBUG][updateCallSite] Adding default target parameters:
  1711. [DEBUG][updateCallSite] New call instruction:
  1712. %14 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.49, i64 0, i64 0))
  1713. [DEBUG][updateCallSite] Void return type, no value processing needed
  1714. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.49, i64 0, i64 0)) to %14 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.49, i64 0, i64 0))
  1715. [DEBUG][updateCallSite] Original call instruction:
  1716. call void @setErrorMessage(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.48, i64 0, i64 0))
  1717. [DEBUG][updateCallSite] Adding bunker control parameter
  1718. [DEBUG][updateCallSite] Adding original call parameters:
  1719. [DEBUG][updateCallSite] Argument 0: type=i8*
  1720. [DEBUG][updateCallSite] Adding default target parameters:
  1721. [DEBUG][updateCallSite] New call instruction:
  1722. %71 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.48, i64 0, i64 0))
  1723. [DEBUG][updateCallSite] Void return type, no value processing needed
  1724. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.48, i64 0, i64 0)) to %71 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.48, i64 0, i64 0))
  1725. [DEBUG][updateCallSite] Original call instruction:
  1726. call void @setErrorMessage(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.47, i64 0, i64 0))
  1727. [DEBUG][updateCallSite] Adding bunker control parameter
  1728. [DEBUG][updateCallSite] Adding original call parameters:
  1729. [DEBUG][updateCallSite] Argument 0: type=i8*
  1730. [DEBUG][updateCallSite] Adding default target parameters:
  1731. [DEBUG][updateCallSite] New call instruction:
  1732. %53 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.47, i64 0, i64 0))
  1733. [DEBUG][updateCallSite] Void return type, no value processing needed
  1734. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.47, i64 0, i64 0)) to %53 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.47, i64 0, i64 0))
  1735. [DEBUG][updateCallSite] Original call instruction:
  1736. call void @setErrorMessage(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.46, i64 0, i64 0))
  1737. [DEBUG][updateCallSite] Adding bunker control parameter
  1738. [DEBUG][updateCallSite] Adding original call parameters:
  1739. [DEBUG][updateCallSite] Argument 0: type=i8*
  1740. [DEBUG][updateCallSite] Adding default target parameters:
  1741. [DEBUG][updateCallSite] New call instruction:
  1742. %36 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.46, i64 0, i64 0))
  1743. [DEBUG][updateCallSite] Void return type, no value processing needed
  1744. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.46, i64 0, i64 0)) to %36 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.46, i64 0, i64 0))
  1745. [DEBUG][updateCallSite] Original call instruction:
  1746. call void @setErrorMessage(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.16, i64 0, i64 0))
  1747. [DEBUG][updateCallSite] Adding bunker control parameter
  1748. [DEBUG][updateCallSite] Adding original call parameters:
  1749. [DEBUG][updateCallSite] Argument 0: type=i8*
  1750. [DEBUG][updateCallSite] Adding default target parameters:
  1751. [DEBUG][updateCallSite] New call instruction:
  1752. %25 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.16, i64 0, i64 0))
  1753. [DEBUG][updateCallSite] Void return type, no value processing needed
  1754. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.16, i64 0, i64 0)) to %25 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.16, i64 0, i64 0))
  1755. [DEBUG][updateCallSite] Original call instruction:
  1756. call void @setErrorMessage(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.45, i64 0, i64 0))
  1757. [DEBUG][updateCallSite] Adding bunker control parameter
  1758. [DEBUG][updateCallSite] Adding original call parameters:
  1759. [DEBUG][updateCallSite] Argument 0: type=i8*
  1760. [DEBUG][updateCallSite] Adding default target parameters:
  1761. [DEBUG][updateCallSite] New call instruction:
  1762. %14 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.45, i64 0, i64 0))
  1763. [DEBUG][updateCallSite] Void return type, no value processing needed
  1764. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.45, i64 0, i64 0)) to %14 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.45, i64 0, i64 0))
  1765. [DEBUG][updateCallSite] Original call instruction:
  1766. call void @setErrorMessage(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.21, i64 0, i64 0))
  1767. [DEBUG][updateCallSite] Adding bunker control parameter
  1768. [DEBUG][updateCallSite] Adding original call parameters:
  1769. [DEBUG][updateCallSite] Argument 0: type=i8*
  1770. [DEBUG][updateCallSite] Adding default target parameters:
  1771. [DEBUG][updateCallSite] New call instruction:
  1772. %8 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.21, i64 0, i64 0))
  1773. [DEBUG][updateCallSite] Void return type, no value processing needed
  1774. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.21, i64 0, i64 0)) to %8 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.21, i64 0, i64 0))
  1775. [DEBUG][updateCallSite] Original call instruction:
  1776. call void @setErrorMessage(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.44, i64 0, i64 0))
  1777. [DEBUG][updateCallSite] Adding bunker control parameter
  1778. [DEBUG][updateCallSite] Adding original call parameters:
  1779. [DEBUG][updateCallSite] Argument 0: type=i8*
  1780. [DEBUG][updateCallSite] Adding default target parameters:
  1781. [DEBUG][updateCallSite] New call instruction:
  1782. %85 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.44, i64 0, i64 0))
  1783. [DEBUG][updateCallSite] Void return type, no value processing needed
  1784. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.44, i64 0, i64 0)) to %85 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.44, i64 0, i64 0))
  1785. [DEBUG][updateCallSite] Original call instruction:
  1786. call void @setErrorMessage(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.43, i64 0, i64 0))
  1787. [DEBUG][updateCallSite] Adding bunker control parameter
  1788. [DEBUG][updateCallSite] Adding original call parameters:
  1789. [DEBUG][updateCallSite] Argument 0: type=i8*
  1790. [DEBUG][updateCallSite] Adding default target parameters:
  1791. [DEBUG][updateCallSite] New call instruction:
  1792. %77 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.43, i64 0, i64 0))
  1793. [DEBUG][updateCallSite] Void return type, no value processing needed
  1794. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.43, i64 0, i64 0)) to %77 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.43, i64 0, i64 0))
  1795. [DEBUG][updateCallSite] Original call instruction:
  1796. call void @setErrorMessage(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.40, i64 0, i64 0))
  1797. [DEBUG][updateCallSite] Adding bunker control parameter
  1798. [DEBUG][updateCallSite] Adding original call parameters:
  1799. [DEBUG][updateCallSite] Argument 0: type=i8*
  1800. [DEBUG][updateCallSite] Adding default target parameters:
  1801. [DEBUG][updateCallSite] New call instruction:
  1802. %58 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.40, i64 0, i64 0))
  1803. [DEBUG][updateCallSite] Void return type, no value processing needed
  1804. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.40, i64 0, i64 0)) to %58 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.40, i64 0, i64 0))
  1805. [DEBUG][updateCallSite] Original call instruction:
  1806. call void @setErrorMessage(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.39, i64 0, i64 0))
  1807. [DEBUG][updateCallSite] Adding bunker control parameter
  1808. [DEBUG][updateCallSite] Adding original call parameters:
  1809. [DEBUG][updateCallSite] Argument 0: type=i8*
  1810. [DEBUG][updateCallSite] Adding default target parameters:
  1811. [DEBUG][updateCallSite] New call instruction:
  1812. %38 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.39, i64 0, i64 0))
  1813. [DEBUG][updateCallSite] Void return type, no value processing needed
  1814. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.39, i64 0, i64 0)) to %38 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.39, i64 0, i64 0))
  1815. [DEBUG][updateCallSite] Original call instruction:
  1816. call void @setErrorMessage(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.38, i64 0, i64 0))
  1817. [DEBUG][updateCallSite] Adding bunker control parameter
  1818. [DEBUG][updateCallSite] Adding original call parameters:
  1819. [DEBUG][updateCallSite] Argument 0: type=i8*
  1820. [DEBUG][updateCallSite] Adding default target parameters:
  1821. [DEBUG][updateCallSite] New call instruction:
  1822. %24 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.38, i64 0, i64 0))
  1823. [DEBUG][updateCallSite] Void return type, no value processing needed
  1824. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.38, i64 0, i64 0)) to %24 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.38, i64 0, i64 0))
  1825. [DEBUG][updateCallSite] Original call instruction:
  1826. call void @setErrorMessage(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.37, i64 0, i64 0))
  1827. [DEBUG][updateCallSite] Adding bunker control parameter
  1828. [DEBUG][updateCallSite] Adding original call parameters:
  1829. [DEBUG][updateCallSite] Argument 0: type=i8*
  1830. [DEBUG][updateCallSite] Adding default target parameters:
  1831. [DEBUG][updateCallSite] New call instruction:
  1832. %18 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.37, i64 0, i64 0))
  1833. [DEBUG][updateCallSite] Void return type, no value processing needed
  1834. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.37, i64 0, i64 0)) to %18 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.37, i64 0, i64 0))
  1835. [DEBUG][updateCallSite] Original call instruction:
  1836. call void @setErrorMessage(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.36, i64 0, i64 0))
  1837. [DEBUG][updateCallSite] Adding bunker control parameter
  1838. [DEBUG][updateCallSite] Adding original call parameters:
  1839. [DEBUG][updateCallSite] Argument 0: type=i8*
  1840. [DEBUG][updateCallSite] Adding default target parameters:
  1841. [DEBUG][updateCallSite] New call instruction:
  1842. %12 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.36, i64 0, i64 0))
  1843. [DEBUG][updateCallSite] Void return type, no value processing needed
  1844. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.36, i64 0, i64 0)) to %12 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.36, i64 0, i64 0))
  1845. [DEBUG][updateCallSite] Original call instruction:
  1846. call void @setErrorMessage(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.35, i64 0, i64 0))
  1847. [DEBUG][updateCallSite] Adding bunker control parameter
  1848. [DEBUG][updateCallSite] Adding original call parameters:
  1849. [DEBUG][updateCallSite] Argument 0: type=i8*
  1850. [DEBUG][updateCallSite] Adding default target parameters:
  1851. [DEBUG][updateCallSite] New call instruction:
  1852. %99 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.35, i64 0, i64 0))
  1853. [DEBUG][updateCallSite] Void return type, no value processing needed
  1854. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.35, i64 0, i64 0)) to %99 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.35, i64 0, i64 0))
  1855. [DEBUG][updateCallSite] Original call instruction:
  1856. call void @setErrorMessage(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.34, i64 0, i64 0))
  1857. [DEBUG][updateCallSite] Adding bunker control parameter
  1858. [DEBUG][updateCallSite] Adding original call parameters:
  1859. [DEBUG][updateCallSite] Argument 0: type=i8*
  1860. [DEBUG][updateCallSite] Adding default target parameters:
  1861. [DEBUG][updateCallSite] New call instruction:
  1862. %77 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.34, i64 0, i64 0))
  1863. [DEBUG][updateCallSite] Void return type, no value processing needed
  1864. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.34, i64 0, i64 0)) to %77 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.34, i64 0, i64 0))
  1865. [DEBUG][updateCallSite] Original call instruction:
  1866. call void @setErrorMessage(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.33, i64 0, i64 0))
  1867. [DEBUG][updateCallSite] Adding bunker control parameter
  1868. [DEBUG][updateCallSite] Adding original call parameters:
  1869. [DEBUG][updateCallSite] Argument 0: type=i8*
  1870. [DEBUG][updateCallSite] Adding default target parameters:
  1871. [DEBUG][updateCallSite] New call instruction:
  1872. %41 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.33, i64 0, i64 0))
  1873. [DEBUG][updateCallSite] Void return type, no value processing needed
  1874. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.33, i64 0, i64 0)) to %41 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.33, i64 0, i64 0))
  1875. [DEBUG][updateCallSite] Original call instruction:
  1876. call void @setErrorMessage(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.32, i64 0, i64 0))
  1877. [DEBUG][updateCallSite] Adding bunker control parameter
  1878. [DEBUG][updateCallSite] Adding original call parameters:
  1879. [DEBUG][updateCallSite] Argument 0: type=i8*
  1880. [DEBUG][updateCallSite] Adding default target parameters:
  1881. [DEBUG][updateCallSite] New call instruction:
  1882. %19 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.32, i64 0, i64 0))
  1883. [DEBUG][updateCallSite] Void return type, no value processing needed
  1884. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.32, i64 0, i64 0)) to %19 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.32, i64 0, i64 0))
  1885. [DEBUG][updateCallSite] Original call instruction:
  1886. call void @setErrorMessage(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.26, i64 0, i64 0))
  1887. [DEBUG][updateCallSite] Adding bunker control parameter
  1888. [DEBUG][updateCallSite] Adding original call parameters:
  1889. [DEBUG][updateCallSite] Argument 0: type=i8*
  1890. [DEBUG][updateCallSite] Adding default target parameters:
  1891. [DEBUG][updateCallSite] New call instruction:
  1892. %55 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.26, i64 0, i64 0))
  1893. [DEBUG][updateCallSite] Void return type, no value processing needed
  1894. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.26, i64 0, i64 0)) to %55 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.26, i64 0, i64 0))
  1895. [DEBUG][updateCallSite] Original call instruction:
  1896. call void @setErrorMessage(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.25, i64 0, i64 0))
  1897. [DEBUG][updateCallSite] Adding bunker control parameter
  1898. [DEBUG][updateCallSite] Adding original call parameters:
  1899. [DEBUG][updateCallSite] Argument 0: type=i8*
  1900. [DEBUG][updateCallSite] Adding default target parameters:
  1901. [DEBUG][updateCallSite] New call instruction:
  1902. %15 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.25, i64 0, i64 0))
  1903. [DEBUG][updateCallSite] Void return type, no value processing needed
  1904. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.25, i64 0, i64 0)) to %15 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.25, i64 0, i64 0))
  1905. [DEBUG][updateCallSite] Original call instruction:
  1906. call void @setErrorMessage(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.24, i64 0, i64 0))
  1907. [DEBUG][updateCallSite] Adding bunker control parameter
  1908. [DEBUG][updateCallSite] Adding original call parameters:
  1909. [DEBUG][updateCallSite] Argument 0: type=i8*
  1910. [DEBUG][updateCallSite] Adding default target parameters:
  1911. [DEBUG][updateCallSite] New call instruction:
  1912. %118 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.24, i64 0, i64 0))
  1913. [DEBUG][updateCallSite] Void return type, no value processing needed
  1914. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.24, i64 0, i64 0)) to %118 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.24, i64 0, i64 0))
  1915. [DEBUG][updateCallSite] Original call instruction:
  1916. call void @setErrorMessage(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.17, i64 0, i64 0))
  1917. [DEBUG][updateCallSite] Adding bunker control parameter
  1918. [DEBUG][updateCallSite] Adding original call parameters:
  1919. [DEBUG][updateCallSite] Argument 0: type=i8*
  1920. [DEBUG][updateCallSite] Adding default target parameters:
  1921. [DEBUG][updateCallSite] New call instruction:
  1922. %51 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.17, i64 0, i64 0))
  1923. [DEBUG][updateCallSite] Void return type, no value processing needed
  1924. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.17, i64 0, i64 0)) to %51 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.17, i64 0, i64 0))
  1925. [DEBUG][updateCallSite] Original call instruction:
  1926. call void @setErrorMessage(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.23, i64 0, i64 0))
  1927. [DEBUG][updateCallSite] Adding bunker control parameter
  1928. [DEBUG][updateCallSite] Adding original call parameters:
  1929. [DEBUG][updateCallSite] Argument 0: type=i8*
  1930. [DEBUG][updateCallSite] Adding default target parameters:
  1931. [DEBUG][updateCallSite] New call instruction:
  1932. %40 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.23, i64 0, i64 0))
  1933. [DEBUG][updateCallSite] Void return type, no value processing needed
  1934. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.23, i64 0, i64 0)) to %40 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.23, i64 0, i64 0))
  1935. [DEBUG][updateCallSite] Original call instruction:
  1936. call void @setErrorMessage(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.22, i64 0, i64 0))
  1937. [DEBUG][updateCallSite] Adding bunker control parameter
  1938. [DEBUG][updateCallSite] Adding original call parameters:
  1939. [DEBUG][updateCallSite] Argument 0: type=i8*
  1940. [DEBUG][updateCallSite] Adding default target parameters:
  1941. [DEBUG][updateCallSite] New call instruction:
  1942. %31 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.22, i64 0, i64 0))
  1943. [DEBUG][updateCallSite] Void return type, no value processing needed
  1944. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.22, i64 0, i64 0)) to %31 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.22, i64 0, i64 0))
  1945. [DEBUG][updateCallSite] Original call instruction:
  1946. call void @setErrorMessage(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.21, i64 0, i64 0))
  1947. [DEBUG][updateCallSite] Adding bunker control parameter
  1948. [DEBUG][updateCallSite] Adding original call parameters:
  1949. [DEBUG][updateCallSite] Argument 0: type=i8*
  1950. [DEBUG][updateCallSite] Adding default target parameters:
  1951. [DEBUG][updateCallSite] New call instruction:
  1952. %20 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.21, i64 0, i64 0))
  1953. [DEBUG][updateCallSite] Void return type, no value processing needed
  1954. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.21, i64 0, i64 0)) to %20 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.21, i64 0, i64 0))
  1955. [DEBUG][updateCallSite] Original call instruction:
  1956. call void @setErrorMessage(i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.20, i64 0, i64 0))
  1957. [DEBUG][updateCallSite] Adding bunker control parameter
  1958. [DEBUG][updateCallSite] Adding original call parameters:
  1959. [DEBUG][updateCallSite] Argument 0: type=i8*
  1960. [DEBUG][updateCallSite] Adding default target parameters:
  1961. [DEBUG][updateCallSite] New call instruction:
  1962. %105 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.20, i64 0, i64 0))
  1963. [DEBUG][updateCallSite] Void return type, no value processing needed
  1964. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.20, i64 0, i64 0)) to %105 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.20, i64 0, i64 0))
  1965. [DEBUG][updateCallSite] Original call instruction:
  1966. call void @setErrorMessage(i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.19, i64 0, i64 0))
  1967. [DEBUG][updateCallSite] Adding bunker control parameter
  1968. [DEBUG][updateCallSite] Adding original call parameters:
  1969. [DEBUG][updateCallSite] Argument 0: type=i8*
  1970. [DEBUG][updateCallSite] Adding default target parameters:
  1971. [DEBUG][updateCallSite] New call instruction:
  1972. %57 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.19, i64 0, i64 0))
  1973. [DEBUG][updateCallSite] Void return type, no value processing needed
  1974. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.19, i64 0, i64 0)) to %57 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.19, i64 0, i64 0))
  1975. [DEBUG][updateCallSite] Original call instruction:
  1976. call void @setErrorMessage(i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.18, i64 0, i64 0))
  1977. [DEBUG][updateCallSite] Adding bunker control parameter
  1978. [DEBUG][updateCallSite] Adding original call parameters:
  1979. [DEBUG][updateCallSite] Argument 0: type=i8*
  1980. [DEBUG][updateCallSite] Adding default target parameters:
  1981. [DEBUG][updateCallSite] New call instruction:
  1982. %28 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.18, i64 0, i64 0))
  1983. [DEBUG][updateCallSite] Void return type, no value processing needed
  1984. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.18, i64 0, i64 0)) to %28 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.18, i64 0, i64 0))
  1985. [DEBUG][updateCallSite] Original call instruction:
  1986. call void @setErrorMessage(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.17, i64 0, i64 0))
  1987. [DEBUG][updateCallSite] Adding bunker control parameter
  1988. [DEBUG][updateCallSite] Adding original call parameters:
  1989. [DEBUG][updateCallSite] Argument 0: type=i8*
  1990. [DEBUG][updateCallSite] Adding default target parameters:
  1991. [DEBUG][updateCallSite] New call instruction:
  1992. %22 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.17, i64 0, i64 0))
  1993. [DEBUG][updateCallSite] Void return type, no value processing needed
  1994. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.17, i64 0, i64 0)) to %22 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.17, i64 0, i64 0))
  1995. [DEBUG][updateCallSite] Original call instruction:
  1996. call void @setErrorMessage(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.16, i64 0, i64 0))
  1997. [DEBUG][updateCallSite] Adding bunker control parameter
  1998. [DEBUG][updateCallSite] Adding original call parameters:
  1999. [DEBUG][updateCallSite] Argument 0: type=i8*
  2000. [DEBUG][updateCallSite] Adding default target parameters:
  2001. [DEBUG][updateCallSite] New call instruction:
  2002. %15 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.16, i64 0, i64 0))
  2003. [DEBUG][updateCallSite] Void return type, no value processing needed
  2004. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.16, i64 0, i64 0)) to %15 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.16, i64 0, i64 0))
  2005. [DEBUG][updateCallSite] Original call instruction:
  2006. call void @setErrorMessage(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.12, i64 0, i64 0))
  2007. [DEBUG][updateCallSite] Adding bunker control parameter
  2008. [DEBUG][updateCallSite] Adding original call parameters:
  2009. [DEBUG][updateCallSite] Argument 0: type=i8*
  2010. [DEBUG][updateCallSite] Adding default target parameters:
  2011. [DEBUG][updateCallSite] New call instruction:
  2012. %45 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.12, i64 0, i64 0))
  2013. [DEBUG][updateCallSite] Void return type, no value processing needed
  2014. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.12, i64 0, i64 0)) to %45 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.12, i64 0, i64 0))
  2015. [DEBUG][updateCallSite] Original call instruction:
  2016. call void @setErrorMessage(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.11, i64 0, i64 0))
  2017. [DEBUG][updateCallSite] Adding bunker control parameter
  2018. [DEBUG][updateCallSite] Adding original call parameters:
  2019. [DEBUG][updateCallSite] Argument 0: type=i8*
  2020. [DEBUG][updateCallSite] Adding default target parameters:
  2021. [DEBUG][updateCallSite] New call instruction:
  2022. %16 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.11, i64 0, i64 0))
  2023. [DEBUG][updateCallSite] Void return type, no value processing needed
  2024. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.11, i64 0, i64 0)) to %16 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.11, i64 0, i64 0))
  2025. [DEBUG][updateCallSite] Original call instruction:
  2026. call void @setErrorMessage(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.10, i64 0, i64 0))
  2027. [DEBUG][updateCallSite] Adding bunker control parameter
  2028. [DEBUG][updateCallSite] Adding original call parameters:
  2029. [DEBUG][updateCallSite] Argument 0: type=i8*
  2030. [DEBUG][updateCallSite] Adding default target parameters:
  2031. [DEBUG][updateCallSite] New call instruction:
  2032. %10 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.10, i64 0, i64 0))
  2033. [DEBUG][updateCallSite] Void return type, no value processing needed
  2034. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.10, i64 0, i64 0)) to %10 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.10, i64 0, i64 0))
  2035. [DEBUG][updateCallSite] Original call instruction:
  2036. call void @setErrorMessage(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.5, i64 0, i64 0))
  2037. [DEBUG][updateCallSite] Adding bunker control parameter
  2038. [DEBUG][updateCallSite] Adding original call parameters:
  2039. [DEBUG][updateCallSite] Argument 0: type=i8*
  2040. [DEBUG][updateCallSite] Adding default target parameters:
  2041. [DEBUG][updateCallSite] New call instruction:
  2042. %43 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.5, i64 0, i64 0))
  2043. [DEBUG][updateCallSite] Void return type, no value processing needed
  2044. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.5, i64 0, i64 0)) to %43 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.5, i64 0, i64 0))
  2045. [DEBUG][updateCallSite] Original call instruction:
  2046. call void @setErrorMessage(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.4, i64 0, i64 0))
  2047. [DEBUG][updateCallSite] Adding bunker control parameter
  2048. [DEBUG][updateCallSite] Adding original call parameters:
  2049. [DEBUG][updateCallSite] Argument 0: type=i8*
  2050. [DEBUG][updateCallSite] Adding default target parameters:
  2051. [DEBUG][updateCallSite] New call instruction:
  2052. %22 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.4, i64 0, i64 0))
  2053. [DEBUG][updateCallSite] Void return type, no value processing needed
  2054. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.4, i64 0, i64 0)) to %22 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.4, i64 0, i64 0))
  2055. [DEBUG][updateCallSite] Original call instruction:
  2056. call void @setErrorMessage(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.3, i64 0, i64 0))
  2057. [DEBUG][updateCallSite] Adding bunker control parameter
  2058. [DEBUG][updateCallSite] Adding original call parameters:
  2059. [DEBUG][updateCallSite] Argument 0: type=i8*
  2060. [DEBUG][updateCallSite] Adding default target parameters:
  2061. [DEBUG][updateCallSite] New call instruction:
  2062. %16 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.3, i64 0, i64 0))
  2063. [DEBUG][updateCallSite] Void return type, no value processing needed
  2064. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.3, i64 0, i64 0)) to %16 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.3, i64 0, i64 0))
  2065. [DEBUG][updateCallSite] Original call instruction:
  2066. call void @setErrorMessage(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.2, i64 0, i64 0))
  2067. [DEBUG][updateCallSite] Adding bunker control parameter
  2068. [DEBUG][updateCallSite] Adding original call parameters:
  2069. [DEBUG][updateCallSite] Argument 0: type=i8*
  2070. [DEBUG][updateCallSite] Adding default target parameters:
  2071. [DEBUG][updateCallSite] New call instruction:
  2072. %10 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.2, i64 0, i64 0))
  2073. [DEBUG][updateCallSite] Void return type, no value processing needed
  2074. [INFO][updateCallSite] Successfully updated call site from call void @setErrorMessage(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.2, i64 0, i64 0)) to %10 = call i32 @fused_setErrorMessage(i1 false, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.2, i64 0, i64 0))
  2075. [INFO][performCodeFusion] Listing all return instructions in fused function: fused_setErrorMessage
  2076. [INFO][performCodeFusion] Return instruction in block :
  2077. ret i32 %68
  2078. [INFO][performCodeFusion] Return value type: i32
  2079. [INFO][performCodeFusion] Return instruction in block :
  2080. ret i32 0
  2081. [INFO][performCodeFusion] Return value type: i32
  2082. [INFO][performCodeFusion] Completed function fusion: fused_setErrorMessage
  2083. [INFO][performCodeFusion] Processing function pair: target=reverseString, bunker=createMatrix
  2084. [DEBUG][performCodeFusion] Processing return values for fused function: fused_createMatrix
  2085. [DEBUG][performCodeFusion] Fused function return type: struct.Matrix*
  2086. [DEBUG][performCodeFusion] Non-struct return type detected: struct.Matrix*
  2087. [DEBUG][performCodeFusion] Updated bunker return in block %161 with value type struct.Matrix*
  2088. [DEBUG][performCodeFusion] Updated target return in block %157 with value type struct.Matrix*
  2089. [DEBUG][updateCallSite] Original call instruction:
  2090. %85 = call %struct.Matrix* @createMatrix(i32 3, i32 3)
  2091. [DEBUG][updateCallSite] Adding bunker control parameter
  2092. [DEBUG][updateCallSite] Adding original call parameters:
  2093. [DEBUG][updateCallSite] Argument 0: type=i32
  2094. [DEBUG][updateCallSite] Argument 1: type=i32
  2095. [DEBUG][updateCallSite] Adding default target parameters:
  2096. [DEBUG][updateCallSite] Parameter type: i8*
  2097. [DEBUG][updateCallSite] New call instruction:
  2098. %85 = call %struct.Matrix* @fused_createMatrix(i1 false, i32 3, i32 3, i8* null)
  2099. [DEBUG][updateCallSite] Processing non-void return value of type: struct.Matrix*
  2100. [DEBUG][updateCallSite] Using direct return value
  2101. [DEBUG][updateCallSite] Successfully replaced all uses of original call
  2102. [INFO][updateCallSite] Successfully updated call site from %85 = call %struct.Matrix* @createMatrix(i32 3, i32 3) to %85 = call %struct.Matrix* @fused_createMatrix(i1 false, i32 3, i32 3, i8* null)
  2103. [DEBUG][updateCallSite] Original call instruction:
  2104. %84 = call %struct.Matrix* @createMatrix(i32 3, i32 3)
  2105. [DEBUG][updateCallSite] Adding bunker control parameter
  2106. [DEBUG][updateCallSite] Adding original call parameters:
  2107. [DEBUG][updateCallSite] Argument 0: type=i32
  2108. [DEBUG][updateCallSite] Argument 1: type=i32
  2109. [DEBUG][updateCallSite] Adding default target parameters:
  2110. [DEBUG][updateCallSite] Parameter type: i8*
  2111. [DEBUG][updateCallSite] New call instruction:
  2112. %84 = call %struct.Matrix* @fused_createMatrix(i1 false, i32 3, i32 3, i8* null)
  2113. [DEBUG][updateCallSite] Processing non-void return value of type: struct.Matrix*
  2114. [DEBUG][updateCallSite] Using direct return value
  2115. [DEBUG][updateCallSite] Successfully replaced all uses of original call
  2116. [INFO][updateCallSite] Successfully updated call site from %84 = call %struct.Matrix* @createMatrix(i32 3, i32 3) to %84 = call %struct.Matrix* @fused_createMatrix(i1 false, i32 3, i32 3, i8* null)
  2117. [DEBUG][updateCallSite] Original call instruction:
  2118. %62 = call %struct.Matrix* @createMatrix(i32 %58, i32 %61)
  2119. [DEBUG][updateCallSite] Adding bunker control parameter
  2120. [DEBUG][updateCallSite] Adding original call parameters:
  2121. [DEBUG][updateCallSite] Argument 0: type=i32
  2122. [DEBUG][updateCallSite] Argument 1: type=i32
  2123. [DEBUG][updateCallSite] Adding default target parameters:
  2124. [DEBUG][updateCallSite] Parameter type: i8*
  2125. [DEBUG][updateCallSite] New call instruction:
  2126. %62 = call %struct.Matrix* @fused_createMatrix(i1 false, i32 %58, i32 %61, i8* null)
  2127. [DEBUG][updateCallSite] Processing non-void return value of type: struct.Matrix*
  2128. [DEBUG][updateCallSite] Using direct return value
  2129. [DEBUG][updateCallSite] Successfully replaced all uses of original call
  2130. [INFO][updateCallSite] Successfully updated call site from %62 = call %struct.Matrix* @createMatrix(i32 %58, i32 %61) to %62 = call %struct.Matrix* @fused_createMatrix(i1 false, i32 %58, i32 %61, i8* null)
  2131. [DEBUG][updateCallSite] Original call instruction:
  2132. call void @reverseString(i8* %13)
  2133. [DEBUG][updateCallSite] Adding target control parameter
  2134. [DEBUG][updateCallSite] Adding default bunker parameters:
  2135. [DEBUG][updateCallSite] Parameter type: i32
  2136. [DEBUG][updateCallSite] Parameter type: i32
  2137. [DEBUG][updateCallSite] Adding original call parameters:
  2138. [DEBUG][updateCallSite] Argument 0: type=i8*
  2139. [DEBUG][updateCallSite] New call instruction:
  2140. %14 = call %struct.Matrix* @fused_createMatrix(i1 true, i32 0, i32 0, i8* %13)
  2141. [DEBUG][updateCallSite] Void return type, no value processing needed
  2142. [INFO][updateCallSite] Successfully updated call site from call void @reverseString(i8* %13) to %14 = call %struct.Matrix* @fused_createMatrix(i1 true, i32 0, i32 0, i8* %13)
  2143. [INFO][performCodeFusion] Listing all return instructions in fused function: fused_createMatrix
  2144. [INFO][performCodeFusion] Return instruction in block :
  2145. ret %struct.Matrix* null
  2146. [INFO][performCodeFusion] Return value type: struct.Matrix*
  2147. [INFO][performCodeFusion] Return instruction in block :
  2148. ret %struct.Matrix* %162
  2149. [INFO][performCodeFusion] Return value type: struct.Matrix*
  2150. [INFO][performCodeFusion] Completed function fusion: fused_createMatrix
  2151. [INFO][performCodeFusion] Processing function pair: target=testPoints, bunker=removeDuplicates
  2152. [DEBUG][performCodeFusion] Processing return values for fused function: fused_removeDuplicates
  2153. [DEBUG][performCodeFusion] Fused function return type: i32
  2154. [DEBUG][performCodeFusion] Non-struct return type detected: i32
  2155. [DEBUG][performCodeFusion] Updated bunker return in block %107 with value type i32
  2156. [DEBUG][performCodeFusion] Updated target return in block %102 with value type i32
  2157. [DEBUG][updateCallSite] Original call instruction:
  2158. %11 = call i32 @testPoints(i32 5)
  2159. [DEBUG][updateCallSite] Adding target control parameter
  2160. [DEBUG][updateCallSite] Adding default bunker parameters:
  2161. [DEBUG][updateCallSite] Parameter type: struct.DynamicArray*
  2162. [DEBUG][updateCallSite] Adding original call parameters:
  2163. [DEBUG][updateCallSite] Argument 0: type=i32
  2164. [DEBUG][updateCallSite] New call instruction:
  2165. %11 = call i32 @fused_removeDuplicates(i1 true, %struct.DynamicArray* null, i32 5)
  2166. [DEBUG][updateCallSite] Processing non-void return value of type: i32
  2167. [DEBUG][updateCallSite] Using direct return value
  2168. [DEBUG][updateCallSite] Successfully replaced all uses of original call
  2169. [INFO][updateCallSite] Successfully updated call site from %11 = call i32 @testPoints(i32 5) to %11 = call i32 @fused_removeDuplicates(i1 true, %struct.DynamicArray* null, i32 5)
  2170. [INFO][performCodeFusion] Listing all return instructions in fused function: fused_removeDuplicates
  2171. [INFO][performCodeFusion] Return instruction in block :
  2172. ret i32 %103
  2173. [INFO][performCodeFusion] Return value type: i32
  2174. [INFO][performCodeFusion] Return instruction in block :
  2175. ret i32 0
  2176. [INFO][performCodeFusion] Return value type: i32
  2177. [INFO][performCodeFusion] Completed function fusion: fused_removeDuplicates
  2178. [INFO][performCodeFusion] Code fusion completed, processed 7 function pairs
  2179. Invalid InsertValueInst operands!
  2180. %20 = insertvalue %fused_return_projectA_main_memoizedFib { i32 undef, i32 0 }, Stack dump:
  2181. 0. Program arguments: opt -load ./build/ModuleFusion.so -codefusion
  2182. 1. Running pass 'Function Pass Manager' on module '<stdin>'.
  2183. 2. Running pass 'Module Verifier' on function '@fused_projectA_main'
  2184. #0 0x00007fb5e4a734ff llvm::sys::PrintStackTrace(llvm::raw_ostream&) (/lib/x86_64-linux-gnu/libLLVM-10.so.1+0x9814ff)
  2185. #1 0x00007fb5e4a717b0 llvm::sys::RunSignalHandlers() (/lib/x86_64-linux-gnu/libLLVM-10.so.1+0x97f7b0)
  2186. #2 0x00007fb5e4a73ac5 (/lib/x86_64-linux-gnu/libLLVM-10.so.1+0x981ac5)
  2187. #3 0x00007fb5e879a420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
  2188. #4 0x00007fb5e4a7db82 (/lib/x86_64-linux-gnu/libLLVM-10.so.1+0x98bb82)
  2189. #5 0x000000003c6e1dd8