log_module_fusion.txt 472 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656
  1. [INFO][runOnModule] Starting analysis for module: proprocess_output/combined_tagged.ll
  2. [INFO][buildCallGraph] Building complete call graph
  3. [INFO][buildCallGraph] Finished Building complete call graph
  4. [INFO][buildCallGraph] Building complete call graph
  5. [INFO][buildCallGraph] Finished Building complete call graph
  6. [INFO][generateProjectCallGraph] Generating project call graph
  7. ```mermaid
  8. graph TD
  9. %% Project Call Graph
  10. calculateCircleArea["calculateCircleArea\nCritical Points: 2"]
  11. calculateDistance["calculateDistance\nCritical Points: 2"]
  12. countSetBits["countSetBits\nCritical Points: 3"]:::target
  13. createDynamicArray["createDynamicArray\nCritical Points: 2"]
  14. createMatrix["createMatrix\nCritical Points: 2"]
  15. factorial["factorial\nCritical Points: 2"]
  16. findCentroid["findCentroid\nCritical Points: 2"]
  17. getErrorMessage["getErrorMessage\nCritical Points: 2"]
  18. insertNode["insertNode\nCritical Points: 2"]
  19. memoizedFib["memoizedFib\nCritical Points: 2"]:::target
  20. multiplyMatrices["multiplyMatrices\nCritical Points: 2"]
  21. performSimpleCalculations["performSimpleCalculations\nCritical Points: 7"]
  22. processMatrix["processMatrix\nCritical Points: 3"]:::target
  23. projectA_main["projectA_main\nCritical Points: 2"]
  24. projectB_main["projectB_main\nCritical Points: 5"]:::target
  25. pushBack["pushBack\nCritical Points: 2"]
  26. quickSort["quickSort\nCritical Points: 2"]
  27. removeDuplicates["removeDuplicates\nCritical Points: 2"]
  28. reverseString["reverseString\nCritical Points: 3"]:::target
  29. setErrorMessage["setErrorMessage\nCritical Points: 3"]
  30. testPoints["testPoints\nCritical Points: 3"]:::target
  31. validateMatrix["validateMatrix\nCritical Points: 2"]
  32. calculateCircleArea --> setErrorMessage
  33. calculateDistance --> setErrorMessage
  34. createDynamicArray --> setErrorMessage
  35. createMatrix --> setErrorMessage
  36. factorial --> factorial
  37. factorial --> setErrorMessage
  38. findCentroid --> setErrorMessage
  39. insertNode --> setErrorMessage
  40. memoizedFib --> memoizedFib
  41. multiplyMatrices --> createMatrix
  42. multiplyMatrices --> setErrorMessage
  43. processMatrix --> countSetBits
  44. projectA_main --> createDynamicArray
  45. projectA_main --> createMatrix
  46. projectA_main --> getErrorMessage
  47. projectA_main --> insertNode
  48. projectA_main --> multiplyMatrices
  49. projectA_main --> performSimpleCalculations
  50. projectA_main --> pushBack
  51. projectA_main --> setErrorMessage
  52. projectB_main --> countSetBits
  53. projectB_main --> memoizedFib
  54. projectB_main --> processMatrix
  55. projectB_main --> reverseString
  56. projectB_main --> testPoints
  57. pushBack --> setErrorMessage
  58. quickSort --> quickSort
  59. quickSort --> setErrorMessage
  60. removeDuplicates --> quickSort
  61. removeDuplicates --> setErrorMessage
  62. validateMatrix --> setErrorMessage
  63. classDef target fill:#f96,stroke:#333,stroke-width:4px
  64. ```
  65. [INFO][generateProjectCallGraph] Finished generating project call graph
  66. ```mermaid: getErrorMessage
  67. graph TD
  68. 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
  69. 0 -->|true| 3
  70. 0 -->|false| 5
  71. 3["Block 3:\n %4 = load i8*, i8** @globalErrorMessage, align 8\n br label %6\n"]
  72. 3 --> 6
  73. 5["Block 5:\n br label %6\n"]
  74. 5 --> 6
  75. 6["Block 6:\n %7 = phi i8* [ %4, %3 ], [ getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), %5 ]\n ret i8* %7\n"]:::critical
  76. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  77. ```
  78. ```mermaid: setErrorMessage
  79. graph TD
  80. 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
  81. 1 -->|true| 5
  82. 1 -->|false| 7
  83. 5["Block 5:\n %6 = load i8*, i8** @globalErrorMessage, align 8\n call void @free(i8* %6) #7\n br label %7\n"]
  84. 5 --> 7
  85. 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
  86. 7 -->|true| 10
  87. 7 -->|false| 19
  88. 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, align 8\n %14 = icmp eq i8* %13, null\n br i1 %14, label %15, label %18\n"]
  89. 10 -->|true| 15
  90. 10 -->|false| 18
  91. 15["Block 15:\n %16 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8\n %17 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %16, i8* getelementptr inbounds ([55 x i8], [55 x i8]* @.str.1, i64 0, i64 0))\n br label %18\n"]
  92. 15 --> 18
  93. 18["Block 18:\n br label %20\n"]
  94. 18 --> 20
  95. 19["Block 19:\n store i8* null, i8** @globalErrorMessage, align 8\n br label %20\n"]
  96. 19 --> 20
  97. 20["Block 20:\n ret void\n"]:::critical
  98. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  99. ```
  100. ```mermaid: factorial
  101. graph TD
  102. 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
  103. 1 -->|true| 9
  104. 1 -->|false| 12
  105. 9["Block 9:\n call void @setErrorMessage(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.2, i64 0, i64 0))\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"]
  106. 9 --> 53
  107. 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"]
  108. 12 -->|true| 15
  109. 12 -->|false| 18
  110. 15["Block 15:\n call void @setErrorMessage(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.3, i64 0, i64 0))\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"]
  111. 15 --> 53
  112. 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"]
  113. 18 -->|true| 21
  114. 18 -->|false| 24
  115. 21["Block 21:\n call void @setErrorMessage(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.4, i64 0, i64 0))\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"]
  116. 21 --> 53
  117. 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"]
  118. 24 -->|true| 27
  119. 24 -->|false| 28
  120. 27["Block 27:\n store i32 1, i32* %4, align 4\n br label %49\n"]
  121. 27 --> 49
  122. 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"]
  123. 28 -->|true| 34
  124. 28 -->|false| 37
  125. 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"]
  126. 34 --> 53
  127. 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"]
  128. 37 -->|true| 42
  129. 37 -->|false| 45
  130. 42["Block 42:\n call void @setErrorMessage(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.5, i64 0, i64 0))\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"]
  131. 42 --> 53
  132. 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"]
  133. 45 --> 49
  134. 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"]
  135. 49 --> 53
  136. 53["Block 53:\n %54 = load i32, i32* %2, align 4\n ret i32 %54\n"]:::critical
  137. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  138. ```
  139. ```mermaid: createDynamicArray
  140. graph TD
  141. 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
  142. 1 -->|true| 7
  143. 1 -->|false| 8
  144. 7["Block 7:\n call void @setErrorMessage(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.6, i64 0, i64 0))\n store %struct.DynamicArray* null, %struct.DynamicArray** %2, align 8\n br label %44\n"]
  145. 7 --> 44
  146. 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"]
  147. 8 -->|true| 11
  148. 8 -->|false| 12
  149. 11["Block 11:\n call void @setErrorMessage(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.7, i64 0, i64 0))\n store %struct.DynamicArray* null, %struct.DynamicArray** %2, align 8\n br label %44\n"]
  150. 11 --> 44
  151. 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.DynamicArray** %4, align 8\n %15 = load %struct.DynamicArray*, %struct.DynamicArray** %4, align 8\n %16 = icmp ne %struct.DynamicArray* %15, null\n br i1 %16, label %18, label %17\n"]
  152. 12 -->|true| 18
  153. 12 -->|false| 17
  154. 17["Block 17:\n call void @setErrorMessage(i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.8, i64 0, i64 0))\n store %struct.DynamicArray* null, %struct.DynamicArray** %2, align 8\n br label %44\n"]
  155. 17 --> 44
  156. 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.DynamicArray** %4, align 8\n %25 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %24, i32 0, i32 0\n store i32* %23, i32** %25, align 8\n %26 = load %struct.DynamicArray*, %struct.DynamicArray** %4, align 8\n %27 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %26, i32 0, i32 0\n %28 = load i32*, i32** %27, align 8\n %29 = icmp ne i32* %28, null\n br i1 %29, label %33, label %30\n"]
  157. 18 -->|true| 33
  158. 18 -->|false| 30
  159. 30["Block 30:\n %31 = load %struct.DynamicArray*, %struct.DynamicArray** %4, align 8\n %32 = bitcast %struct.DynamicArray* %31 to i8*\n call void @free(i8* %32) #7\n call void @setErrorMessage(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.9, i64 0, i64 0))\n store %struct.DynamicArray* null, %struct.DynamicArray** %2, align 8\n br label %44\n"]
  160. 30 --> 44
  161. 33["Block 33:\n %34 = load %struct.DynamicArray*, %struct.DynamicArray** %4, align 8\n %35 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %34, i32 0, i32 1\n store i32 0, i32* %35, align 8\n %36 = load i32, i32* %3, align 4\n %37 = load %struct.DynamicArray*, %struct.DynamicArray** %4, align 8\n %38 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %37, i32 0, i32 2\n store i32 %36, i32* %38, align 4\n %39 = load %struct.DynamicArray*, %struct.DynamicArray** %4, align 8\n %40 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %39, i32 0, i32 3\n store i32 1, i32* %40, align 8\n %41 = load %struct.DynamicArray*, %struct.DynamicArray** %4, align 8\n %42 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %41, i32 0, i32 4\n store i32 0, i32* %42, align 4\n %43 = load %struct.DynamicArray*, %struct.DynamicArray** %4, align 8\n store %struct.DynamicArray* %43, %struct.DynamicArray** %2, align 8\n br label %44\n"]
  162. 33 --> 44
  163. 44["Block 44:\n %45 = load %struct.DynamicArray*, %struct.DynamicArray** %2, align 8\n ret %struct.DynamicArray* %45\n"]:::critical
  164. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  165. ```
  166. ```mermaid: pushBack
  167. graph TD
  168. 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.DynamicArray** %3, align 8\n store i32 %1, i32* %4, align 4\n %7 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %8 = icmp ne %struct.DynamicArray* %7, null\n br i1 %8, label %10, label %9\n"]:::critical
  169. 2 -->|true| 10
  170. 2 -->|false| 9
  171. 9["Block 9:\n call void @setErrorMessage(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.10, i64 0, i64 0))\n br label %91\n"]
  172. 9 --> 91
  173. 10["Block 10:\n %11 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %12 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %11, i32 0, i32 1\n %13 = load i32, i32* %12, align 8\n %14 = icmp sge i32 %13, 1000\n br i1 %14, label %15, label %16\n"]
  174. 10 -->|true| 15
  175. 10 -->|false| 16
  176. 15["Block 15:\n call void @setErrorMessage(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.11, i64 0, i64 0))\n br label %91\n"]
  177. 15 --> 91
  178. 16["Block 16:\n %17 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %18 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %17, i32 0, i32 1\n %19 = load i32, i32* %18, align 8\n %20 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %21 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %20, i32 0, i32 2\n %22 = load i32, i32* %21, align 4\n %23 = icmp sge i32 %19, %22\n br i1 %23, label %24, label %52\n"]
  179. 16 -->|true| 24
  180. 16 -->|false| 52
  181. 24["Block 24:\n %25 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %26 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %25, i32 0, i32 2\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"]
  182. 24 -->|true| 31
  183. 24 -->|false| 32
  184. 31["Block 31:\n store i32 1000, i32* %5, align 4\n br label %32\n"]
  185. 31 --> 32
  186. 32["Block 32:\n %33 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %34 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %33, i32 0, i32 0\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"]
  187. 32 -->|true| 45
  188. 32 -->|false| 44
  189. 44["Block 44:\n call void @setErrorMessage(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.12, i64 0, i64 0))\n br label %91\n"]
  190. 44 --> 91
  191. 45["Block 45:\n %46 = load i32*, i32** %6, align 8\n %47 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %48 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %47, i32 0, i32 0\n store i32* %46, i32** %48, align 8\n %49 = load i32, i32* %5, align 4\n %50 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %51 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %50, i32 0, i32 2\n store i32 %49, i32* %51, align 4\n br label %52\n"]
  192. 45 --> 52
  193. 52["Block 52:\n %53 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %54 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %53, i32 0, i32 3\n %55 = load i32, i32* %54, align 8\n %56 = icmp ne i32 %55, 0\n br i1 %56, label %57, label %78\n"]
  194. 52 -->|true| 57
  195. 52 -->|false| 78
  196. 57["Block 57:\n %58 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %59 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %58, i32 0, i32 1\n %60 = load i32, i32* %59, align 8\n %61 = icmp sgt i32 %60, 0\n br i1 %61, label %62, label %78\n"]
  197. 57 -->|true| 62
  198. 57 -->|false| 78
  199. 62["Block 62:\n %63 = load i32, i32* %4, align 4\n %64 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %65 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %64, i32 0, i32 0\n %66 = load i32*, i32** %65, align 8\n %67 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %68 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %67, i32 0, i32 1\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, i64 %71\n %73 = load i32, i32* %72, align 4\n %74 = icmp slt i32 %63, %73\n br i1 %74, label %75, label %78\n"]
  200. 62 -->|true| 75
  201. 62 -->|false| 78
  202. 75["Block 75:\n %76 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %77 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %76, i32 0, i32 3\n store i32 0, i32* %77, align 8\n br label %78\n"]
  203. 75 --> 78
  204. 78["Block 78:\n %79 = load i32, i32* %4, align 4\n %80 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %81 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %80, i32 0, i32 0\n %82 = load i32*, i32** %81, align 8\n %83 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %84 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %83, i32 0, i32 1\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, i64 %87\n store i32 %79, i32* %88, align 4\n %89 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %90 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %89, i32 0, i32 4\n store i32 1, i32* %90, align 4\n br label %91\n"]
  205. 78 --> 91
  206. 91["Block 91:\n ret void\n"]:::critical
  207. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  208. ```
  209. ```mermaid: quickSort
  210. graph TD
  211. 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
  212. 4 -->|true| 18
  213. 4 -->|false| 22
  214. 18["Block 18:\n call void @setErrorMessage(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.13, i64 0, i64 0))\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"]
  215. 18 --> 247
  216. 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"]
  217. 22 -->|true| 29
  218. 22 -->|false| 25
  219. 25["Block 25:\n call void @setErrorMessage(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.14, i64 0, i64 0))\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"]
  220. 25 --> 247
  221. 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"]
  222. 29 -->|true| 41
  223. 29 -->|false| 32
  224. 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"]
  225. 32 -->|true| 41
  226. 32 -->|false| 35
  227. 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"]
  228. 35 -->|true| 41
  229. 35 -->|false| 38
  230. 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"]
  231. 38 -->|true| 41
  232. 38 -->|false| 45
  233. 41["Block 41:\n call void @setErrorMessage(i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.15, i64 0, i64 0))\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"]
  234. 41 --> 247
  235. 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"]
  236. 45 -->|true| 49
  237. 45 -->|false| 244
  238. 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, i64 %58\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, i64 %63\n %65 = load i32, i32* %64, align 4\n %66 = icmp sle i32 %60, %65\n br i1 %66, label %67, label %99\n"]
  239. 49 -->|true| 67
  240. 49 -->|false| 99
  241. 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, i64 %70\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, i64 %75\n %77 = load i32, i32* %76, align 4\n %78 = icmp sle i32 %72, %77\n br i1 %78, label %79, label %81\n"]
  242. 67 -->|true| 79
  243. 67 -->|false| 81
  244. 79["Block 79:\n %80 = load i32, i32* %9, align 4\n store i32 %80, i32* %10, align 4\n br label %98\n"]
  245. 79 --> 98
  246. 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, i64 %84\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, i64 %89\n %91 = load i32, i32* %90, align 4\n %92 = icmp sle i32 %86, %91\n br i1 %92, label %93, label %95\n"]
  247. 81 -->|true| 93
  248. 81 -->|false| 95
  249. 93["Block 93:\n %94 = load i32, i32* %7, align 4\n store i32 %94, i32* %10, align 4\n br label %97\n"]
  250. 93 --> 97
  251. 95["Block 95:\n %96 = load i32, i32* %6, align 4\n store i32 %96, i32* %10, align 4\n br label %97\n"]
  252. 95 --> 97
  253. 97["Block 97:\n br label %98\n"]
  254. 97 --> 98
  255. 98["Block 98:\n br label %131\n"]
  256. 98 --> 131
  257. 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, i64 %102\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, i64 %107\n %109 = load i32, i32* %108, align 4\n %110 = icmp sle i32 %104, %109\n br i1 %110, label %111, label %113\n"]
  258. 99 -->|true| 111
  259. 99 -->|false| 113
  260. 111["Block 111:\n %112 = load i32, i32* %6, align 4\n store i32 %112, i32* %10, align 4\n br label %130\n"]
  261. 111 --> 130
  262. 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, i64 %116\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, i64 %121\n %123 = load i32, i32* %122, align 4\n %124 = icmp sle i32 %118, %123\n br i1 %124, label %125, label %127\n"]
  263. 113 -->|true| 125
  264. 113 -->|false| 127
  265. 125["Block 125:\n %126 = load i32, i32* %7, align 4\n store i32 %126, i32* %10, align 4\n br label %129\n"]
  266. 125 --> 129
  267. 127["Block 127:\n %128 = load i32, i32* %9, align 4\n store i32 %128, i32* %10, align 4\n br label %129\n"]
  268. 127 --> 129
  269. 129["Block 129:\n br label %130\n"]
  270. 129 --> 130
  271. 130["Block 130:\n br label %131\n"]
  272. 130 --> 131
  273. 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, i64 %134\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, i64 %139\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, i64 %144\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, i64 %149\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, i64 %153\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"]
  274. 131 --> 159
  275. 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"]
  276. 159 -->|true| 163
  277. 159 -->|false| 199
  278. 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, i64 %166\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"]
  279. 163 -->|true| 171
  280. 163 -->|false| 195
  281. 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, i64 %176\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, i64 %181\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, i64 %186\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, i64 %191\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"]
  282. 171 --> 195
  283. 195["Block 195:\n br label %196\n"]
  284. 195 --> 196
  285. 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"]
  286. 196 --> 159
  287. 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, i64 %203\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, i64 %208\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, i64 %214\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, i64 %219\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 %223, i32* %224)\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"]
  288. 199 -->|true| 228
  289. 199 -->|false| 231
  290. 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"]
  291. 228 --> 247
  292. 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 %235, i32* %236)\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"]
  293. 231 -->|true| 240
  294. 231 -->|false| 243
  295. 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"]
  296. 240 --> 247
  297. 243["Block 243:\n br label %244\n"]
  298. 243 --> 244
  299. 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"]
  300. 244 --> 247
  301. 247["Block 247:\n ret void\n"]:::critical
  302. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  303. ```
  304. ```mermaid: createMatrix
  305. graph TD
  306. 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
  307. 2 -->|true| 14
  308. 2 -->|false| 11
  309. 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"]
  310. 11 -->|true| 14
  311. 11 -->|false| 15
  312. 14["Block 14:\n call void @setErrorMessage(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.16, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %3, align 8\n br label %111\n"]
  313. 14 --> 111
  314. 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"]
  315. 15 -->|true| 21
  316. 15 -->|false| 18
  317. 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"]
  318. 18 -->|true| 21
  319. 18 -->|false| 22
  320. 21["Block 21:\n call void @setErrorMessage(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.17, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %3, align 8\n br label %111\n"]
  321. 21 --> 111
  322. 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** %6, align 8\n %25 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %26 = icmp ne %struct.Matrix* %25, null\n br i1 %26, label %28, label %27\n"]
  323. 22 -->|true| 28
  324. 22 -->|false| 27
  325. 27["Block 27:\n call void @setErrorMessage(i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.18, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %3, align 8\n br label %111\n"]
  326. 27 --> 111
  327. 28["Block 28:\n %29 = load i32, i32* %4, align 4\n %30 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %31 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %30, i32 0, i32 1\n store i32 %29, i32* %31, align 8\n %32 = load i32, i32* %5, align 4\n %33 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %34 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %33, i32 0, i32 2\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** %6, align 8\n %40 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %39, i32 0, i32 3\n store i32 %38, i32* %40, align 8\n %41 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %42 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %41, i32 0, i32 4\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** %6, align 8\n %49 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %48, i32 0, i32 0\n store i32** %47, i32*** %49, align 8\n %50 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %51 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %50, i32 0, i32 0\n %52 = load i32**, i32*** %51, align 8\n %53 = icmp ne i32** %52, null\n br i1 %53, label %57, label %54\n"]
  328. 28 -->|true| 57
  329. 28 -->|false| 54
  330. 54["Block 54:\n %55 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %56 = bitcast %struct.Matrix* %55 to i8*\n call void @free(i8* %56) #7\n call void @setErrorMessage(i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.19, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %3, align 8\n br label %111\n"]
  331. 54 --> 111
  332. 57["Block 57:\n store i32 0, i32* %7, align 4\n br label %58\n"]
  333. 57 --> 58
  334. 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"]
  335. 58 -->|true| 62
  336. 58 -->|false| 109
  337. 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) #7\n %66 = bitcast i8* %65 to i32*\n %67 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %68 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %67, i32 0, i32 0\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, i64 %71\n store i32* %66, i32** %72, align 8\n %73 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %74 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %73, i32 0, i32 0\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, i64 %77\n %79 = load i32*, i32** %78, align 8\n %80 = icmp ne i32* %79, null\n br i1 %80, label %105, label %81\n"]
  338. 62 -->|true| 105
  339. 62 -->|false| 81
  340. 81["Block 81:\n store i32 0, i32* %8, align 4\n br label %82\n"]
  341. 81 --> 82
  342. 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"]
  343. 82 -->|true| 86
  344. 82 -->|false| 98
  345. 86["Block 86:\n %87 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %88 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %87, i32 0, i32 0\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, i64 %91\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"]
  346. 86 --> 95
  347. 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"]
  348. 95 --> 82
  349. 98["Block 98:\n %99 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %100 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %99, i32 0, i32 0\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** %6, align 8\n %104 = bitcast %struct.Matrix* %103 to i8*\n call void @free(i8* %104) #7\n call void @setErrorMessage(i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.20, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %3, align 8\n br label %111\n"]
  350. 98 --> 111
  351. 105["Block 105:\n br label %106\n"]
  352. 105 --> 106
  353. 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"]
  354. 106 --> 58
  355. 109["Block 109:\n %110 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n store %struct.Matrix* %110, %struct.Matrix** %3, align 8\n br label %111\n"]
  356. 109 --> 111
  357. 111["Block 111:\n %112 = load %struct.Matrix*, %struct.Matrix** %3, align 8\n ret %struct.Matrix* %112\n"]:::critical
  358. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  359. ```
  360. ```mermaid: multiplyMatrices
  361. graph TD
  362. 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, align 8\n store %struct.Matrix* %1, %struct.Matrix** %5, align 8\n %14 = load %struct.Matrix*, %struct.Matrix** %4, align 8\n %15 = icmp ne %struct.Matrix* %14, null\n br i1 %15, label %16, label %19\n"]:::critical
  363. 2 -->|true| 16
  364. 2 -->|false| 19
  365. 16["Block 16:\n %17 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %18 = icmp ne %struct.Matrix* %17, null\n br i1 %18, label %20, label %19\n"]
  366. 16 -->|true| 20
  367. 16 -->|false| 19
  368. 19["Block 19:\n call void @setErrorMessage(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.21, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %3, align 8\n br label %209\n"]
  369. 19 --> 209
  370. 20["Block 20:\n %21 = load %struct.Matrix*, %struct.Matrix** %4, align 8\n %22 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %21, i32 0, i32 0\n %23 = load i32**, i32*** %22, align 8\n %24 = icmp ne i32** %23, null\n br i1 %24, label %25, label %30\n"]
  371. 20 -->|true| 25
  372. 20 -->|false| 30
  373. 25["Block 25:\n %26 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %27 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %26, i32 0, i32 0\n %28 = load i32**, i32*** %27, align 8\n %29 = icmp ne i32** %28, null\n br i1 %29, label %31, label %30\n"]
  374. 25 -->|true| 31
  375. 25 -->|false| 30
  376. 30["Block 30:\n call void @setErrorMessage(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.22, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %3, align 8\n br label %209\n"]
  377. 30 --> 209
  378. 31["Block 31:\n %32 = load %struct.Matrix*, %struct.Matrix** %4, align 8\n %33 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %32, i32 0, i32 2\n %34 = load i32, i32* %33, align 4\n %35 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %36 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %35, i32 0, i32 1\n %37 = load i32, i32* %36, align 8\n %38 = icmp ne i32 %34, %37\n br i1 %38, label %39, label %40\n"]
  379. 31 -->|true| 39
  380. 31 -->|false| 40
  381. 39["Block 39:\n call void @setErrorMessage(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.23, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %3, align 8\n br label %209\n"]
  382. 39 --> 209
  383. 40["Block 40:\n %41 = load %struct.Matrix*, %struct.Matrix** %4, align 8\n %42 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %41, i32 0, i32 2\n %43 = load i32, i32* %42, align 4\n %44 = icmp sgt i32 %43, 100\n br i1 %44, label %50, label %45\n"]
  384. 40 -->|true| 50
  385. 40 -->|false| 45
  386. 45["Block 45:\n %46 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %47 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %46, i32 0, i32 1\n %48 = load i32, i32* %47, align 8\n %49 = icmp sgt i32 %48, 100\n br i1 %49, label %50, label %51\n"]
  387. 45 -->|true| 50
  388. 45 -->|false| 51
  389. 50["Block 50:\n call void @setErrorMessage(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.17, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %3, align 8\n br label %209\n"]
  390. 50 --> 209
  391. 51["Block 51:\n %52 = load %struct.Matrix*, %struct.Matrix** %4, align 8\n %53 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %52, i32 0, i32 1\n %54 = load i32, i32* %53, align 8\n %55 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %56 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %55, i32 0, i32 2\n %57 = load i32, i32* %56, align 4\n %58 = call %struct.Matrix* @createMatrix(i32 %54, i32 %57)\n store %struct.Matrix* %58, %struct.Matrix** %6, align 8\n %59 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %60 = icmp ne %struct.Matrix* %59, null\n br i1 %60, label %62, label %61\n"]
  392. 51 -->|true| 62
  393. 51 -->|false| 61
  394. 61["Block 61:\n store %struct.Matrix* null, %struct.Matrix** %3, align 8\n br label %209\n"]
  395. 61 --> 209
  396. 62["Block 62:\n store i64 0, i64* %7, align 8\n store i32 0, i32* %8, align 4\n br label %63\n"]
  397. 62 --> 63
  398. 63["Block 63:\n %64 = load i32, i32* %8, align 4\n %65 = load %struct.Matrix*, %struct.Matrix** %4, align 8\n %66 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %65, i32 0, i32 1\n %67 = load i32, i32* %66, align 8\n %68 = icmp slt i32 %64, %67\n br i1 %68, label %69, label %197\n"]
  399. 63 -->|true| 69
  400. 63 -->|false| 197
  401. 69["Block 69:\n store i32 0, i32* %9, align 4\n br label %70\n"]
  402. 69 --> 70
  403. 70["Block 70:\n %71 = load i32, i32* %9, align 4\n %72 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %73 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %72, i32 0, i32 2\n %74 = load i32, i32* %73, align 4\n %75 = icmp slt i32 %71, %74\n br i1 %75, label %76, label %193\n"]
  404. 70 -->|true| 76
  405. 70 -->|false| 193
  406. 76["Block 76:\n store i64 0, i64* %10, align 8\n store i32 0, i32* %11, align 4\n br label %77\n"]
  407. 76 --> 77
  408. 77["Block 77:\n %78 = load i32, i32* %11, align 4\n %79 = load %struct.Matrix*, %struct.Matrix** %4, align 8\n %80 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %79, i32 0, i32 2\n %81 = load i32, i32* %80, align 4\n %82 = icmp slt i32 %78, %81\n br i1 %82, label %83, label %147\n"]
  409. 77 -->|true| 83
  410. 77 -->|false| 147
  411. 83["Block 83:\n %84 = load %struct.Matrix*, %struct.Matrix** %4, align 8\n %85 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %84, i32 0, i32 0\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, i64 %88\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, i64 %92\n %94 = load i32, i32* %93, align 4\n %95 = sext i32 %94 to i64\n %96 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %97 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %96, i32 0, i32 0\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, i64 %100\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, i64 %104\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"]
  412. 83 -->|true| 117
  413. 83 -->|false| 114
  414. 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"]
  415. 114 -->|true| 117
  416. 114 -->|false| 143
  417. 117["Block 117:\n call void @setErrorMessage(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.24, i64 0, i64 0))\n store i32 0, i32* %13, align 4\n br label %118\n"]
  418. 117 --> 118
  419. 118["Block 118:\n %119 = load i32, i32* %13, align 4\n %120 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %121 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %120, i32 0, i32 1\n %122 = load i32, i32* %121, align 8\n %123 = icmp slt i32 %119, %122\n br i1 %123, label %124, label %136\n"]
  420. 118 -->|true| 124
  421. 118 -->|false| 136
  422. 124["Block 124:\n %125 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %126 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %125, i32 0, i32 0\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** %127, i64 %129\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"]
  423. 124 --> 133
  424. 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"]
  425. 133 --> 118
  426. 136["Block 136:\n %137 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %138 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %137, i32 0, i32 0\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** %6, align 8\n %142 = bitcast %struct.Matrix* %141 to i8*\n call void @free(i8* %142) #7\n store %struct.Matrix* null, %struct.Matrix** %3, align 8\n br label %209\n"]
  427. 136 --> 209
  428. 143["Block 143:\n br label %144\n"]
  429. 143 --> 144
  430. 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"]
  431. 144 --> 77
  432. 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** %6, align 8\n %151 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %150, i32 0, i32 0\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** %152, i64 %154\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, i64 %158\n store i32 %149, i32* %159, align 4\n %160 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %161 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %160, i32 0, i32 0\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** %162, i64 %164\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, i64 %168\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"]
  433. 147 -->|true| 175
  434. 147 -->|false| 189
  435. 175["Block 175:\n %176 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %177 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %176, i32 0, i32 0\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** %178, i64 %180\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, i64 %184\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"]
  436. 175 --> 189
  437. 189["Block 189:\n br label %190\n"]
  438. 189 --> 190
  439. 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"]
  440. 190 --> 70
  441. 193["Block 193:\n br label %194\n"]
  442. 193 --> 194
  443. 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"]
  444. 194 --> 63
  445. 197["Block 197:\n %198 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %199 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %198, i32 0, i32 1\n %200 = load i32, i32* %199, align 8\n %201 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %202 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %201, i32 0, i32 2\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** %6, align 8\n %207 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %206, i32 0, i32 3\n store i32 %205, i32* %207, align 8\n %208 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n store %struct.Matrix* %208, %struct.Matrix** %3, align 8\n br label %209\n"]
  446. 197 --> 209
  447. 209["Block 209:\n %210 = load %struct.Matrix*, %struct.Matrix** %3, align 8\n ret %struct.Matrix* %210\n"]:::critical
  448. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  449. ```
  450. ```mermaid: insertNode
  451. graph TD
  452. 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, align 8\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, align 8\n %12 = load %struct.Node*, %struct.Node** %6, align 8\n %13 = icmp ne %struct.Node* %12, null\n br i1 %13, label %16, label %14\n"]:::critical
  453. 2 -->|true| 16
  454. 2 -->|false| 14
  455. 14["Block 14:\n call void @setErrorMessage(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.25, i64 0, i64 0))\n %15 = load %struct.Node*, %struct.Node** %4, align 8\n store %struct.Node* %15, %struct.Node** %3, align 8\n br label %92\n"]
  456. 14 --> 92
  457. 16["Block 16:\n %17 = load i32, i32* %5, align 4\n %18 = load %struct.Node*, %struct.Node** %6, align 8\n %19 = getelementptr inbounds %struct.Node, %struct.Node* %18, i32 0, i32 0\n store i32 %17, i32* %19, align 8\n %20 = load %struct.Node*, %struct.Node** %6, align 8\n %21 = getelementptr inbounds %struct.Node, %struct.Node* %20, i32 0, i32 1\n store %struct.Node* null, %struct.Node** %21, align 8\n %22 = load %struct.Node*, %struct.Node** %6, align 8\n %23 = getelementptr inbounds %struct.Node, %struct.Node* %22, i32 0, i32 2\n store %struct.Node* null, %struct.Node** %23, align 8\n %24 = load %struct.Node*, %struct.Node** %6, align 8\n %25 = getelementptr inbounds %struct.Node, %struct.Node* %24, i32 0, i32 3\n store i32 0, i32* %25, align 8\n %26 = load %struct.Node*, %struct.Node** %4, align 8\n %27 = icmp ne %struct.Node* %26, null\n br i1 %27, label %32, label %28\n"]
  458. 16 -->|true| 32
  459. 16 -->|false| 28
  460. 28["Block 28:\n %29 = load %struct.Node*, %struct.Node** %6, align 8\n %30 = getelementptr inbounds %struct.Node, %struct.Node* %29, i32 0, i32 4\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, align 8\n store %struct.Node* %31, %struct.Node** %3, align 8\n br label %92\n"]
  461. 28 --> 92
  462. 32["Block 32:\n %33 = load %struct.Node*, %struct.Node** %4, align 8\n store %struct.Node* %33, %struct.Node** %7, align 8\n store %struct.Node* null, %struct.Node** %8, align 8\n store i32 0, i32* %9, align 4\n br label %34\n"]
  463. 32 --> 34
  464. 34["Block 34:\n %35 = load %struct.Node*, %struct.Node** %7, align 8\n %36 = icmp ne %struct.Node* %35, null\n br i1 %36, label %37, label %43\n"]
  465. 34 -->|true| 37
  466. 34 -->|false| 43
  467. 37["Block 37:\n %38 = load %struct.Node*, %struct.Node** %7, align 8\n %39 = getelementptr inbounds %struct.Node, %struct.Node* %38, i32 0, i32 0\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"]
  468. 37 --> 43
  469. 43["Block 43:\n %44 = phi i1 [ false, %34 ], [ %42, %37 ]\n br i1 %44, label %45, label %59\n"]
  470. 43 -->|true| 45
  471. 43 -->|false| 59
  472. 45["Block 45:\n %46 = load %struct.Node*, %struct.Node** %7, align 8\n store %struct.Node* %46, %struct.Node** %8, align 8\n %47 = load %struct.Node*, %struct.Node** %7, align 8\n %48 = getelementptr inbounds %struct.Node, %struct.Node* %47, i32 0, i32 1\n %49 = load %struct.Node*, %struct.Node** %48, align 8\n store %struct.Node* %49, %struct.Node** %7, align 8\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"]
  473. 45 -->|true| 54
  474. 45 -->|false| 58
  475. 54["Block 54:\n call void @setErrorMessage(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.26, i64 0, i64 0))\n %55 = load %struct.Node*, %struct.Node** %6, align 8\n %56 = bitcast %struct.Node* %55 to i8*\n call void @free(i8* %56) #7\n %57 = load %struct.Node*, %struct.Node** %4, align 8\n store %struct.Node* %57, %struct.Node** %3, align 8\n br label %92\n"]
  476. 54 --> 92
  477. 58["Block 58:\n br label %34\n"]
  478. 58 --> 34
  479. 59["Block 59:\n %60 = load i32, i32* %9, align 4\n %61 = load i32, i32* @insertNode.maxDepth, align 4\n %62 = icmp sgt i32 %60, %61\n br i1 %62, label %63, label %65\n"]
  480. 59 -->|true| 63
  481. 59 -->|false| 65
  482. 63["Block 63:\n %64 = load i32, i32* %9, align 4\n store i32 %64, i32* @insertNode.maxDepth, align 4\n br label %65\n"]
  483. 63 --> 65
  484. 65["Block 65:\n %66 = load i32, i32* %9, align 4\n %67 = load %struct.Node*, %struct.Node** %6, align 8\n %68 = getelementptr inbounds %struct.Node, %struct.Node* %67, i32 0, i32 4\n store i32 %66, i32* %68, align 4\n %69 = load %struct.Node*, %struct.Node** %7, align 8\n %70 = load %struct.Node*, %struct.Node** %6, align 8\n %71 = getelementptr inbounds %struct.Node, %struct.Node* %70, i32 0, i32 1\n store %struct.Node* %69, %struct.Node** %71, align 8\n %72 = load %struct.Node*, %struct.Node** %8, align 8\n %73 = icmp ne %struct.Node* %72, null\n br i1 %73, label %74, label %81\n"]
  485. 65 -->|true| 74
  486. 65 -->|false| 81
  487. 74["Block 74:\n %75 = load %struct.Node*, %struct.Node** %6, align 8\n %76 = load %struct.Node*, %struct.Node** %8, align 8\n %77 = getelementptr inbounds %struct.Node, %struct.Node* %76, i32 0, i32 1\n store %struct.Node* %75, %struct.Node** %77, align 8\n %78 = load %struct.Node*, %struct.Node** %8, align 8\n %79 = load %struct.Node*, %struct.Node** %6, align 8\n %80 = getelementptr inbounds %struct.Node, %struct.Node* %79, i32 0, i32 2\n store %struct.Node* %78, %struct.Node** %80, align 8\n br label %83\n"]
  488. 74 --> 83
  489. 81["Block 81:\n %82 = load %struct.Node*, %struct.Node** %6, align 8\n store %struct.Node* %82, %struct.Node** %3, align 8\n br label %92\n"]
  490. 81 --> 92
  491. 83["Block 83:\n %84 = load %struct.Node*, %struct.Node** %7, align 8\n %85 = icmp ne %struct.Node* %84, null\n br i1 %85, label %86, label %90\n"]
  492. 83 -->|true| 86
  493. 83 -->|false| 90
  494. 86["Block 86:\n %87 = load %struct.Node*, %struct.Node** %6, align 8\n %88 = load %struct.Node*, %struct.Node** %7, align 8\n %89 = getelementptr inbounds %struct.Node, %struct.Node* %88, i32 0, i32 2\n store %struct.Node* %87, %struct.Node** %89, align 8\n br label %90\n"]
  495. 86 --> 90
  496. 90["Block 90:\n %91 = load %struct.Node*, %struct.Node** %4, align 8\n store %struct.Node* %91, %struct.Node** %3, align 8\n br label %92\n"]
  497. 90 --> 92
  498. 92["Block 92:\n %93 = load %struct.Node*, %struct.Node** %3, align 8\n ret %struct.Node* %93\n"]:::critical
  499. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  500. ```
  501. ```mermaid: performSimpleCalculations
  502. graph TD
  503. 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
  504. 0 -->|true| 4
  505. 0 -->|false| 9
  506. 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"]
  507. 4 --> 14
  508. 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"]
  509. 9 --> 14
  510. 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
  511. 14 -->|true| 18
  512. 14 -->|false| 21
  513. 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"]
  514. 18 --> 24
  515. 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"]
  516. 21 --> 24
  517. 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
  518. 24 -->|true| 27
  519. 24 -->|false| 33
  520. 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"]
  521. 27 -->|true| 30
  522. 27 -->|false| 33
  523. 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"]
  524. 30 --> 36
  525. 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"]
  526. 33 --> 36
  527. 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
  528. 36 -->|true| 40
  529. 36 -->|false| 43
  530. 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"]
  531. 40 --> 46
  532. 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"]
  533. 43 --> 46
  534. 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
  535. 46 -->|true| 50
  536. 46 -->|false| 53
  537. 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"]
  538. 50 --> 56
  539. 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"]
  540. 53 --> 56
  541. 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
  542. 56 -->|true| 59
  543. 56 -->|false| 60
  544. 59["Block 59:\n store i32 1000, i32* @calculationResult, align 4\n br label %63\n"]
  545. 59 --> 63
  546. 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"]
  547. 60 --> 63
  548. 63["Block 63:\n %64 = load i32, i32* @calculationResult, align 4\n %65 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.27, i64 0, i64 0), i32 %64)\n ret void\n"]:::critical
  549. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  550. ```
  551. ```mermaid: projectA_main
  552. graph TD
  553. 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* @createDynamicArray(i32 10)\n store %struct.DynamicArray* %22, %struct.DynamicArray** %2, align 8\n %23 = load %struct.DynamicArray*, %struct.DynamicArray** %2, align 8\n %24 = icmp ne %struct.DynamicArray* %23, null\n br i1 %24, label %28, label %25\n"]:::critical
  554. 0 -->|true| 28
  555. 0 -->|false| 25
  556. 25["Block 25:\n %26 = call i8* @getErrorMessage()\n %27 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.28, i64 0, i64 0), i8* %26)\n store i32 -1, i32* %1, align 4\n br label %322\n"]
  557. 25 --> 322
  558. 28["Block 28:\n store i32 0, i32* %3, align 4\n br label %29\n"]
  559. 28 --> 29
  560. 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"]
  561. 29 -->|true| 32
  562. 29 -->|false| 45
  563. 32["Block 32:\n %33 = load %struct.DynamicArray*, %struct.DynamicArray** %2, align 8\n %34 = call i32 @rand() #7\n %35 = srem i32 %34, 100\n call void @pushBack(%struct.DynamicArray* %33, i32 %35)\n %36 = load i8*, i8** @globalErrorMessage, align 8\n %37 = icmp ne i8* %36, null\n br i1 %37, label %38, label %41\n"]
  564. 32 -->|true| 38
  565. 32 -->|false| 41
  566. 38["Block 38:\n %39 = call i8* @getErrorMessage()\n %40 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.29, i64 0, i64 0), i8* %39)\n br label %45\n"]
  567. 38 --> 45
  568. 41["Block 41:\n br label %42\n"]
  569. 41 --> 42
  570. 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"]
  571. 42 --> 29
  572. 45["Block 45:\n %46 = call %struct.Matrix* @createMatrix(i32 3, i32 3)\n store %struct.Matrix* %46, %struct.Matrix** %4, align 8\n %47 = call %struct.Matrix* @createMatrix(i32 3, i32 3)\n store %struct.Matrix* %47, %struct.Matrix** %5, align 8\n %48 = load %struct.Matrix*, %struct.Matrix** %4, align 8\n %49 = icmp ne %struct.Matrix* %48, null\n br i1 %49, label %50, label %53\n"]
  573. 45 -->|true| 50
  574. 45 -->|false| 53
  575. 50["Block 50:\n %51 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %52 = icmp ne %struct.Matrix* %51, null\n br i1 %52, label %74, label %53\n"]
  576. 50 -->|true| 74
  577. 50 -->|false| 53
  578. 53["Block 53:\n %54 = call i8* @getErrorMessage()\n %55 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.28, i64 0, i64 0), i8* %54)\n %56 = load %struct.Matrix*, %struct.Matrix** %4, align 8\n %57 = icmp ne %struct.Matrix* %56, null\n br i1 %57, label %58, label %61\n"]
  579. 53 -->|true| 58
  580. 53 -->|false| 61
  581. 58["Block 58:\n %59 = load %struct.Matrix*, %struct.Matrix** %4, align 8\n %60 = bitcast %struct.Matrix* %59 to i8*\n call void @free(i8* %60) #7\n br label %61\n"]
  582. 58 --> 61
  583. 61["Block 61:\n %62 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %63 = icmp ne %struct.Matrix* %62, null\n br i1 %63, label %64, label %67\n"]
  584. 61 -->|true| 64
  585. 61 -->|false| 67
  586. 64["Block 64:\n %65 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %66 = bitcast %struct.Matrix* %65 to i8*\n call void @free(i8* %66) #7\n br label %67\n"]
  587. 64 --> 67
  588. 67["Block 67:\n %68 = load %struct.DynamicArray*, %struct.DynamicArray** %2, align 8\n %69 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %68, i32 0, i32 0\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.DynamicArray** %2, align 8\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"]
  589. 67 --> 322
  590. 74["Block 74:\n store i32 0, i32* %6, align 4\n br label %75\n"]
  591. 74 --> 75
  592. 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"]
  593. 75 -->|true| 78
  594. 75 -->|false| 114
  595. 78["Block 78:\n store i32 0, i32* %7, align 4\n br label %79\n"]
  596. 78 --> 79
  597. 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"]
  598. 79 -->|true| 82
  599. 79 -->|false| 110
  600. 82["Block 82:\n %83 = call i32 @rand() #7\n %84 = srem i32 %83, 10\n %85 = load %struct.Matrix*, %struct.Matrix** %4, align 8\n %86 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %85, i32 0, i32 0\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, i64 %89\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, i64 %93\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** %5, align 8\n %98 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %97, i32 0, i32 0\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, i64 %101\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, i64 %105\n store i32 %96, i32* %106, align 4\n br label %107\n"]
  601. 82 --> 107
  602. 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"]
  603. 107 --> 79
  604. 110["Block 110:\n br label %111\n"]
  605. 110 --> 111
  606. 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"]
  607. 111 --> 75
  608. 114["Block 114:\n %115 = load %struct.Matrix*, %struct.Matrix** %4, align 8\n %116 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %117 = call %struct.Matrix* @multiplyMatrices(%struct.Matrix* %115, %struct.Matrix* %116)\n store %struct.Matrix* %117, %struct.Matrix** %8, align 8\n %118 = load %struct.Matrix*, %struct.Matrix** %8, align 8\n %119 = icmp ne %struct.Matrix* %118, null\n br i1 %119, label %168, label %120\n"]
  609. 114 -->|true| 168
  610. 114 -->|false| 120
  611. 120["Block 120:\n %121 = call i8* @getErrorMessage()\n %122 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.28, i64 0, i64 0), i8* %121)\n store i32 0, i32* %9, align 4\n br label %123\n"]
  612. 120 --> 123
  613. 123["Block 123:\n %124 = load i32, i32* %9, align 4\n %125 = load %struct.Matrix*, %struct.Matrix** %4, align 8\n %126 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %125, i32 0, i32 1\n %127 = load i32, i32* %126, align 8\n %128 = icmp slt i32 %124, %127\n br i1 %128, label %129, label %149\n"]
  614. 123 -->|true| 129
  615. 123 -->|false| 149
  616. 129["Block 129:\n %130 = load %struct.Matrix*, %struct.Matrix** %4, align 8\n %131 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %130, i32 0, i32 0\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** %132, i64 %134\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** %5, align 8\n %139 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %138, i32 0, i32 0\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** %140, i64 %142\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"]
  617. 129 --> 146
  618. 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"]
  619. 146 --> 123
  620. 149["Block 149:\n %150 = load %struct.Matrix*, %struct.Matrix** %4, align 8\n %151 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %150, i32 0, i32 0\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** %5, align 8\n %155 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %154, i32 0, i32 0\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** %4, align 8\n %159 = bitcast %struct.Matrix* %158 to i8*\n call void @free(i8* %159) #7\n %160 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %161 = bitcast %struct.Matrix* %160 to i8*\n call void @free(i8* %161) #7\n %162 = load %struct.DynamicArray*, %struct.DynamicArray** %2, align 8\n %163 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %162, i32 0, i32 0\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.DynamicArray** %2, align 8\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"]
  621. 149 --> 322
  622. 168["Block 168:\n store %struct.Node* null, %struct.Node** %10, align 8\n store i32 0, i32* %11, align 4\n br label %169\n"]
  623. 168 --> 169
  624. 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"]
  625. 169 -->|true| 172
  626. 169 -->|false| 186
  627. 172["Block 172:\n %173 = load %struct.Node*, %struct.Node** %10, align 8\n %174 = call i32 @rand() #7\n %175 = srem i32 %174, 50\n %176 = call %struct.Node* @insertNode(%struct.Node* %173, i32 %175)\n store %struct.Node* %176, %struct.Node** %10, align 8\n %177 = load i8*, i8** @globalErrorMessage, align 8\n %178 = icmp ne i8* %177, null\n br i1 %178, label %179, label %182\n"]
  628. 172 -->|true| 179
  629. 172 -->|false| 182
  630. 179["Block 179:\n %180 = call i8* @getErrorMessage()\n %181 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.30, i64 0, i64 0), i8* %180)\n br label %186\n"]
  631. 179 --> 186
  632. 182["Block 182:\n br label %183\n"]
  633. 182 --> 183
  634. 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"]
  635. 183 --> 169
  636. 186["Block 186:\n %187 = load %struct.DynamicArray*, %struct.DynamicArray** %2, align 8\n %188 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %187, i32 0, i32 0\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.DynamicArray** %2, align 8\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"]
  637. 186 --> 193
  638. 193["Block 193:\n %194 = load i32, i32* %12, align 4\n %195 = load %struct.Matrix*, %struct.Matrix** %4, align 8\n %196 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %195, i32 0, i32 1\n %197 = load i32, i32* %196, align 8\n %198 = icmp slt i32 %194, %197\n br i1 %198, label %199, label %227\n"]
  639. 193 -->|true| 199
  640. 193 -->|false| 227
  641. 199["Block 199:\n %200 = load %struct.Matrix*, %struct.Matrix** %4, align 8\n %201 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %200, i32 0, i32 0\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** %202, i64 %204\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** %5, align 8\n %209 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %208, i32 0, i32 0\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** %210, i64 %212\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** %8, align 8\n %217 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %216, i32 0, i32 0\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** %218, i64 %220\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"]
  642. 199 --> 224
  643. 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"]
  644. 224 --> 193
  645. 227["Block 227:\n %228 = load %struct.Matrix*, %struct.Matrix** %4, align 8\n %229 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %228, i32 0, i32 0\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** %5, align 8\n %233 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %232, i32 0, i32 0\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** %8, align 8\n %237 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %236, i32 0, i32 0\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** %4, align 8\n %241 = bitcast %struct.Matrix* %240 to i8*\n call void @free(i8* %241) #7\n %242 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %243 = bitcast %struct.Matrix* %242 to i8*\n call void @free(i8* %243) #7\n %244 = load %struct.Matrix*, %struct.Matrix** %8, align 8\n %245 = bitcast %struct.Matrix* %244 to i8*\n call void @free(i8* %245) #7\n %246 = load %struct.Node*, %struct.Node** %10, align 8\n %247 = icmp ne %struct.Node* %246, null\n br i1 %247, label %248, label %316\n"]
  646. 227 -->|true| 248
  647. 227 -->|false| 316
  648. 248["Block 248:\n %249 = load %struct.Node*, %struct.Node** %10, align 8\n store %struct.Node* %249, %struct.Node** %13, align 8\n %250 = load %struct.Node*, %struct.Node** %10, align 8\n store %struct.Node* %250, %struct.Node** %14, align 8\n store i32 0, i32* %15, align 4\n br label %251\n"]
  649. 248 --> 251
  650. 251["Block 251:\n %252 = load %struct.Node*, %struct.Node** %14, align 8\n %253 = icmp ne %struct.Node* %252, null\n br i1 %253, label %254, label %259\n"]
  651. 251 -->|true| 254
  652. 251 -->|false| 259
  653. 254["Block 254:\n %255 = load %struct.Node*, %struct.Node** %14, align 8\n %256 = getelementptr inbounds %struct.Node, %struct.Node* %255, i32 0, i32 1\n %257 = load %struct.Node*, %struct.Node** %256, align 8\n %258 = icmp ne %struct.Node* %257, null\n br label %259\n"]
  654. 254 --> 259
  655. 259["Block 259:\n %260 = phi i1 [ false, %251 ], [ %258, %254 ]\n br i1 %260, label %261, label %275\n"]
  656. 259 -->|true| 261
  657. 259 -->|false| 275
  658. 261["Block 261:\n %262 = load %struct.Node*, %struct.Node** %13, align 8\n %263 = getelementptr inbounds %struct.Node, %struct.Node* %262, i32 0, i32 1\n %264 = load %struct.Node*, %struct.Node** %263, align 8\n store %struct.Node* %264, %struct.Node** %13, align 8\n %265 = load %struct.Node*, %struct.Node** %14, align 8\n %266 = getelementptr inbounds %struct.Node, %struct.Node* %265, i32 0, i32 1\n %267 = load %struct.Node*, %struct.Node** %266, align 8\n %268 = getelementptr inbounds %struct.Node, %struct.Node* %267, i32 0, i32 1\n %269 = load %struct.Node*, %struct.Node** %268, align 8\n store %struct.Node* %269, %struct.Node** %14, align 8\n %270 = load %struct.Node*, %struct.Node** %13, align 8\n %271 = load %struct.Node*, %struct.Node** %14, align 8\n %272 = icmp eq %struct.Node* %270, %271\n br i1 %272, label %273, label %274\n"]
  659. 261 -->|true| 273
  660. 261 -->|false| 274
  661. 273["Block 273:\n store i32 1, i32* %15, align 4\n br label %275\n"]
  662. 273 --> 275
  663. 274["Block 274:\n br label %251\n"]
  664. 274 --> 251
  665. 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"]
  666. 275 -->|true| 278
  667. 275 -->|false| 304
  668. 278["Block 278:\n call void @setErrorMessage(i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.31, i64 0, i64 0))\n %279 = load %struct.Node*, %struct.Node** %10, align 8\n store %struct.Node* %279, %struct.Node** %16, align 8\n store i32 1000, i32* %17, align 4\n store i32 0, i32* %18, align 4\n br label %280\n"]
  669. 278 --> 280
  670. 280["Block 280:\n %281 = load %struct.Node*, %struct.Node** %16, align 8\n %282 = icmp ne %struct.Node* %281, null\n br i1 %282, label %283, label %287\n"]
  671. 280 -->|true| 283
  672. 280 -->|false| 287
  673. 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"]
  674. 283 --> 287
  675. 287["Block 287:\n %288 = phi i1 [ false, %280 ], [ %286, %283 ]\n br i1 %288, label %289, label %303\n"]
  676. 287 -->|true| 289
  677. 287 -->|false| 303
  678. 289["Block 289:\n %290 = load %struct.Node*, %struct.Node** %16, align 8\n %291 = getelementptr inbounds %struct.Node, %struct.Node* %290, i32 0, i32 3\n %292 = load i32, i32* %291, align 8\n %293 = icmp ne i32 %292, 0\n br i1 %293, label %294, label %295\n"]
  679. 289 -->|true| 294
  680. 289 -->|false| 295
  681. 294["Block 294:\n br label %303\n"]
  682. 294 --> 303
  683. 295["Block 295:\n %296 = load %struct.Node*, %struct.Node** %16, align 8\n %297 = getelementptr inbounds %struct.Node, %struct.Node* %296, i32 0, i32 3\n store i32 1, i32* %297, align 8\n %298 = load %struct.Node*, %struct.Node** %16, align 8\n %299 = getelementptr inbounds %struct.Node, %struct.Node* %298, i32 0, i32 1\n %300 = load %struct.Node*, %struct.Node** %299, align 8\n store %struct.Node* %300, %struct.Node** %16, align 8\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"]
  684. 295 --> 280
  685. 303["Block 303:\n br label %304\n"]
  686. 303 --> 304
  687. 304["Block 304:\n br label %305\n"]
  688. 304 --> 305
  689. 305["Block 305:\n %306 = load %struct.Node*, %struct.Node** %10, align 8\n %307 = icmp ne %struct.Node* %306, null\n br i1 %307, label %308, label %315\n"]
  690. 305 -->|true| 308
  691. 305 -->|false| 315
  692. 308["Block 308:\n %309 = load %struct.Node*, %struct.Node** %10, align 8\n store %struct.Node* %309, %struct.Node** %19, align 8\n %310 = load %struct.Node*, %struct.Node** %10, align 8\n %311 = getelementptr inbounds %struct.Node, %struct.Node* %310, i32 0, i32 1\n %312 = load %struct.Node*, %struct.Node** %311, align 8\n store %struct.Node* %312, %struct.Node** %10, align 8\n %313 = load %struct.Node*, %struct.Node** %19, align 8\n %314 = bitcast %struct.Node* %313 to i8*\n call void @free(i8* %314) #7\n br label %305\n"]
  693. 308 --> 305
  694. 315["Block 315:\n br label %316\n"]
  695. 315 --> 316
  696. 316["Block 316:\n %317 = load i8*, i8** @globalErrorMessage, align 8\n %318 = icmp ne i8* %317, null\n br i1 %318, label %319, label %321\n"]
  697. 316 -->|true| 319
  698. 316 -->|false| 321
  699. 319["Block 319:\n %320 = load i8*, i8** @globalErrorMessage, align 8\n call void @free(i8* %320) #7\n br label %321\n"]
  700. 319 --> 321
  701. 321["Block 321:\n call void @performSimpleCalculations()\n store i32 0, i32* %1, align 4\n br label %322\n"]
  702. 321 --> 322
  703. 322["Block 322:\n %323 = load i32, i32* %1, align 4\n ret i32 %323\n"]:::critical
  704. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  705. ```
  706. ```mermaid: calculateDistance
  707. graph TD
  708. 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, %struct.Point* %0, i32 0, i32 3\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
  709. 3 -->|true| 17
  710. 3 -->|false| 13
  711. 13["Block 13:\n %14 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 3\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"]
  712. 13 -->|true| 17
  713. 13 -->|false| 19
  714. 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 inbounds ([22 x i8], [22 x i8]* @.str.32, i64 0, i64 0))\n store double -1.000000e+00, double* %4, align 8\n br label %101\n"]
  715. 17 --> 101
  716. 19["Block 19:\n %20 = getelementptr inbounds %struct.Point, %struct.Point* %0, i32 0, i32 0\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"]
  717. 19 -->|true| 39
  718. 19 -->|false| 24
  719. 24["Block 24:\n %25 = getelementptr inbounds %struct.Point, %struct.Point* %0, i32 0, i32 1\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"]
  720. 24 -->|true| 39
  721. 24 -->|false| 29
  722. 29["Block 29:\n %30 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 0\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"]
  723. 29 -->|true| 39
  724. 29 -->|false| 34
  725. 34["Block 34:\n %35 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 1\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"]
  726. 34 -->|true| 39
  727. 34 -->|false| 41
  728. 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 inbounds ([31 x i8], [31 x i8]* @.str.33, i64 0, i64 0))\n store double -1.000000e+00, double* %4, align 8\n br label %101\n"]
  729. 39 --> 101
  730. 41["Block 41:\n %42 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 0\n %43 = load i32, i32* %42, align 8\n %44 = getelementptr inbounds %struct.Point, %struct.Point* %0, i32 0, i32 0\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, %struct.Point* %1, i32 0, i32 3\n %49 = load double, double* %48, align 8\n %50 = getelementptr inbounds %struct.Point, %struct.Point* %0, i32 0, i32 3\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, %struct.Point* %1, i32 0, i32 1\n %56 = load i32, i32* %55, align 4\n %57 = getelementptr inbounds %struct.Point, %struct.Point* %0, i32 0, i32 1\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, %struct.Point* %1, i32 0, i32 3\n %62 = load double, double* %61, align 8\n %63 = getelementptr inbounds %struct.Point, %struct.Point* %0, i32 0, i32 3\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"]
  731. 41 -->|true| 75
  732. 41 -->|false| 71
  733. 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"]
  734. 71 -->|true| 75
  735. 71 -->|false| 77
  736. 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 inbounds ([30 x i8], [30 x i8]* @.str.34, i64 0, i64 0))\n store double -1.000000e+00, double* %4, align 8\n br label %101\n"]
  737. 75 --> 101
  738. 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"]
  739. 77 -->|true| 97
  740. 77 -->|false| 88
  741. 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"]
  742. 88 -->|true| 97
  743. 88 -->|false| 99
  744. 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 inbounds ([36 x i8], [36 x i8]* @.str.35, i64 0, i64 0))\n store double -1.000000e+00, double* %4, align 8\n br label %101\n"]
  745. 97 --> 101
  746. 99["Block 99:\n %100 = load double, double* %8, align 8\n store double %100, double* %4, align 8\n br label %101\n"]
  747. 99 --> 101
  748. 101["Block 101:\n %102 = load double, double* %4, align 8\n ret double %102\n"]:::critical
  749. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  750. ```
  751. ```mermaid: calculateCircleArea
  752. graph TD
  753. 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, %struct.Circle* %0, i32 0, i32 2\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
  754. 2 -->|true| 12
  755. 2 -->|false| 10
  756. 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 inbounds ([15 x i8], [15 x i8]* @.str.36, i64 0, i64 0))\n store double -1.000000e+00, double* %3, align 8\n br label %85\n"]
  757. 10 --> 85
  758. 12["Block 12:\n %13 = getelementptr inbounds %struct.Circle, %struct.Circle* %0, i32 0, i32 1\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"]
  759. 12 -->|true| 16
  760. 12 -->|false| 18
  761. 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 inbounds ([22 x i8], [22 x i8]* @.str.37, i64 0, i64 0))\n store double -1.000000e+00, double* %3, align 8\n br label %85\n"]
  762. 16 --> 85
  763. 18["Block 18:\n %19 = getelementptr inbounds %struct.Circle, %struct.Circle* %0, i32 0, i32 1\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"]
  764. 18 -->|true| 22
  765. 18 -->|false| 24
  766. 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 inbounds ([24 x i8], [24 x i8]* @.str.38, i64 0, i64 0))\n store double -1.000000e+00, double* %3, align 8\n br label %85\n"]
  767. 22 --> 85
  768. 24["Block 24:\n %25 = getelementptr inbounds %struct.Circle, %struct.Circle* %0, i32 0, i32 0\n %26 = getelementptr inbounds %struct.Point, %struct.Point* %25, i32 0, i32 0\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"]
  769. 24 -->|true| 36
  770. 24 -->|false| 30
  771. 30["Block 30:\n %31 = getelementptr inbounds %struct.Circle, %struct.Circle* %0, i32 0, i32 0\n %32 = getelementptr inbounds %struct.Point, %struct.Point* %31, i32 0, i32 1\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"]
  772. 30 -->|true| 36
  773. 30 -->|false| 38
  774. 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 inbounds ([45 x i8], [45 x i8]* @.str.39, i64 0, i64 0))\n store double -1.000000e+00, double* %3, align 8\n br label %85\n"]
  775. 36 --> 85
  776. 38["Block 38:\n %39 = getelementptr inbounds %struct.Circle, %struct.Circle* %0, i32 0, i32 1\n %40 = load double, double* %39, align 8\n %41 = fmul double 3.141590e+00, %40\n %42 = getelementptr inbounds %struct.Circle, %struct.Circle* %0, i32 0, i32 1\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"]
  777. 38 -->|true| 56
  778. 38 -->|false| 47
  779. 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"]
  780. 47 -->|true| 56
  781. 47 -->|false| 58
  782. 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 inbounds ([26 x i8], [26 x i8]* @.str.40, i64 0, i64 0))\n store double -1.000000e+00, double* %3, align 8\n br label %85\n"]
  783. 56 --> 85
  784. 58["Block 58:\n %59 = getelementptr inbounds %struct.Circle, %struct.Circle* %0, i32 0, i32 3\n %60 = getelementptr inbounds [256 x i8], [256 x i8]* %59, i64 0, i64 0\n %61 = call i32 @strcmp(i8* %60, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.41, i64 0, i64 0)) #9\n %62 = icmp eq i32 %61, 0\n br i1 %62, label %63, label %65\n"]
  785. 58 -->|true| 63
  786. 58 -->|false| 65
  787. 63["Block 63:\n %64 = load double, double* %5, align 8\n store double %64, double* %3, align 8\n br label %85\n"]
  788. 63 --> 85
  789. 65["Block 65:\n %66 = getelementptr inbounds %struct.Circle, %struct.Circle* %0, i32 0, i32 3\n %67 = getelementptr inbounds [256 x i8], [256 x i8]* %66, i64 0, i64 0\n %68 = call i32 @strcmp(i8* %67, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.42, i64 0, i64 0)) #9\n %69 = icmp eq i32 %68, 0\n br i1 %69, label %70, label %83\n"]
  790. 65 -->|true| 70
  791. 65 -->|false| 83
  792. 70["Block 70:\n %71 = getelementptr inbounds %struct.Circle, %struct.Circle* %0, i32 0, i32 0\n %72 = getelementptr inbounds %struct.Point, %struct.Point* %71, i32 0, i32 3\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"]
  793. 70 -->|true| 75
  794. 70 -->|false| 77
  795. 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 inbounds ([35 x i8], [35 x i8]* @.str.43, i64 0, i64 0))\n store double -1.000000e+00, double* %3, align 8\n br label %85\n"]
  796. 75 --> 85
  797. 77["Block 77:\n %78 = load double, double* %5, align 8\n %79 = getelementptr inbounds %struct.Circle, %struct.Circle* %0, i32 0, i32 0\n %80 = getelementptr inbounds %struct.Point, %struct.Point* %79, i32 0, i32 3\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"]
  798. 77 --> 85
  799. 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 inbounds ([20 x i8], [20 x i8]* @.str.44, i64 0, i64 0))\n store double -1.000000e+00, double* %3, align 8\n br label %85\n"]
  800. 83 --> 85
  801. 85["Block 85:\n %86 = load double, double* %3, align 8\n ret double %86\n"]:::critical
  802. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  803. ```
  804. ```mermaid: validateMatrix
  805. graph TD
  806. 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, align 8\n %5 = load %struct.Matrix*, %struct.Matrix** %3, align 8\n %6 = icmp ne %struct.Matrix* %5, null\n br i1 %6, label %8, label %7\n"]:::critical
  807. 1 -->|true| 8
  808. 1 -->|false| 7
  809. 7["Block 7:\n call void @setErrorMessage(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.21, i64 0, i64 0))\n store i32 7, i32* %2, align 4\n br label %72\n"]
  810. 7 --> 72
  811. 8["Block 8:\n %9 = load %struct.Matrix*, %struct.Matrix** %3, align 8\n %10 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %9, i32 0, i32 0\n %11 = load i32**, i32*** %10, align 8\n %12 = icmp ne i32** %11, null\n br i1 %12, label %14, label %13\n"]
  812. 8 -->|true| 14
  813. 8 -->|false| 13
  814. 13["Block 13:\n call void @setErrorMessage(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.45, i64 0, i64 0))\n store i32 7, i32* %2, align 4\n br label %72\n"]
  815. 13 --> 72
  816. 14["Block 14:\n %15 = load %struct.Matrix*, %struct.Matrix** %3, align 8\n %16 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %15, i32 0, i32 1\n %17 = load i32, i32* %16, align 8\n %18 = icmp slt i32 %17, 1\n br i1 %18, label %24, label %19\n"]
  817. 14 -->|true| 24
  818. 14 -->|false| 19
  819. 19["Block 19:\n %20 = load %struct.Matrix*, %struct.Matrix** %3, align 8\n %21 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %20, i32 0, i32 2\n %22 = load i32, i32* %21, align 4\n %23 = icmp slt i32 %22, 1\n br i1 %23, label %24, label %25\n"]
  820. 19 -->|true| 24
  821. 19 -->|false| 25
  822. 24["Block 24:\n call void @setErrorMessage(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.16, i64 0, i64 0))\n store i32 1, i32* %2, align 4\n br label %72\n"]
  823. 24 --> 72
  824. 25["Block 25:\n %26 = load %struct.Matrix*, %struct.Matrix** %3, align 8\n %27 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %26, i32 0, i32 1\n %28 = load i32, i32* %27, align 8\n %29 = icmp sgt i32 %28, 100\n br i1 %29, label %35, label %30\n"]
  825. 25 -->|true| 35
  826. 25 -->|false| 30
  827. 30["Block 30:\n %31 = load %struct.Matrix*, %struct.Matrix** %3, align 8\n %32 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %31, i32 0, i32 2\n %33 = load i32, i32* %32, align 4\n %34 = icmp sgt i32 %33, 100\n br i1 %34, label %35, label %36\n"]
  828. 30 -->|true| 35
  829. 30 -->|false| 36
  830. 35["Block 35:\n call void @setErrorMessage(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.46, i64 0, i64 0))\n store i32 3, i32* %2, align 4\n br label %72\n"]
  831. 35 --> 72
  832. 36["Block 36:\n store i32 0, i32* %4, align 4\n br label %37\n"]
  833. 36 --> 37
  834. 37["Block 37:\n %38 = load i32, i32* %4, align 4\n %39 = load %struct.Matrix*, %struct.Matrix** %3, align 8\n %40 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %39, i32 0, i32 1\n %41 = load i32, i32* %40, align 8\n %42 = icmp slt i32 %38, %41\n br i1 %42, label %43, label %57\n"]
  835. 37 -->|true| 43
  836. 37 -->|false| 57
  837. 43["Block 43:\n %44 = load %struct.Matrix*, %struct.Matrix** %3, align 8\n %45 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %44, i32 0, i32 0\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, i64 %48\n %50 = load i32*, i32** %49, align 8\n %51 = icmp ne i32* %50, null\n br i1 %51, label %53, label %52\n"]
  838. 43 -->|true| 53
  839. 43 -->|false| 52
  840. 52["Block 52:\n call void @setErrorMessage(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.47, i64 0, i64 0))\n store i32 7, i32* %2, align 4\n br label %72\n"]
  841. 52 --> 72
  842. 53["Block 53:\n br label %54\n"]
  843. 53 --> 54
  844. 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"]
  845. 54 --> 37
  846. 57["Block 57:\n %58 = load %struct.Matrix*, %struct.Matrix** %3, align 8\n %59 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %58, i32 0, i32 1\n %60 = load i32, i32* %59, align 8\n %61 = load %struct.Matrix*, %struct.Matrix** %3, align 8\n %62 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %61, i32 0, i32 2\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** %3, align 8\n %67 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %66, i32 0, i32 3\n %68 = load i32, i32* %67, align 8\n %69 = icmp ne i32 %65, %68\n br i1 %69, label %70, label %71\n"]
  847. 57 -->|true| 70
  848. 57 -->|false| 71
  849. 70["Block 70:\n call void @setErrorMessage(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.48, i64 0, i64 0))\n store i32 1, i32* %2, align 4\n br label %72\n"]
  850. 70 --> 72
  851. 71["Block 71:\n store i32 0, i32* %2, align 4\n br label %72\n"]
  852. 71 --> 72
  853. 72["Block 72:\n %73 = load i32, i32* %2, align 4\n ret i32 %73\n"]:::critical
  854. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  855. ```
  856. ```mermaid: removeDuplicates
  857. graph TD
  858. 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.DynamicArray** %2, align 8\n %6 = load %struct.DynamicArray*, %struct.DynamicArray** %2, align 8\n %7 = icmp ne %struct.DynamicArray* %6, null\n br i1 %7, label %8, label %13\n"]:::critical
  859. 1 -->|true| 8
  860. 1 -->|false| 13
  861. 8["Block 8:\n %9 = load %struct.DynamicArray*, %struct.DynamicArray** %2, align 8\n %10 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %9, i32 0, i32 0\n %11 = load i32*, i32** %10, align 8\n %12 = icmp ne i32* %11, null\n br i1 %12, label %14, label %13\n"]
  862. 8 -->|true| 14
  863. 8 -->|false| 13
  864. 13["Block 13:\n call void @setErrorMessage(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.49, i64 0, i64 0))\n br label %81\n"]
  865. 13 --> 81
  866. 14["Block 14:\n %15 = load %struct.DynamicArray*, %struct.DynamicArray** %2, align 8\n %16 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %15, i32 0, i32 1\n %17 = load i32, i32* %16, align 8\n %18 = icmp sle i32 %17, 1\n br i1 %18, label %19, label %20\n"]
  867. 14 -->|true| 19
  868. 14 -->|false| 20
  869. 19["Block 19:\n br label %81\n"]
  870. 19 --> 81
  871. 20["Block 20:\n store i32 0, i32* %3, align 4\n %21 = load %struct.DynamicArray*, %struct.DynamicArray** %2, align 8\n %22 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %21, i32 0, i32 0\n %23 = load i32*, i32** %22, align 8\n %24 = load %struct.DynamicArray*, %struct.DynamicArray** %2, align 8\n %25 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %24, i32 0, i32 1\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, i32* %3)\n %28 = load i32, i32* %3, align 4\n %29 = icmp ne i32 %28, 0\n br i1 %29, label %30, label %31\n"]
  872. 20 -->|true| 30
  873. 20 -->|false| 31
  874. 30["Block 30:\n br label %81\n"]
  875. 30 --> 81
  876. 31["Block 31:\n store i32 1, i32* %4, align 4\n store i32 1, i32* %5, align 4\n br label %32\n"]
  877. 31 --> 32
  878. 32["Block 32:\n %33 = load i32, i32* %5, align 4\n %34 = load %struct.DynamicArray*, %struct.DynamicArray** %2, align 8\n %35 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %34, i32 0, i32 1\n %36 = load i32, i32* %35, align 8\n %37 = icmp slt i32 %33, %36\n br i1 %37, label %38, label %75\n"]
  879. 32 -->|true| 38
  880. 32 -->|false| 75
  881. 38["Block 38:\n %39 = load %struct.DynamicArray*, %struct.DynamicArray** %2, align 8\n %40 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %39, i32 0, i32 0\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, i64 %43\n %45 = load i32, i32* %44, align 4\n %46 = load %struct.DynamicArray*, %struct.DynamicArray** %2, align 8\n %47 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %46, i32 0, i32 0\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, i64 %51\n %53 = load i32, i32* %52, align 4\n %54 = icmp ne i32 %45, %53\n br i1 %54, label %55, label %71\n"]
  882. 38 -->|true| 55
  883. 38 -->|false| 71
  884. 55["Block 55:\n %56 = load %struct.DynamicArray*, %struct.DynamicArray** %2, align 8\n %57 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %56, i32 0, i32 0\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, i64 %60\n %62 = load i32, i32* %61, align 4\n %63 = load %struct.DynamicArray*, %struct.DynamicArray** %2, align 8\n %64 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %63, i32 0, i32 0\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, i64 %67\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"]
  885. 55 --> 71
  886. 71["Block 71:\n br label %72\n"]
  887. 71 --> 72
  888. 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"]
  889. 72 --> 32
  890. 75["Block 75:\n %76 = load i32, i32* %4, align 4\n %77 = load %struct.DynamicArray*, %struct.DynamicArray** %2, align 8\n %78 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %77, i32 0, i32 1\n store i32 %76, i32* %78, align 8\n %79 = load %struct.DynamicArray*, %struct.DynamicArray** %2, align 8\n %80 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %79, i32 0, i32 3\n store i32 1, i32* %80, align 8\n br label %81\n"]
  891. 75 --> 81
  892. 81["Block 81:\n ret void\n"]:::critical
  893. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  894. ```
  895. ```mermaid: findCentroid
  896. graph TD
  897. 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, align 8\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, align 8\n %15 = icmp ne %struct.Point* %14, null\n br i1 %15, label %16, label %19\n"]:::critical
  898. 3 -->|true| 16
  899. 3 -->|false| 19
  900. 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"]
  901. 16 -->|true| 19
  902. 16 -->|false| 21
  903. 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 inbounds ([21 x i8], [21 x i8]* @.str.50, i64 0, i64 0))\n store %struct.Point* null, %struct.Point** %4, align 8\n br label %165\n"]
  904. 19 --> 165
  905. 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"]
  906. 21 -->|true| 24
  907. 21 -->|false| 26
  908. 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 inbounds ([16 x i8], [16 x i8]* @.str.51, i64 0, i64 0))\n store %struct.Point* null, %struct.Point** %4, align 8\n br label %165\n"]
  909. 24 --> 165
  910. 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, align 8\n %29 = load %struct.Point*, %struct.Point** %8, align 8\n %30 = icmp ne %struct.Point* %29, null\n br i1 %30, label %33, label %31\n"]
  911. 26 -->|true| 33
  912. 26 -->|false| 31
  913. 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 inbounds ([39 x i8], [39 x i8]* @.str.52, i64 0, i64 0))\n store %struct.Point* null, %struct.Point** %4, align 8\n br label %165\n"]
  914. 31 --> 165
  915. 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"]
  916. 33 --> 34
  917. 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"]
  918. 34 -->|true| 38
  919. 34 -->|false| 134
  920. 38["Block 38:\n %39 = load %struct.Point*, %struct.Point** %5, align 8\n %40 = load i32, i32* %12, align 4\n %41 = sext i32 %40 to i64\n %42 = getelementptr inbounds %struct.Point, %struct.Point* %39, i64 %41\n %43 = getelementptr inbounds %struct.Point, %struct.Point* %42, i32 0, i32 3\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"]
  921. 38 -->|true| 46
  922. 38 -->|false| 50
  923. 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 inbounds ([21 x i8], [21 x i8]* @.str.53, i64 0, i64 0))\n %48 = load %struct.Point*, %struct.Point** %8, align 8\n %49 = bitcast %struct.Point* %48 to i8*\n call void @free(i8* %49) #7\n store %struct.Point* null, %struct.Point** %4, align 8\n br label %165\n"]
  924. 46 --> 165
  925. 50["Block 50:\n %51 = load %struct.Point*, %struct.Point** %5, align 8\n %52 = load i32, i32* %12, align 4\n %53 = sext i32 %52 to i64\n %54 = getelementptr inbounds %struct.Point, %struct.Point* %51, i64 %53\n %55 = getelementptr inbounds %struct.Point, %struct.Point* %54, i32 0, i32 3\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, align 8\n %60 = load i32, i32* %12, align 4\n %61 = sext i32 %60 to i64\n %62 = getelementptr inbounds %struct.Point, %struct.Point* %59, i64 %61\n %63 = getelementptr inbounds %struct.Point, %struct.Point* %62, i32 0, i32 0\n %64 = load i32, i32* %63, align 8\n %65 = sitofp i32 %64 to double\n %66 = load %struct.Point*, %struct.Point** %5, align 8\n %67 = load i32, i32* %12, align 4\n %68 = sext i32 %67 to i64\n %69 = getelementptr inbounds %struct.Point, %struct.Point* %66, i64 %68\n %70 = getelementptr inbounds %struct.Point, %struct.Point* %69, i32 0, i32 3\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, align 8\n %76 = load i32, i32* %12, align 4\n %77 = sext i32 %76 to i64\n %78 = getelementptr inbounds %struct.Point, %struct.Point* %75, i64 %77\n %79 = getelementptr inbounds %struct.Point, %struct.Point* %78, i32 0, i32 1\n %80 = load i32, i32* %79, align 4\n %81 = sitofp i32 %80 to double\n %82 = load %struct.Point*, %struct.Point** %5, align 8\n %83 = load i32, i32* %12, align 4\n %84 = sext i32 %83 to i64\n %85 = getelementptr inbounds %struct.Point, %struct.Point* %82, i64 %84\n %86 = getelementptr inbounds %struct.Point, %struct.Point* %85, i32 0, i32 3\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"]
  926. 50 -->|true| 126
  927. 50 -->|false| 93
  928. 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"]
  929. 93 -->|true| 126
  930. 93 -->|false| 96
  931. 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"]
  932. 96 -->|true| 126
  933. 96 -->|false| 99
  934. 99["Block 99:\n %100 = load double, double* %9, align 8\n %101 = call double @llvm.fabs.f64(double %100) #8\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"]
  935. 99 -->|true| 126
  936. 99 -->|false| 108
  937. 108["Block 108:\n %109 = load double, double* %10, align 8\n %110 = call double @llvm.fabs.f64(double %109) #8\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"]
  938. 108 -->|true| 126
  939. 108 -->|false| 117
  940. 117["Block 117:\n %118 = load double, double* %11, align 8\n %119 = call double @llvm.fabs.f64(double %118) #8\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"]
  941. 117 -->|true| 126
  942. 117 -->|false| 130
  943. 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 inbounds ([30 x i8], [30 x i8]* @.str.54, i64 0, i64 0))\n %128 = load %struct.Point*, %struct.Point** %8, align 8\n %129 = bitcast %struct.Point* %128 to i8*\n call void @free(i8* %129) #7\n store %struct.Point* null, %struct.Point** %4, align 8\n br label %165\n"]
  944. 126 --> 165
  945. 130["Block 130:\n br label %131\n"]
  946. 130 --> 131
  947. 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"]
  948. 131 --> 34
  949. 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"]
  950. 134 -->|true| 137
  951. 134 -->|false| 141
  952. 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 inbounds ([21 x i8], [21 x i8]* @.str.55, i64 0, i64 0))\n %139 = load %struct.Point*, %struct.Point** %8, align 8\n %140 = bitcast %struct.Point* %139 to i8*\n call void @free(i8* %140) #7\n store %struct.Point* null, %struct.Point** %4, align 8\n br label %165\n"]
  953. 137 --> 165
  954. 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** %8, align 8\n %147 = getelementptr inbounds %struct.Point, %struct.Point* %146, i32 0, i32 0\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** %8, align 8\n %153 = getelementptr inbounds %struct.Point, %struct.Point* %152, i32 0, i32 1\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** %8, align 8\n %159 = getelementptr inbounds %struct.Point, %struct.Point* %158, i32 0, i32 3\n store double %157, double* %159, align 8\n %160 = load %struct.Point*, %struct.Point** %8, align 8\n %161 = getelementptr inbounds %struct.Point, %struct.Point* %160, i32 0, i32 2\n %162 = getelementptr inbounds [256 x i8], [256 x i8]* %161, i64 0, i64 0\n %163 = call i8* @strcpy(i8* %162, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.56, i64 0, i64 0)) #7\n %164 = load %struct.Point*, %struct.Point** %8, align 8\n store %struct.Point* %164, %struct.Point** %4, align 8\n br label %165\n"]
  955. 141 --> 165
  956. 165["Block 165:\n %166 = load %struct.Point*, %struct.Point** %4, align 8\n ret %struct.Point* %166\n"]:::critical
  957. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  958. ```
  959. ```mermaid: reverseString
  960. graph TD
  961. 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
  962. 1 --> 9
  963. 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
  964. 9 -->|true| 14
  965. 9 -->|false| 43
  966. 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 %17\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 %25\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 %30\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 %38\n store i8 %32, i8* %39, align 1\n br label %40\n"]
  967. 14 --> 40
  968. 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"]
  969. 40 --> 9
  970. 43["Block 43:\n ret void\n"]:::critical
  971. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  972. ```
  973. ```mermaid: testPoints
  974. graph TD
  975. 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
  976. 1 --> 6
  977. 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
  978. 6 -->|true| 9
  979. 6 -->|false| 19
  980. 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"]
  981. 9 -->|true| 14
  982. 9 -->|false| 15
  983. 14["Block 14:\n store i32 23, i32* %2, align 4\n br label %21\n"]
  984. 14 --> 21
  985. 15["Block 15:\n br label %16\n"]
  986. 15 --> 16
  987. 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"]
  988. 16 --> 6
  989. 19["Block 19:\n %20 = load i32, i32* %4, align 4\n store i32 %20, i32* %2, align 4\n br label %21\n"]
  990. 19 --> 21
  991. 21["Block 21:\n %22 = load i32, i32* %2, align 4\n ret i32 %22\n"]:::critical
  992. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  993. ```
  994. ```mermaid: countSetBits
  995. graph TD
  996. 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
  997. 1 --> 4
  998. 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
  999. 4 -->|true| 7
  1000. 4 -->|false| 14
  1001. 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"]
  1002. 7 --> 4
  1003. 14["Block 14:\n %15 = load i32, i32* %3, align 4\n ret i32 %15\n"]:::critical
  1004. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  1005. ```
  1006. ```mermaid: memoizedFib
  1007. graph TD
  1008. 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 x i32]* @cache, i64 0, i64 %5\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
  1009. 1 -->|true| 9
  1010. 1 -->|false| 14
  1011. 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], [100 x i32]* @cache, i64 0, i64 %11\n %13 = load i32, i32* %12, align 4\n store i32 %13, i32* %2, align 4\n br label %34\n"]
  1012. 9 --> 34
  1013. 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"]
  1014. 14 -->|true| 17
  1015. 14 -->|false| 19
  1016. 17["Block 17:\n %18 = load i32, i32* %3, align 4\n store i32 %18, i32* %2, align 4\n br label %34\n"]
  1017. 17 --> 34
  1018. 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], [100 x i32]* @cache, i64 0, i64 %28\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], [100 x i32]* @cache, i64 0, i64 %31\n %33 = load i32, i32* %32, align 4\n store i32 %33, i32* %2, align 4\n br label %34\n"]
  1019. 19 --> 34
  1020. 34["Block 34:\n %35 = load i32, i32* %2, align 4\n ret i32 %35\n"]:::critical
  1021. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  1022. ```
  1023. ```mermaid: processMatrix
  1024. graph TD
  1025. 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
  1026. 2 --> 8
  1027. 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
  1028. 8 -->|true| 12
  1029. 8 -->|false| 80
  1030. 12["Block 12:\n store i32 0, i32* %7, align 4\n br label %13\n"]
  1031. 12 --> 13
  1032. 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"]
  1033. 13 -->|true| 17
  1034. 13 -->|false| 76
  1035. 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"]
  1036. 17 -->|true| 21
  1037. 17 -->|false| 55
  1038. 21["Block 21:\n %22 = load [100 x i32]*, [100 x i32]** %3, align 8\n %23 = load i32, i32* %6, align 4\n %24 = sext i32 %23 to i64\n %25 = getelementptr inbounds [100 x i32], [100 x i32]* %22, i64 %24\n %26 = load i32, i32* %7, align 4\n %27 = sext i32 %26 to i64\n %28 = getelementptr inbounds [100 x i32], [100 x i32]* %25, i64 0, i64 %27\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"]
  1039. 21 -->|true| 32
  1040. 21 -->|false| 43
  1041. 32["Block 32:\n %33 = load [100 x i32]*, [100 x i32]** %3, align 8\n %34 = load i32, i32* %6, align 4\n %35 = sext i32 %34 to i64\n %36 = getelementptr inbounds [100 x i32], [100 x i32]* %33, i64 %35\n %37 = load i32, i32* %7, align 4\n %38 = sext i32 %37 to i64\n %39 = getelementptr inbounds [100 x i32], [100 x i32]* %36, i64 0, i64 %38\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"]
  1042. 32 --> 54
  1043. 43["Block 43:\n %44 = load [100 x i32]*, [100 x i32]** %3, align 8\n %45 = load i32, i32* %6, align 4\n %46 = sext i32 %45 to i64\n %47 = getelementptr inbounds [100 x i32], [100 x i32]* %44, i64 %46\n %48 = load i32, i32* %7, align 4\n %49 = sext i32 %48 to i64\n %50 = getelementptr inbounds [100 x i32], [100 x i32]* %47, i64 0, i64 %49\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"]
  1044. 43 --> 54
  1045. 54["Block 54:\n br label %72\n"]
  1046. 54 --> 72
  1047. 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"]
  1048. 55 -->|true| 59
  1049. 55 -->|false| 71
  1050. 59["Block 59:\n %60 = load [100 x i32]*, [100 x i32]** %3, align 8\n %61 = load i32, i32* %6, align 4\n %62 = sext i32 %61 to i64\n %63 = getelementptr inbounds [100 x i32], [100 x i32]* %60, i64 %62\n %64 = load i32, i32* %7, align 4\n %65 = sext i32 %64 to i64\n %66 = getelementptr inbounds [100 x i32], [100 x i32]* %63, i64 0, i64 %65\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"]
  1051. 59 --> 71
  1052. 71["Block 71:\n br label %72\n"]
  1053. 71 --> 72
  1054. 72["Block 72:\n br label %73\n"]
  1055. 72 --> 73
  1056. 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"]
  1057. 73 --> 13
  1058. 76["Block 76:\n br label %77\n"]
  1059. 76 --> 77
  1060. 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"]
  1061. 77 --> 8
  1062. 80["Block 80:\n %81 = load i32, i32* %5, align 4\n ret i32 %81\n"]:::critical
  1063. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  1064. ```
  1065. ```mermaid: projectB_main
  1066. graph TD
  1067. 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 [100 x [100 x i32]], align 16\n %5 = alloca i32, align 4\n %6 = alloca i32, align 4\n %7 = alloca i32, align 4\n %8 = call i32 @testPoints(i32 5)\n call void @llvm.memset.p0i8.i64(i8* align 16 bitcast ([100 x i32]* @cache to i8*), i8 -1, i64 400, i1 false)\n %9 = bitcast [14 x i8]* %1 to i8*\n call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 %9, i8* align 1 getelementptr inbounds ([14 x i8], [14 x i8]* @__const.projectB_main.str, i32 0, i32 0), i64 14, i1 false)\n %10 = getelementptr inbounds [14 x i8], [14 x i8]* %1, i64 0, i64 0\n call void @reverseString(i8* %10)\n %11 = bitcast [8 x i32]* %2 to i8*\n call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 16 %11, i8* align 16 bitcast ([8 x i32]* @__const.projectB_main.arr to i8*), i64 32, i1 false)\n store i32 8, i32* %3, align 4\n %12 = bitcast [100 x [100 x i32]]* %4 to i8*\n call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 16 %12, i8* align 16 bitcast (<{ <{ i32, i32, i32, [97 x i32] }>, <{ i32, i32, i32, [97 x i32] }>, <{ i32, i32, i32, [97 x i32] }>, [97 x <{ i32, i32, i32, [97 x i32] }>] }>* @__const.projectB_main.matrix to i8*), i64 40000, i1 false)\n %13 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %4, i64 0, i64 0\n %14 = call i32 @processMatrix([100 x i32]* %13, i32 3)\n store i32 %14, i32* %5, align 4\n store i32 0, i32* %6, align 4\n br label %15\n"]:::critical
  1068. 0 --> 15
  1069. 15["Block 15:\n %16 = load i32, i32* %6, align 4\n %17 = call i32 @memoizedFib(i32 %16)\n %18 = load i32, i32* %6, align 4\n %19 = add nsw i32 %18, 1\n store i32 %19, i32* %6, align 4\n br label %20\n"]:::critical
  1070. 15 --> 20
  1071. 20["Block 20:\n %21 = load i32, i32* %6, align 4\n %22 = icmp slt i32 %21, 10\n br i1 %22, label %15, label %23\n"]:::critical
  1072. 20 -->|true| 15
  1073. 20 -->|false| 23
  1074. 23["Block 23:\n %24 = load i32, i32* %5, align 4\n %25 = icmp sgt i32 %24, 0\n br i1 %25, label %26, label %28\n"]:::critical
  1075. 23 -->|true| 26
  1076. 23 -->|false| 28
  1077. 26["Block 26:\n %27 = call i32 @memoizedFib(i32 7)\n store i32 %27, i32* %7, align 4\n br label %31\n"]
  1078. 26 --> 31
  1079. 28["Block 28:\n %29 = load i32, i32* %5, align 4\n %30 = call i32 @countSetBits(i32 %29)\n store i32 %30, i32* %7, align 4\n br label %31\n"]
  1080. 28 --> 31
  1081. 31["Block 31:\n %32 = load i32, i32* %7, align 4\n ret i32 %32\n"]:::critical
  1082. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  1083. ```
  1084. [INFO][runOnModule] Creating slices for target functions
  1085. [INFO][runOnModule] targetFuncName: countSetBits
  1086. [INFO][runOnModule] targetFuncName: memoizedFib
  1087. [INFO][runOnModule] targetFuncName: processMatrix
  1088. [INFO][runOnModule] targetFuncName: projectB_main
  1089. [INFO][runOnModule] targetFuncName: reverseString
  1090. [INFO][runOnModule] targetFuncName: testPoints
  1091. [INFO][runOnModule] Creating fusion points for bunker functions
  1092. [INFO][runOnModule] bunkerFuncName: calculateCircleArea
  1093. [INFO][runOnModule] bunkerFuncName: calculateDistance
  1094. [INFO][runOnModule] bunkerFuncName: createDynamicArray
  1095. [INFO][runOnModule] bunkerFuncName: createMatrix
  1096. [INFO][runOnModule] bunkerFuncName: factorial
  1097. [INFO][runOnModule] bunkerFuncName: findCentroid
  1098. [INFO][runOnModule] bunkerFuncName: getErrorMessage
  1099. [INFO][runOnModule] bunkerFuncName: insertNode
  1100. [INFO][runOnModule] bunkerFuncName: multiplyMatrices
  1101. [INFO][runOnModule] bunkerFuncName: performSimpleCalculations
  1102. [INFO][runOnModule] bunkerFuncName: projectA_main
  1103. [INFO][runOnModule] bunkerFuncName: pushBack
  1104. [INFO][runOnModule] bunkerFuncName: quickSort
  1105. [INFO][runOnModule] bunkerFuncName: removeDuplicates
  1106. [INFO][runOnModule] bunkerFuncName: setErrorMessage
  1107. [INFO][runOnModule] bunkerFuncName: validateMatrix
  1108. [INFO][matchFunctionsForFusion] Starting function matching process
  1109. [INFO][matchFunctionsForFusion] Matched target countSetBits (2 slices) with bunker projectA_main (2 fusion points)
  1110. [INFO][matchFunctionsForFusion] Matched target memoizedFib (2 slices) with bunker createDynamicArray (2 fusion points)
  1111. [INFO][matchFunctionsForFusion] Matched target processMatrix (2 slices) with bunker validateMatrix (2 fusion points)
  1112. [INFO][matchFunctionsForFusion] Matched target projectB_main (2 slices) with bunker quickSort (2 fusion points)
  1113. [INFO][matchFunctionsForFusion] Matched target reverseString (2 slices) with bunker insertNode (2 fusion points)
  1114. [INFO][matchFunctionsForFusion] Matched target testPoints (2 slices) with bunker projectA_main (2 fusion points)
  1115. [INFO][generateFusionMatchGraph] Generating fusion match visualization
  1116. ```mermaid
  1117. graph LR
  1118. %% Fusion Match Graph
  1119. %% Left side: Target Project, Right side: Bunker Project
  1120. subgraph Target["Target Project"]
  1121. direction TB
  1122. countSetBits["countSetBits\nSliceNum: 2"]:::target
  1123. memoizedFib["memoizedFib\nSliceNum: 2"]:::target
  1124. processMatrix["processMatrix\nSliceNum: 2"]:::target
  1125. projectB_main["projectB_main\nSliceNum: 2"]:::target
  1126. reverseString["reverseString\nSliceNum: 2"]:::target
  1127. testPoints["testPoints\nSliceNum: 2"]:::target
  1128. end
  1129. subgraph Bunker["Bunker Project"]
  1130. direction TB
  1131. calculateCircleArea["calculateCircleArea\nCritical Points: 2"]:::bunker
  1132. calculateDistance["calculateDistance\nCritical Points: 2"]:::bunker
  1133. createDynamicArray["createDynamicArray\nCritical Points: 2"]:::bunker
  1134. createMatrix["createMatrix\nCritical Points: 2"]:::bunker
  1135. factorial["factorial\nCritical Points: 2"]:::bunker
  1136. findCentroid["findCentroid\nCritical Points: 2"]:::bunker
  1137. getErrorMessage["getErrorMessage\nCritical Points: 2"]:::bunker
  1138. insertNode["insertNode\nCritical Points: 2"]:::bunker
  1139. multiplyMatrices["multiplyMatrices\nCritical Points: 2"]:::bunker
  1140. performSimpleCalculations["performSimpleCalculations\nCritical Points: 2"]:::bunker
  1141. projectA_main["projectA_main\nCritical Points: 2"]:::bunker
  1142. pushBack["pushBack\nCritical Points: 2"]:::bunker
  1143. quickSort["quickSort\nCritical Points: 2"]:::bunker
  1144. removeDuplicates["removeDuplicates\nCritical Points: 2"]:::bunker
  1145. setErrorMessage["setErrorMessage\nCritical Points: 2"]:::bunker
  1146. validateMatrix["validateMatrix\nCritical Points: 2"]:::bunker
  1147. end
  1148. %% Fusion Matches
  1149. countSetBits ==>|fusion| performSimpleCalculations
  1150. memoizedFib ==>|fusion| calculateDistance
  1151. processMatrix ==>|fusion| validateMatrix
  1152. projectB_main ==>|fusion| pushBack
  1153. reverseString ==>|fusion| getErrorMessage
  1154. testPoints ==>|fusion| multiplyMatrices
  1155. %% Styles
  1156. classDef target fill:#f96,stroke:#333,stroke-width:2px
  1157. classDef bunker fill:#9cf,stroke:#333,stroke-width:2px
  1158. style Target fill:#fff,stroke:#f96,stroke-width:2px
  1159. style Bunker fill:#fff,stroke:#9cf,stroke-width:2px
  1160. ```
  1161. [INFO][generateFusionMatchGraph] Generated visualization with 6 target functions and 16 bunker functions
  1162. [INFO][generateFusionMatchGraph] Total fusion matches: 6
  1163. [INFO][performCodeFusion] Starting code fusion
  1164. [INFO][performCodeFusion] Total fusion pairs: 6
  1165. [INFO][performCodeFusion] Fusion pair: target=countSetBits, bunker=performSimpleCalculations
  1166. [INFO][performCodeFusion] Fusion pair: target=memoizedFib, bunker=calculateDistance
  1167. [INFO][performCodeFusion] Fusion pair: target=processMatrix, bunker=validateMatrix
  1168. [INFO][performCodeFusion] Fusion pair: target=projectB_main, bunker=pushBack
  1169. [INFO][performCodeFusion] Fusion pair: target=reverseString, bunker=getErrorMessage
  1170. [INFO][performCodeFusion] Fusion pair: target=testPoints, bunker=multiplyMatrices
  1171. [INFO][performCodeFusion] Processing function pair: target=countSetBits, bunker=performSimpleCalculations
  1172. [INFO][performCodeFusion] [After clone]Generated control flow graph for fused function:
  1173. ```mermaid: fused_performSimpleCalculations
  1174. graph TD
  1175. entry["Block entry:\n %2 = alloca i32\n %3 = alloca i32\n %4 = alloca i32\n %5 = xor i1 %0, true\n br label %target_cond_0\n"]
  1176. entry --> target_cond_0
  1177. target_cond_0["Block target_cond_0:\n br i1 %0, label %6, label %target_skip_0\n"]
  1178. target_cond_0 -->|true| 6
  1179. target_cond_0 -->|false| target_skip_0
  1180. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  1181. target_skip_0 --> target_phi_0
  1182. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  1183. target_phi_0 --> bunker_cond_0
  1184. 6["Block 6:\n store i32 %0, i32* %3, align 4\n store i32 0, i32* %4, align 4\n br label %target_phi_0\n"]
  1185. 6 --> target_phi_0
  1186. bunker_cond_0["Block bunker_cond_0:\n br i1 %5, label %7, label %bunker_skip_0\n"]
  1187. bunker_cond_0 -->|true| 7
  1188. bunker_cond_0 -->|false| bunker_skip_0
  1189. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  1190. bunker_skip_0 --> bunker_phi_0
  1191. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  1192. bunker_phi_0 --> target_cond_1
  1193. 7["Block 7:\n store i32 100, i32* %2, align 4\n %8 = load i32, i32* %2, align 4\n %9 = icmp sgt i32 %1, 50\n br i1 %2, label %3, label %8\n"]
  1194. 7 -->|true| 3
  1195. 7 -->|false| 8
  1196. 10["Block 10:\n %11 = load i32, i32* %2, align 4\n %12 = mul nsw i32 %4, 2\n %13 = load i32, i32* @calculationResult, align 4\n %14 = add nsw i32 %6, %5\n store i32 %7, i32* @calculationResult, align 4\n br label %13\n"]
  1197. 10 --> 13
  1198. 15["Block 15:\n %16 = load i32, i32* %2, align 4\n %17 = sdiv i32 %9, 2\n %18 = load i32, i32* @calculationResult, align 4\n %19 = add nsw i32 %11, %10\n store i32 %12, i32* @calculationResult, align 4\n br label %13\n"]
  1199. 15 --> 13
  1200. 20["Block 20:\n %21 = load i32, i32* %2, align 4\n %22 = srem i32 %14, 3\n %23 = icmp eq i32 %15, 0\n br i1 %16, label %17, label %20\n"]
  1201. 20 -->|true| 17
  1202. 20 -->|false| 20
  1203. 24["Block 24:\n %25 = load i32, i32* @calculationResult, align 4\n %26 = mul nsw i32 %18, 3\n store i32 %19, i32* @calculationResult, align 4\n br label %23\n"]
  1204. 24 --> 23
  1205. 27["Block 27:\n %28 = load i32, i32* @calculationResult, align 4\n %29 = add nsw i32 %21, 3\n store i32 %22, i32* @calculationResult, align 4\n br label %23\n"]
  1206. 27 --> 23
  1207. 30["Block 30:\n %31 = load i32, i32* @calculationResult, align 4\n %32 = icmp sge i32 %24, 150\n br i1 %25, label %26, label %32\n"]
  1208. 30 -->|true| 26
  1209. 30 -->|false| 32
  1210. 33["Block 33:\n %34 = load i32, i32* @calculationResult, align 4\n %35 = icmp sle i32 %27, 300\n br i1 %28, label %29, label %32\n"]
  1211. 33 -->|true| 29
  1212. 33 -->|false| 32
  1213. 36["Block 36:\n %37 = load i32, i32* @calculationResult, align 4\n %38 = sub nsw i32 %30, 50\n store i32 %31, i32* @calculationResult, align 4\n br label %35\n"]
  1214. 36 --> 35
  1215. 39["Block 39:\n %40 = load i32, i32* @calculationResult, align 4\n %41 = add nsw i32 %33, 50\n store i32 %34, i32* @calculationResult, align 4\n br label %35\n"]
  1216. 39 --> 35
  1217. 42["Block 42:\n %43 = load i32, i32* @calculationResult, align 4\n %44 = srem i32 %36, 2\n %45 = icmp eq i32 %37, 0\n br i1 %38, label %39, label %42\n"]
  1218. 42 -->|true| 39
  1219. 42 -->|false| 42
  1220. 46["Block 46:\n %47 = load i32, i32* @calculationResult, align 4\n %48 = sdiv i32 %40, 2\n store i32 %41, i32* @calculationResult, align 4\n br label %45\n"]
  1221. 46 --> 45
  1222. 49["Block 49:\n %50 = load i32, i32* @calculationResult, align 4\n %51 = mul nsw i32 %43, 2\n store i32 %44, i32* @calculationResult, align 4\n br label %45\n"]
  1223. 49 --> 45
  1224. 52["Block 52:\n %53 = load i32, i32* @calculationResult, align 4\n %54 = srem i32 %46, 10\n %55 = icmp slt i32 %47, 5\n br i1 %48, label %49, label %52\n"]
  1225. 52 -->|true| 49
  1226. 52 -->|false| 52
  1227. 56["Block 56:\n %57 = load i32, i32* @calculationResult, align 4\n %58 = add nsw i32 %50, 5\n store i32 %51, i32* @calculationResult, align 4\n br label %55\n"]
  1228. 56 --> 55
  1229. 59["Block 59:\n %60 = load i32, i32* @calculationResult, align 4\n %61 = sub nsw i32 %53, 5\n store i32 %54, i32* @calculationResult, align 4\n br label %55\n"]
  1230. 59 --> 55
  1231. 62["Block 62:\n %63 = load i32, i32* @calculationResult, align 4\n %64 = icmp sgt i32 %56, 1000\n br i1 %57, label %58, label %59\n"]
  1232. 62 -->|true| 58
  1233. 62 -->|false| 59
  1234. 65["Block 65:\n store i32 1000, i32* @calculationResult, align 4\n br label %62\n"]
  1235. 65 --> 62
  1236. 66["Block 66:\n %67 = load i32, i32* @calculationResult, align 4\n %68 = add nsw i32 %60, 10\n store i32 %61, i32* @calculationResult, align 4\n br label %62\n"]
  1237. 66 --> 62
  1238. 69["Block 69:\n %70 = load i32, i32* @calculationResult, align 4\n %71 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.27, i64 0, i64 0), i32 %63)\n ret void\n"]
  1239. target_cond_1["Block target_cond_1:\n br i1 %0, label %72, label %target_skip_1\n"]
  1240. target_cond_1 -->|true| 72
  1241. target_cond_1 -->|false| target_skip_1
  1242. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  1243. target_skip_1 --> target_phi_1
  1244. target_phi_1["Block target_phi_1:\n"]
  1245. 72["Block 72:\n %73 = load i32, i32* %3, align 4\n %74 = icmp ne i32 %3, 0\n br i1 %4, label %5, label %12\n"]
  1246. 72 -->|true| 5
  1247. 72 -->|false| 12
  1248. 75["Block 75:\n %76 = load i32, i32* %3, align 4\n %77 = and i32 %6, 1\n %78 = load i32, i32* %4, align 4\n %79 = add nsw i32 %8, %7\n store i32 %9, i32* %4, align 4\n %80 = load i32, i32* %3, align 4\n %81 = ashr i32 %10, 1\n store i32 %11, i32* %3, align 4\n br label %2\n"]
  1249. 75 --> 2
  1250. 82["Block 82:\n %83 = load i32, i32* %4, align 4\n ret i32 %13\n"]
  1251. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  1252. ```
  1253. [INFO][performCodeFusion] Fixing return instruction in block %69
  1254. [INFO][performCodeFusion] Fixing return instruction in block %82
  1255. [WARNING][performCodeFusion] No terminator found in block: target_phi_1
  1256. [INFO][performCodeFusion] [After fix]Generated control flow graph for fused function:
  1257. ```mermaid: fused_performSimpleCalculations
  1258. graph TD
  1259. entry["Block entry:\n %2 = alloca i32\n %3 = alloca i32\n %4 = alloca i32\n %5 = xor i1 %0, true\n br label %target_cond_0\n"]
  1260. entry --> target_cond_0
  1261. target_cond_0["Block target_cond_0:\n br i1 %0, label %6, label %target_skip_0\n"]
  1262. target_cond_0 -->|true| 6
  1263. target_cond_0 -->|false| target_skip_0
  1264. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  1265. target_skip_0 --> target_phi_0
  1266. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  1267. target_phi_0 --> bunker_cond_0
  1268. 6["Block 6:\n store i32 %1, i32* %3, align 4\n store i32 0, i32* %4, align 4\n br label %target_phi_0\n"]
  1269. 6 --> target_phi_0
  1270. bunker_cond_0["Block bunker_cond_0:\n br i1 %5, label %7, label %bunker_skip_0\n"]
  1271. bunker_cond_0 -->|true| 7
  1272. bunker_cond_0 -->|false| bunker_skip_0
  1273. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  1274. bunker_skip_0 --> bunker_phi_0
  1275. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  1276. bunker_phi_0 --> target_cond_1
  1277. 7["Block 7:\n store i32 100, i32* %2, align 4\n %8 = load i32, i32* %2, align 4\n %9 = icmp sgt i32 %8, 50\n br i1 %9, label %10, label %15\n"]
  1278. 7 -->|true| 10
  1279. 7 -->|false| 15
  1280. 10["Block 10:\n %11 = load i32, i32* %2, align 4\n %12 = mul nsw i32 %11, 2\n %13 = load i32, i32* @calculationResult, align 4\n %14 = add nsw i32 %13, %12\n store i32 %14, i32* @calculationResult, align 4\n br label %20\n"]
  1281. 10 --> 20
  1282. 15["Block 15:\n %16 = load i32, i32* %2, align 4\n %17 = sdiv i32 %16, 2\n %18 = load i32, i32* @calculationResult, align 4\n %19 = add nsw i32 %18, %17\n store i32 %19, i32* @calculationResult, align 4\n br label %20\n"]
  1283. 15 --> 20
  1284. 20["Block 20:\n %21 = load i32, i32* %2, align 4\n %22 = srem i32 %21, 3\n %23 = icmp eq i32 %22, 0\n br i1 %23, label %24, label %27\n"]
  1285. 20 -->|true| 24
  1286. 20 -->|false| 27
  1287. 24["Block 24:\n %25 = load i32, i32* @calculationResult, align 4\n %26 = mul nsw i32 %25, 3\n store i32 %26, i32* @calculationResult, align 4\n br label %30\n"]
  1288. 24 --> 30
  1289. 27["Block 27:\n %28 = load i32, i32* @calculationResult, align 4\n %29 = add nsw i32 %28, 3\n store i32 %29, i32* @calculationResult, align 4\n br label %30\n"]
  1290. 27 --> 30
  1291. 30["Block 30:\n %31 = load i32, i32* @calculationResult, align 4\n %32 = icmp sge i32 %31, 150\n br i1 %32, label %33, label %39\n"]
  1292. 30 -->|true| 33
  1293. 30 -->|false| 39
  1294. 33["Block 33:\n %34 = load i32, i32* @calculationResult, align 4\n %35 = icmp sle i32 %34, 300\n br i1 %35, label %36, label %39\n"]
  1295. 33 -->|true| 36
  1296. 33 -->|false| 39
  1297. 36["Block 36:\n %37 = load i32, i32* @calculationResult, align 4\n %38 = sub nsw i32 %37, 50\n store i32 %38, i32* @calculationResult, align 4\n br label %42\n"]
  1298. 36 --> 42
  1299. 39["Block 39:\n %40 = load i32, i32* @calculationResult, align 4\n %41 = add nsw i32 %40, 50\n store i32 %41, i32* @calculationResult, align 4\n br label %42\n"]
  1300. 39 --> 42
  1301. 42["Block 42:\n %43 = load i32, i32* @calculationResult, align 4\n %44 = srem i32 %43, 2\n %45 = icmp eq i32 %44, 0\n br i1 %45, label %46, label %49\n"]
  1302. 42 -->|true| 46
  1303. 42 -->|false| 49
  1304. 46["Block 46:\n %47 = load i32, i32* @calculationResult, align 4\n %48 = sdiv i32 %47, 2\n store i32 %48, i32* @calculationResult, align 4\n br label %52\n"]
  1305. 46 --> 52
  1306. 49["Block 49:\n %50 = load i32, i32* @calculationResult, align 4\n %51 = mul nsw i32 %50, 2\n store i32 %51, i32* @calculationResult, align 4\n br label %52\n"]
  1307. 49 --> 52
  1308. 52["Block 52:\n %53 = load i32, i32* @calculationResult, align 4\n %54 = srem i32 %53, 10\n %55 = icmp slt i32 %54, 5\n br i1 %55, label %56, label %59\n"]
  1309. 52 -->|true| 56
  1310. 52 -->|false| 59
  1311. 56["Block 56:\n %57 = load i32, i32* @calculationResult, align 4\n %58 = add nsw i32 %57, 5\n store i32 %58, i32* @calculationResult, align 4\n br label %62\n"]
  1312. 56 --> 62
  1313. 59["Block 59:\n %60 = load i32, i32* @calculationResult, align 4\n %61 = sub nsw i32 %60, 5\n store i32 %61, i32* @calculationResult, align 4\n br label %62\n"]
  1314. 59 --> 62
  1315. 62["Block 62:\n %63 = load i32, i32* @calculationResult, align 4\n %64 = icmp sgt i32 %63, 1000\n br i1 %64, label %65, label %66\n"]
  1316. 62 -->|true| 65
  1317. 62 -->|false| 66
  1318. 65["Block 65:\n store i32 1000, i32* @calculationResult, align 4\n br label %69\n"]
  1319. 65 --> 69
  1320. 66["Block 66:\n %67 = load i32, i32* @calculationResult, align 4\n %68 = add nsw i32 %67, 10\n store i32 %68, i32* @calculationResult, align 4\n br label %69\n"]
  1321. 66 --> 69
  1322. 69["Block 69:\n %70 = load i32, i32* @calculationResult, align 4\n %71 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.27, i64 0, i64 0), i32 %70)\n ret void\n"]
  1323. target_cond_1["Block target_cond_1:\n br i1 %0, label %72, label %target_skip_1\n"]
  1324. target_cond_1 -->|true| 72
  1325. target_cond_1 -->|false| target_skip_1
  1326. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  1327. target_skip_1 --> target_phi_1
  1328. target_phi_1["Block target_phi_1:\n"]
  1329. 72["Block 72:\n %73 = load i32, i32* %3, align 4\n %74 = icmp ne i32 %73, 0\n br i1 %74, label %75, label %82\n"]
  1330. 72 -->|true| 75
  1331. 72 -->|false| 82
  1332. 75["Block 75:\n %76 = load i32, i32* %3, align 4\n %77 = and i32 %76, 1\n %78 = load i32, i32* %4, align 4\n %79 = add nsw i32 %78, %77\n store i32 %79, i32* %4, align 4\n %80 = load i32, i32* %3, align 4\n %81 = ashr i32 %80, 1\n store i32 %81, i32* %3, align 4\n br label %72\n"]
  1333. 75 --> 72
  1334. 82["Block 82:\n %83 = load i32, i32* %4, align 4\n ret i32 %83\n"]
  1335. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  1336. ```
  1337. [INFO][performCodeFusion] Processing non-struct return type: i32
  1338. [INFO][performCodeFusion] Processing bunker block: %20
  1339. [INFO][performCodeFusion] Processing bunker block: %7
  1340. [INFO][performCodeFusion] Processing bunker block: %10
  1341. [INFO][performCodeFusion] Processing bunker block: %15
  1342. [INFO][performCodeFusion] Processing bunker block: %46
  1343. [INFO][performCodeFusion] Processing bunker block: %49
  1344. [INFO][performCodeFusion] Processing bunker block: %52
  1345. [INFO][performCodeFusion] Processing bunker block: %24
  1346. [INFO][performCodeFusion] Processing bunker block: %27
  1347. [INFO][performCodeFusion] Processing bunker block: %30
  1348. [INFO][performCodeFusion] Processing bunker block: %33
  1349. [INFO][performCodeFusion] Processing bunker block: %36
  1350. [INFO][performCodeFusion] Processing bunker block: %39
  1351. [INFO][performCodeFusion] Processing bunker block: %42
  1352. [INFO][performCodeFusion] Processing bunker block: %56
  1353. [INFO][performCodeFusion] Processing bunker block: %59
  1354. [INFO][performCodeFusion] Processing bunker block: %62
  1355. [INFO][performCodeFusion] Processing bunker block: %65
  1356. [INFO][performCodeFusion] Processing bunker block: %66
  1357. [INFO][performCodeFusion] Processing bunker block: %69
  1358. [INFO][performCodeFusion] Found void return instruction in bunker block %69
  1359. [INFO][performCodeFusion] Return type mismatch in bunker block %69. Expected: i32, Found: void
  1360. [INFO][performCodeFusion] Created new return instruction with default value in block %69
  1361. [INFO][performCodeFusion] Processing target block: %6
  1362. [INFO][performCodeFusion] Processing target block: %72
  1363. [INFO][performCodeFusion] Processing target block: %75
  1364. [INFO][performCodeFusion] Processing target block: %82
  1365. [INFO][performCodeFusion] Found return instruction in target block %82. Return value type: i32
  1366. [INFO][performCodeFusion] [After fix return]Generated control flow graph for fused function:
  1367. ```mermaid: fused_performSimpleCalculations
  1368. graph TD
  1369. entry["Block entry:\n %2 = alloca i32\n %3 = alloca i32\n %4 = alloca i32\n %5 = xor i1 %0, true\n br label %target_cond_0\n"]
  1370. entry --> target_cond_0
  1371. target_cond_0["Block target_cond_0:\n br i1 %0, label %6, label %target_skip_0\n"]
  1372. target_cond_0 -->|true| 6
  1373. target_cond_0 -->|false| target_skip_0
  1374. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  1375. target_skip_0 --> target_phi_0
  1376. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  1377. target_phi_0 --> bunker_cond_0
  1378. 6["Block 6:\n store i32 %1, i32* %3, align 4\n store i32 0, i32* %4, align 4\n br label %target_phi_0\n"]
  1379. 6 --> target_phi_0
  1380. bunker_cond_0["Block bunker_cond_0:\n br i1 %5, label %7, label %bunker_skip_0\n"]
  1381. bunker_cond_0 -->|true| 7
  1382. bunker_cond_0 -->|false| bunker_skip_0
  1383. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  1384. bunker_skip_0 --> bunker_phi_0
  1385. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  1386. bunker_phi_0 --> target_cond_1
  1387. 7["Block 7:\n store i32 100, i32* %2, align 4\n %8 = load i32, i32* %2, align 4\n %9 = icmp sgt i32 %8, 50\n br i1 %9, label %10, label %15\n"]
  1388. 7 -->|true| 10
  1389. 7 -->|false| 15
  1390. 10["Block 10:\n %11 = load i32, i32* %2, align 4\n %12 = mul nsw i32 %11, 2\n %13 = load i32, i32* @calculationResult, align 4\n %14 = add nsw i32 %13, %12\n store i32 %14, i32* @calculationResult, align 4\n br label %20\n"]
  1391. 10 --> 20
  1392. 15["Block 15:\n %16 = load i32, i32* %2, align 4\n %17 = sdiv i32 %16, 2\n %18 = load i32, i32* @calculationResult, align 4\n %19 = add nsw i32 %18, %17\n store i32 %19, i32* @calculationResult, align 4\n br label %20\n"]
  1393. 15 --> 20
  1394. 20["Block 20:\n %21 = load i32, i32* %2, align 4\n %22 = srem i32 %21, 3\n %23 = icmp eq i32 %22, 0\n br i1 %23, label %24, label %27\n"]
  1395. 20 -->|true| 24
  1396. 20 -->|false| 27
  1397. 24["Block 24:\n %25 = load i32, i32* @calculationResult, align 4\n %26 = mul nsw i32 %25, 3\n store i32 %26, i32* @calculationResult, align 4\n br label %30\n"]
  1398. 24 --> 30
  1399. 27["Block 27:\n %28 = load i32, i32* @calculationResult, align 4\n %29 = add nsw i32 %28, 3\n store i32 %29, i32* @calculationResult, align 4\n br label %30\n"]
  1400. 27 --> 30
  1401. 30["Block 30:\n %31 = load i32, i32* @calculationResult, align 4\n %32 = icmp sge i32 %31, 150\n br i1 %32, label %33, label %39\n"]
  1402. 30 -->|true| 33
  1403. 30 -->|false| 39
  1404. 33["Block 33:\n %34 = load i32, i32* @calculationResult, align 4\n %35 = icmp sle i32 %34, 300\n br i1 %35, label %36, label %39\n"]
  1405. 33 -->|true| 36
  1406. 33 -->|false| 39
  1407. 36["Block 36:\n %37 = load i32, i32* @calculationResult, align 4\n %38 = sub nsw i32 %37, 50\n store i32 %38, i32* @calculationResult, align 4\n br label %42\n"]
  1408. 36 --> 42
  1409. 39["Block 39:\n %40 = load i32, i32* @calculationResult, align 4\n %41 = add nsw i32 %40, 50\n store i32 %41, i32* @calculationResult, align 4\n br label %42\n"]
  1410. 39 --> 42
  1411. 42["Block 42:\n %43 = load i32, i32* @calculationResult, align 4\n %44 = srem i32 %43, 2\n %45 = icmp eq i32 %44, 0\n br i1 %45, label %46, label %49\n"]
  1412. 42 -->|true| 46
  1413. 42 -->|false| 49
  1414. 46["Block 46:\n %47 = load i32, i32* @calculationResult, align 4\n %48 = sdiv i32 %47, 2\n store i32 %48, i32* @calculationResult, align 4\n br label %52\n"]
  1415. 46 --> 52
  1416. 49["Block 49:\n %50 = load i32, i32* @calculationResult, align 4\n %51 = mul nsw i32 %50, 2\n store i32 %51, i32* @calculationResult, align 4\n br label %52\n"]
  1417. 49 --> 52
  1418. 52["Block 52:\n %53 = load i32, i32* @calculationResult, align 4\n %54 = srem i32 %53, 10\n %55 = icmp slt i32 %54, 5\n br i1 %55, label %56, label %59\n"]
  1419. 52 -->|true| 56
  1420. 52 -->|false| 59
  1421. 56["Block 56:\n %57 = load i32, i32* @calculationResult, align 4\n %58 = add nsw i32 %57, 5\n store i32 %58, i32* @calculationResult, align 4\n br label %62\n"]
  1422. 56 --> 62
  1423. 59["Block 59:\n %60 = load i32, i32* @calculationResult, align 4\n %61 = sub nsw i32 %60, 5\n store i32 %61, i32* @calculationResult, align 4\n br label %62\n"]
  1424. 59 --> 62
  1425. 62["Block 62:\n %63 = load i32, i32* @calculationResult, align 4\n %64 = icmp sgt i32 %63, 1000\n br i1 %64, label %65, label %66\n"]
  1426. 62 -->|true| 65
  1427. 62 -->|false| 66
  1428. 65["Block 65:\n store i32 1000, i32* @calculationResult, align 4\n br label %69\n"]
  1429. 65 --> 69
  1430. 66["Block 66:\n %67 = load i32, i32* @calculationResult, align 4\n %68 = add nsw i32 %67, 10\n store i32 %68, i32* @calculationResult, align 4\n br label %69\n"]
  1431. 66 --> 69
  1432. 69["Block 69:\n %70 = load i32, i32* @calculationResult, align 4\n %71 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.27, i64 0, i64 0), i32 %70)\n ret i32 0\n"]
  1433. target_cond_1["Block target_cond_1:\n br i1 %0, label %72, label %target_skip_1\n"]
  1434. target_cond_1 -->|true| 72
  1435. target_cond_1 -->|false| target_skip_1
  1436. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  1437. target_skip_1 --> target_phi_1
  1438. target_phi_1["Block target_phi_1:\n"]
  1439. 72["Block 72:\n %73 = load i32, i32* %3, align 4\n %74 = icmp ne i32 %73, 0\n br i1 %74, label %75, label %82\n"]
  1440. 72 -->|true| 75
  1441. 72 -->|false| 82
  1442. 75["Block 75:\n %76 = load i32, i32* %3, align 4\n %77 = and i32 %76, 1\n %78 = load i32, i32* %4, align 4\n %79 = add nsw i32 %78, %77\n store i32 %79, i32* %4, align 4\n %80 = load i32, i32* %3, align 4\n %81 = ashr i32 %80, 1\n store i32 %81, i32* %3, align 4\n br label %72\n"]
  1443. 75 --> 72
  1444. 82["Block 82:\n %83 = load i32, i32* %4, align 4\n ret i32 %83\n"]
  1445. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  1446. ```
  1447. [DEBUG][updateCallSite] Original call instruction:
  1448. call void @performSimpleCalculations()
  1449. [DEBUG][updateCallSite] Adding bunker control parameter
  1450. [DEBUG][updateCallSite] Adding original call parameters:
  1451. [DEBUG][updateCallSite] Adding default target parameters:
  1452. [DEBUG][updateCallSite] Parameter type: i32
  1453. [DEBUG][updateCallSite] New call instruction:
  1454. %322 = call i32 @fused_performSimpleCalculations(i1 false, i32 0)
  1455. [DEBUG][updateCallSite] Void return type, no value processing needed
  1456. [INFO][updateCallSite] Successfully updated call site from call void @performSimpleCalculations() to %322 = call i32 @fused_performSimpleCalculations(i1 false, i32 0)
  1457. [DEBUG][updateCallSite] Original call instruction:
  1458. %30 = call i32 @countSetBits(i32 %29)
  1459. [DEBUG][updateCallSite] Adding target control parameter
  1460. [DEBUG][updateCallSite] Adding default bunker parameters:
  1461. [DEBUG][updateCallSite] Adding original call parameters:
  1462. [DEBUG][updateCallSite] Argument 0: type=i32
  1463. [DEBUG][updateCallSite] New call instruction:
  1464. %30 = call i32 @fused_performSimpleCalculations(i1 true, i32 %29)
  1465. [DEBUG][updateCallSite] Processing non-void return value of type: i32
  1466. [DEBUG][updateCallSite] Using direct return value
  1467. [DEBUG][updateCallSite] Successfully replaced all uses of original call
  1468. [INFO][updateCallSite] Successfully updated call site from %30 = call i32 @countSetBits(i32 %29) to %30 = call i32 @fused_performSimpleCalculations(i1 true, i32 %29)
  1469. [DEBUG][updateCallSite] Original call instruction:
  1470. %68 = call i32 @countSetBits(i32 %67)
  1471. [DEBUG][updateCallSite] Adding target control parameter
  1472. [DEBUG][updateCallSite] Adding default bunker parameters:
  1473. [DEBUG][updateCallSite] Adding original call parameters:
  1474. [DEBUG][updateCallSite] Argument 0: type=i32
  1475. [DEBUG][updateCallSite] New call instruction:
  1476. %68 = call i32 @fused_performSimpleCalculations(i1 true, i32 %67)
  1477. [DEBUG][updateCallSite] Processing non-void return value of type: i32
  1478. [DEBUG][updateCallSite] Using direct return value
  1479. [DEBUG][updateCallSite] Successfully replaced all uses of original call
  1480. [INFO][updateCallSite] Successfully updated call site from %68 = call i32 @countSetBits(i32 %67) to %68 = call i32 @fused_performSimpleCalculations(i1 true, i32 %67)
  1481. [INFO][performCodeFusion] [After update call site]Generated control flow graph for fused function:
  1482. ```mermaid: fused_performSimpleCalculations
  1483. graph TD
  1484. entry["Block entry:\n %2 = alloca i32\n %3 = alloca i32\n %4 = alloca i32\n %5 = xor i1 %0, true\n br label %target_cond_0\n"]
  1485. entry --> target_cond_0
  1486. target_cond_0["Block target_cond_0:\n br i1 %0, label %6, label %target_skip_0\n"]
  1487. target_cond_0 -->|true| 6
  1488. target_cond_0 -->|false| target_skip_0
  1489. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  1490. target_skip_0 --> target_phi_0
  1491. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  1492. target_phi_0 --> bunker_cond_0
  1493. 6["Block 6:\n store i32 %1, i32* %3, align 4\n store i32 0, i32* %4, align 4\n br label %target_phi_0\n"]
  1494. 6 --> target_phi_0
  1495. bunker_cond_0["Block bunker_cond_0:\n br i1 %5, label %7, label %bunker_skip_0\n"]
  1496. bunker_cond_0 -->|true| 7
  1497. bunker_cond_0 -->|false| bunker_skip_0
  1498. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  1499. bunker_skip_0 --> bunker_phi_0
  1500. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  1501. bunker_phi_0 --> target_cond_1
  1502. 7["Block 7:\n store i32 100, i32* %2, align 4\n %8 = load i32, i32* %2, align 4\n %9 = icmp sgt i32 %8, 50\n br i1 %9, label %10, label %15\n"]
  1503. 7 -->|true| 10
  1504. 7 -->|false| 15
  1505. 10["Block 10:\n %11 = load i32, i32* %2, align 4\n %12 = mul nsw i32 %11, 2\n %13 = load i32, i32* @calculationResult, align 4\n %14 = add nsw i32 %13, %12\n store i32 %14, i32* @calculationResult, align 4\n br label %20\n"]
  1506. 10 --> 20
  1507. 15["Block 15:\n %16 = load i32, i32* %2, align 4\n %17 = sdiv i32 %16, 2\n %18 = load i32, i32* @calculationResult, align 4\n %19 = add nsw i32 %18, %17\n store i32 %19, i32* @calculationResult, align 4\n br label %20\n"]
  1508. 15 --> 20
  1509. 20["Block 20:\n %21 = load i32, i32* %2, align 4\n %22 = srem i32 %21, 3\n %23 = icmp eq i32 %22, 0\n br i1 %23, label %24, label %27\n"]
  1510. 20 -->|true| 24
  1511. 20 -->|false| 27
  1512. 24["Block 24:\n %25 = load i32, i32* @calculationResult, align 4\n %26 = mul nsw i32 %25, 3\n store i32 %26, i32* @calculationResult, align 4\n br label %30\n"]
  1513. 24 --> 30
  1514. 27["Block 27:\n %28 = load i32, i32* @calculationResult, align 4\n %29 = add nsw i32 %28, 3\n store i32 %29, i32* @calculationResult, align 4\n br label %30\n"]
  1515. 27 --> 30
  1516. 30["Block 30:\n %31 = load i32, i32* @calculationResult, align 4\n %32 = icmp sge i32 %31, 150\n br i1 %32, label %33, label %39\n"]
  1517. 30 -->|true| 33
  1518. 30 -->|false| 39
  1519. 33["Block 33:\n %34 = load i32, i32* @calculationResult, align 4\n %35 = icmp sle i32 %34, 300\n br i1 %35, label %36, label %39\n"]
  1520. 33 -->|true| 36
  1521. 33 -->|false| 39
  1522. 36["Block 36:\n %37 = load i32, i32* @calculationResult, align 4\n %38 = sub nsw i32 %37, 50\n store i32 %38, i32* @calculationResult, align 4\n br label %42\n"]
  1523. 36 --> 42
  1524. 39["Block 39:\n %40 = load i32, i32* @calculationResult, align 4\n %41 = add nsw i32 %40, 50\n store i32 %41, i32* @calculationResult, align 4\n br label %42\n"]
  1525. 39 --> 42
  1526. 42["Block 42:\n %43 = load i32, i32* @calculationResult, align 4\n %44 = srem i32 %43, 2\n %45 = icmp eq i32 %44, 0\n br i1 %45, label %46, label %49\n"]
  1527. 42 -->|true| 46
  1528. 42 -->|false| 49
  1529. 46["Block 46:\n %47 = load i32, i32* @calculationResult, align 4\n %48 = sdiv i32 %47, 2\n store i32 %48, i32* @calculationResult, align 4\n br label %52\n"]
  1530. 46 --> 52
  1531. 49["Block 49:\n %50 = load i32, i32* @calculationResult, align 4\n %51 = mul nsw i32 %50, 2\n store i32 %51, i32* @calculationResult, align 4\n br label %52\n"]
  1532. 49 --> 52
  1533. 52["Block 52:\n %53 = load i32, i32* @calculationResult, align 4\n %54 = srem i32 %53, 10\n %55 = icmp slt i32 %54, 5\n br i1 %55, label %56, label %59\n"]
  1534. 52 -->|true| 56
  1535. 52 -->|false| 59
  1536. 56["Block 56:\n %57 = load i32, i32* @calculationResult, align 4\n %58 = add nsw i32 %57, 5\n store i32 %58, i32* @calculationResult, align 4\n br label %62\n"]
  1537. 56 --> 62
  1538. 59["Block 59:\n %60 = load i32, i32* @calculationResult, align 4\n %61 = sub nsw i32 %60, 5\n store i32 %61, i32* @calculationResult, align 4\n br label %62\n"]
  1539. 59 --> 62
  1540. 62["Block 62:\n %63 = load i32, i32* @calculationResult, align 4\n %64 = icmp sgt i32 %63, 1000\n br i1 %64, label %65, label %66\n"]
  1541. 62 -->|true| 65
  1542. 62 -->|false| 66
  1543. 65["Block 65:\n store i32 1000, i32* @calculationResult, align 4\n br label %69\n"]
  1544. 65 --> 69
  1545. 66["Block 66:\n %67 = load i32, i32* @calculationResult, align 4\n %68 = add nsw i32 %67, 10\n store i32 %68, i32* @calculationResult, align 4\n br label %69\n"]
  1546. 66 --> 69
  1547. 69["Block 69:\n %70 = load i32, i32* @calculationResult, align 4\n %71 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.27, i64 0, i64 0), i32 %70)\n ret i32 0\n"]
  1548. target_cond_1["Block target_cond_1:\n br i1 %0, label %72, label %target_skip_1\n"]
  1549. target_cond_1 -->|true| 72
  1550. target_cond_1 -->|false| target_skip_1
  1551. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  1552. target_skip_1 --> target_phi_1
  1553. target_phi_1["Block target_phi_1:\n"]
  1554. 72["Block 72:\n %73 = load i32, i32* %3, align 4\n %74 = icmp ne i32 %73, 0\n br i1 %74, label %75, label %82\n"]
  1555. 72 -->|true| 75
  1556. 72 -->|false| 82
  1557. 75["Block 75:\n %76 = load i32, i32* %3, align 4\n %77 = and i32 %76, 1\n %78 = load i32, i32* %4, align 4\n %79 = add nsw i32 %78, %77\n store i32 %79, i32* %4, align 4\n %80 = load i32, i32* %3, align 4\n %81 = ashr i32 %80, 1\n store i32 %81, i32* %3, align 4\n br label %72\n"]
  1558. 75 --> 72
  1559. 82["Block 82:\n %83 = load i32, i32* %4, align 4\n ret i32 %83\n"]
  1560. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  1561. ```
  1562. [INFO][performCodeFusion] Fixing blocks without terminators...
  1563. [INFO][performCodeFusion] Added return with default value to block: target_phi_1
  1564. [INFO][performCodeFusion] Starting PHI node repair
  1565. [INFO][performCodeFusion] [After fix PHI]Generated control flow graph for fused function:
  1566. ```mermaid: fused_performSimpleCalculations
  1567. graph TD
  1568. entry["Block entry:\n %2 = alloca i32\n %3 = alloca i32\n %4 = alloca i32\n %5 = xor i1 %0, true\n br label %target_cond_0\n"]
  1569. entry --> target_cond_0
  1570. target_cond_0["Block target_cond_0:\n br i1 %0, label %6, label %target_skip_0\n"]
  1571. target_cond_0 -->|true| 6
  1572. target_cond_0 -->|false| target_skip_0
  1573. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  1574. target_skip_0 --> target_phi_0
  1575. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  1576. target_phi_0 --> bunker_cond_0
  1577. 6["Block 6:\n store i32 %1, i32* %3, align 4\n store i32 0, i32* %4, align 4\n br label %target_phi_0\n"]
  1578. 6 --> target_phi_0
  1579. bunker_cond_0["Block bunker_cond_0:\n br i1 %5, label %7, label %bunker_skip_0\n"]
  1580. bunker_cond_0 -->|true| 7
  1581. bunker_cond_0 -->|false| bunker_skip_0
  1582. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  1583. bunker_skip_0 --> bunker_phi_0
  1584. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  1585. bunker_phi_0 --> target_cond_1
  1586. 7["Block 7:\n store i32 100, i32* %2, align 4\n %8 = load i32, i32* %2, align 4\n %9 = icmp sgt i32 %8, 50\n br i1 %9, label %10, label %15\n"]
  1587. 7 -->|true| 10
  1588. 7 -->|false| 15
  1589. 10["Block 10:\n %11 = load i32, i32* %2, align 4\n %12 = mul nsw i32 %11, 2\n %13 = load i32, i32* @calculationResult, align 4\n %14 = add nsw i32 %13, %12\n store i32 %14, i32* @calculationResult, align 4\n br label %20\n"]
  1590. 10 --> 20
  1591. 15["Block 15:\n %16 = load i32, i32* %2, align 4\n %17 = sdiv i32 %16, 2\n %18 = load i32, i32* @calculationResult, align 4\n %19 = add nsw i32 %18, %17\n store i32 %19, i32* @calculationResult, align 4\n br label %20\n"]
  1592. 15 --> 20
  1593. 20["Block 20:\n %21 = load i32, i32* %2, align 4\n %22 = srem i32 %21, 3\n %23 = icmp eq i32 %22, 0\n br i1 %23, label %24, label %27\n"]
  1594. 20 -->|true| 24
  1595. 20 -->|false| 27
  1596. 24["Block 24:\n %25 = load i32, i32* @calculationResult, align 4\n %26 = mul nsw i32 %25, 3\n store i32 %26, i32* @calculationResult, align 4\n br label %30\n"]
  1597. 24 --> 30
  1598. 27["Block 27:\n %28 = load i32, i32* @calculationResult, align 4\n %29 = add nsw i32 %28, 3\n store i32 %29, i32* @calculationResult, align 4\n br label %30\n"]
  1599. 27 --> 30
  1600. 30["Block 30:\n %31 = load i32, i32* @calculationResult, align 4\n %32 = icmp sge i32 %31, 150\n br i1 %32, label %33, label %39\n"]
  1601. 30 -->|true| 33
  1602. 30 -->|false| 39
  1603. 33["Block 33:\n %34 = load i32, i32* @calculationResult, align 4\n %35 = icmp sle i32 %34, 300\n br i1 %35, label %36, label %39\n"]
  1604. 33 -->|true| 36
  1605. 33 -->|false| 39
  1606. 36["Block 36:\n %37 = load i32, i32* @calculationResult, align 4\n %38 = sub nsw i32 %37, 50\n store i32 %38, i32* @calculationResult, align 4\n br label %42\n"]
  1607. 36 --> 42
  1608. 39["Block 39:\n %40 = load i32, i32* @calculationResult, align 4\n %41 = add nsw i32 %40, 50\n store i32 %41, i32* @calculationResult, align 4\n br label %42\n"]
  1609. 39 --> 42
  1610. 42["Block 42:\n %43 = load i32, i32* @calculationResult, align 4\n %44 = srem i32 %43, 2\n %45 = icmp eq i32 %44, 0\n br i1 %45, label %46, label %49\n"]
  1611. 42 -->|true| 46
  1612. 42 -->|false| 49
  1613. 46["Block 46:\n %47 = load i32, i32* @calculationResult, align 4\n %48 = sdiv i32 %47, 2\n store i32 %48, i32* @calculationResult, align 4\n br label %52\n"]
  1614. 46 --> 52
  1615. 49["Block 49:\n %50 = load i32, i32* @calculationResult, align 4\n %51 = mul nsw i32 %50, 2\n store i32 %51, i32* @calculationResult, align 4\n br label %52\n"]
  1616. 49 --> 52
  1617. 52["Block 52:\n %53 = load i32, i32* @calculationResult, align 4\n %54 = srem i32 %53, 10\n %55 = icmp slt i32 %54, 5\n br i1 %55, label %56, label %59\n"]
  1618. 52 -->|true| 56
  1619. 52 -->|false| 59
  1620. 56["Block 56:\n %57 = load i32, i32* @calculationResult, align 4\n %58 = add nsw i32 %57, 5\n store i32 %58, i32* @calculationResult, align 4\n br label %62\n"]
  1621. 56 --> 62
  1622. 59["Block 59:\n %60 = load i32, i32* @calculationResult, align 4\n %61 = sub nsw i32 %60, 5\n store i32 %61, i32* @calculationResult, align 4\n br label %62\n"]
  1623. 59 --> 62
  1624. 62["Block 62:\n %63 = load i32, i32* @calculationResult, align 4\n %64 = icmp sgt i32 %63, 1000\n br i1 %64, label %65, label %66\n"]
  1625. 62 -->|true| 65
  1626. 62 -->|false| 66
  1627. 65["Block 65:\n store i32 1000, i32* @calculationResult, align 4\n br label %69\n"]
  1628. 65 --> 69
  1629. 66["Block 66:\n %67 = load i32, i32* @calculationResult, align 4\n %68 = add nsw i32 %67, 10\n store i32 %68, i32* @calculationResult, align 4\n br label %69\n"]
  1630. 66 --> 69
  1631. 69["Block 69:\n %70 = load i32, i32* @calculationResult, align 4\n %71 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.27, i64 0, i64 0), i32 %70)\n ret i32 0\n"]
  1632. target_cond_1["Block target_cond_1:\n br i1 %0, label %72, label %target_skip_1\n"]
  1633. target_cond_1 -->|true| 72
  1634. target_cond_1 -->|false| target_skip_1
  1635. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  1636. target_skip_1 --> target_phi_1
  1637. target_phi_1["Block target_phi_1:\n ret i32 0\n"]
  1638. 72["Block 72:\n %73 = load i32, i32* %3, align 4\n %74 = icmp ne i32 %73, 0\n br i1 %74, label %75, label %82\n"]
  1639. 72 -->|true| 75
  1640. 72 -->|false| 82
  1641. 75["Block 75:\n %76 = load i32, i32* %3, align 4\n %77 = and i32 %76, 1\n %78 = load i32, i32* %4, align 4\n %79 = add nsw i32 %78, %77\n store i32 %79, i32* %4, align 4\n %80 = load i32, i32* %3, align 4\n %81 = ashr i32 %80, 1\n store i32 %81, i32* %3, align 4\n br label %72\n"]
  1642. 75 --> 72
  1643. 82["Block 82:\n %83 = load i32, i32* %4, align 4\n ret i32 %83\n"]
  1644. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  1645. ```
  1646. [INFO][performCodeFusion] Attempting to delete original functions...
  1647. [INFO][performCodeFusion] [After erase]Generated control flow graph for fused function:
  1648. ```mermaid: fused_performSimpleCalculations
  1649. graph TD
  1650. entry["Block entry:\n %2 = alloca i32\n %3 = alloca i32\n %4 = alloca i32\n %5 = xor i1 %0, true\n br label %target_cond_0\n"]
  1651. entry --> target_cond_0
  1652. target_cond_0["Block target_cond_0:\n br i1 %0, label %6, label %target_skip_0\n"]
  1653. target_cond_0 -->|true| 6
  1654. target_cond_0 -->|false| target_skip_0
  1655. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  1656. target_skip_0 --> target_phi_0
  1657. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  1658. target_phi_0 --> bunker_cond_0
  1659. 6["Block 6:\n store i32 %1, i32* %3, align 4\n store i32 0, i32* %4, align 4\n br label %target_phi_0\n"]
  1660. 6 --> target_phi_0
  1661. bunker_cond_0["Block bunker_cond_0:\n br i1 %5, label %7, label %bunker_skip_0\n"]
  1662. bunker_cond_0 -->|true| 7
  1663. bunker_cond_0 -->|false| bunker_skip_0
  1664. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  1665. bunker_skip_0 --> bunker_phi_0
  1666. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  1667. bunker_phi_0 --> target_cond_1
  1668. 7["Block 7:\n store i32 100, i32* %2, align 4\n %8 = load i32, i32* %2, align 4\n %9 = icmp sgt i32 %8, 50\n br i1 %9, label %10, label %15\n"]
  1669. 7 -->|true| 10
  1670. 7 -->|false| 15
  1671. 10["Block 10:\n %11 = load i32, i32* %2, align 4\n %12 = mul nsw i32 %11, 2\n %13 = load i32, i32* @calculationResult, align 4\n %14 = add nsw i32 %13, %12\n store i32 %14, i32* @calculationResult, align 4\n br label %20\n"]
  1672. 10 --> 20
  1673. 15["Block 15:\n %16 = load i32, i32* %2, align 4\n %17 = sdiv i32 %16, 2\n %18 = load i32, i32* @calculationResult, align 4\n %19 = add nsw i32 %18, %17\n store i32 %19, i32* @calculationResult, align 4\n br label %20\n"]
  1674. 15 --> 20
  1675. 20["Block 20:\n %21 = load i32, i32* %2, align 4\n %22 = srem i32 %21, 3\n %23 = icmp eq i32 %22, 0\n br i1 %23, label %24, label %27\n"]
  1676. 20 -->|true| 24
  1677. 20 -->|false| 27
  1678. 24["Block 24:\n %25 = load i32, i32* @calculationResult, align 4\n %26 = mul nsw i32 %25, 3\n store i32 %26, i32* @calculationResult, align 4\n br label %30\n"]
  1679. 24 --> 30
  1680. 27["Block 27:\n %28 = load i32, i32* @calculationResult, align 4\n %29 = add nsw i32 %28, 3\n store i32 %29, i32* @calculationResult, align 4\n br label %30\n"]
  1681. 27 --> 30
  1682. 30["Block 30:\n %31 = load i32, i32* @calculationResult, align 4\n %32 = icmp sge i32 %31, 150\n br i1 %32, label %33, label %39\n"]
  1683. 30 -->|true| 33
  1684. 30 -->|false| 39
  1685. 33["Block 33:\n %34 = load i32, i32* @calculationResult, align 4\n %35 = icmp sle i32 %34, 300\n br i1 %35, label %36, label %39\n"]
  1686. 33 -->|true| 36
  1687. 33 -->|false| 39
  1688. 36["Block 36:\n %37 = load i32, i32* @calculationResult, align 4\n %38 = sub nsw i32 %37, 50\n store i32 %38, i32* @calculationResult, align 4\n br label %42\n"]
  1689. 36 --> 42
  1690. 39["Block 39:\n %40 = load i32, i32* @calculationResult, align 4\n %41 = add nsw i32 %40, 50\n store i32 %41, i32* @calculationResult, align 4\n br label %42\n"]
  1691. 39 --> 42
  1692. 42["Block 42:\n %43 = load i32, i32* @calculationResult, align 4\n %44 = srem i32 %43, 2\n %45 = icmp eq i32 %44, 0\n br i1 %45, label %46, label %49\n"]
  1693. 42 -->|true| 46
  1694. 42 -->|false| 49
  1695. 46["Block 46:\n %47 = load i32, i32* @calculationResult, align 4\n %48 = sdiv i32 %47, 2\n store i32 %48, i32* @calculationResult, align 4\n br label %52\n"]
  1696. 46 --> 52
  1697. 49["Block 49:\n %50 = load i32, i32* @calculationResult, align 4\n %51 = mul nsw i32 %50, 2\n store i32 %51, i32* @calculationResult, align 4\n br label %52\n"]
  1698. 49 --> 52
  1699. 52["Block 52:\n %53 = load i32, i32* @calculationResult, align 4\n %54 = srem i32 %53, 10\n %55 = icmp slt i32 %54, 5\n br i1 %55, label %56, label %59\n"]
  1700. 52 -->|true| 56
  1701. 52 -->|false| 59
  1702. 56["Block 56:\n %57 = load i32, i32* @calculationResult, align 4\n %58 = add nsw i32 %57, 5\n store i32 %58, i32* @calculationResult, align 4\n br label %62\n"]
  1703. 56 --> 62
  1704. 59["Block 59:\n %60 = load i32, i32* @calculationResult, align 4\n %61 = sub nsw i32 %60, 5\n store i32 %61, i32* @calculationResult, align 4\n br label %62\n"]
  1705. 59 --> 62
  1706. 62["Block 62:\n %63 = load i32, i32* @calculationResult, align 4\n %64 = icmp sgt i32 %63, 1000\n br i1 %64, label %65, label %66\n"]
  1707. 62 -->|true| 65
  1708. 62 -->|false| 66
  1709. 65["Block 65:\n store i32 1000, i32* @calculationResult, align 4\n br label %69\n"]
  1710. 65 --> 69
  1711. 66["Block 66:\n %67 = load i32, i32* @calculationResult, align 4\n %68 = add nsw i32 %67, 10\n store i32 %68, i32* @calculationResult, align 4\n br label %69\n"]
  1712. 66 --> 69
  1713. 69["Block 69:\n %70 = load i32, i32* @calculationResult, align 4\n %71 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.27, i64 0, i64 0), i32 %70)\n ret i32 0\n"]
  1714. target_cond_1["Block target_cond_1:\n br i1 %0, label %72, label %target_skip_1\n"]
  1715. target_cond_1 -->|true| 72
  1716. target_cond_1 -->|false| target_skip_1
  1717. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  1718. target_skip_1 --> target_phi_1
  1719. target_phi_1["Block target_phi_1:\n ret i32 0\n"]
  1720. 72["Block 72:\n %73 = load i32, i32* %3, align 4\n %74 = icmp ne i32 %73, 0\n br i1 %74, label %75, label %82\n"]
  1721. 72 -->|true| 75
  1722. 72 -->|false| 82
  1723. 75["Block 75:\n %76 = load i32, i32* %3, align 4\n %77 = and i32 %76, 1\n %78 = load i32, i32* %4, align 4\n %79 = add nsw i32 %78, %77\n store i32 %79, i32* %4, align 4\n %80 = load i32, i32* %3, align 4\n %81 = ashr i32 %80, 1\n store i32 %81, i32* %3, align 4\n br label %72\n"]
  1724. 75 --> 72
  1725. 82["Block 82:\n %83 = load i32, i32* %4, align 4\n ret i32 %83\n"]
  1726. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  1727. ```
  1728. [INFO][performCodeFusion] Completed function fusion: fused_performSimpleCalculations
  1729. [INFO][performCodeFusion] Processing function pair: target=memoizedFib, bunker=calculateDistance
  1730. [INFO][performCodeFusion] [After clone]Generated control flow graph for fused function:
  1731. ```mermaid: fused_calculateDistance
  1732. graph TD
  1733. entry["Block entry:\n %5 = alloca double\n %6 = alloca i32*\n %7 = alloca double\n %8 = alloca double\n %9 = alloca double\n %10 = alloca i32\n %11 = alloca i32\n %12 = xor i1 %0, true\n br label %target_cond_0\n"]
  1734. entry --> target_cond_0
  1735. target_cond_0["Block target_cond_0:\n br i1 %0, label %13, label %target_skip_0\n"]
  1736. target_cond_0 -->|true| 13
  1737. target_cond_0 -->|false| target_skip_0
  1738. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  1739. target_skip_0 --> target_phi_0
  1740. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  1741. target_phi_0 --> bunker_cond_0
  1742. 13["Block 13:\n store i32 %0, i32* %11, align 4\n %14 = load i32, i32* %11, align 4\n %15 = sext i32 %2 to i64\n %16 = getelementptr inbounds [100 x i32], [100 x i32]* @cache, i64 0, i64 %3\n %17 = load i32, i32* %4, align 4\n %18 = icmp ne i32 %5, -1\n br label %target_phi_0\n"]
  1743. 13 --> target_phi_0
  1744. bunker_cond_0["Block bunker_cond_0:\n br i1 %12, label %19, label %bunker_skip_0\n"]
  1745. bunker_cond_0 -->|true| 19
  1746. bunker_cond_0 -->|false| bunker_skip_0
  1747. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  1748. bunker_skip_0 --> bunker_phi_0
  1749. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  1750. bunker_phi_0 --> target_cond_1
  1751. 19["Block 19:\n store i32* %2, i32** %6, align 8\n %20 = load i32*, i32** %6, align 8\n store i32 0, i32* %4, align 4\n %21 = getelementptr inbounds %struct.Point, %struct.Point* %0, i32 0, i32 3\n %22 = load double, double* %5, align 8\n %23 = fcmp ole double %6, 0.000000e+00\n br i1 %7, label %12, label %8\n"]
  1752. 19 -->|true| 12
  1753. 19 -->|false| 8
  1754. 24["Block 24:\n %25 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 3\n %26 = load double, double* %9, align 8\n %27 = fcmp ole double %10, 0.000000e+00\n br i1 %11, label %12, label %14\n"]
  1755. 24 -->|true| 12
  1756. 24 -->|false| 14
  1757. 28["Block 28:\n %29 = load i32*, i32** %6, align 8\n store i32 1, i32* %13, align 4\n call void @setErrorMessage(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.32, i64 0, i64 0))\n store double -1.000000e+00, double* %5, align 8\n br label %96\n"]
  1758. 28 --> 96
  1759. 30["Block 30:\n %31 = getelementptr inbounds %struct.Point, %struct.Point* %0, i32 0, i32 0\n %32 = load i32, i32* %15, align 8\n %33 = call i32 @abs(i32 %16) #7\n %34 = icmp sgt i32 %17, 1000\n br i1 %18, label %34, label %19\n"]
  1760. 30 -->|true| 34
  1761. 30 -->|false| 19
  1762. 35["Block 35:\n %36 = getelementptr inbounds %struct.Point, %struct.Point* %0, i32 0, i32 1\n %37 = load i32, i32* %20, align 4\n %38 = call i32 @abs(i32 %21) #7\n %39 = icmp sgt i32 %22, 1000\n br i1 %23, label %34, label %24\n"]
  1763. 35 -->|true| 34
  1764. 35 -->|false| 24
  1765. 40["Block 40:\n %41 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 0\n %42 = load i32, i32* %25, align 8\n %43 = call i32 @abs(i32 %26) #7\n %44 = icmp sgt i32 %27, 1000\n br i1 %28, label %34, label %29\n"]
  1766. 40 -->|true| 34
  1767. 40 -->|false| 29
  1768. 45["Block 45:\n %46 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 1\n %47 = load i32, i32* %30, align 4\n %48 = call i32 @abs(i32 %31) #7\n %49 = icmp sgt i32 %32, 1000\n br i1 %33, label %34, label %36\n"]
  1769. 45 -->|true| 34
  1770. 45 -->|false| 36
  1771. 50["Block 50:\n %51 = load i32*, i32** %6, align 8\n store i32 3, i32* %35, align 4\n call void @setErrorMessage(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.33, i64 0, i64 0))\n store double -1.000000e+00, double* %5, align 8\n br label %96\n"]
  1772. 50 --> 96
  1773. 52["Block 52:\n %53 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 0\n %54 = load i32, i32* %37, align 8\n %55 = getelementptr inbounds %struct.Point, %struct.Point* %0, i32 0, i32 0\n %56 = load i32, i32* %39, align 8\n %57 = sub nsw i32 %38, %40\n %58 = sitofp i32 %41 to double\n %59 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 3\n %60 = load double, double* %43, align 8\n %61 = getelementptr inbounds %struct.Point, %struct.Point* %0, i32 0, i32 3\n %62 = load double, double* %45, align 8\n %63 = fdiv double %44, %46\n %64 = call double @sqrt(double %47) #8\n %65 = fmul double %42, %48\n store double %49, double* %7, align 8\n %66 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 1\n %67 = load i32, i32* %50, align 4\n %68 = getelementptr inbounds %struct.Point, %struct.Point* %0, i32 0, i32 1\n %69 = load i32, i32* %52, align 4\n %70 = sub nsw i32 %51, %53\n %71 = sitofp i32 %54 to double\n %72 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 3\n %73 = load double, double* %56, align 8\n %74 = getelementptr inbounds %struct.Point, %struct.Point* %0, i32 0, i32 3\n %75 = load double, double* %58, align 8\n %76 = fdiv double %57, %59\n %77 = call double @sqrt(double %60) #8\n %78 = fmul double %55, %61\n store double %62, double* %8, align 8\n %79 = load double, double* %7, align 8\n %80 = call double @llvm.fabs.f64(double %63)\n %81 = fcmp ogt double %64, 1.000000e+03\n br i1 %65, label %70, label %66\n"]
  1774. 52 -->|true| 70
  1775. 52 -->|false| 66
  1776. 82["Block 82:\n %83 = load double, double* %8, align 8\n %84 = call double @llvm.fabs.f64(double %67)\n %85 = fcmp ogt double %68, 1.000000e+03\n br i1 %69, label %70, label %72\n"]
  1777. 82 -->|true| 70
  1778. 82 -->|false| 72
  1779. 86["Block 86:\n %87 = load i32*, i32** %6, align 8\n store i32 5, i32* %71, align 4\n call void @setErrorMessage(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.34, i64 0, i64 0))\n store double -1.000000e+00, double* %5, align 8\n br label %96\n"]
  1780. 86 --> 96
  1781. 88["Block 88:\n %89 = load double, double* %7, align 8\n %90 = load double, double* %7, align 8\n %91 = fmul double %73, %74\n %92 = load double, double* %8, align 8\n %93 = load double, double* %8, align 8\n %94 = fmul double %76, %77\n %95 = fadd double %75, %78\n %96 = call double @sqrt(double %79) #8\n store double %80, double* %9, align 8\n %97 = load double, double* %9, align 8\n %98 = fcmp uno double %81, %81\n br i1 %82, label %92, label %83\n"]
  1782. 88 -->|true| 92
  1783. 88 -->|false| 83
  1784. 99["Block 99:\n %100 = load double, double* %9, align 8\n %101 = call double @llvm.fabs.f64(double %84) #9\n %102 = fcmp oeq double %85, 0x7FF0000000000000\n %103 = bitcast double %84 to i64\n %104 = icmp slt i64 %87, 0\n %105 = select i1 %88, i32 -1, i32 1\n %106 = select i1 %86, i32 %89, i32 0\n %107 = icmp ne i32 %90, 0\n br i1 %91, label %92, label %94\n"]
  1785. 99 -->|true| 92
  1786. 99 -->|false| 94
  1787. 108["Block 108:\n %109 = load i32*, i32** %6, align 8\n store i32 8, i32* %93, align 4\n call void @setErrorMessage(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.35, i64 0, i64 0))\n store double -1.000000e+00, double* %5, align 8\n br label %96\n"]
  1788. 108 --> 96
  1789. 110["Block 110:\n %111 = load double, double* %9, align 8\n store double %95, double* %5, align 8\n br label %96\n"]
  1790. 110 --> 96
  1791. 112["Block 112:\n %113 = load double, double* %5, align 8\n ret double %97\n"]
  1792. target_cond_1["Block target_cond_1:\n br i1 %0, label %114, label %target_skip_1\n"]
  1793. target_cond_1 -->|true| 114
  1794. target_cond_1 -->|false| target_skip_1
  1795. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  1796. target_skip_1 --> target_phi_1
  1797. target_phi_1["Block target_phi_1:\n"]
  1798. 114["Block 114:\n %115 = load i32, i32* %10, align 4\n ret i32 %33\n"]
  1799. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  1800. ```
  1801. [INFO][performCodeFusion] Fixing return instruction in block %112
  1802. [INFO][performCodeFusion] Fixing return instruction in block %114
  1803. [WARNING][performCodeFusion] No terminator found in block: target_phi_1
  1804. [INFO][performCodeFusion] [After fix]Generated control flow graph for fused function:
  1805. ```mermaid: fused_calculateDistance
  1806. graph TD
  1807. entry["Block entry:\n %5 = alloca double\n %6 = alloca i32*\n %7 = alloca double\n %8 = alloca double\n %9 = alloca double\n %10 = alloca i32\n %11 = alloca i32\n %12 = xor i1 %0, true\n br label %target_cond_0\n"]
  1808. entry --> target_cond_0
  1809. target_cond_0["Block target_cond_0:\n br i1 %0, label %13, label %target_skip_0\n"]
  1810. target_cond_0 -->|true| 13
  1811. target_cond_0 -->|false| target_skip_0
  1812. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  1813. target_skip_0 --> target_phi_0
  1814. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  1815. target_phi_0 --> bunker_cond_0
  1816. 13["Block 13:\n store i32 %4, i32* %11, align 4\n %14 = load i32, i32* %11, align 4\n %15 = sext i32 %14 to i64\n %16 = getelementptr inbounds [100 x i32], [100 x i32]* @cache, i64 0, i64 %15\n %17 = load i32, i32* %16, align 4\n %18 = icmp ne i32 %17, -1\n br label %target_phi_0\n"]
  1817. 13 --> target_phi_0
  1818. bunker_cond_0["Block bunker_cond_0:\n br i1 %12, label %19, label %bunker_skip_0\n"]
  1819. bunker_cond_0 -->|true| 19
  1820. bunker_cond_0 -->|false| bunker_skip_0
  1821. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  1822. bunker_skip_0 --> bunker_phi_0
  1823. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  1824. bunker_phi_0 --> target_cond_1
  1825. 19["Block 19:\n store i32* %3, i32** %6, align 8\n %20 = load i32*, i32** %6, align 8\n store i32 0, i32* %20, align 4\n %21 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 3\n %22 = load double, double* %21, align 8\n %23 = fcmp ole double %22, 0.000000e+00\n br i1 %23, label %28, label %24\n"]
  1826. 19 -->|true| 28
  1827. 19 -->|false| 24
  1828. 24["Block 24:\n %25 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 3\n %26 = load double, double* %25, align 8\n %27 = fcmp ole double %26, 0.000000e+00\n br i1 %27, label %28, label %30\n"]
  1829. 24 -->|true| 28
  1830. 24 -->|false| 30
  1831. 28["Block 28:\n %29 = load i32*, i32** %6, align 8\n store i32 1, i32* %29, align 4\n call void @setErrorMessage(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.32, i64 0, i64 0))\n store double -1.000000e+00, double* %5, align 8\n br label %112\n"]
  1832. 28 --> 112
  1833. 30["Block 30:\n %31 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 0\n %32 = load i32, i32* %31, align 8\n %33 = call i32 @abs(i32 %32) #7\n %34 = icmp sgt i32 %33, 1000\n br i1 %34, label %50, label %35\n"]
  1834. 30 -->|true| 50
  1835. 30 -->|false| 35
  1836. 35["Block 35:\n %36 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 1\n %37 = load i32, i32* %36, align 4\n %38 = call i32 @abs(i32 %37) #7\n %39 = icmp sgt i32 %38, 1000\n br i1 %39, label %50, label %40\n"]
  1837. 35 -->|true| 50
  1838. 35 -->|false| 40
  1839. 40["Block 40:\n %41 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 0\n %42 = load i32, i32* %41, align 8\n %43 = call i32 @abs(i32 %42) #7\n %44 = icmp sgt i32 %43, 1000\n br i1 %44, label %50, label %45\n"]
  1840. 40 -->|true| 50
  1841. 40 -->|false| 45
  1842. 45["Block 45:\n %46 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 1\n %47 = load i32, i32* %46, align 4\n %48 = call i32 @abs(i32 %47) #7\n %49 = icmp sgt i32 %48, 1000\n br i1 %49, label %50, label %52\n"]
  1843. 45 -->|true| 50
  1844. 45 -->|false| 52
  1845. 50["Block 50:\n %51 = load i32*, i32** %6, align 8\n store i32 3, i32* %51, align 4\n call void @setErrorMessage(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.33, i64 0, i64 0))\n store double -1.000000e+00, double* %5, align 8\n br label %112\n"]
  1846. 50 --> 112
  1847. 52["Block 52:\n %53 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 0\n %54 = load i32, i32* %53, align 8\n %55 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 0\n %56 = load i32, i32* %55, align 8\n %57 = sub nsw i32 %54, %56\n %58 = sitofp i32 %57 to double\n %59 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 3\n %60 = load double, double* %59, align 8\n %61 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 3\n %62 = load double, double* %61, align 8\n %63 = fdiv double %60, %62\n %64 = call double @sqrt(double %63) #8\n %65 = fmul double %58, %64\n store double %65, double* %7, align 8\n %66 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 1\n %67 = load i32, i32* %66, align 4\n %68 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 1\n %69 = load i32, i32* %68, align 4\n %70 = sub nsw i32 %67, %69\n %71 = sitofp i32 %70 to double\n %72 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 3\n %73 = load double, double* %72, align 8\n %74 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 3\n %75 = load double, double* %74, align 8\n %76 = fdiv double %73, %75\n %77 = call double @sqrt(double %76) #8\n %78 = fmul double %71, %77\n store double %78, double* %8, align 8\n %79 = load double, double* %7, align 8\n %80 = call double @llvm.fabs.f64(double %79)\n %81 = fcmp ogt double %80, 1.000000e+03\n br i1 %81, label %86, label %82\n"]
  1848. 52 -->|true| 86
  1849. 52 -->|false| 82
  1850. 82["Block 82:\n %83 = load double, double* %8, align 8\n %84 = call double @llvm.fabs.f64(double %83)\n %85 = fcmp ogt double %84, 1.000000e+03\n br i1 %85, label %86, label %88\n"]
  1851. 82 -->|true| 86
  1852. 82 -->|false| 88
  1853. 86["Block 86:\n %87 = load i32*, i32** %6, align 8\n store i32 5, i32* %87, align 4\n call void @setErrorMessage(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.34, i64 0, i64 0))\n store double -1.000000e+00, double* %5, align 8\n br label %112\n"]
  1854. 86 --> 112
  1855. 88["Block 88:\n %89 = load double, double* %7, align 8\n %90 = load double, double* %7, align 8\n %91 = fmul double %89, %90\n %92 = load double, double* %8, align 8\n %93 = load double, double* %8, align 8\n %94 = fmul double %92, %93\n %95 = fadd double %91, %94\n %96 = call double @sqrt(double %95) #8\n store double %96, double* %9, align 8\n %97 = load double, double* %9, align 8\n %98 = fcmp uno double %97, %97\n br i1 %98, label %108, label %99\n"]
  1856. 88 -->|true| 108
  1857. 88 -->|false| 99
  1858. 99["Block 99:\n %100 = load double, double* %9, align 8\n %101 = call double @llvm.fabs.f64(double %100) #9\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 %108, label %110\n"]
  1859. 99 -->|true| 108
  1860. 99 -->|false| 110
  1861. 108["Block 108:\n %109 = load i32*, i32** %6, align 8\n store i32 8, i32* %109, align 4\n call void @setErrorMessage(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.35, i64 0, i64 0))\n store double -1.000000e+00, double* %5, align 8\n br label %112\n"]
  1862. 108 --> 112
  1863. 110["Block 110:\n %111 = load double, double* %9, align 8\n store double %111, double* %5, align 8\n br label %112\n"]
  1864. 110 --> 112
  1865. 112["Block 112:\n %113 = load double, double* %5, align 8\n ret double %113\n"]
  1866. target_cond_1["Block target_cond_1:\n br i1 %0, label %114, label %target_skip_1\n"]
  1867. target_cond_1 -->|true| 114
  1868. target_cond_1 -->|false| target_skip_1
  1869. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  1870. target_skip_1 --> target_phi_1
  1871. target_phi_1["Block target_phi_1:\n"]
  1872. 114["Block 114:\n %115 = load i32, i32* %10, align 4\n ret i32 %115\n"]
  1873. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  1874. ```
  1875. [INFO][performCodeFusion] Processing struct return type
  1876. [INFO][performCodeFusion] [After fix return]Generated control flow graph for fused function:
  1877. ```mermaid: fused_calculateDistance
  1878. graph TD
  1879. entry["Block entry:\n %5 = alloca double\n %6 = alloca i32*\n %7 = alloca double\n %8 = alloca double\n %9 = alloca double\n %10 = alloca i32\n %11 = alloca i32\n %12 = xor i1 %0, true\n br label %target_cond_0\n"]
  1880. entry --> target_cond_0
  1881. target_cond_0["Block target_cond_0:\n br i1 %0, label %13, label %target_skip_0\n"]
  1882. target_cond_0 -->|true| 13
  1883. target_cond_0 -->|false| target_skip_0
  1884. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  1885. target_skip_0 --> target_phi_0
  1886. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  1887. target_phi_0 --> bunker_cond_0
  1888. 13["Block 13:\n store i32 %4, i32* %11, align 4\n %14 = load i32, i32* %11, align 4\n %15 = sext i32 %14 to i64\n %16 = getelementptr inbounds [100 x i32], [100 x i32]* @cache, i64 0, i64 %15\n %17 = load i32, i32* %16, align 4\n %18 = icmp ne i32 %17, -1\n br label %target_phi_0\n"]
  1889. 13 --> target_phi_0
  1890. bunker_cond_0["Block bunker_cond_0:\n br i1 %12, label %19, label %bunker_skip_0\n"]
  1891. bunker_cond_0 -->|true| 19
  1892. bunker_cond_0 -->|false| bunker_skip_0
  1893. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  1894. bunker_skip_0 --> bunker_phi_0
  1895. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  1896. bunker_phi_0 --> target_cond_1
  1897. 19["Block 19:\n store i32* %3, i32** %6, align 8\n %20 = load i32*, i32** %6, align 8\n store i32 0, i32* %20, align 4\n %21 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 3\n %22 = load double, double* %21, align 8\n %23 = fcmp ole double %22, 0.000000e+00\n br i1 %23, label %28, label %24\n"]
  1898. 19 -->|true| 28
  1899. 19 -->|false| 24
  1900. 24["Block 24:\n %25 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 3\n %26 = load double, double* %25, align 8\n %27 = fcmp ole double %26, 0.000000e+00\n br i1 %27, label %28, label %30\n"]
  1901. 24 -->|true| 28
  1902. 24 -->|false| 30
  1903. 28["Block 28:\n %29 = load i32*, i32** %6, align 8\n store i32 1, i32* %29, align 4\n call void @setErrorMessage(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.32, i64 0, i64 0))\n store double -1.000000e+00, double* %5, align 8\n br label %112\n"]
  1904. 28 --> 112
  1905. 30["Block 30:\n %31 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 0\n %32 = load i32, i32* %31, align 8\n %33 = call i32 @abs(i32 %32) #7\n %34 = icmp sgt i32 %33, 1000\n br i1 %34, label %50, label %35\n"]
  1906. 30 -->|true| 50
  1907. 30 -->|false| 35
  1908. 35["Block 35:\n %36 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 1\n %37 = load i32, i32* %36, align 4\n %38 = call i32 @abs(i32 %37) #7\n %39 = icmp sgt i32 %38, 1000\n br i1 %39, label %50, label %40\n"]
  1909. 35 -->|true| 50
  1910. 35 -->|false| 40
  1911. 40["Block 40:\n %41 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 0\n %42 = load i32, i32* %41, align 8\n %43 = call i32 @abs(i32 %42) #7\n %44 = icmp sgt i32 %43, 1000\n br i1 %44, label %50, label %45\n"]
  1912. 40 -->|true| 50
  1913. 40 -->|false| 45
  1914. 45["Block 45:\n %46 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 1\n %47 = load i32, i32* %46, align 4\n %48 = call i32 @abs(i32 %47) #7\n %49 = icmp sgt i32 %48, 1000\n br i1 %49, label %50, label %52\n"]
  1915. 45 -->|true| 50
  1916. 45 -->|false| 52
  1917. 50["Block 50:\n %51 = load i32*, i32** %6, align 8\n store i32 3, i32* %51, align 4\n call void @setErrorMessage(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.33, i64 0, i64 0))\n store double -1.000000e+00, double* %5, align 8\n br label %112\n"]
  1918. 50 --> 112
  1919. 52["Block 52:\n %53 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 0\n %54 = load i32, i32* %53, align 8\n %55 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 0\n %56 = load i32, i32* %55, align 8\n %57 = sub nsw i32 %54, %56\n %58 = sitofp i32 %57 to double\n %59 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 3\n %60 = load double, double* %59, align 8\n %61 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 3\n %62 = load double, double* %61, align 8\n %63 = fdiv double %60, %62\n %64 = call double @sqrt(double %63) #8\n %65 = fmul double %58, %64\n store double %65, double* %7, align 8\n %66 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 1\n %67 = load i32, i32* %66, align 4\n %68 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 1\n %69 = load i32, i32* %68, align 4\n %70 = sub nsw i32 %67, %69\n %71 = sitofp i32 %70 to double\n %72 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 3\n %73 = load double, double* %72, align 8\n %74 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 3\n %75 = load double, double* %74, align 8\n %76 = fdiv double %73, %75\n %77 = call double @sqrt(double %76) #8\n %78 = fmul double %71, %77\n store double %78, double* %8, align 8\n %79 = load double, double* %7, align 8\n %80 = call double @llvm.fabs.f64(double %79)\n %81 = fcmp ogt double %80, 1.000000e+03\n br i1 %81, label %86, label %82\n"]
  1920. 52 -->|true| 86
  1921. 52 -->|false| 82
  1922. 82["Block 82:\n %83 = load double, double* %8, align 8\n %84 = call double @llvm.fabs.f64(double %83)\n %85 = fcmp ogt double %84, 1.000000e+03\n br i1 %85, label %86, label %88\n"]
  1923. 82 -->|true| 86
  1924. 82 -->|false| 88
  1925. 86["Block 86:\n %87 = load i32*, i32** %6, align 8\n store i32 5, i32* %87, align 4\n call void @setErrorMessage(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.34, i64 0, i64 0))\n store double -1.000000e+00, double* %5, align 8\n br label %112\n"]
  1926. 86 --> 112
  1927. 88["Block 88:\n %89 = load double, double* %7, align 8\n %90 = load double, double* %7, align 8\n %91 = fmul double %89, %90\n %92 = load double, double* %8, align 8\n %93 = load double, double* %8, align 8\n %94 = fmul double %92, %93\n %95 = fadd double %91, %94\n %96 = call double @sqrt(double %95) #8\n store double %96, double* %9, align 8\n %97 = load double, double* %9, align 8\n %98 = fcmp uno double %97, %97\n br i1 %98, label %108, label %99\n"]
  1928. 88 -->|true| 108
  1929. 88 -->|false| 99
  1930. 99["Block 99:\n %100 = load double, double* %9, align 8\n %101 = call double @llvm.fabs.f64(double %100) #9\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 %108, label %110\n"]
  1931. 99 -->|true| 108
  1932. 99 -->|false| 110
  1933. 108["Block 108:\n %109 = load i32*, i32** %6, align 8\n store i32 8, i32* %109, align 4\n call void @setErrorMessage(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.35, i64 0, i64 0))\n store double -1.000000e+00, double* %5, align 8\n br label %112\n"]
  1934. 108 --> 112
  1935. 110["Block 110:\n %111 = load double, double* %9, align 8\n store double %111, double* %5, align 8\n br label %112\n"]
  1936. 110 --> 112
  1937. 112["Block 112:\n %113 = load double, double* %5, align 8\n %114 = insertvalue %fused_return_calculateDistance_memoizedFib { i32 0, double undef }, double %113, 1\n ret %fused_return_calculateDistance_memoizedFib %114\n"]
  1938. target_cond_1["Block target_cond_1:\n br i1 %0, label %115, label %target_skip_1\n"]
  1939. target_cond_1 -->|true| 115
  1940. target_cond_1 -->|false| target_skip_1
  1941. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  1942. target_skip_1 --> target_phi_1
  1943. target_phi_1["Block target_phi_1:\n"]
  1944. 115["Block 115:\n %116 = load i32, i32* %10, align 4\n %117 = insertvalue %fused_return_calculateDistance_memoizedFib undef, i32 %116, 0\n %118 = insertvalue %fused_return_calculateDistance_memoizedFib %117, double 0.000000e+00, 1\n ret %fused_return_calculateDistance_memoizedFib %118\n"]
  1945. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  1946. ```
  1947. [DEBUG][updateCallSite] Original call instruction:
  1948. %27 = call i32 @memoizedFib(i32 7)
  1949. [DEBUG][updateCallSite] Adding target control parameter
  1950. [DEBUG][updateCallSite] Adding default bunker parameters:
  1951. [DEBUG][updateCallSite] Parameter type: struct.struct.Point*
  1952. [DEBUG][updateCallSite] Parameter type: struct.struct.Point*
  1953. [DEBUG][updateCallSite] Parameter type: i32*
  1954. [DEBUG][updateCallSite] Adding original call parameters:
  1955. [DEBUG][updateCallSite] Argument 0: type=i32
  1956. [DEBUG][updateCallSite] New call instruction:
  1957. %27 = call %fused_return_calculateDistance_memoizedFib @fused_calculateDistance(i1 true, %struct.Point* null, %struct.Point* null, i32* null, i32 7)
  1958. [DEBUG][updateCallSite] Processing non-void return value of type: i32
  1959. [DEBUG][updateCallSite] Extracting value from struct return type
  1960. [DEBUG][updateCallSite] Extracted value type: i32
  1961. [DEBUG][updateCallSite] Successfully replaced all uses of original call
  1962. [INFO][updateCallSite] Successfully updated call site from %27 = call i32 @memoizedFib(i32 7) to %27 = call %fused_return_calculateDistance_memoizedFib @fused_calculateDistance(i1 true, %struct.Point* null, %struct.Point* null, i32* null, i32 7)
  1963. [DEBUG][updateCallSite] Original call instruction:
  1964. %17 = call i32 @memoizedFib(i32 %16)
  1965. [DEBUG][updateCallSite] Adding target control parameter
  1966. [DEBUG][updateCallSite] Adding default bunker parameters:
  1967. [DEBUG][updateCallSite] Parameter type: struct.struct.Point*
  1968. [DEBUG][updateCallSite] Parameter type: struct.struct.Point*
  1969. [DEBUG][updateCallSite] Parameter type: i32*
  1970. [DEBUG][updateCallSite] Adding original call parameters:
  1971. [DEBUG][updateCallSite] Argument 0: type=i32
  1972. [DEBUG][updateCallSite] New call instruction:
  1973. %17 = call %fused_return_calculateDistance_memoizedFib @fused_calculateDistance(i1 true, %struct.Point* null, %struct.Point* null, i32* null, i32 %16)
  1974. [DEBUG][updateCallSite] Processing non-void return value of type: i32
  1975. [DEBUG][updateCallSite] Extracting value from struct return type
  1976. [DEBUG][updateCallSite] Extracted value type: i32
  1977. [DEBUG][updateCallSite] Successfully replaced all uses of original call
  1978. [INFO][updateCallSite] Successfully updated call site from %17 = call i32 @memoizedFib(i32 %16) to %17 = call %fused_return_calculateDistance_memoizedFib @fused_calculateDistance(i1 true, %struct.Point* null, %struct.Point* null, i32* null, i32 %16)
  1979. [DEBUG][updateCallSite] Original call instruction:
  1980. %23 = call i32 @memoizedFib(i32 %22)
  1981. [DEBUG][updateCallSite] Adding target control parameter
  1982. [DEBUG][updateCallSite] Adding default bunker parameters:
  1983. [DEBUG][updateCallSite] Parameter type: struct.struct.Point*
  1984. [DEBUG][updateCallSite] Parameter type: struct.struct.Point*
  1985. [DEBUG][updateCallSite] Parameter type: i32*
  1986. [DEBUG][updateCallSite] Adding original call parameters:
  1987. [DEBUG][updateCallSite] Argument 0: type=i32
  1988. [DEBUG][updateCallSite] New call instruction:
  1989. %23 = call %fused_return_calculateDistance_memoizedFib @fused_calculateDistance(i1 true, %struct.Point* null, %struct.Point* null, i32* null, i32 %22)
  1990. [DEBUG][updateCallSite] Processing non-void return value of type: i32
  1991. [DEBUG][updateCallSite] Extracting value from struct return type
  1992. [DEBUG][updateCallSite] Extracted value type: i32
  1993. [DEBUG][updateCallSite] Successfully replaced all uses of original call
  1994. [INFO][updateCallSite] Successfully updated call site from %23 = call i32 @memoizedFib(i32 %22) to %23 = call %fused_return_calculateDistance_memoizedFib @fused_calculateDistance(i1 true, %struct.Point* null, %struct.Point* null, i32* null, i32 %22)
  1995. [DEBUG][updateCallSite] Original call instruction:
  1996. %20 = call i32 @memoizedFib(i32 %19)
  1997. [DEBUG][updateCallSite] Adding target control parameter
  1998. [DEBUG][updateCallSite] Adding default bunker parameters:
  1999. [DEBUG][updateCallSite] Parameter type: struct.struct.Point*
  2000. [DEBUG][updateCallSite] Parameter type: struct.struct.Point*
  2001. [DEBUG][updateCallSite] Parameter type: i32*
  2002. [DEBUG][updateCallSite] Adding original call parameters:
  2003. [DEBUG][updateCallSite] Argument 0: type=i32
  2004. [DEBUG][updateCallSite] New call instruction:
  2005. %20 = call %fused_return_calculateDistance_memoizedFib @fused_calculateDistance(i1 true, %struct.Point* null, %struct.Point* null, i32* null, i32 %19)
  2006. [DEBUG][updateCallSite] Processing non-void return value of type: i32
  2007. [DEBUG][updateCallSite] Extracting value from struct return type
  2008. [DEBUG][updateCallSite] Extracted value type: i32
  2009. [DEBUG][updateCallSite] Successfully replaced all uses of original call
  2010. [INFO][updateCallSite] Successfully updated call site from %20 = call i32 @memoizedFib(i32 %19) to %20 = call %fused_return_calculateDistance_memoizedFib @fused_calculateDistance(i1 true, %struct.Point* null, %struct.Point* null, i32* null, i32 %19)
  2011. [INFO][performCodeFusion] [After update call site]Generated control flow graph for fused function:
  2012. ```mermaid: fused_calculateDistance
  2013. graph TD
  2014. entry["Block entry:\n %5 = alloca double\n %6 = alloca i32*\n %7 = alloca double\n %8 = alloca double\n %9 = alloca double\n %10 = alloca i32\n %11 = alloca i32\n %12 = xor i1 %0, true\n br label %target_cond_0\n"]
  2015. entry --> target_cond_0
  2016. target_cond_0["Block target_cond_0:\n br i1 %0, label %13, label %target_skip_0\n"]
  2017. target_cond_0 -->|true| 13
  2018. target_cond_0 -->|false| target_skip_0
  2019. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  2020. target_skip_0 --> target_phi_0
  2021. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  2022. target_phi_0 --> bunker_cond_0
  2023. 13["Block 13:\n store i32 %4, i32* %11, align 4\n %14 = load i32, i32* %11, align 4\n %15 = sext i32 %14 to i64\n %16 = getelementptr inbounds [100 x i32], [100 x i32]* @cache, i64 0, i64 %15\n %17 = load i32, i32* %16, align 4\n %18 = icmp ne i32 %17, -1\n br label %target_phi_0\n"]
  2024. 13 --> target_phi_0
  2025. bunker_cond_0["Block bunker_cond_0:\n br i1 %12, label %19, label %bunker_skip_0\n"]
  2026. bunker_cond_0 -->|true| 19
  2027. bunker_cond_0 -->|false| bunker_skip_0
  2028. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  2029. bunker_skip_0 --> bunker_phi_0
  2030. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  2031. bunker_phi_0 --> target_cond_1
  2032. 19["Block 19:\n store i32* %3, i32** %6, align 8\n %20 = load i32*, i32** %6, align 8\n store i32 0, i32* %20, align 4\n %21 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 3\n %22 = load double, double* %21, align 8\n %23 = fcmp ole double %22, 0.000000e+00\n br i1 %23, label %28, label %24\n"]
  2033. 19 -->|true| 28
  2034. 19 -->|false| 24
  2035. 24["Block 24:\n %25 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 3\n %26 = load double, double* %25, align 8\n %27 = fcmp ole double %26, 0.000000e+00\n br i1 %27, label %28, label %30\n"]
  2036. 24 -->|true| 28
  2037. 24 -->|false| 30
  2038. 28["Block 28:\n %29 = load i32*, i32** %6, align 8\n store i32 1, i32* %29, align 4\n call void @setErrorMessage(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.32, i64 0, i64 0))\n store double -1.000000e+00, double* %5, align 8\n br label %112\n"]
  2039. 28 --> 112
  2040. 30["Block 30:\n %31 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 0\n %32 = load i32, i32* %31, align 8\n %33 = call i32 @abs(i32 %32) #7\n %34 = icmp sgt i32 %33, 1000\n br i1 %34, label %50, label %35\n"]
  2041. 30 -->|true| 50
  2042. 30 -->|false| 35
  2043. 35["Block 35:\n %36 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 1\n %37 = load i32, i32* %36, align 4\n %38 = call i32 @abs(i32 %37) #7\n %39 = icmp sgt i32 %38, 1000\n br i1 %39, label %50, label %40\n"]
  2044. 35 -->|true| 50
  2045. 35 -->|false| 40
  2046. 40["Block 40:\n %41 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 0\n %42 = load i32, i32* %41, align 8\n %43 = call i32 @abs(i32 %42) #7\n %44 = icmp sgt i32 %43, 1000\n br i1 %44, label %50, label %45\n"]
  2047. 40 -->|true| 50
  2048. 40 -->|false| 45
  2049. 45["Block 45:\n %46 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 1\n %47 = load i32, i32* %46, align 4\n %48 = call i32 @abs(i32 %47) #7\n %49 = icmp sgt i32 %48, 1000\n br i1 %49, label %50, label %52\n"]
  2050. 45 -->|true| 50
  2051. 45 -->|false| 52
  2052. 50["Block 50:\n %51 = load i32*, i32** %6, align 8\n store i32 3, i32* %51, align 4\n call void @setErrorMessage(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.33, i64 0, i64 0))\n store double -1.000000e+00, double* %5, align 8\n br label %112\n"]
  2053. 50 --> 112
  2054. 52["Block 52:\n %53 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 0\n %54 = load i32, i32* %53, align 8\n %55 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 0\n %56 = load i32, i32* %55, align 8\n %57 = sub nsw i32 %54, %56\n %58 = sitofp i32 %57 to double\n %59 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 3\n %60 = load double, double* %59, align 8\n %61 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 3\n %62 = load double, double* %61, align 8\n %63 = fdiv double %60, %62\n %64 = call double @sqrt(double %63) #8\n %65 = fmul double %58, %64\n store double %65, double* %7, align 8\n %66 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 1\n %67 = load i32, i32* %66, align 4\n %68 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 1\n %69 = load i32, i32* %68, align 4\n %70 = sub nsw i32 %67, %69\n %71 = sitofp i32 %70 to double\n %72 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 3\n %73 = load double, double* %72, align 8\n %74 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 3\n %75 = load double, double* %74, align 8\n %76 = fdiv double %73, %75\n %77 = call double @sqrt(double %76) #8\n %78 = fmul double %71, %77\n store double %78, double* %8, align 8\n %79 = load double, double* %7, align 8\n %80 = call double @llvm.fabs.f64(double %79)\n %81 = fcmp ogt double %80, 1.000000e+03\n br i1 %81, label %86, label %82\n"]
  2055. 52 -->|true| 86
  2056. 52 -->|false| 82
  2057. 82["Block 82:\n %83 = load double, double* %8, align 8\n %84 = call double @llvm.fabs.f64(double %83)\n %85 = fcmp ogt double %84, 1.000000e+03\n br i1 %85, label %86, label %88\n"]
  2058. 82 -->|true| 86
  2059. 82 -->|false| 88
  2060. 86["Block 86:\n %87 = load i32*, i32** %6, align 8\n store i32 5, i32* %87, align 4\n call void @setErrorMessage(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.34, i64 0, i64 0))\n store double -1.000000e+00, double* %5, align 8\n br label %112\n"]
  2061. 86 --> 112
  2062. 88["Block 88:\n %89 = load double, double* %7, align 8\n %90 = load double, double* %7, align 8\n %91 = fmul double %89, %90\n %92 = load double, double* %8, align 8\n %93 = load double, double* %8, align 8\n %94 = fmul double %92, %93\n %95 = fadd double %91, %94\n %96 = call double @sqrt(double %95) #8\n store double %96, double* %9, align 8\n %97 = load double, double* %9, align 8\n %98 = fcmp uno double %97, %97\n br i1 %98, label %108, label %99\n"]
  2063. 88 -->|true| 108
  2064. 88 -->|false| 99
  2065. 99["Block 99:\n %100 = load double, double* %9, align 8\n %101 = call double @llvm.fabs.f64(double %100) #9\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 %108, label %110\n"]
  2066. 99 -->|true| 108
  2067. 99 -->|false| 110
  2068. 108["Block 108:\n %109 = load i32*, i32** %6, align 8\n store i32 8, i32* %109, align 4\n call void @setErrorMessage(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.35, i64 0, i64 0))\n store double -1.000000e+00, double* %5, align 8\n br label %112\n"]
  2069. 108 --> 112
  2070. 110["Block 110:\n %111 = load double, double* %9, align 8\n store double %111, double* %5, align 8\n br label %112\n"]
  2071. 110 --> 112
  2072. 112["Block 112:\n %113 = load double, double* %5, align 8\n %114 = insertvalue %fused_return_calculateDistance_memoizedFib { i32 0, double undef }, double %113, 1\n ret %fused_return_calculateDistance_memoizedFib %114\n"]
  2073. target_cond_1["Block target_cond_1:\n br i1 %0, label %115, label %target_skip_1\n"]
  2074. target_cond_1 -->|true| 115
  2075. target_cond_1 -->|false| target_skip_1
  2076. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  2077. target_skip_1 --> target_phi_1
  2078. target_phi_1["Block target_phi_1:\n"]
  2079. 115["Block 115:\n %116 = load i32, i32* %10, align 4\n %117 = insertvalue %fused_return_calculateDistance_memoizedFib undef, i32 %116, 0\n %118 = insertvalue %fused_return_calculateDistance_memoizedFib %117, double 0.000000e+00, 1\n ret %fused_return_calculateDistance_memoizedFib %118\n"]
  2080. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  2081. ```
  2082. [INFO][performCodeFusion] Fixing blocks without terminators...
  2083. [INFO][performCodeFusion] Added return with default value to block: target_phi_1
  2084. [INFO][performCodeFusion] Starting PHI node repair
  2085. [INFO][performCodeFusion] [After fix PHI]Generated control flow graph for fused function:
  2086. ```mermaid: fused_calculateDistance
  2087. graph TD
  2088. entry["Block entry:\n %5 = alloca double\n %6 = alloca i32*\n %7 = alloca double\n %8 = alloca double\n %9 = alloca double\n %10 = alloca i32\n %11 = alloca i32\n %12 = xor i1 %0, true\n br label %target_cond_0\n"]
  2089. entry --> target_cond_0
  2090. target_cond_0["Block target_cond_0:\n br i1 %0, label %13, label %target_skip_0\n"]
  2091. target_cond_0 -->|true| 13
  2092. target_cond_0 -->|false| target_skip_0
  2093. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  2094. target_skip_0 --> target_phi_0
  2095. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  2096. target_phi_0 --> bunker_cond_0
  2097. 13["Block 13:\n store i32 %4, i32* %11, align 4\n %14 = load i32, i32* %11, align 4\n %15 = sext i32 %14 to i64\n %16 = getelementptr inbounds [100 x i32], [100 x i32]* @cache, i64 0, i64 %15\n %17 = load i32, i32* %16, align 4\n %18 = icmp ne i32 %17, -1\n br label %target_phi_0\n"]
  2098. 13 --> target_phi_0
  2099. bunker_cond_0["Block bunker_cond_0:\n br i1 %12, label %19, label %bunker_skip_0\n"]
  2100. bunker_cond_0 -->|true| 19
  2101. bunker_cond_0 -->|false| bunker_skip_0
  2102. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  2103. bunker_skip_0 --> bunker_phi_0
  2104. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  2105. bunker_phi_0 --> target_cond_1
  2106. 19["Block 19:\n store i32* %3, i32** %6, align 8\n %20 = load i32*, i32** %6, align 8\n store i32 0, i32* %20, align 4\n %21 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 3\n %22 = load double, double* %21, align 8\n %23 = fcmp ole double %22, 0.000000e+00\n br i1 %23, label %28, label %24\n"]
  2107. 19 -->|true| 28
  2108. 19 -->|false| 24
  2109. 24["Block 24:\n %25 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 3\n %26 = load double, double* %25, align 8\n %27 = fcmp ole double %26, 0.000000e+00\n br i1 %27, label %28, label %30\n"]
  2110. 24 -->|true| 28
  2111. 24 -->|false| 30
  2112. 28["Block 28:\n %29 = load i32*, i32** %6, align 8\n store i32 1, i32* %29, align 4\n call void @setErrorMessage(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.32, i64 0, i64 0))\n store double -1.000000e+00, double* %5, align 8\n br label %112\n"]
  2113. 28 --> 112
  2114. 30["Block 30:\n %31 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 0\n %32 = load i32, i32* %31, align 8\n %33 = call i32 @abs(i32 %32) #7\n %34 = icmp sgt i32 %33, 1000\n br i1 %34, label %50, label %35\n"]
  2115. 30 -->|true| 50
  2116. 30 -->|false| 35
  2117. 35["Block 35:\n %36 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 1\n %37 = load i32, i32* %36, align 4\n %38 = call i32 @abs(i32 %37) #7\n %39 = icmp sgt i32 %38, 1000\n br i1 %39, label %50, label %40\n"]
  2118. 35 -->|true| 50
  2119. 35 -->|false| 40
  2120. 40["Block 40:\n %41 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 0\n %42 = load i32, i32* %41, align 8\n %43 = call i32 @abs(i32 %42) #7\n %44 = icmp sgt i32 %43, 1000\n br i1 %44, label %50, label %45\n"]
  2121. 40 -->|true| 50
  2122. 40 -->|false| 45
  2123. 45["Block 45:\n %46 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 1\n %47 = load i32, i32* %46, align 4\n %48 = call i32 @abs(i32 %47) #7\n %49 = icmp sgt i32 %48, 1000\n br i1 %49, label %50, label %52\n"]
  2124. 45 -->|true| 50
  2125. 45 -->|false| 52
  2126. 50["Block 50:\n %51 = load i32*, i32** %6, align 8\n store i32 3, i32* %51, align 4\n call void @setErrorMessage(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.33, i64 0, i64 0))\n store double -1.000000e+00, double* %5, align 8\n br label %112\n"]
  2127. 50 --> 112
  2128. 52["Block 52:\n %53 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 0\n %54 = load i32, i32* %53, align 8\n %55 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 0\n %56 = load i32, i32* %55, align 8\n %57 = sub nsw i32 %54, %56\n %58 = sitofp i32 %57 to double\n %59 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 3\n %60 = load double, double* %59, align 8\n %61 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 3\n %62 = load double, double* %61, align 8\n %63 = fdiv double %60, %62\n %64 = call double @sqrt(double %63) #8\n %65 = fmul double %58, %64\n store double %65, double* %7, align 8\n %66 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 1\n %67 = load i32, i32* %66, align 4\n %68 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 1\n %69 = load i32, i32* %68, align 4\n %70 = sub nsw i32 %67, %69\n %71 = sitofp i32 %70 to double\n %72 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 3\n %73 = load double, double* %72, align 8\n %74 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 3\n %75 = load double, double* %74, align 8\n %76 = fdiv double %73, %75\n %77 = call double @sqrt(double %76) #8\n %78 = fmul double %71, %77\n store double %78, double* %8, align 8\n %79 = load double, double* %7, align 8\n %80 = call double @llvm.fabs.f64(double %79)\n %81 = fcmp ogt double %80, 1.000000e+03\n br i1 %81, label %86, label %82\n"]
  2129. 52 -->|true| 86
  2130. 52 -->|false| 82
  2131. 82["Block 82:\n %83 = load double, double* %8, align 8\n %84 = call double @llvm.fabs.f64(double %83)\n %85 = fcmp ogt double %84, 1.000000e+03\n br i1 %85, label %86, label %88\n"]
  2132. 82 -->|true| 86
  2133. 82 -->|false| 88
  2134. 86["Block 86:\n %87 = load i32*, i32** %6, align 8\n store i32 5, i32* %87, align 4\n call void @setErrorMessage(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.34, i64 0, i64 0))\n store double -1.000000e+00, double* %5, align 8\n br label %112\n"]
  2135. 86 --> 112
  2136. 88["Block 88:\n %89 = load double, double* %7, align 8\n %90 = load double, double* %7, align 8\n %91 = fmul double %89, %90\n %92 = load double, double* %8, align 8\n %93 = load double, double* %8, align 8\n %94 = fmul double %92, %93\n %95 = fadd double %91, %94\n %96 = call double @sqrt(double %95) #8\n store double %96, double* %9, align 8\n %97 = load double, double* %9, align 8\n %98 = fcmp uno double %97, %97\n br i1 %98, label %108, label %99\n"]
  2137. 88 -->|true| 108
  2138. 88 -->|false| 99
  2139. 99["Block 99:\n %100 = load double, double* %9, align 8\n %101 = call double @llvm.fabs.f64(double %100) #9\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 %108, label %110\n"]
  2140. 99 -->|true| 108
  2141. 99 -->|false| 110
  2142. 108["Block 108:\n %109 = load i32*, i32** %6, align 8\n store i32 8, i32* %109, align 4\n call void @setErrorMessage(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.35, i64 0, i64 0))\n store double -1.000000e+00, double* %5, align 8\n br label %112\n"]
  2143. 108 --> 112
  2144. 110["Block 110:\n %111 = load double, double* %9, align 8\n store double %111, double* %5, align 8\n br label %112\n"]
  2145. 110 --> 112
  2146. 112["Block 112:\n %113 = load double, double* %5, align 8\n %114 = insertvalue %fused_return_calculateDistance_memoizedFib { i32 0, double undef }, double %113, 1\n ret %fused_return_calculateDistance_memoizedFib %114\n"]
  2147. target_cond_1["Block target_cond_1:\n br i1 %0, label %115, label %target_skip_1\n"]
  2148. target_cond_1 -->|true| 115
  2149. target_cond_1 -->|false| target_skip_1
  2150. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  2151. target_skip_1 --> target_phi_1
  2152. target_phi_1["Block target_phi_1:\n ret %fused_return_calculateDistance_memoizedFib zeroinitializer\n"]
  2153. 115["Block 115:\n %116 = load i32, i32* %10, align 4\n %117 = insertvalue %fused_return_calculateDistance_memoizedFib undef, i32 %116, 0\n %118 = insertvalue %fused_return_calculateDistance_memoizedFib %117, double 0.000000e+00, 1\n ret %fused_return_calculateDistance_memoizedFib %118\n"]
  2154. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  2155. ```
  2156. [INFO][performCodeFusion] Attempting to delete original functions...
  2157. [INFO][performCodeFusion] [After erase]Generated control flow graph for fused function:
  2158. ```mermaid: fused_calculateDistance
  2159. graph TD
  2160. entry["Block entry:\n %5 = alloca double\n %6 = alloca i32*\n %7 = alloca double\n %8 = alloca double\n %9 = alloca double\n %10 = alloca i32\n %11 = alloca i32\n %12 = xor i1 %0, true\n br label %target_cond_0\n"]
  2161. entry --> target_cond_0
  2162. target_cond_0["Block target_cond_0:\n br i1 %0, label %13, label %target_skip_0\n"]
  2163. target_cond_0 -->|true| 13
  2164. target_cond_0 -->|false| target_skip_0
  2165. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  2166. target_skip_0 --> target_phi_0
  2167. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  2168. target_phi_0 --> bunker_cond_0
  2169. 13["Block 13:\n store i32 %4, i32* %11, align 4\n %14 = load i32, i32* %11, align 4\n %15 = sext i32 %14 to i64\n %16 = getelementptr inbounds [100 x i32], [100 x i32]* @cache, i64 0, i64 %15\n %17 = load i32, i32* %16, align 4\n %18 = icmp ne i32 %17, -1\n br label %target_phi_0\n"]
  2170. 13 --> target_phi_0
  2171. bunker_cond_0["Block bunker_cond_0:\n br i1 %12, label %19, label %bunker_skip_0\n"]
  2172. bunker_cond_0 -->|true| 19
  2173. bunker_cond_0 -->|false| bunker_skip_0
  2174. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  2175. bunker_skip_0 --> bunker_phi_0
  2176. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  2177. bunker_phi_0 --> target_cond_1
  2178. 19["Block 19:\n store i32* %3, i32** %6, align 8\n %20 = load i32*, i32** %6, align 8\n store i32 0, i32* %20, align 4\n %21 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 3\n %22 = load double, double* %21, align 8\n %23 = fcmp ole double %22, 0.000000e+00\n br i1 %23, label %28, label %24\n"]
  2179. 19 -->|true| 28
  2180. 19 -->|false| 24
  2181. 24["Block 24:\n %25 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 3\n %26 = load double, double* %25, align 8\n %27 = fcmp ole double %26, 0.000000e+00\n br i1 %27, label %28, label %30\n"]
  2182. 24 -->|true| 28
  2183. 24 -->|false| 30
  2184. 28["Block 28:\n %29 = load i32*, i32** %6, align 8\n store i32 1, i32* %29, align 4\n call void @setErrorMessage(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.32, i64 0, i64 0))\n store double -1.000000e+00, double* %5, align 8\n br label %112\n"]
  2185. 28 --> 112
  2186. 30["Block 30:\n %31 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 0\n %32 = load i32, i32* %31, align 8\n %33 = call i32 @abs(i32 %32) #7\n %34 = icmp sgt i32 %33, 1000\n br i1 %34, label %50, label %35\n"]
  2187. 30 -->|true| 50
  2188. 30 -->|false| 35
  2189. 35["Block 35:\n %36 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 1\n %37 = load i32, i32* %36, align 4\n %38 = call i32 @abs(i32 %37) #7\n %39 = icmp sgt i32 %38, 1000\n br i1 %39, label %50, label %40\n"]
  2190. 35 -->|true| 50
  2191. 35 -->|false| 40
  2192. 40["Block 40:\n %41 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 0\n %42 = load i32, i32* %41, align 8\n %43 = call i32 @abs(i32 %42) #7\n %44 = icmp sgt i32 %43, 1000\n br i1 %44, label %50, label %45\n"]
  2193. 40 -->|true| 50
  2194. 40 -->|false| 45
  2195. 45["Block 45:\n %46 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 1\n %47 = load i32, i32* %46, align 4\n %48 = call i32 @abs(i32 %47) #7\n %49 = icmp sgt i32 %48, 1000\n br i1 %49, label %50, label %52\n"]
  2196. 45 -->|true| 50
  2197. 45 -->|false| 52
  2198. 50["Block 50:\n %51 = load i32*, i32** %6, align 8\n store i32 3, i32* %51, align 4\n call void @setErrorMessage(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.33, i64 0, i64 0))\n store double -1.000000e+00, double* %5, align 8\n br label %112\n"]
  2199. 50 --> 112
  2200. 52["Block 52:\n %53 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 0\n %54 = load i32, i32* %53, align 8\n %55 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 0\n %56 = load i32, i32* %55, align 8\n %57 = sub nsw i32 %54, %56\n %58 = sitofp i32 %57 to double\n %59 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 3\n %60 = load double, double* %59, align 8\n %61 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 3\n %62 = load double, double* %61, align 8\n %63 = fdiv double %60, %62\n %64 = call double @sqrt(double %63) #8\n %65 = fmul double %58, %64\n store double %65, double* %7, align 8\n %66 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 1\n %67 = load i32, i32* %66, align 4\n %68 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 1\n %69 = load i32, i32* %68, align 4\n %70 = sub nsw i32 %67, %69\n %71 = sitofp i32 %70 to double\n %72 = getelementptr inbounds %struct.Point, %struct.Point* %2, i32 0, i32 3\n %73 = load double, double* %72, align 8\n %74 = getelementptr inbounds %struct.Point, %struct.Point* %1, i32 0, i32 3\n %75 = load double, double* %74, align 8\n %76 = fdiv double %73, %75\n %77 = call double @sqrt(double %76) #8\n %78 = fmul double %71, %77\n store double %78, double* %8, align 8\n %79 = load double, double* %7, align 8\n %80 = call double @llvm.fabs.f64(double %79)\n %81 = fcmp ogt double %80, 1.000000e+03\n br i1 %81, label %86, label %82\n"]
  2201. 52 -->|true| 86
  2202. 52 -->|false| 82
  2203. 82["Block 82:\n %83 = load double, double* %8, align 8\n %84 = call double @llvm.fabs.f64(double %83)\n %85 = fcmp ogt double %84, 1.000000e+03\n br i1 %85, label %86, label %88\n"]
  2204. 82 -->|true| 86
  2205. 82 -->|false| 88
  2206. 86["Block 86:\n %87 = load i32*, i32** %6, align 8\n store i32 5, i32* %87, align 4\n call void @setErrorMessage(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.34, i64 0, i64 0))\n store double -1.000000e+00, double* %5, align 8\n br label %112\n"]
  2207. 86 --> 112
  2208. 88["Block 88:\n %89 = load double, double* %7, align 8\n %90 = load double, double* %7, align 8\n %91 = fmul double %89, %90\n %92 = load double, double* %8, align 8\n %93 = load double, double* %8, align 8\n %94 = fmul double %92, %93\n %95 = fadd double %91, %94\n %96 = call double @sqrt(double %95) #8\n store double %96, double* %9, align 8\n %97 = load double, double* %9, align 8\n %98 = fcmp uno double %97, %97\n br i1 %98, label %108, label %99\n"]
  2209. 88 -->|true| 108
  2210. 88 -->|false| 99
  2211. 99["Block 99:\n %100 = load double, double* %9, align 8\n %101 = call double @llvm.fabs.f64(double %100) #9\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 %108, label %110\n"]
  2212. 99 -->|true| 108
  2213. 99 -->|false| 110
  2214. 108["Block 108:\n %109 = load i32*, i32** %6, align 8\n store i32 8, i32* %109, align 4\n call void @setErrorMessage(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.35, i64 0, i64 0))\n store double -1.000000e+00, double* %5, align 8\n br label %112\n"]
  2215. 108 --> 112
  2216. 110["Block 110:\n %111 = load double, double* %9, align 8\n store double %111, double* %5, align 8\n br label %112\n"]
  2217. 110 --> 112
  2218. 112["Block 112:\n %113 = load double, double* %5, align 8\n %114 = insertvalue %fused_return_calculateDistance_memoizedFib { i32 0, double undef }, double %113, 1\n ret %fused_return_calculateDistance_memoizedFib %114\n"]
  2219. target_cond_1["Block target_cond_1:\n br i1 %0, label %115, label %target_skip_1\n"]
  2220. target_cond_1 -->|true| 115
  2221. target_cond_1 -->|false| target_skip_1
  2222. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  2223. target_skip_1 --> target_phi_1
  2224. target_phi_1["Block target_phi_1:\n ret %fused_return_calculateDistance_memoizedFib zeroinitializer\n"]
  2225. 115["Block 115:\n %116 = load i32, i32* %10, align 4\n %117 = insertvalue %fused_return_calculateDistance_memoizedFib undef, i32 %116, 0\n %118 = insertvalue %fused_return_calculateDistance_memoizedFib %117, double 0.000000e+00, 1\n ret %fused_return_calculateDistance_memoizedFib %118\n"]
  2226. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  2227. ```
  2228. [INFO][performCodeFusion] Completed function fusion: fused_calculateDistance
  2229. [INFO][performCodeFusion] Processing function pair: target=processMatrix, bunker=validateMatrix
  2230. [INFO][performCodeFusion] [After clone]Generated control flow graph for fused function:
  2231. ```mermaid: fused_validateMatrix
  2232. graph TD
  2233. entry["Block entry:\n %4 = alloca i32\n %5 = alloca %struct.Matrix*\n %6 = alloca i32\n %7 = alloca [100 x i32]*\n %8 = alloca i32\n %9 = alloca i32\n %10 = alloca i32\n %11 = alloca i32\n %12 = xor i1 %0, true\n br label %target_cond_0\n"]
  2234. entry --> target_cond_0
  2235. target_cond_0["Block target_cond_0:\n br i1 %0, label %13, label %target_skip_0\n"]
  2236. target_cond_0 -->|true| 13
  2237. target_cond_0 -->|false| target_skip_0
  2238. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  2239. target_skip_0 --> target_phi_0
  2240. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  2241. target_phi_0 --> bunker_cond_0
  2242. 13["Block 13:\n store [100 x i32]* %0, [100 x i32]** %7, align 8\n store i32 %1, i32* %8, align 4\n store i32 0, i32* %9, align 4\n store i32 0, i32* %10, align 4\n br label %target_phi_0\n"]
  2243. 13 --> target_phi_0
  2244. bunker_cond_0["Block bunker_cond_0:\n br i1 %12, label %14, label %bunker_skip_0\n"]
  2245. bunker_cond_0 -->|true| 14
  2246. bunker_cond_0 -->|false| bunker_skip_0
  2247. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  2248. bunker_skip_0 --> bunker_phi_0
  2249. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  2250. bunker_phi_0 --> target_cond_1
  2251. 14["Block 14:\n store %struct.Matrix* %0, %struct.Matrix** %5, align 8\n %15 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %16 = icmp ne %struct.Matrix* %2, null\n br i1 %3, label %5, label %4\n"]
  2252. 14 -->|true| 5
  2253. 14 -->|false| 4
  2254. 17["Block 17:\n call void @setErrorMessage(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.21, i64 0, i64 0))\n store i32 7, i32* %4, align 4\n br label %69\n"]
  2255. 17 --> 69
  2256. 18["Block 18:\n %19 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %20 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %6, i32 0, i32 0\n %21 = load i32**, i32*** %7, align 8\n %22 = icmp ne i32** %8, null\n br i1 %9, label %11, label %10\n"]
  2257. 18 -->|true| 11
  2258. 18 -->|false| 10
  2259. 23["Block 23:\n call void @setErrorMessage(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.45, i64 0, i64 0))\n store i32 7, i32* %4, align 4\n br label %69\n"]
  2260. 23 --> 69
  2261. 24["Block 24:\n %25 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %26 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %12, i32 0, i32 1\n %27 = load i32, i32* %13, align 8\n %28 = icmp slt i32 %14, 1\n br i1 %15, label %21, label %16\n"]
  2262. 24 -->|true| 21
  2263. 24 -->|false| 16
  2264. 29["Block 29:\n %30 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %31 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %17, i32 0, i32 2\n %32 = load i32, i32* %18, align 4\n %33 = icmp slt i32 %19, 1\n br i1 %20, label %21, label %22\n"]
  2265. 29 -->|true| 21
  2266. 29 -->|false| 22
  2267. 34["Block 34:\n call void @setErrorMessage(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.16, i64 0, i64 0))\n store i32 1, i32* %4, align 4\n br label %69\n"]
  2268. 34 --> 69
  2269. 35["Block 35:\n %36 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %37 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %23, i32 0, i32 1\n %38 = load i32, i32* %24, align 8\n %39 = icmp sgt i32 %25, 100\n br i1 %26, label %32, label %27\n"]
  2270. 35 -->|true| 32
  2271. 35 -->|false| 27
  2272. 40["Block 40:\n %41 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %42 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %28, i32 0, i32 2\n %43 = load i32, i32* %29, align 4\n %44 = icmp sgt i32 %30, 100\n br i1 %31, label %32, label %33\n"]
  2273. 40 -->|true| 32
  2274. 40 -->|false| 33
  2275. 45["Block 45:\n call void @setErrorMessage(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.46, i64 0, i64 0))\n store i32 3, i32* %4, align 4\n br label %69\n"]
  2276. 45 --> 69
  2277. 46["Block 46:\n store i32 0, i32* %6, align 4\n br label %34\n"]
  2278. 46 --> 34
  2279. 47["Block 47:\n %48 = load i32, i32* %6, align 4\n %49 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %50 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %36, i32 0, i32 1\n %51 = load i32, i32* %37, align 8\n %52 = icmp slt i32 %35, %38\n br i1 %39, label %40, label %54\n"]
  2280. 47 -->|true| 40
  2281. 47 -->|false| 54
  2282. 53["Block 53:\n %54 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %55 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %41, i32 0, i32 0\n %56 = load i32**, i32*** %42, align 8\n %57 = load i32, i32* %6, align 4\n %58 = sext i32 %44 to i64\n %59 = getelementptr inbounds i32*, i32** %43, i64 %45\n %60 = load i32*, i32** %46, align 8\n %61 = icmp ne i32* %47, null\n br i1 %48, label %50, label %49\n"]
  2283. 53 -->|true| 50
  2284. 53 -->|false| 49
  2285. 62["Block 62:\n call void @setErrorMessage(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.47, i64 0, i64 0))\n store i32 7, i32* %4, align 4\n br label %69\n"]
  2286. 62 --> 69
  2287. 63["Block 63:\n br label %51\n"]
  2288. 63 --> 51
  2289. 64["Block 64:\n %65 = load i32, i32* %6, align 4\n %66 = add nsw i32 %52, 1\n store i32 %53, i32* %6, align 4\n br label %34\n"]
  2290. 64 --> 34
  2291. 67["Block 67:\n %68 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %69 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %55, i32 0, i32 1\n %70 = load i32, i32* %56, align 8\n %71 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %72 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %58, i32 0, i32 2\n %73 = load i32, i32* %59, align 4\n %74 = icmp eq i32 %57, %60\n %75 = zext i1 %61 to i32\n %76 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %77 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %63, i32 0, i32 3\n %78 = load i32, i32* %64, align 8\n %79 = icmp ne i32 %62, %65\n br i1 %66, label %67, label %68\n"]
  2292. 67 -->|true| 67
  2293. 67 -->|false| 68
  2294. 80["Block 80:\n call void @setErrorMessage(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.48, i64 0, i64 0))\n store i32 1, i32* %4, align 4\n br label %69\n"]
  2295. 80 --> 69
  2296. 81["Block 81:\n store i32 0, i32* %4, align 4\n br label %69\n"]
  2297. 81 --> 69
  2298. 82["Block 82:\n %83 = load i32, i32* %4, align 4\n ret i32 %70\n"]
  2299. target_cond_1["Block target_cond_1:\n br i1 %0, label %84, label %target_skip_1\n"]
  2300. target_cond_1 -->|true| 84
  2301. target_cond_1 -->|false| target_skip_1
  2302. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  2303. target_skip_1 --> target_phi_1
  2304. target_phi_1["Block target_phi_1:\n"]
  2305. 84["Block 84:\n store i32 0, i32* %11, align 4\n br label %8\n"]
  2306. 84 --> 8
  2307. 85["Block 85:\n %86 = load i32, i32* %10, align 4\n %87 = load i32, i32* %8, align 4\n %88 = icmp slt i32 %4, %5\n br i1 %6, label %7, label %75\n"]
  2308. 85 -->|true| 7
  2309. 85 -->|false| 75
  2310. 89["Block 89:\n %90 = load i32, i32* %9, align 4\n ret i32 %76\n"]
  2311. 91["Block 91:\n %92 = load i32, i32* %11, align 4\n %93 = load i32, i32* %8, align 4\n %94 = icmp slt i32 %9, %10\n br i1 %11, label %12, label %71\n"]
  2312. 91 -->|true| 12
  2313. 91 -->|false| 71
  2314. 95["Block 95:\n %96 = load i32, i32* %10, align 4\n %97 = load i32, i32* %11, align 4\n %98 = icmp eq i32 %13, %14\n br i1 %15, label %16, label %50\n"]
  2315. 95 -->|true| 16
  2316. 95 -->|false| 50
  2317. 99["Block 99:\n br label %72\n"]
  2318. 99 --> 72
  2319. 100["Block 100:\n %101 = load [100 x i32]*, [100 x i32]** %7, align 8\n %102 = load i32, i32* %10, align 4\n %103 = sext i32 %18 to i64\n %104 = getelementptr inbounds [100 x i32], [100 x i32]* %17, i64 %19\n %105 = load i32, i32* %11, align 4\n %106 = sext i32 %21 to i64\n %107 = getelementptr inbounds [100 x i32], [100 x i32]* %20, i64 0, i64 %22\n %108 = load i32, i32* %23, align 4\n %109 = srem i32 %24, 2\n %110 = icmp eq i32 %25, 0\n br i1 %26, label %27, label %38\n"]
  2320. 100 -->|true| 27
  2321. 100 -->|false| 38
  2322. 111["Block 111:\n %112 = load i32, i32* %10, align 4\n %113 = load i32, i32* %11, align 4\n %114 = icmp slt i32 %51, %52\n br i1 %53, label %54, label %66\n"]
  2323. 111 -->|true| 54
  2324. 111 -->|false| 66
  2325. 115["Block 115:\n %116 = load [100 x i32]*, [100 x i32]** %7, align 8\n %117 = load i32, i32* %10, align 4\n %118 = sext i32 %29 to i64\n %119 = getelementptr inbounds [100 x i32], [100 x i32]* %28, i64 %30\n %120 = load i32, i32* %11, align 4\n %121 = sext i32 %32 to i64\n %122 = getelementptr inbounds [100 x i32], [100 x i32]* %31, i64 0, i64 %33\n %123 = load i32, i32* %34, align 4\n %124 = load i32, i32* %9, align 4\n %125 = add nsw i32 %36, %35\n store i32 %37, i32* %9, align 4\n br label %49\n"]
  2326. 115 --> 49
  2327. 126["Block 126:\n %127 = load [100 x i32]*, [100 x i32]** %7, align 8\n %128 = load i32, i32* %10, align 4\n %129 = sext i32 %40 to i64\n %130 = getelementptr inbounds [100 x i32], [100 x i32]* %39, i64 %41\n %131 = load i32, i32* %11, align 4\n %132 = sext i32 %43 to i64\n %133 = getelementptr inbounds [100 x i32], [100 x i32]* %42, i64 0, i64 %44\n %134 = load i32, i32* %45, align 4\n %135 = load i32, i32* %9, align 4\n %136 = sub nsw i32 %47, %46\n store i32 %48, i32* %9, align 4\n br label %49\n"]
  2328. 126 --> 49
  2329. 137["Block 137:\n br label %67\n"]
  2330. 137 --> 67
  2331. 138["Block 138:\n br label %68\n"]
  2332. 138 --> 68
  2333. 139["Block 139:\n %140 = load [100 x i32]*, [100 x i32]** %7, align 8\n %141 = load i32, i32* %10, align 4\n %142 = sext i32 %56 to i64\n %143 = getelementptr inbounds [100 x i32], [100 x i32]* %55, i64 %57\n %144 = load i32, i32* %11, align 4\n %145 = sext i32 %59 to i64\n %146 = getelementptr inbounds [100 x i32], [100 x i32]* %58, i64 0, i64 %60\n %147 = load i32, i32* %61, align 4\n %148 = call i32 @fused_performSimpleCalculations(i1 true, i32 %62)\n %149 = load i32, i32* %9, align 4\n %150 = add nsw i32 %64, %63\n store i32 %65, i32* %9, align 4\n br label %66\n"]
  2334. 139 --> 66
  2335. 151["Block 151:\n br label %67\n"]
  2336. 151 --> 67
  2337. 152["Block 152:\n %153 = load i32, i32* %11, align 4\n %154 = add nsw i32 %69, 1\n store i32 %70, i32* %11, align 4\n br label %8\n"]
  2338. 152 --> 8
  2339. 155["Block 155:\n %156 = load i32, i32* %10, align 4\n %157 = add nsw i32 %73, 1\n store i32 %74, i32* %10, align 4\n br label %target_phi_1\n"]
  2340. 155 --> target_phi_1
  2341. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  2342. ```
  2343. [INFO][performCodeFusion] Fixing return instruction in block %82
  2344. [INFO][performCodeFusion] Fixing return instruction in block %89
  2345. [WARNING][performCodeFusion] No terminator found in block: target_phi_1
  2346. [INFO][performCodeFusion] [After fix]Generated control flow graph for fused function:
  2347. ```mermaid: fused_validateMatrix
  2348. graph TD
  2349. entry["Block entry:\n %4 = alloca i32\n %5 = alloca %struct.Matrix*\n %6 = alloca i32\n %7 = alloca [100 x i32]*\n %8 = alloca i32\n %9 = alloca i32\n %10 = alloca i32\n %11 = alloca i32\n %12 = xor i1 %0, true\n br label %target_cond_0\n"]
  2350. entry --> target_cond_0
  2351. target_cond_0["Block target_cond_0:\n br i1 %0, label %13, label %target_skip_0\n"]
  2352. target_cond_0 -->|true| 13
  2353. target_cond_0 -->|false| target_skip_0
  2354. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  2355. target_skip_0 --> target_phi_0
  2356. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  2357. target_phi_0 --> bunker_cond_0
  2358. 13["Block 13:\n store [100 x i32]* %2, [100 x i32]** %7, align 8\n store i32 %3, i32* %8, align 4\n store i32 0, i32* %9, align 4\n store i32 0, i32* %10, align 4\n br label %target_phi_0\n"]
  2359. 13 --> target_phi_0
  2360. bunker_cond_0["Block bunker_cond_0:\n br i1 %12, label %14, label %bunker_skip_0\n"]
  2361. bunker_cond_0 -->|true| 14
  2362. bunker_cond_0 -->|false| bunker_skip_0
  2363. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  2364. bunker_skip_0 --> bunker_phi_0
  2365. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  2366. bunker_phi_0 --> target_cond_1
  2367. 14["Block 14:\n store %struct.Matrix* %1, %struct.Matrix** %5, align 8\n %15 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %16 = icmp ne %struct.Matrix* %15, null\n br i1 %16, label %18, label %17\n"]
  2368. 14 -->|true| 18
  2369. 14 -->|false| 17
  2370. 17["Block 17:\n call void @setErrorMessage(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.21, i64 0, i64 0))\n store i32 7, i32* %4, align 4\n br label %82\n"]
  2371. 17 --> 82
  2372. 18["Block 18:\n %19 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %20 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %19, i32 0, i32 0\n %21 = load i32**, i32*** %20, align 8\n %22 = icmp ne i32** %21, null\n br i1 %22, label %24, label %23\n"]
  2373. 18 -->|true| 24
  2374. 18 -->|false| 23
  2375. 23["Block 23:\n call void @setErrorMessage(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.45, i64 0, i64 0))\n store i32 7, i32* %4, align 4\n br label %82\n"]
  2376. 23 --> 82
  2377. 24["Block 24:\n %25 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %26 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %25, i32 0, i32 1\n %27 = load i32, i32* %26, align 8\n %28 = icmp slt i32 %27, 1\n br i1 %28, label %34, label %29\n"]
  2378. 24 -->|true| 34
  2379. 24 -->|false| 29
  2380. 29["Block 29:\n %30 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %31 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %30, i32 0, i32 2\n %32 = load i32, i32* %31, align 4\n %33 = icmp slt i32 %32, 1\n br i1 %33, label %34, label %35\n"]
  2381. 29 -->|true| 34
  2382. 29 -->|false| 35
  2383. 34["Block 34:\n call void @setErrorMessage(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.16, i64 0, i64 0))\n store i32 1, i32* %4, align 4\n br label %82\n"]
  2384. 34 --> 82
  2385. 35["Block 35:\n %36 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %37 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %36, i32 0, i32 1\n %38 = load i32, i32* %37, align 8\n %39 = icmp sgt i32 %38, 100\n br i1 %39, label %45, label %40\n"]
  2386. 35 -->|true| 45
  2387. 35 -->|false| 40
  2388. 40["Block 40:\n %41 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %42 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %41, i32 0, i32 2\n %43 = load i32, i32* %42, align 4\n %44 = icmp sgt i32 %43, 100\n br i1 %44, label %45, label %46\n"]
  2389. 40 -->|true| 45
  2390. 40 -->|false| 46
  2391. 45["Block 45:\n call void @setErrorMessage(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.46, i64 0, i64 0))\n store i32 3, i32* %4, align 4\n br label %82\n"]
  2392. 45 --> 82
  2393. 46["Block 46:\n store i32 0, i32* %6, align 4\n br label %47\n"]
  2394. 46 --> 47
  2395. 47["Block 47:\n %48 = load i32, i32* %6, align 4\n %49 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %50 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %49, i32 0, i32 1\n %51 = load i32, i32* %50, align 8\n %52 = icmp slt i32 %48, %51\n br i1 %52, label %53, label %67\n"]
  2396. 47 -->|true| 53
  2397. 47 -->|false| 67
  2398. 53["Block 53:\n %54 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %55 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %54, i32 0, i32 0\n %56 = load i32**, i32*** %55, align 8\n %57 = load i32, i32* %6, align 4\n %58 = sext i32 %57 to i64\n %59 = getelementptr inbounds i32*, i32** %56, i64 %58\n %60 = load i32*, i32** %59, align 8\n %61 = icmp ne i32* %60, null\n br i1 %61, label %63, label %62\n"]
  2399. 53 -->|true| 63
  2400. 53 -->|false| 62
  2401. 62["Block 62:\n call void @setErrorMessage(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.47, i64 0, i64 0))\n store i32 7, i32* %4, align 4\n br label %82\n"]
  2402. 62 --> 82
  2403. 63["Block 63:\n br label %64\n"]
  2404. 63 --> 64
  2405. 64["Block 64:\n %65 = load i32, i32* %6, align 4\n %66 = add nsw i32 %65, 1\n store i32 %66, i32* %6, align 4\n br label %47\n"]
  2406. 64 --> 47
  2407. 67["Block 67:\n %68 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %69 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %68, i32 0, i32 1\n %70 = load i32, i32* %69, align 8\n %71 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %72 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %71, i32 0, i32 2\n %73 = load i32, i32* %72, align 4\n %74 = icmp eq i32 %70, %73\n %75 = zext i1 %74 to i32\n %76 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %77 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %76, i32 0, i32 3\n %78 = load i32, i32* %77, align 8\n %79 = icmp ne i32 %75, %78\n br i1 %79, label %80, label %81\n"]
  2408. 67 -->|true| 80
  2409. 67 -->|false| 81
  2410. 80["Block 80:\n call void @setErrorMessage(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.48, i64 0, i64 0))\n store i32 1, i32* %4, align 4\n br label %82\n"]
  2411. 80 --> 82
  2412. 81["Block 81:\n store i32 0, i32* %4, align 4\n br label %82\n"]
  2413. 81 --> 82
  2414. 82["Block 82:\n %83 = load i32, i32* %4, align 4\n ret i32 %83\n"]
  2415. target_cond_1["Block target_cond_1:\n br i1 %0, label %84, label %target_skip_1\n"]
  2416. target_cond_1 -->|true| 84
  2417. target_cond_1 -->|false| target_skip_1
  2418. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  2419. target_skip_1 --> target_phi_1
  2420. target_phi_1["Block target_phi_1:\n"]
  2421. 84["Block 84:\n store i32 0, i32* %11, align 4\n br label %91\n"]
  2422. 84 --> 91
  2423. 85["Block 85:\n %86 = load i32, i32* %10, align 4\n %87 = load i32, i32* %8, align 4\n %88 = icmp slt i32 %86, %87\n br i1 %88, label %84, label %89\n"]
  2424. 85 -->|true| 84
  2425. 85 -->|false| 89
  2426. 89["Block 89:\n %90 = load i32, i32* %9, align 4\n ret i32 %90\n"]
  2427. 91["Block 91:\n %92 = load i32, i32* %11, align 4\n %93 = load i32, i32* %8, align 4\n %94 = icmp slt i32 %92, %93\n br i1 %94, label %95, label %99\n"]
  2428. 91 -->|true| 95
  2429. 91 -->|false| 99
  2430. 95["Block 95:\n %96 = load i32, i32* %10, align 4\n %97 = load i32, i32* %11, align 4\n %98 = icmp eq i32 %96, %97\n br i1 %98, label %100, label %111\n"]
  2431. 95 -->|true| 100
  2432. 95 -->|false| 111
  2433. 99["Block 99:\n br label %155\n"]
  2434. 99 --> 155
  2435. 100["Block 100:\n %101 = load [100 x i32]*, [100 x i32]** %7, align 8\n %102 = load i32, i32* %10, align 4\n %103 = sext i32 %102 to i64\n %104 = getelementptr inbounds [100 x i32], [100 x i32]* %101, i64 %103\n %105 = load i32, i32* %11, align 4\n %106 = sext i32 %105 to i64\n %107 = getelementptr inbounds [100 x i32], [100 x i32]* %104, i64 0, i64 %106\n %108 = load i32, i32* %107, align 4\n %109 = srem i32 %108, 2\n %110 = icmp eq i32 %109, 0\n br i1 %110, label %115, label %126\n"]
  2436. 100 -->|true| 115
  2437. 100 -->|false| 126
  2438. 111["Block 111:\n %112 = load i32, i32* %10, align 4\n %113 = load i32, i32* %11, align 4\n %114 = icmp slt i32 %112, %113\n br i1 %114, label %139, label %151\n"]
  2439. 111 -->|true| 139
  2440. 111 -->|false| 151
  2441. 115["Block 115:\n %116 = load [100 x i32]*, [100 x i32]** %7, align 8\n %117 = load i32, i32* %10, align 4\n %118 = sext i32 %117 to i64\n %119 = getelementptr inbounds [100 x i32], [100 x i32]* %116, i64 %118\n %120 = load i32, i32* %11, align 4\n %121 = sext i32 %120 to i64\n %122 = getelementptr inbounds [100 x i32], [100 x i32]* %119, i64 0, i64 %121\n %123 = load i32, i32* %122, align 4\n %124 = load i32, i32* %9, align 4\n %125 = add nsw i32 %124, %123\n store i32 %125, i32* %9, align 4\n br label %137\n"]
  2442. 115 --> 137
  2443. 126["Block 126:\n %127 = load [100 x i32]*, [100 x i32]** %7, align 8\n %128 = load i32, i32* %10, align 4\n %129 = sext i32 %128 to i64\n %130 = getelementptr inbounds [100 x i32], [100 x i32]* %127, i64 %129\n %131 = load i32, i32* %11, align 4\n %132 = sext i32 %131 to i64\n %133 = getelementptr inbounds [100 x i32], [100 x i32]* %130, i64 0, i64 %132\n %134 = load i32, i32* %133, align 4\n %135 = load i32, i32* %9, align 4\n %136 = sub nsw i32 %135, %134\n store i32 %136, i32* %9, align 4\n br label %137\n"]
  2444. 126 --> 137
  2445. 137["Block 137:\n br label %138\n"]
  2446. 137 --> 138
  2447. 138["Block 138:\n br label %152\n"]
  2448. 138 --> 152
  2449. 139["Block 139:\n %140 = load [100 x i32]*, [100 x i32]** %7, align 8\n %141 = load i32, i32* %10, align 4\n %142 = sext i32 %141 to i64\n %143 = getelementptr inbounds [100 x i32], [100 x i32]* %140, i64 %142\n %144 = load i32, i32* %11, align 4\n %145 = sext i32 %144 to i64\n %146 = getelementptr inbounds [100 x i32], [100 x i32]* %143, i64 0, i64 %145\n %147 = load i32, i32* %146, align 4\n %148 = call i32 @fused_performSimpleCalculations(i1 true, i32 %147)\n %149 = load i32, i32* %9, align 4\n %150 = add nsw i32 %149, %148\n store i32 %150, i32* %9, align 4\n br label %151\n"]
  2450. 139 --> 151
  2451. 151["Block 151:\n br label %138\n"]
  2452. 151 --> 138
  2453. 152["Block 152:\n %153 = load i32, i32* %11, align 4\n %154 = add nsw i32 %153, 1\n store i32 %154, i32* %11, align 4\n br label %91\n"]
  2454. 152 --> 91
  2455. 155["Block 155:\n %156 = load i32, i32* %10, align 4\n %157 = add nsw i32 %156, 1\n store i32 %157, i32* %10, align 4\n br label %target_phi_1\n"]
  2456. 155 --> target_phi_1
  2457. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  2458. ```
  2459. [INFO][performCodeFusion] Processing struct return type
  2460. [INFO][performCodeFusion] [After fix return]Generated control flow graph for fused function:
  2461. ```mermaid: fused_validateMatrix
  2462. graph TD
  2463. entry["Block entry:\n %4 = alloca i32\n %5 = alloca %struct.Matrix*\n %6 = alloca i32\n %7 = alloca [100 x i32]*\n %8 = alloca i32\n %9 = alloca i32\n %10 = alloca i32\n %11 = alloca i32\n %12 = xor i1 %0, true\n br label %target_cond_0\n"]
  2464. entry --> target_cond_0
  2465. target_cond_0["Block target_cond_0:\n br i1 %0, label %13, label %target_skip_0\n"]
  2466. target_cond_0 -->|true| 13
  2467. target_cond_0 -->|false| target_skip_0
  2468. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  2469. target_skip_0 --> target_phi_0
  2470. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  2471. target_phi_0 --> bunker_cond_0
  2472. 13["Block 13:\n store [100 x i32]* %2, [100 x i32]** %7, align 8\n store i32 %3, i32* %8, align 4\n store i32 0, i32* %9, align 4\n store i32 0, i32* %10, align 4\n br label %target_phi_0\n"]
  2473. 13 --> target_phi_0
  2474. bunker_cond_0["Block bunker_cond_0:\n br i1 %12, label %14, label %bunker_skip_0\n"]
  2475. bunker_cond_0 -->|true| 14
  2476. bunker_cond_0 -->|false| bunker_skip_0
  2477. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  2478. bunker_skip_0 --> bunker_phi_0
  2479. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  2480. bunker_phi_0 --> target_cond_1
  2481. 14["Block 14:\n store %struct.Matrix* %1, %struct.Matrix** %5, align 8\n %15 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %16 = icmp ne %struct.Matrix* %15, null\n br i1 %16, label %18, label %17\n"]
  2482. 14 -->|true| 18
  2483. 14 -->|false| 17
  2484. 17["Block 17:\n call void @setErrorMessage(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.21, i64 0, i64 0))\n store i32 7, i32* %4, align 4\n br label %82\n"]
  2485. 17 --> 82
  2486. 18["Block 18:\n %19 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %20 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %19, i32 0, i32 0\n %21 = load i32**, i32*** %20, align 8\n %22 = icmp ne i32** %21, null\n br i1 %22, label %24, label %23\n"]
  2487. 18 -->|true| 24
  2488. 18 -->|false| 23
  2489. 23["Block 23:\n call void @setErrorMessage(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.45, i64 0, i64 0))\n store i32 7, i32* %4, align 4\n br label %82\n"]
  2490. 23 --> 82
  2491. 24["Block 24:\n %25 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %26 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %25, i32 0, i32 1\n %27 = load i32, i32* %26, align 8\n %28 = icmp slt i32 %27, 1\n br i1 %28, label %34, label %29\n"]
  2492. 24 -->|true| 34
  2493. 24 -->|false| 29
  2494. 29["Block 29:\n %30 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %31 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %30, i32 0, i32 2\n %32 = load i32, i32* %31, align 4\n %33 = icmp slt i32 %32, 1\n br i1 %33, label %34, label %35\n"]
  2495. 29 -->|true| 34
  2496. 29 -->|false| 35
  2497. 34["Block 34:\n call void @setErrorMessage(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.16, i64 0, i64 0))\n store i32 1, i32* %4, align 4\n br label %82\n"]
  2498. 34 --> 82
  2499. 35["Block 35:\n %36 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %37 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %36, i32 0, i32 1\n %38 = load i32, i32* %37, align 8\n %39 = icmp sgt i32 %38, 100\n br i1 %39, label %45, label %40\n"]
  2500. 35 -->|true| 45
  2501. 35 -->|false| 40
  2502. 40["Block 40:\n %41 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %42 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %41, i32 0, i32 2\n %43 = load i32, i32* %42, align 4\n %44 = icmp sgt i32 %43, 100\n br i1 %44, label %45, label %46\n"]
  2503. 40 -->|true| 45
  2504. 40 -->|false| 46
  2505. 45["Block 45:\n call void @setErrorMessage(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.46, i64 0, i64 0))\n store i32 3, i32* %4, align 4\n br label %82\n"]
  2506. 45 --> 82
  2507. 46["Block 46:\n store i32 0, i32* %6, align 4\n br label %47\n"]
  2508. 46 --> 47
  2509. 47["Block 47:\n %48 = load i32, i32* %6, align 4\n %49 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %50 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %49, i32 0, i32 1\n %51 = load i32, i32* %50, align 8\n %52 = icmp slt i32 %48, %51\n br i1 %52, label %53, label %67\n"]
  2510. 47 -->|true| 53
  2511. 47 -->|false| 67
  2512. 53["Block 53:\n %54 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %55 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %54, i32 0, i32 0\n %56 = load i32**, i32*** %55, align 8\n %57 = load i32, i32* %6, align 4\n %58 = sext i32 %57 to i64\n %59 = getelementptr inbounds i32*, i32** %56, i64 %58\n %60 = load i32*, i32** %59, align 8\n %61 = icmp ne i32* %60, null\n br i1 %61, label %63, label %62\n"]
  2513. 53 -->|true| 63
  2514. 53 -->|false| 62
  2515. 62["Block 62:\n call void @setErrorMessage(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.47, i64 0, i64 0))\n store i32 7, i32* %4, align 4\n br label %82\n"]
  2516. 62 --> 82
  2517. 63["Block 63:\n br label %64\n"]
  2518. 63 --> 64
  2519. 64["Block 64:\n %65 = load i32, i32* %6, align 4\n %66 = add nsw i32 %65, 1\n store i32 %66, i32* %6, align 4\n br label %47\n"]
  2520. 64 --> 47
  2521. 67["Block 67:\n %68 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %69 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %68, i32 0, i32 1\n %70 = load i32, i32* %69, align 8\n %71 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %72 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %71, i32 0, i32 2\n %73 = load i32, i32* %72, align 4\n %74 = icmp eq i32 %70, %73\n %75 = zext i1 %74 to i32\n %76 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %77 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %76, i32 0, i32 3\n %78 = load i32, i32* %77, align 8\n %79 = icmp ne i32 %75, %78\n br i1 %79, label %80, label %81\n"]
  2522. 67 -->|true| 80
  2523. 67 -->|false| 81
  2524. 80["Block 80:\n call void @setErrorMessage(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.48, i64 0, i64 0))\n store i32 1, i32* %4, align 4\n br label %82\n"]
  2525. 80 --> 82
  2526. 81["Block 81:\n store i32 0, i32* %4, align 4\n br label %82\n"]
  2527. 81 --> 82
  2528. 82["Block 82:\n %83 = load i32, i32* %4, align 4\n %84 = insertvalue %fused_return_validateMatrix_processMatrix { i32 0, i32 undef }, i32 %83, 1\n ret %fused_return_validateMatrix_processMatrix %84\n"]
  2529. target_cond_1["Block target_cond_1:\n br i1 %0, label %85, label %target_skip_1\n"]
  2530. target_cond_1 -->|true| 85
  2531. target_cond_1 -->|false| target_skip_1
  2532. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  2533. target_skip_1 --> target_phi_1
  2534. target_phi_1["Block target_phi_1:\n"]
  2535. 85["Block 85:\n store i32 0, i32* %11, align 4\n br label %94\n"]
  2536. 85 --> 94
  2537. 86["Block 86:\n %87 = load i32, i32* %10, align 4\n %88 = load i32, i32* %8, align 4\n %89 = icmp slt i32 %87, %88\n br i1 %89, label %85, label %90\n"]
  2538. 86 -->|true| 85
  2539. 86 -->|false| 90
  2540. 90["Block 90:\n %91 = load i32, i32* %9, align 4\n %92 = insertvalue %fused_return_validateMatrix_processMatrix undef, i32 %91, 0\n %93 = insertvalue %fused_return_validateMatrix_processMatrix %92, i32 0, 1\n ret %fused_return_validateMatrix_processMatrix %93\n"]
  2541. 94["Block 94:\n %95 = load i32, i32* %11, align 4\n %96 = load i32, i32* %8, align 4\n %97 = icmp slt i32 %95, %96\n br i1 %97, label %98, label %102\n"]
  2542. 94 -->|true| 98
  2543. 94 -->|false| 102
  2544. 98["Block 98:\n %99 = load i32, i32* %10, align 4\n %100 = load i32, i32* %11, align 4\n %101 = icmp eq i32 %99, %100\n br i1 %101, label %103, label %114\n"]
  2545. 98 -->|true| 103
  2546. 98 -->|false| 114
  2547. 102["Block 102:\n br label %158\n"]
  2548. 102 --> 158
  2549. 103["Block 103:\n %104 = load [100 x i32]*, [100 x i32]** %7, align 8\n %105 = load i32, i32* %10, align 4\n %106 = sext i32 %105 to i64\n %107 = getelementptr inbounds [100 x i32], [100 x i32]* %104, i64 %106\n %108 = load i32, i32* %11, align 4\n %109 = sext i32 %108 to i64\n %110 = getelementptr inbounds [100 x i32], [100 x i32]* %107, i64 0, i64 %109\n %111 = load i32, i32* %110, align 4\n %112 = srem i32 %111, 2\n %113 = icmp eq i32 %112, 0\n br i1 %113, label %118, label %129\n"]
  2550. 103 -->|true| 118
  2551. 103 -->|false| 129
  2552. 114["Block 114:\n %115 = load i32, i32* %10, align 4\n %116 = load i32, i32* %11, align 4\n %117 = icmp slt i32 %115, %116\n br i1 %117, label %142, label %154\n"]
  2553. 114 -->|true| 142
  2554. 114 -->|false| 154
  2555. 118["Block 118:\n %119 = load [100 x i32]*, [100 x i32]** %7, align 8\n %120 = load i32, i32* %10, align 4\n %121 = sext i32 %120 to i64\n %122 = getelementptr inbounds [100 x i32], [100 x i32]* %119, i64 %121\n %123 = load i32, i32* %11, align 4\n %124 = sext i32 %123 to i64\n %125 = getelementptr inbounds [100 x i32], [100 x i32]* %122, i64 0, i64 %124\n %126 = load i32, i32* %125, align 4\n %127 = load i32, i32* %9, align 4\n %128 = add nsw i32 %127, %126\n store i32 %128, i32* %9, align 4\n br label %140\n"]
  2556. 118 --> 140
  2557. 129["Block 129:\n %130 = load [100 x i32]*, [100 x i32]** %7, align 8\n %131 = load i32, i32* %10, align 4\n %132 = sext i32 %131 to i64\n %133 = getelementptr inbounds [100 x i32], [100 x i32]* %130, i64 %132\n %134 = load i32, i32* %11, align 4\n %135 = sext i32 %134 to i64\n %136 = getelementptr inbounds [100 x i32], [100 x i32]* %133, i64 0, i64 %135\n %137 = load i32, i32* %136, align 4\n %138 = load i32, i32* %9, align 4\n %139 = sub nsw i32 %138, %137\n store i32 %139, i32* %9, align 4\n br label %140\n"]
  2558. 129 --> 140
  2559. 140["Block 140:\n br label %141\n"]
  2560. 140 --> 141
  2561. 141["Block 141:\n br label %155\n"]
  2562. 141 --> 155
  2563. 142["Block 142:\n %143 = load [100 x i32]*, [100 x i32]** %7, align 8\n %144 = load i32, i32* %10, align 4\n %145 = sext i32 %144 to i64\n %146 = getelementptr inbounds [100 x i32], [100 x i32]* %143, i64 %145\n %147 = load i32, i32* %11, align 4\n %148 = sext i32 %147 to i64\n %149 = getelementptr inbounds [100 x i32], [100 x i32]* %146, i64 0, i64 %148\n %150 = load i32, i32* %149, align 4\n %151 = call i32 @fused_performSimpleCalculations(i1 true, i32 %150)\n %152 = load i32, i32* %9, align 4\n %153 = add nsw i32 %152, %151\n store i32 %153, i32* %9, align 4\n br label %154\n"]
  2564. 142 --> 154
  2565. 154["Block 154:\n br label %141\n"]
  2566. 154 --> 141
  2567. 155["Block 155:\n %156 = load i32, i32* %11, align 4\n %157 = add nsw i32 %156, 1\n store i32 %157, i32* %11, align 4\n br label %94\n"]
  2568. 155 --> 94
  2569. 158["Block 158:\n %159 = load i32, i32* %10, align 4\n %160 = add nsw i32 %159, 1\n store i32 %160, i32* %10, align 4\n br label %target_phi_1\n"]
  2570. 158 --> target_phi_1
  2571. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  2572. ```
  2573. [DEBUG][updateCallSite] Original call instruction:
  2574. %14 = call i32 @processMatrix([100 x i32]* %13, i32 3)
  2575. [DEBUG][updateCallSite] Adding target control parameter
  2576. [DEBUG][updateCallSite] Adding default bunker parameters:
  2577. [DEBUG][updateCallSite] Parameter type: struct.struct.Matrix*
  2578. [DEBUG][updateCallSite] Adding original call parameters:
  2579. [DEBUG][updateCallSite] Argument 0: type=[100 x i32]*
  2580. [DEBUG][updateCallSite] Argument 1: type=i32
  2581. [DEBUG][updateCallSite] New call instruction:
  2582. %14 = call %fused_return_validateMatrix_processMatrix @fused_validateMatrix(i1 true, %struct.Matrix* null, [100 x i32]* %13, i32 3)
  2583. [DEBUG][updateCallSite] Processing non-void return value of type: i32
  2584. [DEBUG][updateCallSite] Extracting value from struct return type
  2585. [DEBUG][updateCallSite] Extracted value type: i32
  2586. [DEBUG][updateCallSite] Successfully replaced all uses of original call
  2587. [INFO][updateCallSite] Successfully updated call site from %14 = call i32 @processMatrix([100 x i32]* %13, i32 3) to %14 = call %fused_return_validateMatrix_processMatrix @fused_validateMatrix(i1 true, %struct.Matrix* null, [100 x i32]* %13, i32 3)
  2588. [INFO][performCodeFusion] [After update call site]Generated control flow graph for fused function:
  2589. ```mermaid: fused_validateMatrix
  2590. graph TD
  2591. entry["Block entry:\n %4 = alloca i32\n %5 = alloca %struct.Matrix*\n %6 = alloca i32\n %7 = alloca [100 x i32]*\n %8 = alloca i32\n %9 = alloca i32\n %10 = alloca i32\n %11 = alloca i32\n %12 = xor i1 %0, true\n br label %target_cond_0\n"]
  2592. entry --> target_cond_0
  2593. target_cond_0["Block target_cond_0:\n br i1 %0, label %13, label %target_skip_0\n"]
  2594. target_cond_0 -->|true| 13
  2595. target_cond_0 -->|false| target_skip_0
  2596. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  2597. target_skip_0 --> target_phi_0
  2598. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  2599. target_phi_0 --> bunker_cond_0
  2600. 13["Block 13:\n store [100 x i32]* %2, [100 x i32]** %7, align 8\n store i32 %3, i32* %8, align 4\n store i32 0, i32* %9, align 4\n store i32 0, i32* %10, align 4\n br label %target_phi_0\n"]
  2601. 13 --> target_phi_0
  2602. bunker_cond_0["Block bunker_cond_0:\n br i1 %12, label %14, label %bunker_skip_0\n"]
  2603. bunker_cond_0 -->|true| 14
  2604. bunker_cond_0 -->|false| bunker_skip_0
  2605. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  2606. bunker_skip_0 --> bunker_phi_0
  2607. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  2608. bunker_phi_0 --> target_cond_1
  2609. 14["Block 14:\n store %struct.Matrix* %1, %struct.Matrix** %5, align 8\n %15 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %16 = icmp ne %struct.Matrix* %15, null\n br i1 %16, label %18, label %17\n"]
  2610. 14 -->|true| 18
  2611. 14 -->|false| 17
  2612. 17["Block 17:\n call void @setErrorMessage(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.21, i64 0, i64 0))\n store i32 7, i32* %4, align 4\n br label %82\n"]
  2613. 17 --> 82
  2614. 18["Block 18:\n %19 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %20 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %19, i32 0, i32 0\n %21 = load i32**, i32*** %20, align 8\n %22 = icmp ne i32** %21, null\n br i1 %22, label %24, label %23\n"]
  2615. 18 -->|true| 24
  2616. 18 -->|false| 23
  2617. 23["Block 23:\n call void @setErrorMessage(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.45, i64 0, i64 0))\n store i32 7, i32* %4, align 4\n br label %82\n"]
  2618. 23 --> 82
  2619. 24["Block 24:\n %25 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %26 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %25, i32 0, i32 1\n %27 = load i32, i32* %26, align 8\n %28 = icmp slt i32 %27, 1\n br i1 %28, label %34, label %29\n"]
  2620. 24 -->|true| 34
  2621. 24 -->|false| 29
  2622. 29["Block 29:\n %30 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %31 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %30, i32 0, i32 2\n %32 = load i32, i32* %31, align 4\n %33 = icmp slt i32 %32, 1\n br i1 %33, label %34, label %35\n"]
  2623. 29 -->|true| 34
  2624. 29 -->|false| 35
  2625. 34["Block 34:\n call void @setErrorMessage(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.16, i64 0, i64 0))\n store i32 1, i32* %4, align 4\n br label %82\n"]
  2626. 34 --> 82
  2627. 35["Block 35:\n %36 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %37 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %36, i32 0, i32 1\n %38 = load i32, i32* %37, align 8\n %39 = icmp sgt i32 %38, 100\n br i1 %39, label %45, label %40\n"]
  2628. 35 -->|true| 45
  2629. 35 -->|false| 40
  2630. 40["Block 40:\n %41 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %42 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %41, i32 0, i32 2\n %43 = load i32, i32* %42, align 4\n %44 = icmp sgt i32 %43, 100\n br i1 %44, label %45, label %46\n"]
  2631. 40 -->|true| 45
  2632. 40 -->|false| 46
  2633. 45["Block 45:\n call void @setErrorMessage(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.46, i64 0, i64 0))\n store i32 3, i32* %4, align 4\n br label %82\n"]
  2634. 45 --> 82
  2635. 46["Block 46:\n store i32 0, i32* %6, align 4\n br label %47\n"]
  2636. 46 --> 47
  2637. 47["Block 47:\n %48 = load i32, i32* %6, align 4\n %49 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %50 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %49, i32 0, i32 1\n %51 = load i32, i32* %50, align 8\n %52 = icmp slt i32 %48, %51\n br i1 %52, label %53, label %67\n"]
  2638. 47 -->|true| 53
  2639. 47 -->|false| 67
  2640. 53["Block 53:\n %54 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %55 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %54, i32 0, i32 0\n %56 = load i32**, i32*** %55, align 8\n %57 = load i32, i32* %6, align 4\n %58 = sext i32 %57 to i64\n %59 = getelementptr inbounds i32*, i32** %56, i64 %58\n %60 = load i32*, i32** %59, align 8\n %61 = icmp ne i32* %60, null\n br i1 %61, label %63, label %62\n"]
  2641. 53 -->|true| 63
  2642. 53 -->|false| 62
  2643. 62["Block 62:\n call void @setErrorMessage(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.47, i64 0, i64 0))\n store i32 7, i32* %4, align 4\n br label %82\n"]
  2644. 62 --> 82
  2645. 63["Block 63:\n br label %64\n"]
  2646. 63 --> 64
  2647. 64["Block 64:\n %65 = load i32, i32* %6, align 4\n %66 = add nsw i32 %65, 1\n store i32 %66, i32* %6, align 4\n br label %47\n"]
  2648. 64 --> 47
  2649. 67["Block 67:\n %68 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %69 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %68, i32 0, i32 1\n %70 = load i32, i32* %69, align 8\n %71 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %72 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %71, i32 0, i32 2\n %73 = load i32, i32* %72, align 4\n %74 = icmp eq i32 %70, %73\n %75 = zext i1 %74 to i32\n %76 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %77 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %76, i32 0, i32 3\n %78 = load i32, i32* %77, align 8\n %79 = icmp ne i32 %75, %78\n br i1 %79, label %80, label %81\n"]
  2650. 67 -->|true| 80
  2651. 67 -->|false| 81
  2652. 80["Block 80:\n call void @setErrorMessage(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.48, i64 0, i64 0))\n store i32 1, i32* %4, align 4\n br label %82\n"]
  2653. 80 --> 82
  2654. 81["Block 81:\n store i32 0, i32* %4, align 4\n br label %82\n"]
  2655. 81 --> 82
  2656. 82["Block 82:\n %83 = load i32, i32* %4, align 4\n %84 = insertvalue %fused_return_validateMatrix_processMatrix { i32 0, i32 undef }, i32 %83, 1\n ret %fused_return_validateMatrix_processMatrix %84\n"]
  2657. target_cond_1["Block target_cond_1:\n br i1 %0, label %85, label %target_skip_1\n"]
  2658. target_cond_1 -->|true| 85
  2659. target_cond_1 -->|false| target_skip_1
  2660. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  2661. target_skip_1 --> target_phi_1
  2662. target_phi_1["Block target_phi_1:\n"]
  2663. 85["Block 85:\n store i32 0, i32* %11, align 4\n br label %94\n"]
  2664. 85 --> 94
  2665. 86["Block 86:\n %87 = load i32, i32* %10, align 4\n %88 = load i32, i32* %8, align 4\n %89 = icmp slt i32 %87, %88\n br i1 %89, label %85, label %90\n"]
  2666. 86 -->|true| 85
  2667. 86 -->|false| 90
  2668. 90["Block 90:\n %91 = load i32, i32* %9, align 4\n %92 = insertvalue %fused_return_validateMatrix_processMatrix undef, i32 %91, 0\n %93 = insertvalue %fused_return_validateMatrix_processMatrix %92, i32 0, 1\n ret %fused_return_validateMatrix_processMatrix %93\n"]
  2669. 94["Block 94:\n %95 = load i32, i32* %11, align 4\n %96 = load i32, i32* %8, align 4\n %97 = icmp slt i32 %95, %96\n br i1 %97, label %98, label %102\n"]
  2670. 94 -->|true| 98
  2671. 94 -->|false| 102
  2672. 98["Block 98:\n %99 = load i32, i32* %10, align 4\n %100 = load i32, i32* %11, align 4\n %101 = icmp eq i32 %99, %100\n br i1 %101, label %103, label %114\n"]
  2673. 98 -->|true| 103
  2674. 98 -->|false| 114
  2675. 102["Block 102:\n br label %158\n"]
  2676. 102 --> 158
  2677. 103["Block 103:\n %104 = load [100 x i32]*, [100 x i32]** %7, align 8\n %105 = load i32, i32* %10, align 4\n %106 = sext i32 %105 to i64\n %107 = getelementptr inbounds [100 x i32], [100 x i32]* %104, i64 %106\n %108 = load i32, i32* %11, align 4\n %109 = sext i32 %108 to i64\n %110 = getelementptr inbounds [100 x i32], [100 x i32]* %107, i64 0, i64 %109\n %111 = load i32, i32* %110, align 4\n %112 = srem i32 %111, 2\n %113 = icmp eq i32 %112, 0\n br i1 %113, label %118, label %129\n"]
  2678. 103 -->|true| 118
  2679. 103 -->|false| 129
  2680. 114["Block 114:\n %115 = load i32, i32* %10, align 4\n %116 = load i32, i32* %11, align 4\n %117 = icmp slt i32 %115, %116\n br i1 %117, label %142, label %154\n"]
  2681. 114 -->|true| 142
  2682. 114 -->|false| 154
  2683. 118["Block 118:\n %119 = load [100 x i32]*, [100 x i32]** %7, align 8\n %120 = load i32, i32* %10, align 4\n %121 = sext i32 %120 to i64\n %122 = getelementptr inbounds [100 x i32], [100 x i32]* %119, i64 %121\n %123 = load i32, i32* %11, align 4\n %124 = sext i32 %123 to i64\n %125 = getelementptr inbounds [100 x i32], [100 x i32]* %122, i64 0, i64 %124\n %126 = load i32, i32* %125, align 4\n %127 = load i32, i32* %9, align 4\n %128 = add nsw i32 %127, %126\n store i32 %128, i32* %9, align 4\n br label %140\n"]
  2684. 118 --> 140
  2685. 129["Block 129:\n %130 = load [100 x i32]*, [100 x i32]** %7, align 8\n %131 = load i32, i32* %10, align 4\n %132 = sext i32 %131 to i64\n %133 = getelementptr inbounds [100 x i32], [100 x i32]* %130, i64 %132\n %134 = load i32, i32* %11, align 4\n %135 = sext i32 %134 to i64\n %136 = getelementptr inbounds [100 x i32], [100 x i32]* %133, i64 0, i64 %135\n %137 = load i32, i32* %136, align 4\n %138 = load i32, i32* %9, align 4\n %139 = sub nsw i32 %138, %137\n store i32 %139, i32* %9, align 4\n br label %140\n"]
  2686. 129 --> 140
  2687. 140["Block 140:\n br label %141\n"]
  2688. 140 --> 141
  2689. 141["Block 141:\n br label %155\n"]
  2690. 141 --> 155
  2691. 142["Block 142:\n %143 = load [100 x i32]*, [100 x i32]** %7, align 8\n %144 = load i32, i32* %10, align 4\n %145 = sext i32 %144 to i64\n %146 = getelementptr inbounds [100 x i32], [100 x i32]* %143, i64 %145\n %147 = load i32, i32* %11, align 4\n %148 = sext i32 %147 to i64\n %149 = getelementptr inbounds [100 x i32], [100 x i32]* %146, i64 0, i64 %148\n %150 = load i32, i32* %149, align 4\n %151 = call i32 @fused_performSimpleCalculations(i1 true, i32 %150)\n %152 = load i32, i32* %9, align 4\n %153 = add nsw i32 %152, %151\n store i32 %153, i32* %9, align 4\n br label %154\n"]
  2692. 142 --> 154
  2693. 154["Block 154:\n br label %141\n"]
  2694. 154 --> 141
  2695. 155["Block 155:\n %156 = load i32, i32* %11, align 4\n %157 = add nsw i32 %156, 1\n store i32 %157, i32* %11, align 4\n br label %94\n"]
  2696. 155 --> 94
  2697. 158["Block 158:\n %159 = load i32, i32* %10, align 4\n %160 = add nsw i32 %159, 1\n store i32 %160, i32* %10, align 4\n br label %target_phi_1\n"]
  2698. 158 --> target_phi_1
  2699. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  2700. ```
  2701. [INFO][performCodeFusion] Fixing blocks without terminators...
  2702. [INFO][performCodeFusion] Added return with default value to block: target_phi_1
  2703. [INFO][performCodeFusion] Starting PHI node repair
  2704. [INFO][performCodeFusion] [After fix PHI]Generated control flow graph for fused function:
  2705. ```mermaid: fused_validateMatrix
  2706. graph TD
  2707. entry["Block entry:\n %4 = alloca i32\n %5 = alloca %struct.Matrix*\n %6 = alloca i32\n %7 = alloca [100 x i32]*\n %8 = alloca i32\n %9 = alloca i32\n %10 = alloca i32\n %11 = alloca i32\n %12 = xor i1 %0, true\n br label %target_cond_0\n"]
  2708. entry --> target_cond_0
  2709. target_cond_0["Block target_cond_0:\n br i1 %0, label %13, label %target_skip_0\n"]
  2710. target_cond_0 -->|true| 13
  2711. target_cond_0 -->|false| target_skip_0
  2712. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  2713. target_skip_0 --> target_phi_0
  2714. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  2715. target_phi_0 --> bunker_cond_0
  2716. 13["Block 13:\n store [100 x i32]* %2, [100 x i32]** %7, align 8\n store i32 %3, i32* %8, align 4\n store i32 0, i32* %9, align 4\n store i32 0, i32* %10, align 4\n br label %target_phi_0\n"]
  2717. 13 --> target_phi_0
  2718. bunker_cond_0["Block bunker_cond_0:\n br i1 %12, label %14, label %bunker_skip_0\n"]
  2719. bunker_cond_0 -->|true| 14
  2720. bunker_cond_0 -->|false| bunker_skip_0
  2721. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  2722. bunker_skip_0 --> bunker_phi_0
  2723. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  2724. bunker_phi_0 --> target_cond_1
  2725. 14["Block 14:\n store %struct.Matrix* %1, %struct.Matrix** %5, align 8\n %15 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %16 = icmp ne %struct.Matrix* %15, null\n br i1 %16, label %18, label %17\n"]
  2726. 14 -->|true| 18
  2727. 14 -->|false| 17
  2728. 17["Block 17:\n call void @setErrorMessage(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.21, i64 0, i64 0))\n store i32 7, i32* %4, align 4\n br label %82\n"]
  2729. 17 --> 82
  2730. 18["Block 18:\n %19 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %20 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %19, i32 0, i32 0\n %21 = load i32**, i32*** %20, align 8\n %22 = icmp ne i32** %21, null\n br i1 %22, label %24, label %23\n"]
  2731. 18 -->|true| 24
  2732. 18 -->|false| 23
  2733. 23["Block 23:\n call void @setErrorMessage(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.45, i64 0, i64 0))\n store i32 7, i32* %4, align 4\n br label %82\n"]
  2734. 23 --> 82
  2735. 24["Block 24:\n %25 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %26 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %25, i32 0, i32 1\n %27 = load i32, i32* %26, align 8\n %28 = icmp slt i32 %27, 1\n br i1 %28, label %34, label %29\n"]
  2736. 24 -->|true| 34
  2737. 24 -->|false| 29
  2738. 29["Block 29:\n %30 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %31 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %30, i32 0, i32 2\n %32 = load i32, i32* %31, align 4\n %33 = icmp slt i32 %32, 1\n br i1 %33, label %34, label %35\n"]
  2739. 29 -->|true| 34
  2740. 29 -->|false| 35
  2741. 34["Block 34:\n call void @setErrorMessage(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.16, i64 0, i64 0))\n store i32 1, i32* %4, align 4\n br label %82\n"]
  2742. 34 --> 82
  2743. 35["Block 35:\n %36 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %37 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %36, i32 0, i32 1\n %38 = load i32, i32* %37, align 8\n %39 = icmp sgt i32 %38, 100\n br i1 %39, label %45, label %40\n"]
  2744. 35 -->|true| 45
  2745. 35 -->|false| 40
  2746. 40["Block 40:\n %41 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %42 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %41, i32 0, i32 2\n %43 = load i32, i32* %42, align 4\n %44 = icmp sgt i32 %43, 100\n br i1 %44, label %45, label %46\n"]
  2747. 40 -->|true| 45
  2748. 40 -->|false| 46
  2749. 45["Block 45:\n call void @setErrorMessage(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.46, i64 0, i64 0))\n store i32 3, i32* %4, align 4\n br label %82\n"]
  2750. 45 --> 82
  2751. 46["Block 46:\n store i32 0, i32* %6, align 4\n br label %47\n"]
  2752. 46 --> 47
  2753. 47["Block 47:\n %48 = load i32, i32* %6, align 4\n %49 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %50 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %49, i32 0, i32 1\n %51 = load i32, i32* %50, align 8\n %52 = icmp slt i32 %48, %51\n br i1 %52, label %53, label %67\n"]
  2754. 47 -->|true| 53
  2755. 47 -->|false| 67
  2756. 53["Block 53:\n %54 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %55 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %54, i32 0, i32 0\n %56 = load i32**, i32*** %55, align 8\n %57 = load i32, i32* %6, align 4\n %58 = sext i32 %57 to i64\n %59 = getelementptr inbounds i32*, i32** %56, i64 %58\n %60 = load i32*, i32** %59, align 8\n %61 = icmp ne i32* %60, null\n br i1 %61, label %63, label %62\n"]
  2757. 53 -->|true| 63
  2758. 53 -->|false| 62
  2759. 62["Block 62:\n call void @setErrorMessage(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.47, i64 0, i64 0))\n store i32 7, i32* %4, align 4\n br label %82\n"]
  2760. 62 --> 82
  2761. 63["Block 63:\n br label %64\n"]
  2762. 63 --> 64
  2763. 64["Block 64:\n %65 = load i32, i32* %6, align 4\n %66 = add nsw i32 %65, 1\n store i32 %66, i32* %6, align 4\n br label %47\n"]
  2764. 64 --> 47
  2765. 67["Block 67:\n %68 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %69 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %68, i32 0, i32 1\n %70 = load i32, i32* %69, align 8\n %71 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %72 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %71, i32 0, i32 2\n %73 = load i32, i32* %72, align 4\n %74 = icmp eq i32 %70, %73\n %75 = zext i1 %74 to i32\n %76 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %77 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %76, i32 0, i32 3\n %78 = load i32, i32* %77, align 8\n %79 = icmp ne i32 %75, %78\n br i1 %79, label %80, label %81\n"]
  2766. 67 -->|true| 80
  2767. 67 -->|false| 81
  2768. 80["Block 80:\n call void @setErrorMessage(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.48, i64 0, i64 0))\n store i32 1, i32* %4, align 4\n br label %82\n"]
  2769. 80 --> 82
  2770. 81["Block 81:\n store i32 0, i32* %4, align 4\n br label %82\n"]
  2771. 81 --> 82
  2772. 82["Block 82:\n %83 = load i32, i32* %4, align 4\n %84 = insertvalue %fused_return_validateMatrix_processMatrix { i32 0, i32 undef }, i32 %83, 1\n ret %fused_return_validateMatrix_processMatrix %84\n"]
  2773. target_cond_1["Block target_cond_1:\n br i1 %0, label %85, label %target_skip_1\n"]
  2774. target_cond_1 -->|true| 85
  2775. target_cond_1 -->|false| target_skip_1
  2776. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  2777. target_skip_1 --> target_phi_1
  2778. target_phi_1["Block target_phi_1:\n ret %fused_return_validateMatrix_processMatrix zeroinitializer\n"]
  2779. 85["Block 85:\n store i32 0, i32* %11, align 4\n br label %94\n"]
  2780. 85 --> 94
  2781. 86["Block 86:\n %87 = load i32, i32* %10, align 4\n %88 = load i32, i32* %8, align 4\n %89 = icmp slt i32 %87, %88\n br i1 %89, label %85, label %90\n"]
  2782. 86 -->|true| 85
  2783. 86 -->|false| 90
  2784. 90["Block 90:\n %91 = load i32, i32* %9, align 4\n %92 = insertvalue %fused_return_validateMatrix_processMatrix undef, i32 %91, 0\n %93 = insertvalue %fused_return_validateMatrix_processMatrix %92, i32 0, 1\n ret %fused_return_validateMatrix_processMatrix %93\n"]
  2785. 94["Block 94:\n %95 = load i32, i32* %11, align 4\n %96 = load i32, i32* %8, align 4\n %97 = icmp slt i32 %95, %96\n br i1 %97, label %98, label %102\n"]
  2786. 94 -->|true| 98
  2787. 94 -->|false| 102
  2788. 98["Block 98:\n %99 = load i32, i32* %10, align 4\n %100 = load i32, i32* %11, align 4\n %101 = icmp eq i32 %99, %100\n br i1 %101, label %103, label %114\n"]
  2789. 98 -->|true| 103
  2790. 98 -->|false| 114
  2791. 102["Block 102:\n br label %158\n"]
  2792. 102 --> 158
  2793. 103["Block 103:\n %104 = load [100 x i32]*, [100 x i32]** %7, align 8\n %105 = load i32, i32* %10, align 4\n %106 = sext i32 %105 to i64\n %107 = getelementptr inbounds [100 x i32], [100 x i32]* %104, i64 %106\n %108 = load i32, i32* %11, align 4\n %109 = sext i32 %108 to i64\n %110 = getelementptr inbounds [100 x i32], [100 x i32]* %107, i64 0, i64 %109\n %111 = load i32, i32* %110, align 4\n %112 = srem i32 %111, 2\n %113 = icmp eq i32 %112, 0\n br i1 %113, label %118, label %129\n"]
  2794. 103 -->|true| 118
  2795. 103 -->|false| 129
  2796. 114["Block 114:\n %115 = load i32, i32* %10, align 4\n %116 = load i32, i32* %11, align 4\n %117 = icmp slt i32 %115, %116\n br i1 %117, label %142, label %154\n"]
  2797. 114 -->|true| 142
  2798. 114 -->|false| 154
  2799. 118["Block 118:\n %119 = load [100 x i32]*, [100 x i32]** %7, align 8\n %120 = load i32, i32* %10, align 4\n %121 = sext i32 %120 to i64\n %122 = getelementptr inbounds [100 x i32], [100 x i32]* %119, i64 %121\n %123 = load i32, i32* %11, align 4\n %124 = sext i32 %123 to i64\n %125 = getelementptr inbounds [100 x i32], [100 x i32]* %122, i64 0, i64 %124\n %126 = load i32, i32* %125, align 4\n %127 = load i32, i32* %9, align 4\n %128 = add nsw i32 %127, %126\n store i32 %128, i32* %9, align 4\n br label %140\n"]
  2800. 118 --> 140
  2801. 129["Block 129:\n %130 = load [100 x i32]*, [100 x i32]** %7, align 8\n %131 = load i32, i32* %10, align 4\n %132 = sext i32 %131 to i64\n %133 = getelementptr inbounds [100 x i32], [100 x i32]* %130, i64 %132\n %134 = load i32, i32* %11, align 4\n %135 = sext i32 %134 to i64\n %136 = getelementptr inbounds [100 x i32], [100 x i32]* %133, i64 0, i64 %135\n %137 = load i32, i32* %136, align 4\n %138 = load i32, i32* %9, align 4\n %139 = sub nsw i32 %138, %137\n store i32 %139, i32* %9, align 4\n br label %140\n"]
  2802. 129 --> 140
  2803. 140["Block 140:\n br label %141\n"]
  2804. 140 --> 141
  2805. 141["Block 141:\n br label %155\n"]
  2806. 141 --> 155
  2807. 142["Block 142:\n %143 = load [100 x i32]*, [100 x i32]** %7, align 8\n %144 = load i32, i32* %10, align 4\n %145 = sext i32 %144 to i64\n %146 = getelementptr inbounds [100 x i32], [100 x i32]* %143, i64 %145\n %147 = load i32, i32* %11, align 4\n %148 = sext i32 %147 to i64\n %149 = getelementptr inbounds [100 x i32], [100 x i32]* %146, i64 0, i64 %148\n %150 = load i32, i32* %149, align 4\n %151 = call i32 @fused_performSimpleCalculations(i1 true, i32 %150)\n %152 = load i32, i32* %9, align 4\n %153 = add nsw i32 %152, %151\n store i32 %153, i32* %9, align 4\n br label %154\n"]
  2808. 142 --> 154
  2809. 154["Block 154:\n br label %141\n"]
  2810. 154 --> 141
  2811. 155["Block 155:\n %156 = load i32, i32* %11, align 4\n %157 = add nsw i32 %156, 1\n store i32 %157, i32* %11, align 4\n br label %94\n"]
  2812. 155 --> 94
  2813. 158["Block 158:\n %159 = load i32, i32* %10, align 4\n %160 = add nsw i32 %159, 1\n store i32 %160, i32* %10, align 4\n br label %target_phi_1\n"]
  2814. 158 --> target_phi_1
  2815. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  2816. ```
  2817. [INFO][performCodeFusion] Attempting to delete original functions...
  2818. [INFO][performCodeFusion] [After erase]Generated control flow graph for fused function:
  2819. ```mermaid: fused_validateMatrix
  2820. graph TD
  2821. entry["Block entry:\n %4 = alloca i32\n %5 = alloca %struct.Matrix*\n %6 = alloca i32\n %7 = alloca [100 x i32]*\n %8 = alloca i32\n %9 = alloca i32\n %10 = alloca i32\n %11 = alloca i32\n %12 = xor i1 %0, true\n br label %target_cond_0\n"]
  2822. entry --> target_cond_0
  2823. target_cond_0["Block target_cond_0:\n br i1 %0, label %13, label %target_skip_0\n"]
  2824. target_cond_0 -->|true| 13
  2825. target_cond_0 -->|false| target_skip_0
  2826. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  2827. target_skip_0 --> target_phi_0
  2828. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  2829. target_phi_0 --> bunker_cond_0
  2830. 13["Block 13:\n store [100 x i32]* %2, [100 x i32]** %7, align 8\n store i32 %3, i32* %8, align 4\n store i32 0, i32* %9, align 4\n store i32 0, i32* %10, align 4\n br label %target_phi_0\n"]
  2831. 13 --> target_phi_0
  2832. bunker_cond_0["Block bunker_cond_0:\n br i1 %12, label %14, label %bunker_skip_0\n"]
  2833. bunker_cond_0 -->|true| 14
  2834. bunker_cond_0 -->|false| bunker_skip_0
  2835. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  2836. bunker_skip_0 --> bunker_phi_0
  2837. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  2838. bunker_phi_0 --> target_cond_1
  2839. 14["Block 14:\n store %struct.Matrix* %1, %struct.Matrix** %5, align 8\n %15 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %16 = icmp ne %struct.Matrix* %15, null\n br i1 %16, label %18, label %17\n"]
  2840. 14 -->|true| 18
  2841. 14 -->|false| 17
  2842. 17["Block 17:\n call void @setErrorMessage(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.21, i64 0, i64 0))\n store i32 7, i32* %4, align 4\n br label %82\n"]
  2843. 17 --> 82
  2844. 18["Block 18:\n %19 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %20 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %19, i32 0, i32 0\n %21 = load i32**, i32*** %20, align 8\n %22 = icmp ne i32** %21, null\n br i1 %22, label %24, label %23\n"]
  2845. 18 -->|true| 24
  2846. 18 -->|false| 23
  2847. 23["Block 23:\n call void @setErrorMessage(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.45, i64 0, i64 0))\n store i32 7, i32* %4, align 4\n br label %82\n"]
  2848. 23 --> 82
  2849. 24["Block 24:\n %25 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %26 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %25, i32 0, i32 1\n %27 = load i32, i32* %26, align 8\n %28 = icmp slt i32 %27, 1\n br i1 %28, label %34, label %29\n"]
  2850. 24 -->|true| 34
  2851. 24 -->|false| 29
  2852. 29["Block 29:\n %30 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %31 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %30, i32 0, i32 2\n %32 = load i32, i32* %31, align 4\n %33 = icmp slt i32 %32, 1\n br i1 %33, label %34, label %35\n"]
  2853. 29 -->|true| 34
  2854. 29 -->|false| 35
  2855. 34["Block 34:\n call void @setErrorMessage(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.16, i64 0, i64 0))\n store i32 1, i32* %4, align 4\n br label %82\n"]
  2856. 34 --> 82
  2857. 35["Block 35:\n %36 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %37 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %36, i32 0, i32 1\n %38 = load i32, i32* %37, align 8\n %39 = icmp sgt i32 %38, 100\n br i1 %39, label %45, label %40\n"]
  2858. 35 -->|true| 45
  2859. 35 -->|false| 40
  2860. 40["Block 40:\n %41 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %42 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %41, i32 0, i32 2\n %43 = load i32, i32* %42, align 4\n %44 = icmp sgt i32 %43, 100\n br i1 %44, label %45, label %46\n"]
  2861. 40 -->|true| 45
  2862. 40 -->|false| 46
  2863. 45["Block 45:\n call void @setErrorMessage(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.46, i64 0, i64 0))\n store i32 3, i32* %4, align 4\n br label %82\n"]
  2864. 45 --> 82
  2865. 46["Block 46:\n store i32 0, i32* %6, align 4\n br label %47\n"]
  2866. 46 --> 47
  2867. 47["Block 47:\n %48 = load i32, i32* %6, align 4\n %49 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %50 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %49, i32 0, i32 1\n %51 = load i32, i32* %50, align 8\n %52 = icmp slt i32 %48, %51\n br i1 %52, label %53, label %67\n"]
  2868. 47 -->|true| 53
  2869. 47 -->|false| 67
  2870. 53["Block 53:\n %54 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %55 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %54, i32 0, i32 0\n %56 = load i32**, i32*** %55, align 8\n %57 = load i32, i32* %6, align 4\n %58 = sext i32 %57 to i64\n %59 = getelementptr inbounds i32*, i32** %56, i64 %58\n %60 = load i32*, i32** %59, align 8\n %61 = icmp ne i32* %60, null\n br i1 %61, label %63, label %62\n"]
  2871. 53 -->|true| 63
  2872. 53 -->|false| 62
  2873. 62["Block 62:\n call void @setErrorMessage(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.47, i64 0, i64 0))\n store i32 7, i32* %4, align 4\n br label %82\n"]
  2874. 62 --> 82
  2875. 63["Block 63:\n br label %64\n"]
  2876. 63 --> 64
  2877. 64["Block 64:\n %65 = load i32, i32* %6, align 4\n %66 = add nsw i32 %65, 1\n store i32 %66, i32* %6, align 4\n br label %47\n"]
  2878. 64 --> 47
  2879. 67["Block 67:\n %68 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %69 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %68, i32 0, i32 1\n %70 = load i32, i32* %69, align 8\n %71 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %72 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %71, i32 0, i32 2\n %73 = load i32, i32* %72, align 4\n %74 = icmp eq i32 %70, %73\n %75 = zext i1 %74 to i32\n %76 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %77 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %76, i32 0, i32 3\n %78 = load i32, i32* %77, align 8\n %79 = icmp ne i32 %75, %78\n br i1 %79, label %80, label %81\n"]
  2880. 67 -->|true| 80
  2881. 67 -->|false| 81
  2882. 80["Block 80:\n call void @setErrorMessage(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.48, i64 0, i64 0))\n store i32 1, i32* %4, align 4\n br label %82\n"]
  2883. 80 --> 82
  2884. 81["Block 81:\n store i32 0, i32* %4, align 4\n br label %82\n"]
  2885. 81 --> 82
  2886. 82["Block 82:\n %83 = load i32, i32* %4, align 4\n %84 = insertvalue %fused_return_validateMatrix_processMatrix { i32 0, i32 undef }, i32 %83, 1\n ret %fused_return_validateMatrix_processMatrix %84\n"]
  2887. target_cond_1["Block target_cond_1:\n br i1 %0, label %85, label %target_skip_1\n"]
  2888. target_cond_1 -->|true| 85
  2889. target_cond_1 -->|false| target_skip_1
  2890. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  2891. target_skip_1 --> target_phi_1
  2892. target_phi_1["Block target_phi_1:\n ret %fused_return_validateMatrix_processMatrix zeroinitializer\n"]
  2893. 85["Block 85:\n store i32 0, i32* %11, align 4\n br label %94\n"]
  2894. 85 --> 94
  2895. 86["Block 86:\n %87 = load i32, i32* %10, align 4\n %88 = load i32, i32* %8, align 4\n %89 = icmp slt i32 %87, %88\n br i1 %89, label %85, label %90\n"]
  2896. 86 -->|true| 85
  2897. 86 -->|false| 90
  2898. 90["Block 90:\n %91 = load i32, i32* %9, align 4\n %92 = insertvalue %fused_return_validateMatrix_processMatrix undef, i32 %91, 0\n %93 = insertvalue %fused_return_validateMatrix_processMatrix %92, i32 0, 1\n ret %fused_return_validateMatrix_processMatrix %93\n"]
  2899. 94["Block 94:\n %95 = load i32, i32* %11, align 4\n %96 = load i32, i32* %8, align 4\n %97 = icmp slt i32 %95, %96\n br i1 %97, label %98, label %102\n"]
  2900. 94 -->|true| 98
  2901. 94 -->|false| 102
  2902. 98["Block 98:\n %99 = load i32, i32* %10, align 4\n %100 = load i32, i32* %11, align 4\n %101 = icmp eq i32 %99, %100\n br i1 %101, label %103, label %114\n"]
  2903. 98 -->|true| 103
  2904. 98 -->|false| 114
  2905. 102["Block 102:\n br label %158\n"]
  2906. 102 --> 158
  2907. 103["Block 103:\n %104 = load [100 x i32]*, [100 x i32]** %7, align 8\n %105 = load i32, i32* %10, align 4\n %106 = sext i32 %105 to i64\n %107 = getelementptr inbounds [100 x i32], [100 x i32]* %104, i64 %106\n %108 = load i32, i32* %11, align 4\n %109 = sext i32 %108 to i64\n %110 = getelementptr inbounds [100 x i32], [100 x i32]* %107, i64 0, i64 %109\n %111 = load i32, i32* %110, align 4\n %112 = srem i32 %111, 2\n %113 = icmp eq i32 %112, 0\n br i1 %113, label %118, label %129\n"]
  2908. 103 -->|true| 118
  2909. 103 -->|false| 129
  2910. 114["Block 114:\n %115 = load i32, i32* %10, align 4\n %116 = load i32, i32* %11, align 4\n %117 = icmp slt i32 %115, %116\n br i1 %117, label %142, label %154\n"]
  2911. 114 -->|true| 142
  2912. 114 -->|false| 154
  2913. 118["Block 118:\n %119 = load [100 x i32]*, [100 x i32]** %7, align 8\n %120 = load i32, i32* %10, align 4\n %121 = sext i32 %120 to i64\n %122 = getelementptr inbounds [100 x i32], [100 x i32]* %119, i64 %121\n %123 = load i32, i32* %11, align 4\n %124 = sext i32 %123 to i64\n %125 = getelementptr inbounds [100 x i32], [100 x i32]* %122, i64 0, i64 %124\n %126 = load i32, i32* %125, align 4\n %127 = load i32, i32* %9, align 4\n %128 = add nsw i32 %127, %126\n store i32 %128, i32* %9, align 4\n br label %140\n"]
  2914. 118 --> 140
  2915. 129["Block 129:\n %130 = load [100 x i32]*, [100 x i32]** %7, align 8\n %131 = load i32, i32* %10, align 4\n %132 = sext i32 %131 to i64\n %133 = getelementptr inbounds [100 x i32], [100 x i32]* %130, i64 %132\n %134 = load i32, i32* %11, align 4\n %135 = sext i32 %134 to i64\n %136 = getelementptr inbounds [100 x i32], [100 x i32]* %133, i64 0, i64 %135\n %137 = load i32, i32* %136, align 4\n %138 = load i32, i32* %9, align 4\n %139 = sub nsw i32 %138, %137\n store i32 %139, i32* %9, align 4\n br label %140\n"]
  2916. 129 --> 140
  2917. 140["Block 140:\n br label %141\n"]
  2918. 140 --> 141
  2919. 141["Block 141:\n br label %155\n"]
  2920. 141 --> 155
  2921. 142["Block 142:\n %143 = load [100 x i32]*, [100 x i32]** %7, align 8\n %144 = load i32, i32* %10, align 4\n %145 = sext i32 %144 to i64\n %146 = getelementptr inbounds [100 x i32], [100 x i32]* %143, i64 %145\n %147 = load i32, i32* %11, align 4\n %148 = sext i32 %147 to i64\n %149 = getelementptr inbounds [100 x i32], [100 x i32]* %146, i64 0, i64 %148\n %150 = load i32, i32* %149, align 4\n %151 = call i32 @fused_performSimpleCalculations(i1 true, i32 %150)\n %152 = load i32, i32* %9, align 4\n %153 = add nsw i32 %152, %151\n store i32 %153, i32* %9, align 4\n br label %154\n"]
  2922. 142 --> 154
  2923. 154["Block 154:\n br label %141\n"]
  2924. 154 --> 141
  2925. 155["Block 155:\n %156 = load i32, i32* %11, align 4\n %157 = add nsw i32 %156, 1\n store i32 %157, i32* %11, align 4\n br label %94\n"]
  2926. 155 --> 94
  2927. 158["Block 158:\n %159 = load i32, i32* %10, align 4\n %160 = add nsw i32 %159, 1\n store i32 %160, i32* %10, align 4\n br label %target_phi_1\n"]
  2928. 158 --> target_phi_1
  2929. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  2930. ```
  2931. [INFO][performCodeFusion] Completed function fusion: fused_validateMatrix
  2932. [INFO][performCodeFusion] Processing function pair: target=projectB_main, bunker=pushBack
  2933. [INFO][performCodeFusion] [After clone]Generated control flow graph for fused function:
  2934. ```mermaid: fused_pushBack
  2935. graph TD
  2936. entry["Block entry:\n %3 = alloca %struct.DynamicArray*\n %4 = alloca i32\n %5 = alloca i32\n %6 = alloca i32*\n %7 = alloca [14 x i8]\n %8 = alloca [8 x i32]\n %9 = alloca i32\n %10 = alloca [100 x [100 x i32]]\n %11 = alloca i32\n %12 = alloca i32\n %13 = alloca i32\n %14 = xor i1 %0, true\n br label %target_cond_0\n"]
  2937. entry --> target_cond_0
  2938. target_cond_0["Block target_cond_0:\n br i1 %0, label %15, label %target_skip_0\n"]
  2939. target_cond_0 -->|true| 15
  2940. target_cond_0 -->|false| target_skip_0
  2941. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  2942. target_skip_0 --> target_phi_0
  2943. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  2944. target_phi_0 --> bunker_cond_0
  2945. 15["Block 15:\n %16 = call i32 @testPoints(i32 5)\n call void @llvm.memset.p0i8.i64(i8* align 16 bitcast ([100 x i32]* @cache to i8*), i8 -1, i64 400, i1 false)\n %17 = bitcast [14 x i8]* %7 to i8*\n call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 %2, i8* align 1 getelementptr inbounds ([14 x i8], [14 x i8]* @__const.projectB_main.str, i32 0, i32 0), i64 14, i1 false)\n %18 = getelementptr inbounds [14 x i8], [14 x i8]* %7, i64 0, i64 0\n call void @reverseString(i8* %3)\n %19 = bitcast [8 x i32]* %8 to i8*\n call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 16 %4, i8* align 16 bitcast ([8 x i32]* @__const.projectB_main.arr to i8*), i64 32, i1 false)\n store i32 8, i32* %9, align 4\n %20 = bitcast [100 x [100 x i32]]* %10 to i8*\n call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 16 %5, i8* align 16 bitcast (<{ <{ i32, i32, i32, [97 x i32] }>, <{ i32, i32, i32, [97 x i32] }>, <{ i32, i32, i32, [97 x i32] }>, [97 x <{ i32, i32, i32, [97 x i32] }>] }>* @__const.projectB_main.matrix to i8*), i64 40000, i1 false)\n %21 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %10, i64 0, i64 0\n %22 = call %fused_return_validateMatrix_processMatrix @fused_validateMatrix(i1 true, %struct.Matrix* null, [100 x i32]* %6, i32 3)\n %extracted_target_return2target_ = extractvalue %fused_return_validateMatrix_processMatrix %7, 0\n store i32 %extracted_target_return2, i32* %11, align 4\n store i32 0, i32* %12, align 4\n br label %target_phi_0\n"]
  2946. 15 --> target_phi_0
  2947. bunker_cond_0["Block bunker_cond_0:\n br i1 %14, label %23, label %bunker_skip_0\n"]
  2948. bunker_cond_0 -->|true| 23
  2949. bunker_cond_0 -->|false| bunker_skip_0
  2950. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  2951. bunker_skip_0 --> bunker_phi_0
  2952. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  2953. bunker_phi_0 --> target_cond_1
  2954. 23["Block 23:\n store %struct.DynamicArray* %0, %struct.DynamicArray** %3, align 8\n store i32 %1, i32* %4, align 4\n %24 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %25 = icmp ne %struct.DynamicArray* %3, null\n br i1 %4, label %6, label %5\n"]
  2955. 23 -->|true| 6
  2956. 23 -->|false| 5
  2957. 26["Block 26:\n call void @setErrorMessage(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.10, i64 0, i64 0))\n br label %87\n"]
  2958. 26 --> 87
  2959. 27["Block 27:\n %28 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %29 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %7, i32 0, i32 1\n %30 = load i32, i32* %8, align 8\n %31 = icmp sge i32 %9, 1000\n br i1 %10, label %11, label %12\n"]
  2960. 27 -->|true| 11
  2961. 27 -->|false| 12
  2962. 32["Block 32:\n call void @setErrorMessage(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.11, i64 0, i64 0))\n br label %87\n"]
  2963. 32 --> 87
  2964. 33["Block 33:\n %34 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %35 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %13, i32 0, i32 1\n %36 = load i32, i32* %14, align 8\n %37 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %38 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %16, i32 0, i32 2\n %39 = load i32, i32* %17, align 4\n %40 = icmp sge i32 %15, %18\n br i1 %19, label %20, label %48\n"]
  2965. 33 -->|true| 20
  2966. 33 -->|false| 48
  2967. 41["Block 41:\n %42 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %43 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %21, i32 0, i32 2\n %44 = load i32, i32* %22, align 4\n %45 = mul nsw i32 %23, 2\n store i32 %24, i32* %5, align 4\n %46 = load i32, i32* %5, align 4\n %47 = icmp sgt i32 %25, 1000\n br i1 %26, label %27, label %28\n"]
  2968. 41 -->|true| 27
  2969. 41 -->|false| 28
  2970. 48["Block 48:\n store i32 1000, i32* %5, align 4\n br label %28\n"]
  2971. 48 --> 28
  2972. 49["Block 49:\n %50 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %51 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %29, i32 0, i32 0\n %52 = load i32*, i32** %30, align 8\n %53 = bitcast i32* %31 to i8*\n %54 = load i32, i32* %5, align 4\n %55 = sext i32 %33 to i64\n %56 = mul i64 4, %34\n %57 = call i8* @realloc(i8* %32, i64 %35) #7\n %58 = bitcast i8* %36 to i32*\n store i32* %37, i32** %6, align 8\n %59 = load i32*, i32** %6, align 8\n %60 = icmp ne i32* %38, null\n br i1 %39, label %41, label %40\n"]
  2973. 49 -->|true| 41
  2974. 49 -->|false| 40
  2975. 61["Block 61:\n call void @setErrorMessage(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.12, i64 0, i64 0))\n br label %87\n"]
  2976. 61 --> 87
  2977. 62["Block 62:\n %63 = load i32*, i32** %6, align 8\n %64 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %65 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %43, i32 0, i32 0\n store i32* %42, i32** %44, align 8\n %66 = load i32, i32* %5, align 4\n %67 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %68 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %46, i32 0, i32 2\n store i32 %45, i32* %47, align 4\n br label %48\n"]
  2978. 62 --> 48
  2979. 69["Block 69:\n %70 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %71 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %49, i32 0, i32 3\n %72 = load i32, i32* %50, align 8\n %73 = icmp ne i32 %51, 0\n br i1 %52, label %53, label %74\n"]
  2980. 69 -->|true| 53
  2981. 69 -->|false| 74
  2982. 74["Block 74:\n %75 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %76 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %54, i32 0, i32 1\n %77 = load i32, i32* %55, align 8\n %78 = icmp sgt i32 %56, 0\n br i1 %57, label %58, label %74\n"]
  2983. 74 -->|true| 58
  2984. 74 -->|false| 74
  2985. 79["Block 79:\n %80 = load i32, i32* %4, align 4\n %81 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %82 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %60, i32 0, i32 0\n %83 = load i32*, i32** %61, align 8\n %84 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %85 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %63, i32 0, i32 1\n %86 = load i32, i32* %64, align 8\n %87 = sub nsw i32 %65, 1\n %88 = sext i32 %66 to i64\n %89 = getelementptr inbounds i32, i32* %62, i64 %67\n %90 = load i32, i32* %68, align 4\n %91 = icmp slt i32 %59, %69\n br i1 %70, label %71, label %74\n"]
  2986. 79 -->|true| 71
  2987. 79 -->|false| 74
  2988. 92["Block 92:\n %93 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %94 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %72, i32 0, i32 3\n store i32 0, i32* %73, align 8\n br label %74\n"]
  2989. 92 --> 74
  2990. 95["Block 95:\n %96 = load i32, i32* %4, align 4\n %97 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %98 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %76, i32 0, i32 0\n %99 = load i32*, i32** %77, align 8\n %100 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %101 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %79, i32 0, i32 1\n %102 = load i32, i32* %80, align 8\n %103 = add nsw i32 %81, 1\n store i32 %82, i32* %80, align 8\n %104 = sext i32 %81 to i64\n %105 = getelementptr inbounds i32, i32* %78, i64 %83\n store i32 %75, i32* %84, align 4\n %106 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %107 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %85, i32 0, i32 4\n store i32 1, i32* %86, align 4\n br label %87\n"]
  2991. 95 --> 87
  2992. 108["Block 108:\n ret void\n"]
  2993. target_cond_1["Block target_cond_1:\n br i1 %0, label %109, label %target_skip_1\n"]
  2994. target_cond_1 -->|true| 109
  2995. target_cond_1 -->|false| target_skip_1
  2996. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  2997. target_skip_1 --> target_phi_1
  2998. target_phi_1["Block target_phi_1:\n"]
  2999. 109["Block 109:\n %110 = load i32, i32* %12, align 4\n %111 = call %fused_return_calculateDistance_memoizedFib @fused_calculateDistance(i1 true, %struct.Point* null, %struct.Point* null, i32* null, i32 %9)\n %extracted_target_return1target_ = extractvalue %fused_return_calculateDistance_memoizedFib %10, 0\n %112 = load i32, i32* %12, align 4\n %113 = add nsw i32 %11, 1\n store i32 %12, i32* %12, align 4\n br label %13\n"]
  3000. 109 --> 13
  3001. 114["Block 114:\n %115 = load i32, i32* %12, align 4\n %116 = icmp slt i32 %14, 10\n br i1 %15, label %8, label %16\n"]
  3002. 114 -->|true| 8
  3003. 114 -->|false| 16
  3004. 117["Block 117:\n %118 = load i32, i32* %11, align 4\n %119 = icmp sgt i32 %17, 0\n br i1 %18, label %19, label %21\n"]
  3005. 117 -->|true| 19
  3006. 117 -->|false| 21
  3007. 120["Block 120:\n %121 = call %fused_return_calculateDistance_memoizedFib @fused_calculateDistance(i1 true, %struct.Point* null, %struct.Point* null, i32* null, i32 7)\n %extracted_target_returntarget_ = extractvalue %fused_return_calculateDistance_memoizedFib %20, 0\n store i32 %extracted_target_return, i32* %13, align 4\n br label %24\n"]
  3008. 120 --> 24
  3009. 122["Block 122:\n %123 = load i32, i32* %11, align 4\n %124 = call i32 @fused_performSimpleCalculations(i1 true, i32 %22)\n store i32 %23, i32* %13, align 4\n br label %24\n"]
  3010. 122 --> 24
  3011. 125["Block 125:\n %126 = load i32, i32* %13, align 4\n ret i32 %25\n"]
  3012. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  3013. ```
  3014. [INFO][performCodeFusion] Fixing return instruction in block %108
  3015. [INFO][performCodeFusion] Fixing return instruction in block %125
  3016. [WARNING][performCodeFusion] No terminator found in block: target_phi_1
  3017. [INFO][performCodeFusion] [After fix]Generated control flow graph for fused function:
  3018. ```mermaid: fused_pushBack
  3019. graph TD
  3020. entry["Block entry:\n %3 = alloca %struct.DynamicArray*\n %4 = alloca i32\n %5 = alloca i32\n %6 = alloca i32*\n %7 = alloca [14 x i8]\n %8 = alloca [8 x i32]\n %9 = alloca i32\n %10 = alloca [100 x [100 x i32]]\n %11 = alloca i32\n %12 = alloca i32\n %13 = alloca i32\n %14 = xor i1 %0, true\n br label %target_cond_0\n"]
  3021. entry --> target_cond_0
  3022. target_cond_0["Block target_cond_0:\n br i1 %0, label %15, label %target_skip_0\n"]
  3023. target_cond_0 -->|true| 15
  3024. target_cond_0 -->|false| target_skip_0
  3025. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  3026. target_skip_0 --> target_phi_0
  3027. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  3028. target_phi_0 --> bunker_cond_0
  3029. 15["Block 15:\n %16 = call i32 @testPoints(i32 5)\n call void @llvm.memset.p0i8.i64(i8* align 16 bitcast ([100 x i32]* @cache to i8*), i8 -1, i64 400, i1 false)\n %17 = bitcast [14 x i8]* %7 to i8*\n call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 %17, i8* align 1 getelementptr inbounds ([14 x i8], [14 x i8]* @__const.projectB_main.str, i32 0, i32 0), i64 14, i1 false)\n %18 = getelementptr inbounds [14 x i8], [14 x i8]* %7, i64 0, i64 0\n call void @reverseString(i8* %18)\n %19 = bitcast [8 x i32]* %8 to i8*\n call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 16 %19, i8* align 16 bitcast ([8 x i32]* @__const.projectB_main.arr to i8*), i64 32, i1 false)\n store i32 8, i32* %9, align 4\n %20 = bitcast [100 x [100 x i32]]* %10 to i8*\n call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 16 %20, i8* align 16 bitcast (<{ <{ i32, i32, i32, [97 x i32] }>, <{ i32, i32, i32, [97 x i32] }>, <{ i32, i32, i32, [97 x i32] }>, [97 x <{ i32, i32, i32, [97 x i32] }>] }>* @__const.projectB_main.matrix to i8*), i64 40000, i1 false)\n %21 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %10, i64 0, i64 0\n %22 = call %fused_return_validateMatrix_processMatrix @fused_validateMatrix(i1 true, %struct.Matrix* null, [100 x i32]* %21, i32 3)\n %extracted_target_return2target_ = extractvalue %fused_return_validateMatrix_processMatrix %22, 0\n store i32 %extracted_target_return2target_, i32* %11, align 4\n store i32 0, i32* %12, align 4\n br label %target_phi_0\n"]
  3030. 15 --> target_phi_0
  3031. bunker_cond_0["Block bunker_cond_0:\n br i1 %14, label %23, label %bunker_skip_0\n"]
  3032. bunker_cond_0 -->|true| 23
  3033. bunker_cond_0 -->|false| bunker_skip_0
  3034. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  3035. bunker_skip_0 --> bunker_phi_0
  3036. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  3037. bunker_phi_0 --> target_cond_1
  3038. 23["Block 23:\n store %struct.DynamicArray* %1, %struct.DynamicArray** %3, align 8\n store i32 %2, i32* %4, align 4\n %24 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %25 = icmp ne %struct.DynamicArray* %24, null\n br i1 %25, label %27, label %26\n"]
  3039. 23 -->|true| 27
  3040. 23 -->|false| 26
  3041. 26["Block 26:\n call void @setErrorMessage(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.10, i64 0, i64 0))\n br label %108\n"]
  3042. 26 --> 108
  3043. 27["Block 27:\n %28 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %29 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %28, i32 0, i32 1\n %30 = load i32, i32* %29, align 8\n %31 = icmp sge i32 %30, 1000\n br i1 %31, label %32, label %33\n"]
  3044. 27 -->|true| 32
  3045. 27 -->|false| 33
  3046. 32["Block 32:\n call void @setErrorMessage(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.11, i64 0, i64 0))\n br label %108\n"]
  3047. 32 --> 108
  3048. 33["Block 33:\n %34 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %35 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %34, i32 0, i32 1\n %36 = load i32, i32* %35, align 8\n %37 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %38 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %37, i32 0, i32 2\n %39 = load i32, i32* %38, align 4\n %40 = icmp sge i32 %36, %39\n br i1 %40, label %41, label %69\n"]
  3049. 33 -->|true| 41
  3050. 33 -->|false| 69
  3051. 41["Block 41:\n %42 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %43 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %42, i32 0, i32 2\n %44 = load i32, i32* %43, align 4\n %45 = mul nsw i32 %44, 2\n store i32 %45, i32* %5, align 4\n %46 = load i32, i32* %5, align 4\n %47 = icmp sgt i32 %46, 1000\n br i1 %47, label %48, label %49\n"]
  3052. 41 -->|true| 48
  3053. 41 -->|false| 49
  3054. 48["Block 48:\n store i32 1000, i32* %5, align 4\n br label %49\n"]
  3055. 48 --> 49
  3056. 49["Block 49:\n %50 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %51 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %50, i32 0, i32 0\n %52 = load i32*, i32** %51, align 8\n %53 = bitcast i32* %52 to i8*\n %54 = load i32, i32* %5, align 4\n %55 = sext i32 %54 to i64\n %56 = mul i64 4, %55\n %57 = call i8* @realloc(i8* %53, i64 %56) #7\n %58 = bitcast i8* %57 to i32*\n store i32* %58, i32** %6, align 8\n %59 = load i32*, i32** %6, align 8\n %60 = icmp ne i32* %59, null\n br i1 %60, label %62, label %61\n"]
  3057. 49 -->|true| 62
  3058. 49 -->|false| 61
  3059. 61["Block 61:\n call void @setErrorMessage(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.12, i64 0, i64 0))\n br label %108\n"]
  3060. 61 --> 108
  3061. 62["Block 62:\n %63 = load i32*, i32** %6, align 8\n %64 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %65 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %64, i32 0, i32 0\n store i32* %63, i32** %65, align 8\n %66 = load i32, i32* %5, align 4\n %67 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %68 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %67, i32 0, i32 2\n store i32 %66, i32* %68, align 4\n br label %69\n"]
  3062. 62 --> 69
  3063. 69["Block 69:\n %70 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %71 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %70, i32 0, i32 3\n %72 = load i32, i32* %71, align 8\n %73 = icmp ne i32 %72, 0\n br i1 %73, label %74, label %95\n"]
  3064. 69 -->|true| 74
  3065. 69 -->|false| 95
  3066. 74["Block 74:\n %75 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %76 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %75, i32 0, i32 1\n %77 = load i32, i32* %76, align 8\n %78 = icmp sgt i32 %77, 0\n br i1 %78, label %79, label %95\n"]
  3067. 74 -->|true| 79
  3068. 74 -->|false| 95
  3069. 79["Block 79:\n %80 = load i32, i32* %4, align 4\n %81 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %82 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %81, i32 0, i32 0\n %83 = load i32*, i32** %82, align 8\n %84 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %85 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %84, i32 0, i32 1\n %86 = load i32, i32* %85, align 8\n %87 = sub nsw i32 %86, 1\n %88 = sext i32 %87 to i64\n %89 = getelementptr inbounds i32, i32* %83, i64 %88\n %90 = load i32, i32* %89, align 4\n %91 = icmp slt i32 %80, %90\n br i1 %91, label %92, label %95\n"]
  3070. 79 -->|true| 92
  3071. 79 -->|false| 95
  3072. 92["Block 92:\n %93 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %94 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %93, i32 0, i32 3\n store i32 0, i32* %94, align 8\n br label %95\n"]
  3073. 92 --> 95
  3074. 95["Block 95:\n %96 = load i32, i32* %4, align 4\n %97 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %98 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %97, i32 0, i32 0\n %99 = load i32*, i32** %98, align 8\n %100 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %101 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %100, i32 0, i32 1\n %102 = load i32, i32* %101, align 8\n %103 = add nsw i32 %102, 1\n store i32 %103, i32* %101, align 8\n %104 = sext i32 %102 to i64\n %105 = getelementptr inbounds i32, i32* %99, i64 %104\n store i32 %96, i32* %105, align 4\n %106 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %107 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %106, i32 0, i32 4\n store i32 1, i32* %107, align 4\n br label %108\n"]
  3075. 95 --> 108
  3076. 108["Block 108:\n ret void\n"]
  3077. target_cond_1["Block target_cond_1:\n br i1 %0, label %109, label %target_skip_1\n"]
  3078. target_cond_1 -->|true| 109
  3079. target_cond_1 -->|false| target_skip_1
  3080. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  3081. target_skip_1 --> target_phi_1
  3082. target_phi_1["Block target_phi_1:\n"]
  3083. 109["Block 109:\n %110 = load i32, i32* %12, align 4\n %111 = call %fused_return_calculateDistance_memoizedFib @fused_calculateDistance(i1 true, %struct.Point* null, %struct.Point* null, i32* null, i32 %110)\n %extracted_target_return1target_ = extractvalue %fused_return_calculateDistance_memoizedFib %111, 0\n %112 = load i32, i32* %12, align 4\n %113 = add nsw i32 %112, 1\n store i32 %113, i32* %12, align 4\n br label %114\n"]
  3084. 109 --> 114
  3085. 114["Block 114:\n %115 = load i32, i32* %12, align 4\n %116 = icmp slt i32 %115, 10\n br i1 %116, label %109, label %117\n"]
  3086. 114 -->|true| 109
  3087. 114 -->|false| 117
  3088. 117["Block 117:\n %118 = load i32, i32* %11, align 4\n %119 = icmp sgt i32 %118, 0\n br i1 %119, label %120, label %122\n"]
  3089. 117 -->|true| 120
  3090. 117 -->|false| 122
  3091. 120["Block 120:\n %121 = call %fused_return_calculateDistance_memoizedFib @fused_calculateDistance(i1 true, %struct.Point* null, %struct.Point* null, i32* null, i32 7)\n %extracted_target_returntarget_ = extractvalue %fused_return_calculateDistance_memoizedFib %121, 0\n store i32 %extracted_target_returntarget_, i32* %13, align 4\n br label %125\n"]
  3092. 120 --> 125
  3093. 122["Block 122:\n %123 = load i32, i32* %11, align 4\n %124 = call i32 @fused_performSimpleCalculations(i1 true, i32 %123)\n store i32 %124, i32* %13, align 4\n br label %125\n"]
  3094. 122 --> 125
  3095. 125["Block 125:\n %126 = load i32, i32* %13, align 4\n ret i32 %126\n"]
  3096. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  3097. ```
  3098. [INFO][performCodeFusion] Processing non-struct return type: i32
  3099. [INFO][performCodeFusion] Processing bunker block: %32
  3100. [INFO][performCodeFusion] Processing bunker block: %61
  3101. [INFO][performCodeFusion] Processing bunker block: %23
  3102. [INFO][performCodeFusion] Processing bunker block: %27
  3103. [INFO][performCodeFusion] Processing bunker block: %26
  3104. [INFO][performCodeFusion] Processing bunker block: %108
  3105. [INFO][performCodeFusion] Found void return instruction in bunker block %108
  3106. [INFO][performCodeFusion] Return type mismatch in bunker block %108. Expected: i32, Found: void
  3107. [INFO][performCodeFusion] Created new return instruction with default value in block %108
  3108. [INFO][performCodeFusion] Processing bunker block: %33
  3109. [INFO][performCodeFusion] Processing bunker block: %41
  3110. [INFO][performCodeFusion] Processing bunker block: %62
  3111. [INFO][performCodeFusion] Processing bunker block: %69
  3112. [INFO][performCodeFusion] Processing bunker block: %74
  3113. [INFO][performCodeFusion] Processing bunker block: %79
  3114. [INFO][performCodeFusion] Processing bunker block: %92
  3115. [INFO][performCodeFusion] Processing bunker block: %95
  3116. [INFO][performCodeFusion] Processing bunker block: %48
  3117. [INFO][performCodeFusion] Processing bunker block: %49
  3118. [INFO][performCodeFusion] Processing target block: %109
  3119. [INFO][performCodeFusion] Processing target block: %114
  3120. [INFO][performCodeFusion] Processing target block: %117
  3121. [INFO][performCodeFusion] Processing target block: %120
  3122. [INFO][performCodeFusion] Processing target block: %122
  3123. [INFO][performCodeFusion] Processing target block: %125
  3124. [INFO][performCodeFusion] Found return instruction in target block %125. Return value type: i32
  3125. [INFO][performCodeFusion] Processing target block: %15
  3126. [INFO][performCodeFusion] [After fix return]Generated control flow graph for fused function:
  3127. ```mermaid: fused_pushBack
  3128. graph TD
  3129. entry["Block entry:\n %3 = alloca %struct.DynamicArray*\n %4 = alloca i32\n %5 = alloca i32\n %6 = alloca i32*\n %7 = alloca [14 x i8]\n %8 = alloca [8 x i32]\n %9 = alloca i32\n %10 = alloca [100 x [100 x i32]]\n %11 = alloca i32\n %12 = alloca i32\n %13 = alloca i32\n %14 = xor i1 %0, true\n br label %target_cond_0\n"]
  3130. entry --> target_cond_0
  3131. target_cond_0["Block target_cond_0:\n br i1 %0, label %15, label %target_skip_0\n"]
  3132. target_cond_0 -->|true| 15
  3133. target_cond_0 -->|false| target_skip_0
  3134. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  3135. target_skip_0 --> target_phi_0
  3136. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  3137. target_phi_0 --> bunker_cond_0
  3138. 15["Block 15:\n %16 = call i32 @testPoints(i32 5)\n call void @llvm.memset.p0i8.i64(i8* align 16 bitcast ([100 x i32]* @cache to i8*), i8 -1, i64 400, i1 false)\n %17 = bitcast [14 x i8]* %7 to i8*\n call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 %17, i8* align 1 getelementptr inbounds ([14 x i8], [14 x i8]* @__const.projectB_main.str, i32 0, i32 0), i64 14, i1 false)\n %18 = getelementptr inbounds [14 x i8], [14 x i8]* %7, i64 0, i64 0\n call void @reverseString(i8* %18)\n %19 = bitcast [8 x i32]* %8 to i8*\n call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 16 %19, i8* align 16 bitcast ([8 x i32]* @__const.projectB_main.arr to i8*), i64 32, i1 false)\n store i32 8, i32* %9, align 4\n %20 = bitcast [100 x [100 x i32]]* %10 to i8*\n call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 16 %20, i8* align 16 bitcast (<{ <{ i32, i32, i32, [97 x i32] }>, <{ i32, i32, i32, [97 x i32] }>, <{ i32, i32, i32, [97 x i32] }>, [97 x <{ i32, i32, i32, [97 x i32] }>] }>* @__const.projectB_main.matrix to i8*), i64 40000, i1 false)\n %21 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %10, i64 0, i64 0\n %22 = call %fused_return_validateMatrix_processMatrix @fused_validateMatrix(i1 true, %struct.Matrix* null, [100 x i32]* %21, i32 3)\n %extracted_target_return2target_ = extractvalue %fused_return_validateMatrix_processMatrix %22, 0\n store i32 %extracted_target_return2target_, i32* %11, align 4\n store i32 0, i32* %12, align 4\n br label %target_phi_0\n"]
  3139. 15 --> target_phi_0
  3140. bunker_cond_0["Block bunker_cond_0:\n br i1 %14, label %23, label %bunker_skip_0\n"]
  3141. bunker_cond_0 -->|true| 23
  3142. bunker_cond_0 -->|false| bunker_skip_0
  3143. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  3144. bunker_skip_0 --> bunker_phi_0
  3145. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  3146. bunker_phi_0 --> target_cond_1
  3147. 23["Block 23:\n store %struct.DynamicArray* %1, %struct.DynamicArray** %3, align 8\n store i32 %2, i32* %4, align 4\n %24 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %25 = icmp ne %struct.DynamicArray* %24, null\n br i1 %25, label %27, label %26\n"]
  3148. 23 -->|true| 27
  3149. 23 -->|false| 26
  3150. 26["Block 26:\n call void @setErrorMessage(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.10, i64 0, i64 0))\n br label %108\n"]
  3151. 26 --> 108
  3152. 27["Block 27:\n %28 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %29 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %28, i32 0, i32 1\n %30 = load i32, i32* %29, align 8\n %31 = icmp sge i32 %30, 1000\n br i1 %31, label %32, label %33\n"]
  3153. 27 -->|true| 32
  3154. 27 -->|false| 33
  3155. 32["Block 32:\n call void @setErrorMessage(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.11, i64 0, i64 0))\n br label %108\n"]
  3156. 32 --> 108
  3157. 33["Block 33:\n %34 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %35 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %34, i32 0, i32 1\n %36 = load i32, i32* %35, align 8\n %37 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %38 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %37, i32 0, i32 2\n %39 = load i32, i32* %38, align 4\n %40 = icmp sge i32 %36, %39\n br i1 %40, label %41, label %69\n"]
  3158. 33 -->|true| 41
  3159. 33 -->|false| 69
  3160. 41["Block 41:\n %42 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %43 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %42, i32 0, i32 2\n %44 = load i32, i32* %43, align 4\n %45 = mul nsw i32 %44, 2\n store i32 %45, i32* %5, align 4\n %46 = load i32, i32* %5, align 4\n %47 = icmp sgt i32 %46, 1000\n br i1 %47, label %48, label %49\n"]
  3161. 41 -->|true| 48
  3162. 41 -->|false| 49
  3163. 48["Block 48:\n store i32 1000, i32* %5, align 4\n br label %49\n"]
  3164. 48 --> 49
  3165. 49["Block 49:\n %50 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %51 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %50, i32 0, i32 0\n %52 = load i32*, i32** %51, align 8\n %53 = bitcast i32* %52 to i8*\n %54 = load i32, i32* %5, align 4\n %55 = sext i32 %54 to i64\n %56 = mul i64 4, %55\n %57 = call i8* @realloc(i8* %53, i64 %56) #7\n %58 = bitcast i8* %57 to i32*\n store i32* %58, i32** %6, align 8\n %59 = load i32*, i32** %6, align 8\n %60 = icmp ne i32* %59, null\n br i1 %60, label %62, label %61\n"]
  3166. 49 -->|true| 62
  3167. 49 -->|false| 61
  3168. 61["Block 61:\n call void @setErrorMessage(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.12, i64 0, i64 0))\n br label %108\n"]
  3169. 61 --> 108
  3170. 62["Block 62:\n %63 = load i32*, i32** %6, align 8\n %64 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %65 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %64, i32 0, i32 0\n store i32* %63, i32** %65, align 8\n %66 = load i32, i32* %5, align 4\n %67 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %68 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %67, i32 0, i32 2\n store i32 %66, i32* %68, align 4\n br label %69\n"]
  3171. 62 --> 69
  3172. 69["Block 69:\n %70 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %71 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %70, i32 0, i32 3\n %72 = load i32, i32* %71, align 8\n %73 = icmp ne i32 %72, 0\n br i1 %73, label %74, label %95\n"]
  3173. 69 -->|true| 74
  3174. 69 -->|false| 95
  3175. 74["Block 74:\n %75 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %76 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %75, i32 0, i32 1\n %77 = load i32, i32* %76, align 8\n %78 = icmp sgt i32 %77, 0\n br i1 %78, label %79, label %95\n"]
  3176. 74 -->|true| 79
  3177. 74 -->|false| 95
  3178. 79["Block 79:\n %80 = load i32, i32* %4, align 4\n %81 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %82 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %81, i32 0, i32 0\n %83 = load i32*, i32** %82, align 8\n %84 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %85 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %84, i32 0, i32 1\n %86 = load i32, i32* %85, align 8\n %87 = sub nsw i32 %86, 1\n %88 = sext i32 %87 to i64\n %89 = getelementptr inbounds i32, i32* %83, i64 %88\n %90 = load i32, i32* %89, align 4\n %91 = icmp slt i32 %80, %90\n br i1 %91, label %92, label %95\n"]
  3179. 79 -->|true| 92
  3180. 79 -->|false| 95
  3181. 92["Block 92:\n %93 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %94 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %93, i32 0, i32 3\n store i32 0, i32* %94, align 8\n br label %95\n"]
  3182. 92 --> 95
  3183. 95["Block 95:\n %96 = load i32, i32* %4, align 4\n %97 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %98 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %97, i32 0, i32 0\n %99 = load i32*, i32** %98, align 8\n %100 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %101 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %100, i32 0, i32 1\n %102 = load i32, i32* %101, align 8\n %103 = add nsw i32 %102, 1\n store i32 %103, i32* %101, align 8\n %104 = sext i32 %102 to i64\n %105 = getelementptr inbounds i32, i32* %99, i64 %104\n store i32 %96, i32* %105, align 4\n %106 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %107 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %106, i32 0, i32 4\n store i32 1, i32* %107, align 4\n br label %108\n"]
  3184. 95 --> 108
  3185. 108["Block 108:\n ret i32 0\n"]
  3186. target_cond_1["Block target_cond_1:\n br i1 %0, label %109, label %target_skip_1\n"]
  3187. target_cond_1 -->|true| 109
  3188. target_cond_1 -->|false| target_skip_1
  3189. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  3190. target_skip_1 --> target_phi_1
  3191. target_phi_1["Block target_phi_1:\n"]
  3192. 109["Block 109:\n %110 = load i32, i32* %12, align 4\n %111 = call %fused_return_calculateDistance_memoizedFib @fused_calculateDistance(i1 true, %struct.Point* null, %struct.Point* null, i32* null, i32 %110)\n %extracted_target_return1target_ = extractvalue %fused_return_calculateDistance_memoizedFib %111, 0\n %112 = load i32, i32* %12, align 4\n %113 = add nsw i32 %112, 1\n store i32 %113, i32* %12, align 4\n br label %114\n"]
  3193. 109 --> 114
  3194. 114["Block 114:\n %115 = load i32, i32* %12, align 4\n %116 = icmp slt i32 %115, 10\n br i1 %116, label %109, label %117\n"]
  3195. 114 -->|true| 109
  3196. 114 -->|false| 117
  3197. 117["Block 117:\n %118 = load i32, i32* %11, align 4\n %119 = icmp sgt i32 %118, 0\n br i1 %119, label %120, label %122\n"]
  3198. 117 -->|true| 120
  3199. 117 -->|false| 122
  3200. 120["Block 120:\n %121 = call %fused_return_calculateDistance_memoizedFib @fused_calculateDistance(i1 true, %struct.Point* null, %struct.Point* null, i32* null, i32 7)\n %extracted_target_returntarget_ = extractvalue %fused_return_calculateDistance_memoizedFib %121, 0\n store i32 %extracted_target_returntarget_, i32* %13, align 4\n br label %125\n"]
  3201. 120 --> 125
  3202. 122["Block 122:\n %123 = load i32, i32* %11, align 4\n %124 = call i32 @fused_performSimpleCalculations(i1 true, i32 %123)\n store i32 %124, i32* %13, align 4\n br label %125\n"]
  3203. 122 --> 125
  3204. 125["Block 125:\n %126 = load i32, i32* %13, align 4\n ret i32 %126\n"]
  3205. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  3206. ```
  3207. [DEBUG][updateCallSite] Original call instruction:
  3208. call void @pushBack(%struct.DynamicArray* %33, i32 %35)
  3209. [DEBUG][updateCallSite] Adding bunker control parameter
  3210. [DEBUG][updateCallSite] Adding original call parameters:
  3211. [DEBUG][updateCallSite] Argument 0: type=struct.struct.DynamicArray*
  3212. [DEBUG][updateCallSite] Argument 1: type=i32
  3213. [DEBUG][updateCallSite] Adding default target parameters:
  3214. [DEBUG][updateCallSite] New call instruction:
  3215. %36 = call i32 @fused_pushBack(i1 false, %struct.DynamicArray* %33, i32 %35)
  3216. [DEBUG][updateCallSite] Void return type, no value processing needed
  3217. [INFO][updateCallSite] Successfully updated call site from call void @pushBack(%struct.DynamicArray* %33, i32 %35) to %36 = call i32 @fused_pushBack(i1 false, %struct.DynamicArray* %33, i32 %35)
  3218. [INFO][performCodeFusion] [After update call site]Generated control flow graph for fused function:
  3219. ```mermaid: fused_pushBack
  3220. graph TD
  3221. entry["Block entry:\n %3 = alloca %struct.DynamicArray*\n %4 = alloca i32\n %5 = alloca i32\n %6 = alloca i32*\n %7 = alloca [14 x i8]\n %8 = alloca [8 x i32]\n %9 = alloca i32\n %10 = alloca [100 x [100 x i32]]\n %11 = alloca i32\n %12 = alloca i32\n %13 = alloca i32\n %14 = xor i1 %0, true\n br label %target_cond_0\n"]
  3222. entry --> target_cond_0
  3223. target_cond_0["Block target_cond_0:\n br i1 %0, label %15, label %target_skip_0\n"]
  3224. target_cond_0 -->|true| 15
  3225. target_cond_0 -->|false| target_skip_0
  3226. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  3227. target_skip_0 --> target_phi_0
  3228. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  3229. target_phi_0 --> bunker_cond_0
  3230. 15["Block 15:\n %16 = call i32 @testPoints(i32 5)\n call void @llvm.memset.p0i8.i64(i8* align 16 bitcast ([100 x i32]* @cache to i8*), i8 -1, i64 400, i1 false)\n %17 = bitcast [14 x i8]* %7 to i8*\n call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 %17, i8* align 1 getelementptr inbounds ([14 x i8], [14 x i8]* @__const.projectB_main.str, i32 0, i32 0), i64 14, i1 false)\n %18 = getelementptr inbounds [14 x i8], [14 x i8]* %7, i64 0, i64 0\n call void @reverseString(i8* %18)\n %19 = bitcast [8 x i32]* %8 to i8*\n call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 16 %19, i8* align 16 bitcast ([8 x i32]* @__const.projectB_main.arr to i8*), i64 32, i1 false)\n store i32 8, i32* %9, align 4\n %20 = bitcast [100 x [100 x i32]]* %10 to i8*\n call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 16 %20, i8* align 16 bitcast (<{ <{ i32, i32, i32, [97 x i32] }>, <{ i32, i32, i32, [97 x i32] }>, <{ i32, i32, i32, [97 x i32] }>, [97 x <{ i32, i32, i32, [97 x i32] }>] }>* @__const.projectB_main.matrix to i8*), i64 40000, i1 false)\n %21 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %10, i64 0, i64 0\n %22 = call %fused_return_validateMatrix_processMatrix @fused_validateMatrix(i1 true, %struct.Matrix* null, [100 x i32]* %21, i32 3)\n %extracted_target_return2target_ = extractvalue %fused_return_validateMatrix_processMatrix %22, 0\n store i32 %extracted_target_return2target_, i32* %11, align 4\n store i32 0, i32* %12, align 4\n br label %target_phi_0\n"]
  3231. 15 --> target_phi_0
  3232. bunker_cond_0["Block bunker_cond_0:\n br i1 %14, label %23, label %bunker_skip_0\n"]
  3233. bunker_cond_0 -->|true| 23
  3234. bunker_cond_0 -->|false| bunker_skip_0
  3235. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  3236. bunker_skip_0 --> bunker_phi_0
  3237. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  3238. bunker_phi_0 --> target_cond_1
  3239. 23["Block 23:\n store %struct.DynamicArray* %1, %struct.DynamicArray** %3, align 8\n store i32 %2, i32* %4, align 4\n %24 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %25 = icmp ne %struct.DynamicArray* %24, null\n br i1 %25, label %27, label %26\n"]
  3240. 23 -->|true| 27
  3241. 23 -->|false| 26
  3242. 26["Block 26:\n call void @setErrorMessage(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.10, i64 0, i64 0))\n br label %108\n"]
  3243. 26 --> 108
  3244. 27["Block 27:\n %28 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %29 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %28, i32 0, i32 1\n %30 = load i32, i32* %29, align 8\n %31 = icmp sge i32 %30, 1000\n br i1 %31, label %32, label %33\n"]
  3245. 27 -->|true| 32
  3246. 27 -->|false| 33
  3247. 32["Block 32:\n call void @setErrorMessage(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.11, i64 0, i64 0))\n br label %108\n"]
  3248. 32 --> 108
  3249. 33["Block 33:\n %34 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %35 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %34, i32 0, i32 1\n %36 = load i32, i32* %35, align 8\n %37 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %38 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %37, i32 0, i32 2\n %39 = load i32, i32* %38, align 4\n %40 = icmp sge i32 %36, %39\n br i1 %40, label %41, label %69\n"]
  3250. 33 -->|true| 41
  3251. 33 -->|false| 69
  3252. 41["Block 41:\n %42 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %43 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %42, i32 0, i32 2\n %44 = load i32, i32* %43, align 4\n %45 = mul nsw i32 %44, 2\n store i32 %45, i32* %5, align 4\n %46 = load i32, i32* %5, align 4\n %47 = icmp sgt i32 %46, 1000\n br i1 %47, label %48, label %49\n"]
  3253. 41 -->|true| 48
  3254. 41 -->|false| 49
  3255. 48["Block 48:\n store i32 1000, i32* %5, align 4\n br label %49\n"]
  3256. 48 --> 49
  3257. 49["Block 49:\n %50 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %51 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %50, i32 0, i32 0\n %52 = load i32*, i32** %51, align 8\n %53 = bitcast i32* %52 to i8*\n %54 = load i32, i32* %5, align 4\n %55 = sext i32 %54 to i64\n %56 = mul i64 4, %55\n %57 = call i8* @realloc(i8* %53, i64 %56) #7\n %58 = bitcast i8* %57 to i32*\n store i32* %58, i32** %6, align 8\n %59 = load i32*, i32** %6, align 8\n %60 = icmp ne i32* %59, null\n br i1 %60, label %62, label %61\n"]
  3258. 49 -->|true| 62
  3259. 49 -->|false| 61
  3260. 61["Block 61:\n call void @setErrorMessage(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.12, i64 0, i64 0))\n br label %108\n"]
  3261. 61 --> 108
  3262. 62["Block 62:\n %63 = load i32*, i32** %6, align 8\n %64 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %65 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %64, i32 0, i32 0\n store i32* %63, i32** %65, align 8\n %66 = load i32, i32* %5, align 4\n %67 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %68 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %67, i32 0, i32 2\n store i32 %66, i32* %68, align 4\n br label %69\n"]
  3263. 62 --> 69
  3264. 69["Block 69:\n %70 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %71 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %70, i32 0, i32 3\n %72 = load i32, i32* %71, align 8\n %73 = icmp ne i32 %72, 0\n br i1 %73, label %74, label %95\n"]
  3265. 69 -->|true| 74
  3266. 69 -->|false| 95
  3267. 74["Block 74:\n %75 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %76 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %75, i32 0, i32 1\n %77 = load i32, i32* %76, align 8\n %78 = icmp sgt i32 %77, 0\n br i1 %78, label %79, label %95\n"]
  3268. 74 -->|true| 79
  3269. 74 -->|false| 95
  3270. 79["Block 79:\n %80 = load i32, i32* %4, align 4\n %81 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %82 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %81, i32 0, i32 0\n %83 = load i32*, i32** %82, align 8\n %84 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %85 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %84, i32 0, i32 1\n %86 = load i32, i32* %85, align 8\n %87 = sub nsw i32 %86, 1\n %88 = sext i32 %87 to i64\n %89 = getelementptr inbounds i32, i32* %83, i64 %88\n %90 = load i32, i32* %89, align 4\n %91 = icmp slt i32 %80, %90\n br i1 %91, label %92, label %95\n"]
  3271. 79 -->|true| 92
  3272. 79 -->|false| 95
  3273. 92["Block 92:\n %93 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %94 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %93, i32 0, i32 3\n store i32 0, i32* %94, align 8\n br label %95\n"]
  3274. 92 --> 95
  3275. 95["Block 95:\n %96 = load i32, i32* %4, align 4\n %97 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %98 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %97, i32 0, i32 0\n %99 = load i32*, i32** %98, align 8\n %100 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %101 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %100, i32 0, i32 1\n %102 = load i32, i32* %101, align 8\n %103 = add nsw i32 %102, 1\n store i32 %103, i32* %101, align 8\n %104 = sext i32 %102 to i64\n %105 = getelementptr inbounds i32, i32* %99, i64 %104\n store i32 %96, i32* %105, align 4\n %106 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %107 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %106, i32 0, i32 4\n store i32 1, i32* %107, align 4\n br label %108\n"]
  3276. 95 --> 108
  3277. 108["Block 108:\n ret i32 0\n"]
  3278. target_cond_1["Block target_cond_1:\n br i1 %0, label %109, label %target_skip_1\n"]
  3279. target_cond_1 -->|true| 109
  3280. target_cond_1 -->|false| target_skip_1
  3281. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  3282. target_skip_1 --> target_phi_1
  3283. target_phi_1["Block target_phi_1:\n"]
  3284. 109["Block 109:\n %110 = load i32, i32* %12, align 4\n %111 = call %fused_return_calculateDistance_memoizedFib @fused_calculateDistance(i1 true, %struct.Point* null, %struct.Point* null, i32* null, i32 %110)\n %extracted_target_return1target_ = extractvalue %fused_return_calculateDistance_memoizedFib %111, 0\n %112 = load i32, i32* %12, align 4\n %113 = add nsw i32 %112, 1\n store i32 %113, i32* %12, align 4\n br label %114\n"]
  3285. 109 --> 114
  3286. 114["Block 114:\n %115 = load i32, i32* %12, align 4\n %116 = icmp slt i32 %115, 10\n br i1 %116, label %109, label %117\n"]
  3287. 114 -->|true| 109
  3288. 114 -->|false| 117
  3289. 117["Block 117:\n %118 = load i32, i32* %11, align 4\n %119 = icmp sgt i32 %118, 0\n br i1 %119, label %120, label %122\n"]
  3290. 117 -->|true| 120
  3291. 117 -->|false| 122
  3292. 120["Block 120:\n %121 = call %fused_return_calculateDistance_memoizedFib @fused_calculateDistance(i1 true, %struct.Point* null, %struct.Point* null, i32* null, i32 7)\n %extracted_target_returntarget_ = extractvalue %fused_return_calculateDistance_memoizedFib %121, 0\n store i32 %extracted_target_returntarget_, i32* %13, align 4\n br label %125\n"]
  3293. 120 --> 125
  3294. 122["Block 122:\n %123 = load i32, i32* %11, align 4\n %124 = call i32 @fused_performSimpleCalculations(i1 true, i32 %123)\n store i32 %124, i32* %13, align 4\n br label %125\n"]
  3295. 122 --> 125
  3296. 125["Block 125:\n %126 = load i32, i32* %13, align 4\n ret i32 %126\n"]
  3297. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  3298. ```
  3299. [INFO][performCodeFusion] Fixing blocks without terminators...
  3300. [INFO][performCodeFusion] Added return with default value to block: target_phi_1
  3301. [INFO][performCodeFusion] Starting PHI node repair
  3302. [INFO][performCodeFusion] [After fix PHI]Generated control flow graph for fused function:
  3303. ```mermaid: fused_pushBack
  3304. graph TD
  3305. entry["Block entry:\n %3 = alloca %struct.DynamicArray*\n %4 = alloca i32\n %5 = alloca i32\n %6 = alloca i32*\n %7 = alloca [14 x i8]\n %8 = alloca [8 x i32]\n %9 = alloca i32\n %10 = alloca [100 x [100 x i32]]\n %11 = alloca i32\n %12 = alloca i32\n %13 = alloca i32\n %14 = xor i1 %0, true\n br label %target_cond_0\n"]
  3306. entry --> target_cond_0
  3307. target_cond_0["Block target_cond_0:\n br i1 %0, label %15, label %target_skip_0\n"]
  3308. target_cond_0 -->|true| 15
  3309. target_cond_0 -->|false| target_skip_0
  3310. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  3311. target_skip_0 --> target_phi_0
  3312. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  3313. target_phi_0 --> bunker_cond_0
  3314. 15["Block 15:\n %16 = call i32 @testPoints(i32 5)\n call void @llvm.memset.p0i8.i64(i8* align 16 bitcast ([100 x i32]* @cache to i8*), i8 -1, i64 400, i1 false)\n %17 = bitcast [14 x i8]* %7 to i8*\n call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 %17, i8* align 1 getelementptr inbounds ([14 x i8], [14 x i8]* @__const.projectB_main.str, i32 0, i32 0), i64 14, i1 false)\n %18 = getelementptr inbounds [14 x i8], [14 x i8]* %7, i64 0, i64 0\n call void @reverseString(i8* %18)\n %19 = bitcast [8 x i32]* %8 to i8*\n call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 16 %19, i8* align 16 bitcast ([8 x i32]* @__const.projectB_main.arr to i8*), i64 32, i1 false)\n store i32 8, i32* %9, align 4\n %20 = bitcast [100 x [100 x i32]]* %10 to i8*\n call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 16 %20, i8* align 16 bitcast (<{ <{ i32, i32, i32, [97 x i32] }>, <{ i32, i32, i32, [97 x i32] }>, <{ i32, i32, i32, [97 x i32] }>, [97 x <{ i32, i32, i32, [97 x i32] }>] }>* @__const.projectB_main.matrix to i8*), i64 40000, i1 false)\n %21 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %10, i64 0, i64 0\n %22 = call %fused_return_validateMatrix_processMatrix @fused_validateMatrix(i1 true, %struct.Matrix* null, [100 x i32]* %21, i32 3)\n %extracted_target_return2target_ = extractvalue %fused_return_validateMatrix_processMatrix %22, 0\n store i32 %extracted_target_return2target_, i32* %11, align 4\n store i32 0, i32* %12, align 4\n br label %target_phi_0\n"]
  3315. 15 --> target_phi_0
  3316. bunker_cond_0["Block bunker_cond_0:\n br i1 %14, label %23, label %bunker_skip_0\n"]
  3317. bunker_cond_0 -->|true| 23
  3318. bunker_cond_0 -->|false| bunker_skip_0
  3319. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  3320. bunker_skip_0 --> bunker_phi_0
  3321. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  3322. bunker_phi_0 --> target_cond_1
  3323. 23["Block 23:\n store %struct.DynamicArray* %1, %struct.DynamicArray** %3, align 8\n store i32 %2, i32* %4, align 4\n %24 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %25 = icmp ne %struct.DynamicArray* %24, null\n br i1 %25, label %27, label %26\n"]
  3324. 23 -->|true| 27
  3325. 23 -->|false| 26
  3326. 26["Block 26:\n call void @setErrorMessage(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.10, i64 0, i64 0))\n br label %108\n"]
  3327. 26 --> 108
  3328. 27["Block 27:\n %28 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %29 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %28, i32 0, i32 1\n %30 = load i32, i32* %29, align 8\n %31 = icmp sge i32 %30, 1000\n br i1 %31, label %32, label %33\n"]
  3329. 27 -->|true| 32
  3330. 27 -->|false| 33
  3331. 32["Block 32:\n call void @setErrorMessage(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.11, i64 0, i64 0))\n br label %108\n"]
  3332. 32 --> 108
  3333. 33["Block 33:\n %34 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %35 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %34, i32 0, i32 1\n %36 = load i32, i32* %35, align 8\n %37 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %38 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %37, i32 0, i32 2\n %39 = load i32, i32* %38, align 4\n %40 = icmp sge i32 %36, %39\n br i1 %40, label %41, label %69\n"]
  3334. 33 -->|true| 41
  3335. 33 -->|false| 69
  3336. 41["Block 41:\n %42 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %43 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %42, i32 0, i32 2\n %44 = load i32, i32* %43, align 4\n %45 = mul nsw i32 %44, 2\n store i32 %45, i32* %5, align 4\n %46 = load i32, i32* %5, align 4\n %47 = icmp sgt i32 %46, 1000\n br i1 %47, label %48, label %49\n"]
  3337. 41 -->|true| 48
  3338. 41 -->|false| 49
  3339. 48["Block 48:\n store i32 1000, i32* %5, align 4\n br label %49\n"]
  3340. 48 --> 49
  3341. 49["Block 49:\n %50 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %51 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %50, i32 0, i32 0\n %52 = load i32*, i32** %51, align 8\n %53 = bitcast i32* %52 to i8*\n %54 = load i32, i32* %5, align 4\n %55 = sext i32 %54 to i64\n %56 = mul i64 4, %55\n %57 = call i8* @realloc(i8* %53, i64 %56) #7\n %58 = bitcast i8* %57 to i32*\n store i32* %58, i32** %6, align 8\n %59 = load i32*, i32** %6, align 8\n %60 = icmp ne i32* %59, null\n br i1 %60, label %62, label %61\n"]
  3342. 49 -->|true| 62
  3343. 49 -->|false| 61
  3344. 61["Block 61:\n call void @setErrorMessage(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.12, i64 0, i64 0))\n br label %108\n"]
  3345. 61 --> 108
  3346. 62["Block 62:\n %63 = load i32*, i32** %6, align 8\n %64 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %65 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %64, i32 0, i32 0\n store i32* %63, i32** %65, align 8\n %66 = load i32, i32* %5, align 4\n %67 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %68 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %67, i32 0, i32 2\n store i32 %66, i32* %68, align 4\n br label %69\n"]
  3347. 62 --> 69
  3348. 69["Block 69:\n %70 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %71 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %70, i32 0, i32 3\n %72 = load i32, i32* %71, align 8\n %73 = icmp ne i32 %72, 0\n br i1 %73, label %74, label %95\n"]
  3349. 69 -->|true| 74
  3350. 69 -->|false| 95
  3351. 74["Block 74:\n %75 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %76 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %75, i32 0, i32 1\n %77 = load i32, i32* %76, align 8\n %78 = icmp sgt i32 %77, 0\n br i1 %78, label %79, label %95\n"]
  3352. 74 -->|true| 79
  3353. 74 -->|false| 95
  3354. 79["Block 79:\n %80 = load i32, i32* %4, align 4\n %81 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %82 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %81, i32 0, i32 0\n %83 = load i32*, i32** %82, align 8\n %84 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %85 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %84, i32 0, i32 1\n %86 = load i32, i32* %85, align 8\n %87 = sub nsw i32 %86, 1\n %88 = sext i32 %87 to i64\n %89 = getelementptr inbounds i32, i32* %83, i64 %88\n %90 = load i32, i32* %89, align 4\n %91 = icmp slt i32 %80, %90\n br i1 %91, label %92, label %95\n"]
  3355. 79 -->|true| 92
  3356. 79 -->|false| 95
  3357. 92["Block 92:\n %93 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %94 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %93, i32 0, i32 3\n store i32 0, i32* %94, align 8\n br label %95\n"]
  3358. 92 --> 95
  3359. 95["Block 95:\n %96 = load i32, i32* %4, align 4\n %97 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %98 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %97, i32 0, i32 0\n %99 = load i32*, i32** %98, align 8\n %100 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %101 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %100, i32 0, i32 1\n %102 = load i32, i32* %101, align 8\n %103 = add nsw i32 %102, 1\n store i32 %103, i32* %101, align 8\n %104 = sext i32 %102 to i64\n %105 = getelementptr inbounds i32, i32* %99, i64 %104\n store i32 %96, i32* %105, align 4\n %106 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %107 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %106, i32 0, i32 4\n store i32 1, i32* %107, align 4\n br label %108\n"]
  3360. 95 --> 108
  3361. 108["Block 108:\n ret i32 0\n"]
  3362. target_cond_1["Block target_cond_1:\n br i1 %0, label %109, label %target_skip_1\n"]
  3363. target_cond_1 -->|true| 109
  3364. target_cond_1 -->|false| target_skip_1
  3365. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  3366. target_skip_1 --> target_phi_1
  3367. target_phi_1["Block target_phi_1:\n ret i32 0\n"]
  3368. 109["Block 109:\n %110 = load i32, i32* %12, align 4\n %111 = call %fused_return_calculateDistance_memoizedFib @fused_calculateDistance(i1 true, %struct.Point* null, %struct.Point* null, i32* null, i32 %110)\n %extracted_target_return1target_ = extractvalue %fused_return_calculateDistance_memoizedFib %111, 0\n %112 = load i32, i32* %12, align 4\n %113 = add nsw i32 %112, 1\n store i32 %113, i32* %12, align 4\n br label %114\n"]
  3369. 109 --> 114
  3370. 114["Block 114:\n %115 = load i32, i32* %12, align 4\n %116 = icmp slt i32 %115, 10\n br i1 %116, label %109, label %117\n"]
  3371. 114 -->|true| 109
  3372. 114 -->|false| 117
  3373. 117["Block 117:\n %118 = load i32, i32* %11, align 4\n %119 = icmp sgt i32 %118, 0\n br i1 %119, label %120, label %122\n"]
  3374. 117 -->|true| 120
  3375. 117 -->|false| 122
  3376. 120["Block 120:\n %121 = call %fused_return_calculateDistance_memoizedFib @fused_calculateDistance(i1 true, %struct.Point* null, %struct.Point* null, i32* null, i32 7)\n %extracted_target_returntarget_ = extractvalue %fused_return_calculateDistance_memoizedFib %121, 0\n store i32 %extracted_target_returntarget_, i32* %13, align 4\n br label %125\n"]
  3377. 120 --> 125
  3378. 122["Block 122:\n %123 = load i32, i32* %11, align 4\n %124 = call i32 @fused_performSimpleCalculations(i1 true, i32 %123)\n store i32 %124, i32* %13, align 4\n br label %125\n"]
  3379. 122 --> 125
  3380. 125["Block 125:\n %126 = load i32, i32* %13, align 4\n ret i32 %126\n"]
  3381. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  3382. ```
  3383. [INFO][performCodeFusion] Attempting to delete original functions...
  3384. [INFO][performCodeFusion] [After erase]Generated control flow graph for fused function:
  3385. ```mermaid: fused_pushBack
  3386. graph TD
  3387. entry["Block entry:\n %3 = alloca %struct.DynamicArray*\n %4 = alloca i32\n %5 = alloca i32\n %6 = alloca i32*\n %7 = alloca [14 x i8]\n %8 = alloca [8 x i32]\n %9 = alloca i32\n %10 = alloca [100 x [100 x i32]]\n %11 = alloca i32\n %12 = alloca i32\n %13 = alloca i32\n %14 = xor i1 %0, true\n br label %target_cond_0\n"]
  3388. entry --> target_cond_0
  3389. target_cond_0["Block target_cond_0:\n br i1 %0, label %15, label %target_skip_0\n"]
  3390. target_cond_0 -->|true| 15
  3391. target_cond_0 -->|false| target_skip_0
  3392. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  3393. target_skip_0 --> target_phi_0
  3394. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  3395. target_phi_0 --> bunker_cond_0
  3396. 15["Block 15:\n %16 = call i32 @testPoints(i32 5)\n call void @llvm.memset.p0i8.i64(i8* align 16 bitcast ([100 x i32]* @cache to i8*), i8 -1, i64 400, i1 false)\n %17 = bitcast [14 x i8]* %7 to i8*\n call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 %17, i8* align 1 getelementptr inbounds ([14 x i8], [14 x i8]* @__const.projectB_main.str, i32 0, i32 0), i64 14, i1 false)\n %18 = getelementptr inbounds [14 x i8], [14 x i8]* %7, i64 0, i64 0\n call void @reverseString(i8* %18)\n %19 = bitcast [8 x i32]* %8 to i8*\n call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 16 %19, i8* align 16 bitcast ([8 x i32]* @__const.projectB_main.arr to i8*), i64 32, i1 false)\n store i32 8, i32* %9, align 4\n %20 = bitcast [100 x [100 x i32]]* %10 to i8*\n call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 16 %20, i8* align 16 bitcast (<{ <{ i32, i32, i32, [97 x i32] }>, <{ i32, i32, i32, [97 x i32] }>, <{ i32, i32, i32, [97 x i32] }>, [97 x <{ i32, i32, i32, [97 x i32] }>] }>* @__const.projectB_main.matrix to i8*), i64 40000, i1 false)\n %21 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %10, i64 0, i64 0\n %22 = call %fused_return_validateMatrix_processMatrix @fused_validateMatrix(i1 true, %struct.Matrix* null, [100 x i32]* %21, i32 3)\n %extracted_target_return2target_ = extractvalue %fused_return_validateMatrix_processMatrix %22, 0\n store i32 %extracted_target_return2target_, i32* %11, align 4\n store i32 0, i32* %12, align 4\n br label %target_phi_0\n"]
  3397. 15 --> target_phi_0
  3398. bunker_cond_0["Block bunker_cond_0:\n br i1 %14, label %23, label %bunker_skip_0\n"]
  3399. bunker_cond_0 -->|true| 23
  3400. bunker_cond_0 -->|false| bunker_skip_0
  3401. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  3402. bunker_skip_0 --> bunker_phi_0
  3403. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  3404. bunker_phi_0 --> target_cond_1
  3405. 23["Block 23:\n store %struct.DynamicArray* %1, %struct.DynamicArray** %3, align 8\n store i32 %2, i32* %4, align 4\n %24 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %25 = icmp ne %struct.DynamicArray* %24, null\n br i1 %25, label %27, label %26\n"]
  3406. 23 -->|true| 27
  3407. 23 -->|false| 26
  3408. 26["Block 26:\n call void @setErrorMessage(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.10, i64 0, i64 0))\n br label %108\n"]
  3409. 26 --> 108
  3410. 27["Block 27:\n %28 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %29 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %28, i32 0, i32 1\n %30 = load i32, i32* %29, align 8\n %31 = icmp sge i32 %30, 1000\n br i1 %31, label %32, label %33\n"]
  3411. 27 -->|true| 32
  3412. 27 -->|false| 33
  3413. 32["Block 32:\n call void @setErrorMessage(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.11, i64 0, i64 0))\n br label %108\n"]
  3414. 32 --> 108
  3415. 33["Block 33:\n %34 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %35 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %34, i32 0, i32 1\n %36 = load i32, i32* %35, align 8\n %37 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %38 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %37, i32 0, i32 2\n %39 = load i32, i32* %38, align 4\n %40 = icmp sge i32 %36, %39\n br i1 %40, label %41, label %69\n"]
  3416. 33 -->|true| 41
  3417. 33 -->|false| 69
  3418. 41["Block 41:\n %42 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %43 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %42, i32 0, i32 2\n %44 = load i32, i32* %43, align 4\n %45 = mul nsw i32 %44, 2\n store i32 %45, i32* %5, align 4\n %46 = load i32, i32* %5, align 4\n %47 = icmp sgt i32 %46, 1000\n br i1 %47, label %48, label %49\n"]
  3419. 41 -->|true| 48
  3420. 41 -->|false| 49
  3421. 48["Block 48:\n store i32 1000, i32* %5, align 4\n br label %49\n"]
  3422. 48 --> 49
  3423. 49["Block 49:\n %50 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %51 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %50, i32 0, i32 0\n %52 = load i32*, i32** %51, align 8\n %53 = bitcast i32* %52 to i8*\n %54 = load i32, i32* %5, align 4\n %55 = sext i32 %54 to i64\n %56 = mul i64 4, %55\n %57 = call i8* @realloc(i8* %53, i64 %56) #7\n %58 = bitcast i8* %57 to i32*\n store i32* %58, i32** %6, align 8\n %59 = load i32*, i32** %6, align 8\n %60 = icmp ne i32* %59, null\n br i1 %60, label %62, label %61\n"]
  3424. 49 -->|true| 62
  3425. 49 -->|false| 61
  3426. 61["Block 61:\n call void @setErrorMessage(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.12, i64 0, i64 0))\n br label %108\n"]
  3427. 61 --> 108
  3428. 62["Block 62:\n %63 = load i32*, i32** %6, align 8\n %64 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %65 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %64, i32 0, i32 0\n store i32* %63, i32** %65, align 8\n %66 = load i32, i32* %5, align 4\n %67 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %68 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %67, i32 0, i32 2\n store i32 %66, i32* %68, align 4\n br label %69\n"]
  3429. 62 --> 69
  3430. 69["Block 69:\n %70 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %71 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %70, i32 0, i32 3\n %72 = load i32, i32* %71, align 8\n %73 = icmp ne i32 %72, 0\n br i1 %73, label %74, label %95\n"]
  3431. 69 -->|true| 74
  3432. 69 -->|false| 95
  3433. 74["Block 74:\n %75 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %76 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %75, i32 0, i32 1\n %77 = load i32, i32* %76, align 8\n %78 = icmp sgt i32 %77, 0\n br i1 %78, label %79, label %95\n"]
  3434. 74 -->|true| 79
  3435. 74 -->|false| 95
  3436. 79["Block 79:\n %80 = load i32, i32* %4, align 4\n %81 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %82 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %81, i32 0, i32 0\n %83 = load i32*, i32** %82, align 8\n %84 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %85 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %84, i32 0, i32 1\n %86 = load i32, i32* %85, align 8\n %87 = sub nsw i32 %86, 1\n %88 = sext i32 %87 to i64\n %89 = getelementptr inbounds i32, i32* %83, i64 %88\n %90 = load i32, i32* %89, align 4\n %91 = icmp slt i32 %80, %90\n br i1 %91, label %92, label %95\n"]
  3437. 79 -->|true| 92
  3438. 79 -->|false| 95
  3439. 92["Block 92:\n %93 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %94 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %93, i32 0, i32 3\n store i32 0, i32* %94, align 8\n br label %95\n"]
  3440. 92 --> 95
  3441. 95["Block 95:\n %96 = load i32, i32* %4, align 4\n %97 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %98 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %97, i32 0, i32 0\n %99 = load i32*, i32** %98, align 8\n %100 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %101 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %100, i32 0, i32 1\n %102 = load i32, i32* %101, align 8\n %103 = add nsw i32 %102, 1\n store i32 %103, i32* %101, align 8\n %104 = sext i32 %102 to i64\n %105 = getelementptr inbounds i32, i32* %99, i64 %104\n store i32 %96, i32* %105, align 4\n %106 = load %struct.DynamicArray*, %struct.DynamicArray** %3, align 8\n %107 = getelementptr inbounds %struct.DynamicArray, %struct.DynamicArray* %106, i32 0, i32 4\n store i32 1, i32* %107, align 4\n br label %108\n"]
  3442. 95 --> 108
  3443. 108["Block 108:\n ret i32 0\n"]
  3444. target_cond_1["Block target_cond_1:\n br i1 %0, label %109, label %target_skip_1\n"]
  3445. target_cond_1 -->|true| 109
  3446. target_cond_1 -->|false| target_skip_1
  3447. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  3448. target_skip_1 --> target_phi_1
  3449. target_phi_1["Block target_phi_1:\n ret i32 0\n"]
  3450. 109["Block 109:\n %110 = load i32, i32* %12, align 4\n %111 = call %fused_return_calculateDistance_memoizedFib @fused_calculateDistance(i1 true, %struct.Point* null, %struct.Point* null, i32* null, i32 %110)\n %extracted_target_return1target_ = extractvalue %fused_return_calculateDistance_memoizedFib %111, 0\n %112 = load i32, i32* %12, align 4\n %113 = add nsw i32 %112, 1\n store i32 %113, i32* %12, align 4\n br label %114\n"]
  3451. 109 --> 114
  3452. 114["Block 114:\n %115 = load i32, i32* %12, align 4\n %116 = icmp slt i32 %115, 10\n br i1 %116, label %109, label %117\n"]
  3453. 114 -->|true| 109
  3454. 114 -->|false| 117
  3455. 117["Block 117:\n %118 = load i32, i32* %11, align 4\n %119 = icmp sgt i32 %118, 0\n br i1 %119, label %120, label %122\n"]
  3456. 117 -->|true| 120
  3457. 117 -->|false| 122
  3458. 120["Block 120:\n %121 = call %fused_return_calculateDistance_memoizedFib @fused_calculateDistance(i1 true, %struct.Point* null, %struct.Point* null, i32* null, i32 7)\n %extracted_target_returntarget_ = extractvalue %fused_return_calculateDistance_memoizedFib %121, 0\n store i32 %extracted_target_returntarget_, i32* %13, align 4\n br label %125\n"]
  3459. 120 --> 125
  3460. 122["Block 122:\n %123 = load i32, i32* %11, align 4\n %124 = call i32 @fused_performSimpleCalculations(i1 true, i32 %123)\n store i32 %124, i32* %13, align 4\n br label %125\n"]
  3461. 122 --> 125
  3462. 125["Block 125:\n %126 = load i32, i32* %13, align 4\n ret i32 %126\n"]
  3463. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  3464. ```
  3465. [INFO][performCodeFusion] Completed function fusion: fused_pushBack
  3466. [INFO][performCodeFusion] Processing function pair: target=reverseString, bunker=getErrorMessage
  3467. [INFO][performCodeFusion] [After clone]Generated control flow graph for fused function:
  3468. ```mermaid: fused_getErrorMessage
  3469. graph TD
  3470. entry["Block entry:\n %2 = alloca i8*\n %3 = alloca i32\n %4 = alloca i32\n %5 = alloca i8\n %6 = xor i1 %0, true\n br label %target_cond_0\n"]
  3471. entry --> target_cond_0
  3472. target_cond_0["Block target_cond_0:\n br i1 %0, label %7, label %target_skip_0\n"]
  3473. target_cond_0 -->|true| 7
  3474. target_cond_0 -->|false| target_skip_0
  3475. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  3476. target_skip_0 --> target_phi_0
  3477. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  3478. target_phi_0 --> bunker_cond_0
  3479. 7["Block 7:\n store i8* %0, i8** %2, align 8\n %8 = load i8*, i8** %2, align 8\n %9 = call i64 @strlen(i8* %2) #7\n %10 = trunc i64 %3 to i32\n store i32 %4, i32* %3, align 4\n store i32 0, i32* %4, align 4\n br label %target_phi_0\n"]
  3480. 7 --> target_phi_0
  3481. bunker_cond_0["Block bunker_cond_0:\n br i1 %6, label %11, label %bunker_skip_0\n"]
  3482. bunker_cond_0 -->|true| 11
  3483. bunker_cond_0 -->|false| bunker_skip_0
  3484. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  3485. bunker_skip_0 --> bunker_phi_0
  3486. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  3487. bunker_phi_0 --> target_cond_1
  3488. 11["Block 11:\n %12 = load i8*, i8** @globalErrorMessage, align 8\n %13 = icmp ne i8* %1, null\n br i1 %2, label %3, label %5\n"]
  3489. 11 -->|true| 3
  3490. 11 -->|false| 5
  3491. 14["Block 14:\n %15 = load i8*, i8** @globalErrorMessage, align 8\n br label %6\n"]
  3492. 14 --> 6
  3493. 16["Block 16:\n br label %6\n"]
  3494. 16 --> 6
  3495. 17["Block 17:\n %18 = phi i8* [ %4, %3 ], [ getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), %5 ]\n ret i8* %7\n"]
  3496. target_cond_1["Block target_cond_1:\n br i1 %0, label %19, label %target_skip_1\n"]
  3497. target_cond_1 -->|true| 19
  3498. target_cond_1 -->|false| target_skip_1
  3499. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  3500. target_skip_1 --> target_phi_1
  3501. target_phi_1["Block target_phi_1:\n"]
  3502. 19["Block 19:\n %20 = load i32, i32* %4, align 4\n %21 = load i32, i32* %3, align 4\n %22 = sdiv i32 %7, 2\n %23 = icmp slt i32 %6, %8\n br i1 %9, label %10, label %39\n"]
  3503. 19 -->|true| 10
  3504. 19 -->|false| 39
  3505. 24["Block 24:\n %25 = load i8*, i8** %2, align 8\n %26 = load i32, i32* %4, align 4\n %27 = sext i32 %12 to i64\n %28 = getelementptr inbounds i8, i8* %11, i64 %13\n %29 = load i8, i8* %14, align 1\n store i8 %15, i8* %5, align 1\n %30 = load i8*, i8** %2, align 8\n %31 = load i32, i32* %3, align 4\n %32 = sub nsw i32 %17, 1\n %33 = load i32, i32* %4, align 4\n %34 = sub nsw i32 %18, %19\n %35 = sext i32 %20 to i64\n %36 = getelementptr inbounds i8, i8* %16, i64 %21\n %37 = load i8, i8* %22, align 1\n %38 = load i8*, i8** %2, align 8\n %39 = load i32, i32* %4, align 4\n %40 = sext i32 %25 to i64\n %41 = getelementptr inbounds i8, i8* %24, i64 %26\n store i8 %23, i8* %27, align 1\n %42 = load i8, i8* %5, align 1\n %43 = load i8*, i8** %2, align 8\n %44 = load i32, i32* %3, align 4\n %45 = sub nsw i32 %30, 1\n %46 = load i32, i32* %4, align 4\n %47 = sub nsw i32 %31, %32\n %48 = sext i32 %33 to i64\n %49 = getelementptr inbounds i8, i8* %29, i64 %34\n store i8 %28, i8* %35, align 1\n br label %36\n"]
  3506. 24 --> 36
  3507. 50["Block 50:\n ret void\n"]
  3508. 51["Block 51:\n %52 = load i32, i32* %4, align 4\n %53 = add nsw i32 %37, 1\n store i32 %38, i32* %4, align 4\n br label %target_phi_1\n"]
  3509. 51 --> target_phi_1
  3510. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  3511. ```
  3512. [INFO][performCodeFusion] Fixing return instruction in block %17
  3513. [INFO][performCodeFusion] Fixing return instruction in block %50
  3514. [WARNING][performCodeFusion] No terminator found in block: target_phi_1
  3515. [INFO][performCodeFusion] [After fix]Generated control flow graph for fused function:
  3516. ```mermaid: fused_getErrorMessage
  3517. graph TD
  3518. entry["Block entry:\n %2 = alloca i8*\n %3 = alloca i32\n %4 = alloca i32\n %5 = alloca i8\n %6 = xor i1 %0, true\n br label %target_cond_0\n"]
  3519. entry --> target_cond_0
  3520. target_cond_0["Block target_cond_0:\n br i1 %0, label %7, label %target_skip_0\n"]
  3521. target_cond_0 -->|true| 7
  3522. target_cond_0 -->|false| target_skip_0
  3523. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  3524. target_skip_0 --> target_phi_0
  3525. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  3526. target_phi_0 --> bunker_cond_0
  3527. 7["Block 7:\n store i8* %1, i8** %2, align 8\n %8 = load i8*, i8** %2, align 8\n %9 = call i64 @strlen(i8* %8) #7\n %10 = trunc i64 %9 to i32\n store i32 %10, i32* %3, align 4\n store i32 0, i32* %4, align 4\n br label %target_phi_0\n"]
  3528. 7 --> target_phi_0
  3529. bunker_cond_0["Block bunker_cond_0:\n br i1 %6, label %11, label %bunker_skip_0\n"]
  3530. bunker_cond_0 -->|true| 11
  3531. bunker_cond_0 -->|false| bunker_skip_0
  3532. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  3533. bunker_skip_0 --> bunker_phi_0
  3534. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  3535. bunker_phi_0 --> target_cond_1
  3536. 11["Block 11:\n %12 = load i8*, i8** @globalErrorMessage, align 8\n %13 = icmp ne i8* %12, null\n br i1 %13, label %14, label %16\n"]
  3537. 11 -->|true| 14
  3538. 11 -->|false| 16
  3539. 14["Block 14:\n %15 = load i8*, i8** @globalErrorMessage, align 8\n br label %17\n"]
  3540. 14 --> 17
  3541. 16["Block 16:\n br label %17\n"]
  3542. 16 --> 17
  3543. 17["Block 17:\n %18 = phi i8* [ %15, %3 ], [ getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), %5 ]\n ret i8* %18\n"]
  3544. target_cond_1["Block target_cond_1:\n br i1 %0, label %19, label %target_skip_1\n"]
  3545. target_cond_1 -->|true| 19
  3546. target_cond_1 -->|false| target_skip_1
  3547. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  3548. target_skip_1 --> target_phi_1
  3549. target_phi_1["Block target_phi_1:\n"]
  3550. 19["Block 19:\n %20 = load i32, i32* %4, align 4\n %21 = load i32, i32* %3, align 4\n %22 = sdiv i32 %21, 2\n %23 = icmp slt i32 %20, %22\n br i1 %23, label %24, label %50\n"]
  3551. 19 -->|true| 24
  3552. 19 -->|false| 50
  3553. 24["Block 24:\n %25 = load i8*, i8** %2, align 8\n %26 = load i32, i32* %4, align 4\n %27 = sext i32 %26 to i64\n %28 = getelementptr inbounds i8, i8* %25, i64 %27\n %29 = load i8, i8* %28, align 1\n store i8 %29, i8* %5, align 1\n %30 = load i8*, i8** %2, align 8\n %31 = load i32, i32* %3, align 4\n %32 = sub nsw i32 %31, 1\n %33 = load i32, i32* %4, align 4\n %34 = sub nsw i32 %32, %33\n %35 = sext i32 %34 to i64\n %36 = getelementptr inbounds i8, i8* %30, i64 %35\n %37 = load i8, i8* %36, align 1\n %38 = load i8*, i8** %2, align 8\n %39 = load i32, i32* %4, align 4\n %40 = sext i32 %39 to i64\n %41 = getelementptr inbounds i8, i8* %38, i64 %40\n store i8 %37, i8* %41, align 1\n %42 = load i8, i8* %5, align 1\n %43 = load i8*, i8** %2, align 8\n %44 = load i32, i32* %3, align 4\n %45 = sub nsw i32 %44, 1\n %46 = load i32, i32* %4, align 4\n %47 = sub nsw i32 %45, %46\n %48 = sext i32 %47 to i64\n %49 = getelementptr inbounds i8, i8* %43, i64 %48\n store i8 %42, i8* %49, align 1\n br label %51\n"]
  3554. 24 --> 51
  3555. 50["Block 50:\n ret void\n"]
  3556. 51["Block 51:\n %52 = load i32, i32* %4, align 4\n %53 = add nsw i32 %52, 1\n store i32 %53, i32* %4, align 4\n br label %target_phi_1\n"]
  3557. 51 --> target_phi_1
  3558. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  3559. ```
  3560. [INFO][performCodeFusion] Processing non-struct return type: i8*
  3561. [INFO][performCodeFusion] Processing bunker block: %11
  3562. [INFO][performCodeFusion] Processing bunker block: %17
  3563. [INFO][performCodeFusion] Found return instruction in bunker block %17. Return value type: i8*
  3564. [INFO][performCodeFusion] Processing bunker block: %16
  3565. [INFO][performCodeFusion] Processing bunker block: %14
  3566. [INFO][performCodeFusion] Processing target block: %51
  3567. [INFO][performCodeFusion] Processing target block: %24
  3568. [INFO][performCodeFusion] Processing target block: %19
  3569. [INFO][performCodeFusion] Processing target block: %7
  3570. [INFO][performCodeFusion] Processing target block: %50
  3571. [INFO][performCodeFusion] Found void return instruction in target block %50
  3572. [INFO][performCodeFusion] Return type mismatch in target block %50. Expected: i8*, Found: void
  3573. [INFO][performCodeFusion] Created new return instruction with default value in block %50
  3574. [INFO][performCodeFusion] [After fix return]Generated control flow graph for fused function:
  3575. ```mermaid: fused_getErrorMessage
  3576. graph TD
  3577. entry["Block entry:\n %2 = alloca i8*\n %3 = alloca i32\n %4 = alloca i32\n %5 = alloca i8\n %6 = xor i1 %0, true\n br label %target_cond_0\n"]
  3578. entry --> target_cond_0
  3579. target_cond_0["Block target_cond_0:\n br i1 %0, label %7, label %target_skip_0\n"]
  3580. target_cond_0 -->|true| 7
  3581. target_cond_0 -->|false| target_skip_0
  3582. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  3583. target_skip_0 --> target_phi_0
  3584. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  3585. target_phi_0 --> bunker_cond_0
  3586. 7["Block 7:\n store i8* %1, i8** %2, align 8\n %8 = load i8*, i8** %2, align 8\n %9 = call i64 @strlen(i8* %8) #7\n %10 = trunc i64 %9 to i32\n store i32 %10, i32* %3, align 4\n store i32 0, i32* %4, align 4\n br label %target_phi_0\n"]
  3587. 7 --> target_phi_0
  3588. bunker_cond_0["Block bunker_cond_0:\n br i1 %6, label %11, label %bunker_skip_0\n"]
  3589. bunker_cond_0 -->|true| 11
  3590. bunker_cond_0 -->|false| bunker_skip_0
  3591. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  3592. bunker_skip_0 --> bunker_phi_0
  3593. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  3594. bunker_phi_0 --> target_cond_1
  3595. 11["Block 11:\n %12 = load i8*, i8** @globalErrorMessage, align 8\n %13 = icmp ne i8* %12, null\n br i1 %13, label %14, label %16\n"]
  3596. 11 -->|true| 14
  3597. 11 -->|false| 16
  3598. 14["Block 14:\n %15 = load i8*, i8** @globalErrorMessage, align 8\n br label %17\n"]
  3599. 14 --> 17
  3600. 16["Block 16:\n br label %17\n"]
  3601. 16 --> 17
  3602. 17["Block 17:\n %18 = phi i8* [ %15, %3 ], [ getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), %5 ]\n ret i8* %18\n"]
  3603. target_cond_1["Block target_cond_1:\n br i1 %0, label %19, label %target_skip_1\n"]
  3604. target_cond_1 -->|true| 19
  3605. target_cond_1 -->|false| target_skip_1
  3606. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  3607. target_skip_1 --> target_phi_1
  3608. target_phi_1["Block target_phi_1:\n"]
  3609. 19["Block 19:\n %20 = load i32, i32* %4, align 4\n %21 = load i32, i32* %3, align 4\n %22 = sdiv i32 %21, 2\n %23 = icmp slt i32 %20, %22\n br i1 %23, label %24, label %50\n"]
  3610. 19 -->|true| 24
  3611. 19 -->|false| 50
  3612. 24["Block 24:\n %25 = load i8*, i8** %2, align 8\n %26 = load i32, i32* %4, align 4\n %27 = sext i32 %26 to i64\n %28 = getelementptr inbounds i8, i8* %25, i64 %27\n %29 = load i8, i8* %28, align 1\n store i8 %29, i8* %5, align 1\n %30 = load i8*, i8** %2, align 8\n %31 = load i32, i32* %3, align 4\n %32 = sub nsw i32 %31, 1\n %33 = load i32, i32* %4, align 4\n %34 = sub nsw i32 %32, %33\n %35 = sext i32 %34 to i64\n %36 = getelementptr inbounds i8, i8* %30, i64 %35\n %37 = load i8, i8* %36, align 1\n %38 = load i8*, i8** %2, align 8\n %39 = load i32, i32* %4, align 4\n %40 = sext i32 %39 to i64\n %41 = getelementptr inbounds i8, i8* %38, i64 %40\n store i8 %37, i8* %41, align 1\n %42 = load i8, i8* %5, align 1\n %43 = load i8*, i8** %2, align 8\n %44 = load i32, i32* %3, align 4\n %45 = sub nsw i32 %44, 1\n %46 = load i32, i32* %4, align 4\n %47 = sub nsw i32 %45, %46\n %48 = sext i32 %47 to i64\n %49 = getelementptr inbounds i8, i8* %43, i64 %48\n store i8 %42, i8* %49, align 1\n br label %51\n"]
  3613. 24 --> 51
  3614. 50["Block 50:\n ret i8* null\n"]
  3615. 51["Block 51:\n %52 = load i32, i32* %4, align 4\n %53 = add nsw i32 %52, 1\n store i32 %53, i32* %4, align 4\n br label %target_phi_1\n"]
  3616. 51 --> target_phi_1
  3617. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  3618. ```
  3619. [DEBUG][updateCallSite] Original call instruction:
  3620. %181 = call i8* @getErrorMessage()
  3621. [DEBUG][updateCallSite] Adding bunker control parameter
  3622. [DEBUG][updateCallSite] Adding original call parameters:
  3623. [DEBUG][updateCallSite] Adding default target parameters:
  3624. [DEBUG][updateCallSite] Parameter type: i8*
  3625. [DEBUG][updateCallSite] New call instruction:
  3626. %181 = call i8* @fused_getErrorMessage(i1 false, i8* null)
  3627. [DEBUG][updateCallSite] Processing non-void return value of type: i8*
  3628. [DEBUG][updateCallSite] Using direct return value
  3629. [DEBUG][updateCallSite] Successfully replaced all uses of original call
  3630. [INFO][updateCallSite] Successfully updated call site from %181 = call i8* @getErrorMessage() to %181 = call i8* @fused_getErrorMessage(i1 false, i8* null)
  3631. [DEBUG][updateCallSite] Original call instruction:
  3632. %122 = call i8* @getErrorMessage()
  3633. [DEBUG][updateCallSite] Adding bunker control parameter
  3634. [DEBUG][updateCallSite] Adding original call parameters:
  3635. [DEBUG][updateCallSite] Adding default target parameters:
  3636. [DEBUG][updateCallSite] Parameter type: i8*
  3637. [DEBUG][updateCallSite] New call instruction:
  3638. %122 = call i8* @fused_getErrorMessage(i1 false, i8* null)
  3639. [DEBUG][updateCallSite] Processing non-void return value of type: i8*
  3640. [DEBUG][updateCallSite] Using direct return value
  3641. [DEBUG][updateCallSite] Successfully replaced all uses of original call
  3642. [INFO][updateCallSite] Successfully updated call site from %122 = call i8* @getErrorMessage() to %122 = call i8* @fused_getErrorMessage(i1 false, i8* null)
  3643. [DEBUG][updateCallSite] Original call instruction:
  3644. %55 = call i8* @getErrorMessage()
  3645. [DEBUG][updateCallSite] Adding bunker control parameter
  3646. [DEBUG][updateCallSite] Adding original call parameters:
  3647. [DEBUG][updateCallSite] Adding default target parameters:
  3648. [DEBUG][updateCallSite] Parameter type: i8*
  3649. [DEBUG][updateCallSite] New call instruction:
  3650. %55 = call i8* @fused_getErrorMessage(i1 false, i8* null)
  3651. [DEBUG][updateCallSite] Processing non-void return value of type: i8*
  3652. [DEBUG][updateCallSite] Using direct return value
  3653. [DEBUG][updateCallSite] Successfully replaced all uses of original call
  3654. [INFO][updateCallSite] Successfully updated call site from %55 = call i8* @getErrorMessage() to %55 = call i8* @fused_getErrorMessage(i1 false, i8* null)
  3655. [DEBUG][updateCallSite] Original call instruction:
  3656. %40 = call i8* @getErrorMessage()
  3657. [DEBUG][updateCallSite] Adding bunker control parameter
  3658. [DEBUG][updateCallSite] Adding original call parameters:
  3659. [DEBUG][updateCallSite] Adding default target parameters:
  3660. [DEBUG][updateCallSite] Parameter type: i8*
  3661. [DEBUG][updateCallSite] New call instruction:
  3662. %40 = call i8* @fused_getErrorMessage(i1 false, i8* null)
  3663. [DEBUG][updateCallSite] Processing non-void return value of type: i8*
  3664. [DEBUG][updateCallSite] Using direct return value
  3665. [DEBUG][updateCallSite] Successfully replaced all uses of original call
  3666. [INFO][updateCallSite] Successfully updated call site from %40 = call i8* @getErrorMessage() to %40 = call i8* @fused_getErrorMessage(i1 false, i8* null)
  3667. [DEBUG][updateCallSite] Original call instruction:
  3668. %26 = call i8* @getErrorMessage()
  3669. [DEBUG][updateCallSite] Adding bunker control parameter
  3670. [DEBUG][updateCallSite] Adding original call parameters:
  3671. [DEBUG][updateCallSite] Adding default target parameters:
  3672. [DEBUG][updateCallSite] Parameter type: i8*
  3673. [DEBUG][updateCallSite] New call instruction:
  3674. %26 = call i8* @fused_getErrorMessage(i1 false, i8* null)
  3675. [DEBUG][updateCallSite] Processing non-void return value of type: i8*
  3676. [DEBUG][updateCallSite] Using direct return value
  3677. [DEBUG][updateCallSite] Successfully replaced all uses of original call
  3678. [INFO][updateCallSite] Successfully updated call site from %26 = call i8* @getErrorMessage() to %26 = call i8* @fused_getErrorMessage(i1 false, i8* null)
  3679. [DEBUG][updateCallSite] Original call instruction:
  3680. call void @reverseString(i8* %18)
  3681. [DEBUG][updateCallSite] Adding target control parameter
  3682. [DEBUG][updateCallSite] Adding default bunker parameters:
  3683. [DEBUG][updateCallSite] Adding original call parameters:
  3684. [DEBUG][updateCallSite] Argument 0: type=i8*
  3685. [DEBUG][updateCallSite] New call instruction:
  3686. %19 = call i8* @fused_getErrorMessage(i1 true, i8* %18)
  3687. [DEBUG][updateCallSite] Void return type, no value processing needed
  3688. [INFO][updateCallSite] Successfully updated call site from call void @reverseString(i8* %18) to %19 = call i8* @fused_getErrorMessage(i1 true, i8* %18)
  3689. [INFO][performCodeFusion] [After update call site]Generated control flow graph for fused function:
  3690. ```mermaid: fused_getErrorMessage
  3691. graph TD
  3692. entry["Block entry:\n %2 = alloca i8*\n %3 = alloca i32\n %4 = alloca i32\n %5 = alloca i8\n %6 = xor i1 %0, true\n br label %target_cond_0\n"]
  3693. entry --> target_cond_0
  3694. target_cond_0["Block target_cond_0:\n br i1 %0, label %7, label %target_skip_0\n"]
  3695. target_cond_0 -->|true| 7
  3696. target_cond_0 -->|false| target_skip_0
  3697. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  3698. target_skip_0 --> target_phi_0
  3699. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  3700. target_phi_0 --> bunker_cond_0
  3701. 7["Block 7:\n store i8* %1, i8** %2, align 8\n %8 = load i8*, i8** %2, align 8\n %9 = call i64 @strlen(i8* %8) #7\n %10 = trunc i64 %9 to i32\n store i32 %10, i32* %3, align 4\n store i32 0, i32* %4, align 4\n br label %target_phi_0\n"]
  3702. 7 --> target_phi_0
  3703. bunker_cond_0["Block bunker_cond_0:\n br i1 %6, label %11, label %bunker_skip_0\n"]
  3704. bunker_cond_0 -->|true| 11
  3705. bunker_cond_0 -->|false| bunker_skip_0
  3706. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  3707. bunker_skip_0 --> bunker_phi_0
  3708. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  3709. bunker_phi_0 --> target_cond_1
  3710. 11["Block 11:\n %12 = load i8*, i8** @globalErrorMessage, align 8\n %13 = icmp ne i8* %12, null\n br i1 %13, label %14, label %16\n"]
  3711. 11 -->|true| 14
  3712. 11 -->|false| 16
  3713. 14["Block 14:\n %15 = load i8*, i8** @globalErrorMessage, align 8\n br label %17\n"]
  3714. 14 --> 17
  3715. 16["Block 16:\n br label %17\n"]
  3716. 16 --> 17
  3717. 17["Block 17:\n %18 = phi i8* [ %15, %3 ], [ getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), %5 ]\n ret i8* %18\n"]
  3718. target_cond_1["Block target_cond_1:\n br i1 %0, label %19, label %target_skip_1\n"]
  3719. target_cond_1 -->|true| 19
  3720. target_cond_1 -->|false| target_skip_1
  3721. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  3722. target_skip_1 --> target_phi_1
  3723. target_phi_1["Block target_phi_1:\n"]
  3724. 19["Block 19:\n %20 = load i32, i32* %4, align 4\n %21 = load i32, i32* %3, align 4\n %22 = sdiv i32 %21, 2\n %23 = icmp slt i32 %20, %22\n br i1 %23, label %24, label %50\n"]
  3725. 19 -->|true| 24
  3726. 19 -->|false| 50
  3727. 24["Block 24:\n %25 = load i8*, i8** %2, align 8\n %26 = load i32, i32* %4, align 4\n %27 = sext i32 %26 to i64\n %28 = getelementptr inbounds i8, i8* %25, i64 %27\n %29 = load i8, i8* %28, align 1\n store i8 %29, i8* %5, align 1\n %30 = load i8*, i8** %2, align 8\n %31 = load i32, i32* %3, align 4\n %32 = sub nsw i32 %31, 1\n %33 = load i32, i32* %4, align 4\n %34 = sub nsw i32 %32, %33\n %35 = sext i32 %34 to i64\n %36 = getelementptr inbounds i8, i8* %30, i64 %35\n %37 = load i8, i8* %36, align 1\n %38 = load i8*, i8** %2, align 8\n %39 = load i32, i32* %4, align 4\n %40 = sext i32 %39 to i64\n %41 = getelementptr inbounds i8, i8* %38, i64 %40\n store i8 %37, i8* %41, align 1\n %42 = load i8, i8* %5, align 1\n %43 = load i8*, i8** %2, align 8\n %44 = load i32, i32* %3, align 4\n %45 = sub nsw i32 %44, 1\n %46 = load i32, i32* %4, align 4\n %47 = sub nsw i32 %45, %46\n %48 = sext i32 %47 to i64\n %49 = getelementptr inbounds i8, i8* %43, i64 %48\n store i8 %42, i8* %49, align 1\n br label %51\n"]
  3728. 24 --> 51
  3729. 50["Block 50:\n ret i8* null\n"]
  3730. 51["Block 51:\n %52 = load i32, i32* %4, align 4\n %53 = add nsw i32 %52, 1\n store i32 %53, i32* %4, align 4\n br label %target_phi_1\n"]
  3731. 51 --> target_phi_1
  3732. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  3733. ```
  3734. [INFO][performCodeFusion] Fixing blocks without terminators...
  3735. [INFO][performCodeFusion] Added return with default value to block: target_phi_1
  3736. [INFO][performCodeFusion] Starting PHI node repair
  3737. [DEBUG][performCodeFusion] Updating PHI node in %17: mapped predecessor %3 to %14
  3738. [DEBUG][performCodeFusion] Updating PHI node in %17: mapped predecessor %5 to %16
  3739. [INFO][performCodeFusion] [After fix PHI]Generated control flow graph for fused function:
  3740. ```mermaid: fused_getErrorMessage
  3741. graph TD
  3742. entry["Block entry:\n %2 = alloca i8*\n %3 = alloca i32\n %4 = alloca i32\n %5 = alloca i8\n %6 = xor i1 %0, true\n br label %target_cond_0\n"]
  3743. entry --> target_cond_0
  3744. target_cond_0["Block target_cond_0:\n br i1 %0, label %7, label %target_skip_0\n"]
  3745. target_cond_0 -->|true| 7
  3746. target_cond_0 -->|false| target_skip_0
  3747. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  3748. target_skip_0 --> target_phi_0
  3749. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  3750. target_phi_0 --> bunker_cond_0
  3751. 7["Block 7:\n store i8* %1, i8** %2, align 8\n %8 = load i8*, i8** %2, align 8\n %9 = call i64 @strlen(i8* %8) #7\n %10 = trunc i64 %9 to i32\n store i32 %10, i32* %3, align 4\n store i32 0, i32* %4, align 4\n br label %target_phi_0\n"]
  3752. 7 --> target_phi_0
  3753. bunker_cond_0["Block bunker_cond_0:\n br i1 %6, label %11, label %bunker_skip_0\n"]
  3754. bunker_cond_0 -->|true| 11
  3755. bunker_cond_0 -->|false| bunker_skip_0
  3756. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  3757. bunker_skip_0 --> bunker_phi_0
  3758. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  3759. bunker_phi_0 --> target_cond_1
  3760. 11["Block 11:\n %12 = load i8*, i8** @globalErrorMessage, align 8\n %13 = icmp ne i8* %12, null\n br i1 %13, label %14, label %16\n"]
  3761. 11 -->|true| 14
  3762. 11 -->|false| 16
  3763. 14["Block 14:\n %15 = load i8*, i8** @globalErrorMessage, align 8\n br label %17\n"]
  3764. 14 --> 17
  3765. 16["Block 16:\n br label %17\n"]
  3766. 16 --> 17
  3767. 17["Block 17:\n %18 = phi i8* [ %15, %14 ], [ getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), %16 ]\n ret i8* %18\n"]
  3768. target_cond_1["Block target_cond_1:\n br i1 %0, label %19, label %target_skip_1\n"]
  3769. target_cond_1 -->|true| 19
  3770. target_cond_1 -->|false| target_skip_1
  3771. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  3772. target_skip_1 --> target_phi_1
  3773. target_phi_1["Block target_phi_1:\n ret i8* null\n"]
  3774. 19["Block 19:\n %20 = load i32, i32* %4, align 4\n %21 = load i32, i32* %3, align 4\n %22 = sdiv i32 %21, 2\n %23 = icmp slt i32 %20, %22\n br i1 %23, label %24, label %50\n"]
  3775. 19 -->|true| 24
  3776. 19 -->|false| 50
  3777. 24["Block 24:\n %25 = load i8*, i8** %2, align 8\n %26 = load i32, i32* %4, align 4\n %27 = sext i32 %26 to i64\n %28 = getelementptr inbounds i8, i8* %25, i64 %27\n %29 = load i8, i8* %28, align 1\n store i8 %29, i8* %5, align 1\n %30 = load i8*, i8** %2, align 8\n %31 = load i32, i32* %3, align 4\n %32 = sub nsw i32 %31, 1\n %33 = load i32, i32* %4, align 4\n %34 = sub nsw i32 %32, %33\n %35 = sext i32 %34 to i64\n %36 = getelementptr inbounds i8, i8* %30, i64 %35\n %37 = load i8, i8* %36, align 1\n %38 = load i8*, i8** %2, align 8\n %39 = load i32, i32* %4, align 4\n %40 = sext i32 %39 to i64\n %41 = getelementptr inbounds i8, i8* %38, i64 %40\n store i8 %37, i8* %41, align 1\n %42 = load i8, i8* %5, align 1\n %43 = load i8*, i8** %2, align 8\n %44 = load i32, i32* %3, align 4\n %45 = sub nsw i32 %44, 1\n %46 = load i32, i32* %4, align 4\n %47 = sub nsw i32 %45, %46\n %48 = sext i32 %47 to i64\n %49 = getelementptr inbounds i8, i8* %43, i64 %48\n store i8 %42, i8* %49, align 1\n br label %51\n"]
  3778. 24 --> 51
  3779. 50["Block 50:\n ret i8* null\n"]
  3780. 51["Block 51:\n %52 = load i32, i32* %4, align 4\n %53 = add nsw i32 %52, 1\n store i32 %53, i32* %4, align 4\n br label %target_phi_1\n"]
  3781. 51 --> target_phi_1
  3782. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  3783. ```
  3784. [INFO][performCodeFusion] Attempting to delete original functions...
  3785. [INFO][performCodeFusion] [After erase]Generated control flow graph for fused function:
  3786. ```mermaid: fused_getErrorMessage
  3787. graph TD
  3788. entry["Block entry:\n %2 = alloca i8*\n %3 = alloca i32\n %4 = alloca i32\n %5 = alloca i8\n %6 = xor i1 %0, true\n br label %target_cond_0\n"]
  3789. entry --> target_cond_0
  3790. target_cond_0["Block target_cond_0:\n br i1 %0, label %7, label %target_skip_0\n"]
  3791. target_cond_0 -->|true| 7
  3792. target_cond_0 -->|false| target_skip_0
  3793. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  3794. target_skip_0 --> target_phi_0
  3795. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  3796. target_phi_0 --> bunker_cond_0
  3797. 7["Block 7:\n store i8* %1, i8** %2, align 8\n %8 = load i8*, i8** %2, align 8\n %9 = call i64 @strlen(i8* %8) #7\n %10 = trunc i64 %9 to i32\n store i32 %10, i32* %3, align 4\n store i32 0, i32* %4, align 4\n br label %target_phi_0\n"]
  3798. 7 --> target_phi_0
  3799. bunker_cond_0["Block bunker_cond_0:\n br i1 %6, label %11, label %bunker_skip_0\n"]
  3800. bunker_cond_0 -->|true| 11
  3801. bunker_cond_0 -->|false| bunker_skip_0
  3802. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  3803. bunker_skip_0 --> bunker_phi_0
  3804. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  3805. bunker_phi_0 --> target_cond_1
  3806. 11["Block 11:\n %12 = load i8*, i8** @globalErrorMessage, align 8\n %13 = icmp ne i8* %12, null\n br i1 %13, label %14, label %16\n"]
  3807. 11 -->|true| 14
  3808. 11 -->|false| 16
  3809. 14["Block 14:\n %15 = load i8*, i8** @globalErrorMessage, align 8\n br label %17\n"]
  3810. 14 --> 17
  3811. 16["Block 16:\n br label %17\n"]
  3812. 16 --> 17
  3813. 17["Block 17:\n %18 = phi i8* [ %15, %14 ], [ getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), %16 ]\n ret i8* %18\n"]
  3814. target_cond_1["Block target_cond_1:\n br i1 %0, label %19, label %target_skip_1\n"]
  3815. target_cond_1 -->|true| 19
  3816. target_cond_1 -->|false| target_skip_1
  3817. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  3818. target_skip_1 --> target_phi_1
  3819. target_phi_1["Block target_phi_1:\n ret i8* null\n"]
  3820. 19["Block 19:\n %20 = load i32, i32* %4, align 4\n %21 = load i32, i32* %3, align 4\n %22 = sdiv i32 %21, 2\n %23 = icmp slt i32 %20, %22\n br i1 %23, label %24, label %50\n"]
  3821. 19 -->|true| 24
  3822. 19 -->|false| 50
  3823. 24["Block 24:\n %25 = load i8*, i8** %2, align 8\n %26 = load i32, i32* %4, align 4\n %27 = sext i32 %26 to i64\n %28 = getelementptr inbounds i8, i8* %25, i64 %27\n %29 = load i8, i8* %28, align 1\n store i8 %29, i8* %5, align 1\n %30 = load i8*, i8** %2, align 8\n %31 = load i32, i32* %3, align 4\n %32 = sub nsw i32 %31, 1\n %33 = load i32, i32* %4, align 4\n %34 = sub nsw i32 %32, %33\n %35 = sext i32 %34 to i64\n %36 = getelementptr inbounds i8, i8* %30, i64 %35\n %37 = load i8, i8* %36, align 1\n %38 = load i8*, i8** %2, align 8\n %39 = load i32, i32* %4, align 4\n %40 = sext i32 %39 to i64\n %41 = getelementptr inbounds i8, i8* %38, i64 %40\n store i8 %37, i8* %41, align 1\n %42 = load i8, i8* %5, align 1\n %43 = load i8*, i8** %2, align 8\n %44 = load i32, i32* %3, align 4\n %45 = sub nsw i32 %44, 1\n %46 = load i32, i32* %4, align 4\n %47 = sub nsw i32 %45, %46\n %48 = sext i32 %47 to i64\n %49 = getelementptr inbounds i8, i8* %43, i64 %48\n store i8 %42, i8* %49, align 1\n br label %51\n"]
  3824. 24 --> 51
  3825. 50["Block 50:\n ret i8* null\n"]
  3826. 51["Block 51:\n %52 = load i32, i32* %4, align 4\n %53 = add nsw i32 %52, 1\n store i32 %53, i32* %4, align 4\n br label %target_phi_1\n"]
  3827. 51 --> target_phi_1
  3828. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  3829. ```
  3830. [INFO][performCodeFusion] Completed function fusion: fused_getErrorMessage
  3831. [INFO][performCodeFusion] Processing function pair: target=testPoints, bunker=multiplyMatrices
  3832. [INFO][performCodeFusion] [After clone]Generated control flow graph for fused function:
  3833. ```mermaid: fused_multiplyMatrices
  3834. graph TD
  3835. entry["Block entry:\n %4 = alloca %struct.Matrix*\n %5 = alloca %struct.Matrix*\n %6 = alloca %struct.Matrix*\n %7 = alloca %struct.Matrix*\n %8 = alloca i64\n %9 = alloca i32\n %10 = alloca i32\n %11 = alloca i64\n %12 = alloca i32\n %13 = alloca i64\n %14 = alloca i32\n %15 = alloca i32\n %16 = alloca i32\n %17 = alloca i32\n %18 = alloca i32\n %19 = xor i1 %0, true\n br label %target_cond_0\n"]
  3836. entry --> target_cond_0
  3837. target_cond_0["Block target_cond_0:\n br i1 %0, label %20, label %target_skip_0\n"]
  3838. target_cond_0 -->|true| 20
  3839. target_cond_0 -->|false| target_skip_0
  3840. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  3841. target_skip_0 --> target_phi_0
  3842. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  3843. target_phi_0 --> bunker_cond_0
  3844. 20["Block 20:\n store i32 %0, i32* %16, align 4\n store i32 0, i32* %17, align 4\n store i32 1, i32* %18, align 4\n br label %target_phi_0\n"]
  3845. 20 --> target_phi_0
  3846. bunker_cond_0["Block bunker_cond_0:\n br i1 %19, label %21, label %bunker_skip_0\n"]
  3847. bunker_cond_0 -->|true| 21
  3848. bunker_cond_0 -->|false| bunker_skip_0
  3849. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  3850. bunker_skip_0 --> bunker_phi_0
  3851. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  3852. bunker_phi_0 --> target_cond_1
  3853. 21["Block 21:\n store %struct.Matrix* %0, %struct.Matrix** %5, align 8\n store %struct.Matrix* %1, %struct.Matrix** %6, align 8\n %22 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %23 = icmp ne %struct.Matrix* %3, null\n br i1 %4, label %5, label %8\n"]
  3854. 21 -->|true| 5
  3855. 21 -->|false| 8
  3856. 24["Block 24:\n %25 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %26 = icmp ne %struct.Matrix* %6, null\n br i1 %7, label %9, label %8\n"]
  3857. 24 -->|true| 9
  3858. 24 -->|false| 8
  3859. 27["Block 27:\n call void @setErrorMessage(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.21, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %198\n"]
  3860. 27 --> 198
  3861. 28["Block 28:\n %29 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %30 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %10, i32 0, i32 0\n %31 = load i32**, i32*** %11, align 8\n %32 = icmp ne i32** %12, null\n br i1 %13, label %14, label %19\n"]
  3862. 28 -->|true| 14
  3863. 28 -->|false| 19
  3864. 33["Block 33:\n %34 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %35 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %15, i32 0, i32 0\n %36 = load i32**, i32*** %16, align 8\n %37 = icmp ne i32** %17, null\n br i1 %18, label %20, label %19\n"]
  3865. 33 -->|true| 20
  3866. 33 -->|false| 19
  3867. 38["Block 38:\n call void @setErrorMessage(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.22, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %198\n"]
  3868. 38 --> 198
  3869. 39["Block 39:\n %40 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %41 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %21, i32 0, i32 2\n %42 = load i32, i32* %22, align 4\n %43 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %44 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %24, i32 0, i32 1\n %45 = load i32, i32* %25, align 8\n %46 = icmp ne i32 %23, %26\n br i1 %27, label %28, label %29\n"]
  3870. 39 -->|true| 28
  3871. 39 -->|false| 29
  3872. 47["Block 47:\n call void @setErrorMessage(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.23, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %198\n"]
  3873. 47 --> 198
  3874. 48["Block 48:\n %49 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %50 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %30, i32 0, i32 2\n %51 = load i32, i32* %31, align 4\n %52 = icmp sgt i32 %32, 100\n br i1 %33, label %39, label %34\n"]
  3875. 48 -->|true| 39
  3876. 48 -->|false| 34
  3877. 53["Block 53:\n %54 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %55 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %35, i32 0, i32 1\n %56 = load i32, i32* %36, align 8\n %57 = icmp sgt i32 %37, 100\n br i1 %38, label %39, label %40\n"]
  3878. 53 -->|true| 39
  3879. 53 -->|false| 40
  3880. 58["Block 58:\n call void @setErrorMessage(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.17, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %198\n"]
  3881. 58 --> 198
  3882. 59["Block 59:\n %60 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %61 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %41, i32 0, i32 1\n %62 = load i32, i32* %42, align 8\n %63 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %64 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %44, i32 0, i32 2\n %65 = load i32, i32* %45, align 4\n %66 = call %struct.Matrix* @createMatrix(i32 %43, i32 %46)\n store %struct.Matrix* %47, %struct.Matrix** %7, align 8\n %67 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %68 = icmp ne %struct.Matrix* %48, null\n br i1 %49, label %51, label %50\n"]
  3883. 59 -->|true| 51
  3884. 59 -->|false| 50
  3885. 69["Block 69:\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %198\n"]
  3886. 69 --> 198
  3887. 70["Block 70:\n store i64 0, i64* %8, align 8\n store i32 0, i32* %9, align 4\n br label %52\n"]
  3888. 70 --> 52
  3889. 71["Block 71:\n %72 = load i32, i32* %9, align 4\n %73 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %74 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %54, i32 0, i32 1\n %75 = load i32, i32* %55, align 8\n %76 = icmp slt i32 %53, %56\n br i1 %57, label %58, label %186\n"]
  3890. 71 -->|true| 58
  3891. 71 -->|false| 186
  3892. 77["Block 77:\n store i32 0, i32* %10, align 4\n br label %59\n"]
  3893. 77 --> 59
  3894. 78["Block 78:\n %79 = load i32, i32* %10, align 4\n %80 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %81 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %61, i32 0, i32 2\n %82 = load i32, i32* %62, align 4\n %83 = icmp slt i32 %60, %63\n br i1 %64, label %65, label %182\n"]
  3895. 78 -->|true| 65
  3896. 78 -->|false| 182
  3897. 84["Block 84:\n store i64 0, i64* %11, align 8\n store i32 0, i32* %12, align 4\n br label %66\n"]
  3898. 84 --> 66
  3899. 85["Block 85:\n %86 = load i32, i32* %12, align 4\n %87 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %88 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %68, i32 0, i32 2\n %89 = load i32, i32* %69, align 4\n %90 = icmp slt i32 %67, %70\n br i1 %71, label %72, label %136\n"]
  3900. 85 -->|true| 72
  3901. 85 -->|false| 136
  3902. 91["Block 91:\n %92 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %93 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %73, i32 0, i32 0\n %94 = load i32**, i32*** %74, align 8\n %95 = load i32, i32* %9, align 4\n %96 = sext i32 %76 to i64\n %97 = getelementptr inbounds i32*, i32** %75, i64 %77\n %98 = load i32*, i32** %78, align 8\n %99 = load i32, i32* %12, align 4\n %100 = sext i32 %80 to i64\n %101 = getelementptr inbounds i32, i32* %79, i64 %81\n %102 = load i32, i32* %82, align 4\n %103 = sext i32 %83 to i64\n %104 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %105 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %85, i32 0, i32 0\n %106 = load i32**, i32*** %86, align 8\n %107 = load i32, i32* %12, align 4\n %108 = sext i32 %88 to i64\n %109 = getelementptr inbounds i32*, i32** %87, i64 %89\n %110 = load i32*, i32** %90, align 8\n %111 = load i32, i32* %10, align 4\n %112 = sext i32 %92 to i64\n %113 = getelementptr inbounds i32, i32* %91, i64 %93\n %114 = load i32, i32* %94, align 4\n %115 = sext i32 %95 to i64\n %116 = mul nsw i64 %84, %96\n store i64 %97, i64* %13, align 8\n %117 = load i64, i64* %13, align 8\n %118 = load i64, i64* %11, align 8\n %119 = add nsw i64 %99, %98\n store i64 %100, i64* %11, align 8\n %120 = load i64, i64* %11, align 8\n %121 = icmp sgt i64 %101, 2147483647\n br i1 %102, label %106, label %103\n"]
  3903. 91 -->|true| 106
  3904. 91 -->|false| 103
  3905. 122["Block 122:\n %123 = load i64, i64* %11, align 8\n %124 = icmp slt i64 %104, -2147483648\n br i1 %105, label %106, label %132\n"]
  3906. 122 -->|true| 106
  3907. 122 -->|false| 132
  3908. 125["Block 125:\n call void @setErrorMessage(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.24, i64 0, i64 0))\n store i32 0, i32* %14, align 4\n br label %107\n"]
  3909. 125 --> 107
  3910. 126["Block 126:\n %127 = load i32, i32* %14, align 4\n %128 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %129 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %109, i32 0, i32 1\n %130 = load i32, i32* %110, align 8\n %131 = icmp slt i32 %108, %111\n br i1 %112, label %113, label %125\n"]
  3911. 126 -->|true| 113
  3912. 126 -->|false| 125
  3913. 132["Block 132:\n %133 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %134 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %114, i32 0, i32 0\n %135 = load i32**, i32*** %115, align 8\n %136 = load i32, i32* %14, align 4\n %137 = sext i32 %117 to i64\n %138 = getelementptr inbounds i32*, i32** %116, i64 %118\n %139 = load i32*, i32** %119, align 8\n %140 = bitcast i32* %120 to i8*\n call void @free(i8* %121) #7\n br label %122\n"]
  3914. 132 --> 122
  3915. 141["Block 141:\n %142 = load i32, i32* %14, align 4\n %143 = add nsw i32 %123, 1\n store i32 %124, i32* %14, align 4\n br label %107\n"]
  3916. 141 --> 107
  3917. 144["Block 144:\n %145 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %146 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %126, i32 0, i32 0\n %147 = load i32**, i32*** %127, align 8\n %148 = bitcast i32** %128 to i8*\n call void @free(i8* %129) #7\n %149 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %150 = bitcast %struct.Matrix* %130 to i8*\n call void @free(i8* %131) #7\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %198\n"]
  3918. 144 --> 198
  3919. 151["Block 151:\n br label %133\n"]
  3920. 151 --> 133
  3921. 152["Block 152:\n %153 = load i32, i32* %12, align 4\n %154 = add nsw i32 %134, 1\n store i32 %135, i32* %12, align 4\n br label %66\n"]
  3922. 152 --> 66
  3923. 155["Block 155:\n %156 = load i64, i64* %11, align 8\n %157 = trunc i64 %137 to i32\n %158 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %159 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %139, i32 0, i32 0\n %160 = load i32**, i32*** %140, align 8\n %161 = load i32, i32* %9, align 4\n %162 = sext i32 %142 to i64\n %163 = getelementptr inbounds i32*, i32** %141, i64 %143\n %164 = load i32*, i32** %144, align 8\n %165 = load i32, i32* %10, align 4\n %166 = sext i32 %146 to i64\n %167 = getelementptr inbounds i32, i32* %145, i64 %147\n store i32 %138, i32* %148, align 4\n %168 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %169 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %149, i32 0, i32 0\n %170 = load i32**, i32*** %150, align 8\n %171 = load i32, i32* %9, align 4\n %172 = sext i32 %152 to i64\n %173 = getelementptr inbounds i32*, i32** %151, i64 %153\n %174 = load i32*, i32** %154, align 8\n %175 = load i32, i32* %10, align 4\n %176 = sext i32 %156 to i64\n %177 = getelementptr inbounds i32, i32* %155, i64 %157\n %178 = load i32, i32* %158, align 4\n %179 = call i32 @abs(i32 %159) #8\n %180 = sext i32 %160 to i64\n %181 = load i64, i64* %8, align 8\n %182 = icmp sgt i64 %161, %162\n br i1 %163, label %164, label %178\n"]
  3924. 155 -->|true| 164
  3925. 155 -->|false| 178
  3926. 183["Block 183:\n %184 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %185 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %165, i32 0, i32 0\n %186 = load i32**, i32*** %166, align 8\n %187 = load i32, i32* %9, align 4\n %188 = sext i32 %168 to i64\n %189 = getelementptr inbounds i32*, i32** %167, i64 %169\n %190 = load i32*, i32** %170, align 8\n %191 = load i32, i32* %10, align 4\n %192 = sext i32 %172 to i64\n %193 = getelementptr inbounds i32, i32* %171, i64 %173\n %194 = load i32, i32* %174, align 4\n %195 = call i32 @abs(i32 %175) #8\n %196 = sext i32 %176 to i64\n store i64 %177, i64* %8, align 8\n br label %178\n"]
  3927. 183 --> 178
  3928. 197["Block 197:\n br label %179\n"]
  3929. 197 --> 179
  3930. 198["Block 198:\n %199 = load i32, i32* %10, align 4\n %200 = add nsw i32 %180, 1\n store i32 %181, i32* %10, align 4\n br label %59\n"]
  3931. 198 --> 59
  3932. 201["Block 201:\n br label %183\n"]
  3933. 201 --> 183
  3934. 202["Block 202:\n %203 = load i32, i32* %9, align 4\n %204 = add nsw i32 %184, 1\n store i32 %185, i32* %9, align 4\n br label %52\n"]
  3935. 202 --> 52
  3936. 205["Block 205:\n %206 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %207 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %187, i32 0, i32 1\n %208 = load i32, i32* %188, align 8\n %209 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %210 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %190, i32 0, i32 2\n %211 = load i32, i32* %191, align 4\n %212 = icmp eq i32 %189, %192\n %213 = zext i1 %193 to i32\n %214 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %215 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %195, i32 0, i32 3\n store i32 %194, i32* %196, align 8\n %216 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n store %struct.Matrix* %197, %struct.Matrix** %4, align 8\n br label %198\n"]
  3937. 205 --> 198
  3938. 217["Block 217:\n %218 = load %struct.Matrix*, %struct.Matrix** %4, align 8\n ret %struct.Matrix* %199\n"]
  3939. target_cond_1["Block target_cond_1:\n br i1 %0, label %219, label %target_skip_1\n"]
  3940. target_cond_1 -->|true| 219
  3941. target_cond_1 -->|false| target_skip_1
  3942. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  3943. target_skip_1 --> target_phi_1
  3944. target_phi_1["Block target_phi_1:\n"]
  3945. 219["Block 219:\n %220 = load i32, i32* %17, align 4\n %221 = add nsw i32 %6, 1\n store i32 %7, i32* %17, align 4\n %222 = load i32, i32* %16, align 4\n %223 = icmp sgt i32 %8, 2\n br i1 %9, label %10, label %11\n"]
  3946. 219 -->|true| 10
  3947. 219 -->|false| 11
  3948. 224["Block 224:\n %225 = load i32, i32* %18, align 4\n %226 = icmp slt i32 %3, 5\n br i1 %4, label %5, label %15\n"]
  3949. 224 -->|true| 5
  3950. 224 -->|false| 15
  3951. 227["Block 227:\n %228 = load i32, i32* %17, align 4\n store i32 %16, i32* %15, align 4\n br label %17\n"]
  3952. 227 --> 17
  3953. 229["Block 229:\n store i32 23, i32* %15, align 4\n br label %17\n"]
  3954. 229 --> 17
  3955. 230["Block 230:\n br label %12\n"]
  3956. 230 --> 12
  3957. 231["Block 231:\n %232 = load i32, i32* %15, align 4\n ret i32 %18\n"]
  3958. 233["Block 233:\n %234 = load i32, i32* %18, align 4\n %235 = add nsw i32 %13, 1\n store i32 %14, i32* %18, align 4\n br label %target_phi_1\n"]
  3959. 233 --> target_phi_1
  3960. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  3961. ```
  3962. [INFO][performCodeFusion] Fixing return instruction in block %217
  3963. [INFO][performCodeFusion] Fixing return instruction in block %231
  3964. [WARNING][performCodeFusion] No terminator found in block: target_phi_1
  3965. [INFO][performCodeFusion] [After fix]Generated control flow graph for fused function:
  3966. ```mermaid: fused_multiplyMatrices
  3967. graph TD
  3968. entry["Block entry:\n %4 = alloca %struct.Matrix*\n %5 = alloca %struct.Matrix*\n %6 = alloca %struct.Matrix*\n %7 = alloca %struct.Matrix*\n %8 = alloca i64\n %9 = alloca i32\n %10 = alloca i32\n %11 = alloca i64\n %12 = alloca i32\n %13 = alloca i64\n %14 = alloca i32\n %15 = alloca i32\n %16 = alloca i32\n %17 = alloca i32\n %18 = alloca i32\n %19 = xor i1 %0, true\n br label %target_cond_0\n"]
  3969. entry --> target_cond_0
  3970. target_cond_0["Block target_cond_0:\n br i1 %0, label %20, label %target_skip_0\n"]
  3971. target_cond_0 -->|true| 20
  3972. target_cond_0 -->|false| target_skip_0
  3973. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  3974. target_skip_0 --> target_phi_0
  3975. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  3976. target_phi_0 --> bunker_cond_0
  3977. 20["Block 20:\n store i32 %3, i32* %16, align 4\n store i32 0, i32* %17, align 4\n store i32 1, i32* %18, align 4\n br label %target_phi_0\n"]
  3978. 20 --> target_phi_0
  3979. bunker_cond_0["Block bunker_cond_0:\n br i1 %19, label %21, label %bunker_skip_0\n"]
  3980. bunker_cond_0 -->|true| 21
  3981. bunker_cond_0 -->|false| bunker_skip_0
  3982. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  3983. bunker_skip_0 --> bunker_phi_0
  3984. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  3985. bunker_phi_0 --> target_cond_1
  3986. 21["Block 21:\n store %struct.Matrix* %1, %struct.Matrix** %5, align 8\n store %struct.Matrix* %2, %struct.Matrix** %6, align 8\n %22 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %23 = icmp ne %struct.Matrix* %22, null\n br i1 %23, label %24, label %27\n"]
  3987. 21 -->|true| 24
  3988. 21 -->|false| 27
  3989. 24["Block 24:\n %25 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %26 = icmp ne %struct.Matrix* %25, null\n br i1 %26, label %28, label %27\n"]
  3990. 24 -->|true| 28
  3991. 24 -->|false| 27
  3992. 27["Block 27:\n call void @setErrorMessage(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.21, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  3993. 27 --> 217
  3994. 28["Block 28:\n %29 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %30 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %29, i32 0, i32 0\n %31 = load i32**, i32*** %30, align 8\n %32 = icmp ne i32** %31, null\n br i1 %32, label %33, label %38\n"]
  3995. 28 -->|true| 33
  3996. 28 -->|false| 38
  3997. 33["Block 33:\n %34 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %35 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %34, i32 0, i32 0\n %36 = load i32**, i32*** %35, align 8\n %37 = icmp ne i32** %36, null\n br i1 %37, label %39, label %38\n"]
  3998. 33 -->|true| 39
  3999. 33 -->|false| 38
  4000. 38["Block 38:\n call void @setErrorMessage(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.22, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  4001. 38 --> 217
  4002. 39["Block 39:\n %40 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %41 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %40, i32 0, i32 2\n %42 = load i32, i32* %41, align 4\n %43 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %44 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %43, i32 0, i32 1\n %45 = load i32, i32* %44, align 8\n %46 = icmp ne i32 %42, %45\n br i1 %46, label %47, label %48\n"]
  4003. 39 -->|true| 47
  4004. 39 -->|false| 48
  4005. 47["Block 47:\n call void @setErrorMessage(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.23, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  4006. 47 --> 217
  4007. 48["Block 48:\n %49 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %50 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %49, i32 0, i32 2\n %51 = load i32, i32* %50, align 4\n %52 = icmp sgt i32 %51, 100\n br i1 %52, label %58, label %53\n"]
  4008. 48 -->|true| 58
  4009. 48 -->|false| 53
  4010. 53["Block 53:\n %54 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %55 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %54, i32 0, i32 1\n %56 = load i32, i32* %55, align 8\n %57 = icmp sgt i32 %56, 100\n br i1 %57, label %58, label %59\n"]
  4011. 53 -->|true| 58
  4012. 53 -->|false| 59
  4013. 58["Block 58:\n call void @setErrorMessage(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.17, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  4014. 58 --> 217
  4015. 59["Block 59:\n %60 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %61 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %60, i32 0, i32 1\n %62 = load i32, i32* %61, align 8\n %63 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %64 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %63, i32 0, i32 2\n %65 = load i32, i32* %64, align 4\n %66 = call %struct.Matrix* @createMatrix(i32 %62, i32 %65)\n store %struct.Matrix* %66, %struct.Matrix** %7, align 8\n %67 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %68 = icmp ne %struct.Matrix* %67, null\n br i1 %68, label %70, label %69\n"]
  4016. 59 -->|true| 70
  4017. 59 -->|false| 69
  4018. 69["Block 69:\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  4019. 69 --> 217
  4020. 70["Block 70:\n store i64 0, i64* %8, align 8\n store i32 0, i32* %9, align 4\n br label %71\n"]
  4021. 70 --> 71
  4022. 71["Block 71:\n %72 = load i32, i32* %9, align 4\n %73 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %74 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %73, i32 0, i32 1\n %75 = load i32, i32* %74, align 8\n %76 = icmp slt i32 %72, %75\n br i1 %76, label %77, label %205\n"]
  4023. 71 -->|true| 77
  4024. 71 -->|false| 205
  4025. 77["Block 77:\n store i32 0, i32* %10, align 4\n br label %78\n"]
  4026. 77 --> 78
  4027. 78["Block 78:\n %79 = load i32, i32* %10, align 4\n %80 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %81 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %80, i32 0, i32 2\n %82 = load i32, i32* %81, align 4\n %83 = icmp slt i32 %79, %82\n br i1 %83, label %84, label %201\n"]
  4028. 78 -->|true| 84
  4029. 78 -->|false| 201
  4030. 84["Block 84:\n store i64 0, i64* %11, align 8\n store i32 0, i32* %12, align 4\n br label %85\n"]
  4031. 84 --> 85
  4032. 85["Block 85:\n %86 = load i32, i32* %12, align 4\n %87 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %88 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %87, i32 0, i32 2\n %89 = load i32, i32* %88, align 4\n %90 = icmp slt i32 %86, %89\n br i1 %90, label %91, label %155\n"]
  4033. 85 -->|true| 91
  4034. 85 -->|false| 155
  4035. 91["Block 91:\n %92 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %93 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %92, i32 0, i32 0\n %94 = load i32**, i32*** %93, align 8\n %95 = load i32, i32* %9, align 4\n %96 = sext i32 %95 to i64\n %97 = getelementptr inbounds i32*, i32** %94, i64 %96\n %98 = load i32*, i32** %97, align 8\n %99 = load i32, i32* %12, align 4\n %100 = sext i32 %99 to i64\n %101 = getelementptr inbounds i32, i32* %98, i64 %100\n %102 = load i32, i32* %101, align 4\n %103 = sext i32 %102 to i64\n %104 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %105 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %104, i32 0, i32 0\n %106 = load i32**, i32*** %105, align 8\n %107 = load i32, i32* %12, align 4\n %108 = sext i32 %107 to i64\n %109 = getelementptr inbounds i32*, i32** %106, i64 %108\n %110 = load i32*, i32** %109, align 8\n %111 = load i32, i32* %10, align 4\n %112 = sext i32 %111 to i64\n %113 = getelementptr inbounds i32, i32* %110, i64 %112\n %114 = load i32, i32* %113, align 4\n %115 = sext i32 %114 to i64\n %116 = mul nsw i64 %103, %115\n store i64 %116, i64* %13, align 8\n %117 = load i64, i64* %13, align 8\n %118 = load i64, i64* %11, align 8\n %119 = add nsw i64 %118, %117\n store i64 %119, i64* %11, align 8\n %120 = load i64, i64* %11, align 8\n %121 = icmp sgt i64 %120, 2147483647\n br i1 %121, label %125, label %122\n"]
  4036. 91 -->|true| 125
  4037. 91 -->|false| 122
  4038. 122["Block 122:\n %123 = load i64, i64* %11, align 8\n %124 = icmp slt i64 %123, -2147483648\n br i1 %124, label %125, label %151\n"]
  4039. 122 -->|true| 125
  4040. 122 -->|false| 151
  4041. 125["Block 125:\n call void @setErrorMessage(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.24, i64 0, i64 0))\n store i32 0, i32* %14, align 4\n br label %126\n"]
  4042. 125 --> 126
  4043. 126["Block 126:\n %127 = load i32, i32* %14, align 4\n %128 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %129 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %128, i32 0, i32 1\n %130 = load i32, i32* %129, align 8\n %131 = icmp slt i32 %127, %130\n br i1 %131, label %132, label %144\n"]
  4044. 126 -->|true| 132
  4045. 126 -->|false| 144
  4046. 132["Block 132:\n %133 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %134 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %133, i32 0, i32 0\n %135 = load i32**, i32*** %134, align 8\n %136 = load i32, i32* %14, align 4\n %137 = sext i32 %136 to i64\n %138 = getelementptr inbounds i32*, i32** %135, i64 %137\n %139 = load i32*, i32** %138, align 8\n %140 = bitcast i32* %139 to i8*\n call void @free(i8* %140) #7\n br label %141\n"]
  4047. 132 --> 141
  4048. 141["Block 141:\n %142 = load i32, i32* %14, align 4\n %143 = add nsw i32 %142, 1\n store i32 %143, i32* %14, align 4\n br label %126\n"]
  4049. 141 --> 126
  4050. 144["Block 144:\n %145 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %146 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %145, i32 0, i32 0\n %147 = load i32**, i32*** %146, align 8\n %148 = bitcast i32** %147 to i8*\n call void @free(i8* %148) #7\n %149 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %150 = bitcast %struct.Matrix* %149 to i8*\n call void @free(i8* %150) #7\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  4051. 144 --> 217
  4052. 151["Block 151:\n br label %152\n"]
  4053. 151 --> 152
  4054. 152["Block 152:\n %153 = load i32, i32* %12, align 4\n %154 = add nsw i32 %153, 1\n store i32 %154, i32* %12, align 4\n br label %85\n"]
  4055. 152 --> 85
  4056. 155["Block 155:\n %156 = load i64, i64* %11, align 8\n %157 = trunc i64 %156 to i32\n %158 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %159 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %158, i32 0, i32 0\n %160 = load i32**, i32*** %159, align 8\n %161 = load i32, i32* %9, align 4\n %162 = sext i32 %161 to i64\n %163 = getelementptr inbounds i32*, i32** %160, i64 %162\n %164 = load i32*, i32** %163, align 8\n %165 = load i32, i32* %10, align 4\n %166 = sext i32 %165 to i64\n %167 = getelementptr inbounds i32, i32* %164, i64 %166\n store i32 %157, i32* %167, align 4\n %168 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %169 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %168, i32 0, i32 0\n %170 = load i32**, i32*** %169, align 8\n %171 = load i32, i32* %9, align 4\n %172 = sext i32 %171 to i64\n %173 = getelementptr inbounds i32*, i32** %170, i64 %172\n %174 = load i32*, i32** %173, align 8\n %175 = load i32, i32* %10, align 4\n %176 = sext i32 %175 to i64\n %177 = getelementptr inbounds i32, i32* %174, i64 %176\n %178 = load i32, i32* %177, align 4\n %179 = call i32 @abs(i32 %178) #8\n %180 = sext i32 %179 to i64\n %181 = load i64, i64* %8, align 8\n %182 = icmp sgt i64 %180, %181\n br i1 %182, label %183, label %197\n"]
  4057. 155 -->|true| 183
  4058. 155 -->|false| 197
  4059. 183["Block 183:\n %184 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %185 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %184, i32 0, i32 0\n %186 = load i32**, i32*** %185, align 8\n %187 = load i32, i32* %9, align 4\n %188 = sext i32 %187 to i64\n %189 = getelementptr inbounds i32*, i32** %186, i64 %188\n %190 = load i32*, i32** %189, align 8\n %191 = load i32, i32* %10, align 4\n %192 = sext i32 %191 to i64\n %193 = getelementptr inbounds i32, i32* %190, i64 %192\n %194 = load i32, i32* %193, align 4\n %195 = call i32 @abs(i32 %194) #8\n %196 = sext i32 %195 to i64\n store i64 %196, i64* %8, align 8\n br label %197\n"]
  4060. 183 --> 197
  4061. 197["Block 197:\n br label %198\n"]
  4062. 197 --> 198
  4063. 198["Block 198:\n %199 = load i32, i32* %10, align 4\n %200 = add nsw i32 %199, 1\n store i32 %200, i32* %10, align 4\n br label %78\n"]
  4064. 198 --> 78
  4065. 201["Block 201:\n br label %202\n"]
  4066. 201 --> 202
  4067. 202["Block 202:\n %203 = load i32, i32* %9, align 4\n %204 = add nsw i32 %203, 1\n store i32 %204, i32* %9, align 4\n br label %71\n"]
  4068. 202 --> 71
  4069. 205["Block 205:\n %206 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %207 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %206, i32 0, i32 1\n %208 = load i32, i32* %207, align 8\n %209 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %210 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %209, i32 0, i32 2\n %211 = load i32, i32* %210, align 4\n %212 = icmp eq i32 %208, %211\n %213 = zext i1 %212 to i32\n %214 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %215 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %214, i32 0, i32 3\n store i32 %213, i32* %215, align 8\n %216 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n store %struct.Matrix* %216, %struct.Matrix** %4, align 8\n br label %217\n"]
  4070. 205 --> 217
  4071. 217["Block 217:\n %218 = load %struct.Matrix*, %struct.Matrix** %4, align 8\n ret %struct.Matrix* %218\n"]
  4072. target_cond_1["Block target_cond_1:\n br i1 %0, label %219, label %target_skip_1\n"]
  4073. target_cond_1 -->|true| 219
  4074. target_cond_1 -->|false| target_skip_1
  4075. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  4076. target_skip_1 --> target_phi_1
  4077. target_phi_1["Block target_phi_1:\n"]
  4078. 219["Block 219:\n %220 = load i32, i32* %17, align 4\n %221 = add nsw i32 %220, 1\n store i32 %221, i32* %17, align 4\n %222 = load i32, i32* %16, align 4\n %223 = icmp sgt i32 %222, 2\n br i1 %223, label %229, label %230\n"]
  4079. 219 -->|true| 229
  4080. 219 -->|false| 230
  4081. 224["Block 224:\n %225 = load i32, i32* %18, align 4\n %226 = icmp slt i32 %225, 5\n br i1 %226, label %219, label %227\n"]
  4082. 224 -->|true| 219
  4083. 224 -->|false| 227
  4084. 227["Block 227:\n %228 = load i32, i32* %17, align 4\n store i32 %228, i32* %15, align 4\n br label %231\n"]
  4085. 227 --> 231
  4086. 229["Block 229:\n store i32 23, i32* %15, align 4\n br label %231\n"]
  4087. 229 --> 231
  4088. 230["Block 230:\n br label %233\n"]
  4089. 230 --> 233
  4090. 231["Block 231:\n %232 = load i32, i32* %15, align 4\n ret i32 %232\n"]
  4091. 233["Block 233:\n %234 = load i32, i32* %18, align 4\n %235 = add nsw i32 %234, 1\n store i32 %235, i32* %18, align 4\n br label %target_phi_1\n"]
  4092. 233 --> target_phi_1
  4093. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  4094. ```
  4095. [INFO][performCodeFusion] Processing struct return type
  4096. [INFO][performCodeFusion] [After fix return]Generated control flow graph for fused function:
  4097. ```mermaid: fused_multiplyMatrices
  4098. graph TD
  4099. entry["Block entry:\n %4 = alloca %struct.Matrix*\n %5 = alloca %struct.Matrix*\n %6 = alloca %struct.Matrix*\n %7 = alloca %struct.Matrix*\n %8 = alloca i64\n %9 = alloca i32\n %10 = alloca i32\n %11 = alloca i64\n %12 = alloca i32\n %13 = alloca i64\n %14 = alloca i32\n %15 = alloca i32\n %16 = alloca i32\n %17 = alloca i32\n %18 = alloca i32\n %19 = xor i1 %0, true\n br label %target_cond_0\n"]
  4100. entry --> target_cond_0
  4101. target_cond_0["Block target_cond_0:\n br i1 %0, label %20, label %target_skip_0\n"]
  4102. target_cond_0 -->|true| 20
  4103. target_cond_0 -->|false| target_skip_0
  4104. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  4105. target_skip_0 --> target_phi_0
  4106. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  4107. target_phi_0 --> bunker_cond_0
  4108. 20["Block 20:\n store i32 %3, i32* %16, align 4\n store i32 0, i32* %17, align 4\n store i32 1, i32* %18, align 4\n br label %target_phi_0\n"]
  4109. 20 --> target_phi_0
  4110. bunker_cond_0["Block bunker_cond_0:\n br i1 %19, label %21, label %bunker_skip_0\n"]
  4111. bunker_cond_0 -->|true| 21
  4112. bunker_cond_0 -->|false| bunker_skip_0
  4113. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  4114. bunker_skip_0 --> bunker_phi_0
  4115. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  4116. bunker_phi_0 --> target_cond_1
  4117. 21["Block 21:\n store %struct.Matrix* %1, %struct.Matrix** %5, align 8\n store %struct.Matrix* %2, %struct.Matrix** %6, align 8\n %22 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %23 = icmp ne %struct.Matrix* %22, null\n br i1 %23, label %24, label %27\n"]
  4118. 21 -->|true| 24
  4119. 21 -->|false| 27
  4120. 24["Block 24:\n %25 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %26 = icmp ne %struct.Matrix* %25, null\n br i1 %26, label %28, label %27\n"]
  4121. 24 -->|true| 28
  4122. 24 -->|false| 27
  4123. 27["Block 27:\n call void @setErrorMessage(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.21, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  4124. 27 --> 217
  4125. 28["Block 28:\n %29 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %30 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %29, i32 0, i32 0\n %31 = load i32**, i32*** %30, align 8\n %32 = icmp ne i32** %31, null\n br i1 %32, label %33, label %38\n"]
  4126. 28 -->|true| 33
  4127. 28 -->|false| 38
  4128. 33["Block 33:\n %34 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %35 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %34, i32 0, i32 0\n %36 = load i32**, i32*** %35, align 8\n %37 = icmp ne i32** %36, null\n br i1 %37, label %39, label %38\n"]
  4129. 33 -->|true| 39
  4130. 33 -->|false| 38
  4131. 38["Block 38:\n call void @setErrorMessage(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.22, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  4132. 38 --> 217
  4133. 39["Block 39:\n %40 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %41 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %40, i32 0, i32 2\n %42 = load i32, i32* %41, align 4\n %43 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %44 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %43, i32 0, i32 1\n %45 = load i32, i32* %44, align 8\n %46 = icmp ne i32 %42, %45\n br i1 %46, label %47, label %48\n"]
  4134. 39 -->|true| 47
  4135. 39 -->|false| 48
  4136. 47["Block 47:\n call void @setErrorMessage(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.23, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  4137. 47 --> 217
  4138. 48["Block 48:\n %49 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %50 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %49, i32 0, i32 2\n %51 = load i32, i32* %50, align 4\n %52 = icmp sgt i32 %51, 100\n br i1 %52, label %58, label %53\n"]
  4139. 48 -->|true| 58
  4140. 48 -->|false| 53
  4141. 53["Block 53:\n %54 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %55 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %54, i32 0, i32 1\n %56 = load i32, i32* %55, align 8\n %57 = icmp sgt i32 %56, 100\n br i1 %57, label %58, label %59\n"]
  4142. 53 -->|true| 58
  4143. 53 -->|false| 59
  4144. 58["Block 58:\n call void @setErrorMessage(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.17, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  4145. 58 --> 217
  4146. 59["Block 59:\n %60 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %61 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %60, i32 0, i32 1\n %62 = load i32, i32* %61, align 8\n %63 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %64 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %63, i32 0, i32 2\n %65 = load i32, i32* %64, align 4\n %66 = call %struct.Matrix* @createMatrix(i32 %62, i32 %65)\n store %struct.Matrix* %66, %struct.Matrix** %7, align 8\n %67 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %68 = icmp ne %struct.Matrix* %67, null\n br i1 %68, label %70, label %69\n"]
  4147. 59 -->|true| 70
  4148. 59 -->|false| 69
  4149. 69["Block 69:\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  4150. 69 --> 217
  4151. 70["Block 70:\n store i64 0, i64* %8, align 8\n store i32 0, i32* %9, align 4\n br label %71\n"]
  4152. 70 --> 71
  4153. 71["Block 71:\n %72 = load i32, i32* %9, align 4\n %73 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %74 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %73, i32 0, i32 1\n %75 = load i32, i32* %74, align 8\n %76 = icmp slt i32 %72, %75\n br i1 %76, label %77, label %205\n"]
  4154. 71 -->|true| 77
  4155. 71 -->|false| 205
  4156. 77["Block 77:\n store i32 0, i32* %10, align 4\n br label %78\n"]
  4157. 77 --> 78
  4158. 78["Block 78:\n %79 = load i32, i32* %10, align 4\n %80 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %81 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %80, i32 0, i32 2\n %82 = load i32, i32* %81, align 4\n %83 = icmp slt i32 %79, %82\n br i1 %83, label %84, label %201\n"]
  4159. 78 -->|true| 84
  4160. 78 -->|false| 201
  4161. 84["Block 84:\n store i64 0, i64* %11, align 8\n store i32 0, i32* %12, align 4\n br label %85\n"]
  4162. 84 --> 85
  4163. 85["Block 85:\n %86 = load i32, i32* %12, align 4\n %87 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %88 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %87, i32 0, i32 2\n %89 = load i32, i32* %88, align 4\n %90 = icmp slt i32 %86, %89\n br i1 %90, label %91, label %155\n"]
  4164. 85 -->|true| 91
  4165. 85 -->|false| 155
  4166. 91["Block 91:\n %92 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %93 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %92, i32 0, i32 0\n %94 = load i32**, i32*** %93, align 8\n %95 = load i32, i32* %9, align 4\n %96 = sext i32 %95 to i64\n %97 = getelementptr inbounds i32*, i32** %94, i64 %96\n %98 = load i32*, i32** %97, align 8\n %99 = load i32, i32* %12, align 4\n %100 = sext i32 %99 to i64\n %101 = getelementptr inbounds i32, i32* %98, i64 %100\n %102 = load i32, i32* %101, align 4\n %103 = sext i32 %102 to i64\n %104 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %105 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %104, i32 0, i32 0\n %106 = load i32**, i32*** %105, align 8\n %107 = load i32, i32* %12, align 4\n %108 = sext i32 %107 to i64\n %109 = getelementptr inbounds i32*, i32** %106, i64 %108\n %110 = load i32*, i32** %109, align 8\n %111 = load i32, i32* %10, align 4\n %112 = sext i32 %111 to i64\n %113 = getelementptr inbounds i32, i32* %110, i64 %112\n %114 = load i32, i32* %113, align 4\n %115 = sext i32 %114 to i64\n %116 = mul nsw i64 %103, %115\n store i64 %116, i64* %13, align 8\n %117 = load i64, i64* %13, align 8\n %118 = load i64, i64* %11, align 8\n %119 = add nsw i64 %118, %117\n store i64 %119, i64* %11, align 8\n %120 = load i64, i64* %11, align 8\n %121 = icmp sgt i64 %120, 2147483647\n br i1 %121, label %125, label %122\n"]
  4167. 91 -->|true| 125
  4168. 91 -->|false| 122
  4169. 122["Block 122:\n %123 = load i64, i64* %11, align 8\n %124 = icmp slt i64 %123, -2147483648\n br i1 %124, label %125, label %151\n"]
  4170. 122 -->|true| 125
  4171. 122 -->|false| 151
  4172. 125["Block 125:\n call void @setErrorMessage(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.24, i64 0, i64 0))\n store i32 0, i32* %14, align 4\n br label %126\n"]
  4173. 125 --> 126
  4174. 126["Block 126:\n %127 = load i32, i32* %14, align 4\n %128 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %129 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %128, i32 0, i32 1\n %130 = load i32, i32* %129, align 8\n %131 = icmp slt i32 %127, %130\n br i1 %131, label %132, label %144\n"]
  4175. 126 -->|true| 132
  4176. 126 -->|false| 144
  4177. 132["Block 132:\n %133 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %134 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %133, i32 0, i32 0\n %135 = load i32**, i32*** %134, align 8\n %136 = load i32, i32* %14, align 4\n %137 = sext i32 %136 to i64\n %138 = getelementptr inbounds i32*, i32** %135, i64 %137\n %139 = load i32*, i32** %138, align 8\n %140 = bitcast i32* %139 to i8*\n call void @free(i8* %140) #7\n br label %141\n"]
  4178. 132 --> 141
  4179. 141["Block 141:\n %142 = load i32, i32* %14, align 4\n %143 = add nsw i32 %142, 1\n store i32 %143, i32* %14, align 4\n br label %126\n"]
  4180. 141 --> 126
  4181. 144["Block 144:\n %145 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %146 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %145, i32 0, i32 0\n %147 = load i32**, i32*** %146, align 8\n %148 = bitcast i32** %147 to i8*\n call void @free(i8* %148) #7\n %149 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %150 = bitcast %struct.Matrix* %149 to i8*\n call void @free(i8* %150) #7\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  4182. 144 --> 217
  4183. 151["Block 151:\n br label %152\n"]
  4184. 151 --> 152
  4185. 152["Block 152:\n %153 = load i32, i32* %12, align 4\n %154 = add nsw i32 %153, 1\n store i32 %154, i32* %12, align 4\n br label %85\n"]
  4186. 152 --> 85
  4187. 155["Block 155:\n %156 = load i64, i64* %11, align 8\n %157 = trunc i64 %156 to i32\n %158 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %159 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %158, i32 0, i32 0\n %160 = load i32**, i32*** %159, align 8\n %161 = load i32, i32* %9, align 4\n %162 = sext i32 %161 to i64\n %163 = getelementptr inbounds i32*, i32** %160, i64 %162\n %164 = load i32*, i32** %163, align 8\n %165 = load i32, i32* %10, align 4\n %166 = sext i32 %165 to i64\n %167 = getelementptr inbounds i32, i32* %164, i64 %166\n store i32 %157, i32* %167, align 4\n %168 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %169 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %168, i32 0, i32 0\n %170 = load i32**, i32*** %169, align 8\n %171 = load i32, i32* %9, align 4\n %172 = sext i32 %171 to i64\n %173 = getelementptr inbounds i32*, i32** %170, i64 %172\n %174 = load i32*, i32** %173, align 8\n %175 = load i32, i32* %10, align 4\n %176 = sext i32 %175 to i64\n %177 = getelementptr inbounds i32, i32* %174, i64 %176\n %178 = load i32, i32* %177, align 4\n %179 = call i32 @abs(i32 %178) #8\n %180 = sext i32 %179 to i64\n %181 = load i64, i64* %8, align 8\n %182 = icmp sgt i64 %180, %181\n br i1 %182, label %183, label %197\n"]
  4188. 155 -->|true| 183
  4189. 155 -->|false| 197
  4190. 183["Block 183:\n %184 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %185 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %184, i32 0, i32 0\n %186 = load i32**, i32*** %185, align 8\n %187 = load i32, i32* %9, align 4\n %188 = sext i32 %187 to i64\n %189 = getelementptr inbounds i32*, i32** %186, i64 %188\n %190 = load i32*, i32** %189, align 8\n %191 = load i32, i32* %10, align 4\n %192 = sext i32 %191 to i64\n %193 = getelementptr inbounds i32, i32* %190, i64 %192\n %194 = load i32, i32* %193, align 4\n %195 = call i32 @abs(i32 %194) #8\n %196 = sext i32 %195 to i64\n store i64 %196, i64* %8, align 8\n br label %197\n"]
  4191. 183 --> 197
  4192. 197["Block 197:\n br label %198\n"]
  4193. 197 --> 198
  4194. 198["Block 198:\n %199 = load i32, i32* %10, align 4\n %200 = add nsw i32 %199, 1\n store i32 %200, i32* %10, align 4\n br label %78\n"]
  4195. 198 --> 78
  4196. 201["Block 201:\n br label %202\n"]
  4197. 201 --> 202
  4198. 202["Block 202:\n %203 = load i32, i32* %9, align 4\n %204 = add nsw i32 %203, 1\n store i32 %204, i32* %9, align 4\n br label %71\n"]
  4199. 202 --> 71
  4200. 205["Block 205:\n %206 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %207 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %206, i32 0, i32 1\n %208 = load i32, i32* %207, align 8\n %209 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %210 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %209, i32 0, i32 2\n %211 = load i32, i32* %210, align 4\n %212 = icmp eq i32 %208, %211\n %213 = zext i1 %212 to i32\n %214 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %215 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %214, i32 0, i32 3\n store i32 %213, i32* %215, align 8\n %216 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n store %struct.Matrix* %216, %struct.Matrix** %4, align 8\n br label %217\n"]
  4201. 205 --> 217
  4202. 217["Block 217:\n %218 = load %struct.Matrix*, %struct.Matrix** %4, align 8\n %219 = insertvalue %fused_return_multiplyMatrices_testPoints { i32 0, %struct.Matrix* undef }, %struct.Matrix* %218, 1\n ret %fused_return_multiplyMatrices_testPoints %219\n"]
  4203. target_cond_1["Block target_cond_1:\n br i1 %0, label %220, label %target_skip_1\n"]
  4204. target_cond_1 -->|true| 220
  4205. target_cond_1 -->|false| target_skip_1
  4206. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  4207. target_skip_1 --> target_phi_1
  4208. target_phi_1["Block target_phi_1:\n"]
  4209. 220["Block 220:\n %221 = load i32, i32* %17, align 4\n %222 = add nsw i32 %221, 1\n store i32 %222, i32* %17, align 4\n %223 = load i32, i32* %16, align 4\n %224 = icmp sgt i32 %223, 2\n br i1 %224, label %230, label %231\n"]
  4210. 220 -->|true| 230
  4211. 220 -->|false| 231
  4212. 225["Block 225:\n %226 = load i32, i32* %18, align 4\n %227 = icmp slt i32 %226, 5\n br i1 %227, label %220, label %228\n"]
  4213. 225 -->|true| 220
  4214. 225 -->|false| 228
  4215. 228["Block 228:\n %229 = load i32, i32* %17, align 4\n store i32 %229, i32* %15, align 4\n br label %232\n"]
  4216. 228 --> 232
  4217. 230["Block 230:\n store i32 23, i32* %15, align 4\n br label %232\n"]
  4218. 230 --> 232
  4219. 231["Block 231:\n br label %236\n"]
  4220. 231 --> 236
  4221. 232["Block 232:\n %233 = load i32, i32* %15, align 4\n %234 = insertvalue %fused_return_multiplyMatrices_testPoints undef, i32 %233, 0\n %235 = insertvalue %fused_return_multiplyMatrices_testPoints %234, %struct.Matrix* null, 1\n ret %fused_return_multiplyMatrices_testPoints %235\n"]
  4222. 236["Block 236:\n %237 = load i32, i32* %18, align 4\n %238 = add nsw i32 %237, 1\n store i32 %238, i32* %18, align 4\n br label %target_phi_1\n"]
  4223. 236 --> target_phi_1
  4224. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  4225. ```
  4226. [DEBUG][updateCallSite] Original call instruction:
  4227. %118 = call %struct.Matrix* @multiplyMatrices(%struct.Matrix* %116, %struct.Matrix* %117)
  4228. [DEBUG][updateCallSite] Adding bunker control parameter
  4229. [DEBUG][updateCallSite] Adding original call parameters:
  4230. [DEBUG][updateCallSite] Argument 0: type=struct.struct.Matrix*
  4231. [DEBUG][updateCallSite] Argument 1: type=struct.struct.Matrix*
  4232. [DEBUG][updateCallSite] Adding default target parameters:
  4233. [DEBUG][updateCallSite] Parameter type: i32
  4234. [DEBUG][updateCallSite] New call instruction:
  4235. %118 = call %fused_return_multiplyMatrices_testPoints @fused_multiplyMatrices(i1 false, %struct.Matrix* %116, %struct.Matrix* %117, i32 0)
  4236. [DEBUG][updateCallSite] Processing non-void return value of type: struct.struct.Matrix*
  4237. [DEBUG][updateCallSite] Extracting value from struct return type
  4238. [DEBUG][updateCallSite] Extracted value type: struct.struct.Matrix*
  4239. [DEBUG][updateCallSite] Successfully replaced all uses of original call
  4240. [INFO][updateCallSite] Successfully updated call site from %118 = call %struct.Matrix* @multiplyMatrices(%struct.Matrix* %116, %struct.Matrix* %117) to %118 = call %fused_return_multiplyMatrices_testPoints @fused_multiplyMatrices(i1 false, %struct.Matrix* %116, %struct.Matrix* %117, i32 0)
  4241. [DEBUG][updateCallSite] Original call instruction:
  4242. %16 = call i32 @testPoints(i32 5)
  4243. [DEBUG][updateCallSite] Adding target control parameter
  4244. [DEBUG][updateCallSite] Adding default bunker parameters:
  4245. [DEBUG][updateCallSite] Parameter type: struct.struct.Matrix*
  4246. [DEBUG][updateCallSite] Parameter type: struct.struct.Matrix*
  4247. [DEBUG][updateCallSite] Adding original call parameters:
  4248. [DEBUG][updateCallSite] Argument 0: type=i32
  4249. [DEBUG][updateCallSite] New call instruction:
  4250. %16 = call %fused_return_multiplyMatrices_testPoints @fused_multiplyMatrices(i1 true, %struct.Matrix* null, %struct.Matrix* null, i32 5)
  4251. [DEBUG][updateCallSite] Processing non-void return value of type: i32
  4252. [DEBUG][updateCallSite] Extracting value from struct return type
  4253. [DEBUG][updateCallSite] Extracted value type: i32
  4254. [DEBUG][updateCallSite] Successfully replaced all uses of original call
  4255. [INFO][updateCallSite] Successfully updated call site from %16 = call i32 @testPoints(i32 5) to %16 = call %fused_return_multiplyMatrices_testPoints @fused_multiplyMatrices(i1 true, %struct.Matrix* null, %struct.Matrix* null, i32 5)
  4256. [INFO][performCodeFusion] [After update call site]Generated control flow graph for fused function:
  4257. ```mermaid: fused_multiplyMatrices
  4258. graph TD
  4259. entry["Block entry:\n %4 = alloca %struct.Matrix*\n %5 = alloca %struct.Matrix*\n %6 = alloca %struct.Matrix*\n %7 = alloca %struct.Matrix*\n %8 = alloca i64\n %9 = alloca i32\n %10 = alloca i32\n %11 = alloca i64\n %12 = alloca i32\n %13 = alloca i64\n %14 = alloca i32\n %15 = alloca i32\n %16 = alloca i32\n %17 = alloca i32\n %18 = alloca i32\n %19 = xor i1 %0, true\n br label %target_cond_0\n"]
  4260. entry --> target_cond_0
  4261. target_cond_0["Block target_cond_0:\n br i1 %0, label %20, label %target_skip_0\n"]
  4262. target_cond_0 -->|true| 20
  4263. target_cond_0 -->|false| target_skip_0
  4264. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  4265. target_skip_0 --> target_phi_0
  4266. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  4267. target_phi_0 --> bunker_cond_0
  4268. 20["Block 20:\n store i32 %3, i32* %16, align 4\n store i32 0, i32* %17, align 4\n store i32 1, i32* %18, align 4\n br label %target_phi_0\n"]
  4269. 20 --> target_phi_0
  4270. bunker_cond_0["Block bunker_cond_0:\n br i1 %19, label %21, label %bunker_skip_0\n"]
  4271. bunker_cond_0 -->|true| 21
  4272. bunker_cond_0 -->|false| bunker_skip_0
  4273. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  4274. bunker_skip_0 --> bunker_phi_0
  4275. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  4276. bunker_phi_0 --> target_cond_1
  4277. 21["Block 21:\n store %struct.Matrix* %1, %struct.Matrix** %5, align 8\n store %struct.Matrix* %2, %struct.Matrix** %6, align 8\n %22 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %23 = icmp ne %struct.Matrix* %22, null\n br i1 %23, label %24, label %27\n"]
  4278. 21 -->|true| 24
  4279. 21 -->|false| 27
  4280. 24["Block 24:\n %25 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %26 = icmp ne %struct.Matrix* %25, null\n br i1 %26, label %28, label %27\n"]
  4281. 24 -->|true| 28
  4282. 24 -->|false| 27
  4283. 27["Block 27:\n call void @setErrorMessage(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.21, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  4284. 27 --> 217
  4285. 28["Block 28:\n %29 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %30 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %29, i32 0, i32 0\n %31 = load i32**, i32*** %30, align 8\n %32 = icmp ne i32** %31, null\n br i1 %32, label %33, label %38\n"]
  4286. 28 -->|true| 33
  4287. 28 -->|false| 38
  4288. 33["Block 33:\n %34 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %35 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %34, i32 0, i32 0\n %36 = load i32**, i32*** %35, align 8\n %37 = icmp ne i32** %36, null\n br i1 %37, label %39, label %38\n"]
  4289. 33 -->|true| 39
  4290. 33 -->|false| 38
  4291. 38["Block 38:\n call void @setErrorMessage(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.22, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  4292. 38 --> 217
  4293. 39["Block 39:\n %40 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %41 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %40, i32 0, i32 2\n %42 = load i32, i32* %41, align 4\n %43 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %44 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %43, i32 0, i32 1\n %45 = load i32, i32* %44, align 8\n %46 = icmp ne i32 %42, %45\n br i1 %46, label %47, label %48\n"]
  4294. 39 -->|true| 47
  4295. 39 -->|false| 48
  4296. 47["Block 47:\n call void @setErrorMessage(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.23, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  4297. 47 --> 217
  4298. 48["Block 48:\n %49 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %50 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %49, i32 0, i32 2\n %51 = load i32, i32* %50, align 4\n %52 = icmp sgt i32 %51, 100\n br i1 %52, label %58, label %53\n"]
  4299. 48 -->|true| 58
  4300. 48 -->|false| 53
  4301. 53["Block 53:\n %54 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %55 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %54, i32 0, i32 1\n %56 = load i32, i32* %55, align 8\n %57 = icmp sgt i32 %56, 100\n br i1 %57, label %58, label %59\n"]
  4302. 53 -->|true| 58
  4303. 53 -->|false| 59
  4304. 58["Block 58:\n call void @setErrorMessage(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.17, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  4305. 58 --> 217
  4306. 59["Block 59:\n %60 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %61 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %60, i32 0, i32 1\n %62 = load i32, i32* %61, align 8\n %63 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %64 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %63, i32 0, i32 2\n %65 = load i32, i32* %64, align 4\n %66 = call %struct.Matrix* @createMatrix(i32 %62, i32 %65)\n store %struct.Matrix* %66, %struct.Matrix** %7, align 8\n %67 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %68 = icmp ne %struct.Matrix* %67, null\n br i1 %68, label %70, label %69\n"]
  4307. 59 -->|true| 70
  4308. 59 -->|false| 69
  4309. 69["Block 69:\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  4310. 69 --> 217
  4311. 70["Block 70:\n store i64 0, i64* %8, align 8\n store i32 0, i32* %9, align 4\n br label %71\n"]
  4312. 70 --> 71
  4313. 71["Block 71:\n %72 = load i32, i32* %9, align 4\n %73 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %74 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %73, i32 0, i32 1\n %75 = load i32, i32* %74, align 8\n %76 = icmp slt i32 %72, %75\n br i1 %76, label %77, label %205\n"]
  4314. 71 -->|true| 77
  4315. 71 -->|false| 205
  4316. 77["Block 77:\n store i32 0, i32* %10, align 4\n br label %78\n"]
  4317. 77 --> 78
  4318. 78["Block 78:\n %79 = load i32, i32* %10, align 4\n %80 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %81 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %80, i32 0, i32 2\n %82 = load i32, i32* %81, align 4\n %83 = icmp slt i32 %79, %82\n br i1 %83, label %84, label %201\n"]
  4319. 78 -->|true| 84
  4320. 78 -->|false| 201
  4321. 84["Block 84:\n store i64 0, i64* %11, align 8\n store i32 0, i32* %12, align 4\n br label %85\n"]
  4322. 84 --> 85
  4323. 85["Block 85:\n %86 = load i32, i32* %12, align 4\n %87 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %88 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %87, i32 0, i32 2\n %89 = load i32, i32* %88, align 4\n %90 = icmp slt i32 %86, %89\n br i1 %90, label %91, label %155\n"]
  4324. 85 -->|true| 91
  4325. 85 -->|false| 155
  4326. 91["Block 91:\n %92 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %93 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %92, i32 0, i32 0\n %94 = load i32**, i32*** %93, align 8\n %95 = load i32, i32* %9, align 4\n %96 = sext i32 %95 to i64\n %97 = getelementptr inbounds i32*, i32** %94, i64 %96\n %98 = load i32*, i32** %97, align 8\n %99 = load i32, i32* %12, align 4\n %100 = sext i32 %99 to i64\n %101 = getelementptr inbounds i32, i32* %98, i64 %100\n %102 = load i32, i32* %101, align 4\n %103 = sext i32 %102 to i64\n %104 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %105 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %104, i32 0, i32 0\n %106 = load i32**, i32*** %105, align 8\n %107 = load i32, i32* %12, align 4\n %108 = sext i32 %107 to i64\n %109 = getelementptr inbounds i32*, i32** %106, i64 %108\n %110 = load i32*, i32** %109, align 8\n %111 = load i32, i32* %10, align 4\n %112 = sext i32 %111 to i64\n %113 = getelementptr inbounds i32, i32* %110, i64 %112\n %114 = load i32, i32* %113, align 4\n %115 = sext i32 %114 to i64\n %116 = mul nsw i64 %103, %115\n store i64 %116, i64* %13, align 8\n %117 = load i64, i64* %13, align 8\n %118 = load i64, i64* %11, align 8\n %119 = add nsw i64 %118, %117\n store i64 %119, i64* %11, align 8\n %120 = load i64, i64* %11, align 8\n %121 = icmp sgt i64 %120, 2147483647\n br i1 %121, label %125, label %122\n"]
  4327. 91 -->|true| 125
  4328. 91 -->|false| 122
  4329. 122["Block 122:\n %123 = load i64, i64* %11, align 8\n %124 = icmp slt i64 %123, -2147483648\n br i1 %124, label %125, label %151\n"]
  4330. 122 -->|true| 125
  4331. 122 -->|false| 151
  4332. 125["Block 125:\n call void @setErrorMessage(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.24, i64 0, i64 0))\n store i32 0, i32* %14, align 4\n br label %126\n"]
  4333. 125 --> 126
  4334. 126["Block 126:\n %127 = load i32, i32* %14, align 4\n %128 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %129 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %128, i32 0, i32 1\n %130 = load i32, i32* %129, align 8\n %131 = icmp slt i32 %127, %130\n br i1 %131, label %132, label %144\n"]
  4335. 126 -->|true| 132
  4336. 126 -->|false| 144
  4337. 132["Block 132:\n %133 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %134 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %133, i32 0, i32 0\n %135 = load i32**, i32*** %134, align 8\n %136 = load i32, i32* %14, align 4\n %137 = sext i32 %136 to i64\n %138 = getelementptr inbounds i32*, i32** %135, i64 %137\n %139 = load i32*, i32** %138, align 8\n %140 = bitcast i32* %139 to i8*\n call void @free(i8* %140) #7\n br label %141\n"]
  4338. 132 --> 141
  4339. 141["Block 141:\n %142 = load i32, i32* %14, align 4\n %143 = add nsw i32 %142, 1\n store i32 %143, i32* %14, align 4\n br label %126\n"]
  4340. 141 --> 126
  4341. 144["Block 144:\n %145 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %146 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %145, i32 0, i32 0\n %147 = load i32**, i32*** %146, align 8\n %148 = bitcast i32** %147 to i8*\n call void @free(i8* %148) #7\n %149 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %150 = bitcast %struct.Matrix* %149 to i8*\n call void @free(i8* %150) #7\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  4342. 144 --> 217
  4343. 151["Block 151:\n br label %152\n"]
  4344. 151 --> 152
  4345. 152["Block 152:\n %153 = load i32, i32* %12, align 4\n %154 = add nsw i32 %153, 1\n store i32 %154, i32* %12, align 4\n br label %85\n"]
  4346. 152 --> 85
  4347. 155["Block 155:\n %156 = load i64, i64* %11, align 8\n %157 = trunc i64 %156 to i32\n %158 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %159 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %158, i32 0, i32 0\n %160 = load i32**, i32*** %159, align 8\n %161 = load i32, i32* %9, align 4\n %162 = sext i32 %161 to i64\n %163 = getelementptr inbounds i32*, i32** %160, i64 %162\n %164 = load i32*, i32** %163, align 8\n %165 = load i32, i32* %10, align 4\n %166 = sext i32 %165 to i64\n %167 = getelementptr inbounds i32, i32* %164, i64 %166\n store i32 %157, i32* %167, align 4\n %168 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %169 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %168, i32 0, i32 0\n %170 = load i32**, i32*** %169, align 8\n %171 = load i32, i32* %9, align 4\n %172 = sext i32 %171 to i64\n %173 = getelementptr inbounds i32*, i32** %170, i64 %172\n %174 = load i32*, i32** %173, align 8\n %175 = load i32, i32* %10, align 4\n %176 = sext i32 %175 to i64\n %177 = getelementptr inbounds i32, i32* %174, i64 %176\n %178 = load i32, i32* %177, align 4\n %179 = call i32 @abs(i32 %178) #8\n %180 = sext i32 %179 to i64\n %181 = load i64, i64* %8, align 8\n %182 = icmp sgt i64 %180, %181\n br i1 %182, label %183, label %197\n"]
  4348. 155 -->|true| 183
  4349. 155 -->|false| 197
  4350. 183["Block 183:\n %184 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %185 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %184, i32 0, i32 0\n %186 = load i32**, i32*** %185, align 8\n %187 = load i32, i32* %9, align 4\n %188 = sext i32 %187 to i64\n %189 = getelementptr inbounds i32*, i32** %186, i64 %188\n %190 = load i32*, i32** %189, align 8\n %191 = load i32, i32* %10, align 4\n %192 = sext i32 %191 to i64\n %193 = getelementptr inbounds i32, i32* %190, i64 %192\n %194 = load i32, i32* %193, align 4\n %195 = call i32 @abs(i32 %194) #8\n %196 = sext i32 %195 to i64\n store i64 %196, i64* %8, align 8\n br label %197\n"]
  4351. 183 --> 197
  4352. 197["Block 197:\n br label %198\n"]
  4353. 197 --> 198
  4354. 198["Block 198:\n %199 = load i32, i32* %10, align 4\n %200 = add nsw i32 %199, 1\n store i32 %200, i32* %10, align 4\n br label %78\n"]
  4355. 198 --> 78
  4356. 201["Block 201:\n br label %202\n"]
  4357. 201 --> 202
  4358. 202["Block 202:\n %203 = load i32, i32* %9, align 4\n %204 = add nsw i32 %203, 1\n store i32 %204, i32* %9, align 4\n br label %71\n"]
  4359. 202 --> 71
  4360. 205["Block 205:\n %206 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %207 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %206, i32 0, i32 1\n %208 = load i32, i32* %207, align 8\n %209 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %210 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %209, i32 0, i32 2\n %211 = load i32, i32* %210, align 4\n %212 = icmp eq i32 %208, %211\n %213 = zext i1 %212 to i32\n %214 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %215 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %214, i32 0, i32 3\n store i32 %213, i32* %215, align 8\n %216 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n store %struct.Matrix* %216, %struct.Matrix** %4, align 8\n br label %217\n"]
  4361. 205 --> 217
  4362. 217["Block 217:\n %218 = load %struct.Matrix*, %struct.Matrix** %4, align 8\n %219 = insertvalue %fused_return_multiplyMatrices_testPoints { i32 0, %struct.Matrix* undef }, %struct.Matrix* %218, 1\n ret %fused_return_multiplyMatrices_testPoints %219\n"]
  4363. target_cond_1["Block target_cond_1:\n br i1 %0, label %220, label %target_skip_1\n"]
  4364. target_cond_1 -->|true| 220
  4365. target_cond_1 -->|false| target_skip_1
  4366. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  4367. target_skip_1 --> target_phi_1
  4368. target_phi_1["Block target_phi_1:\n"]
  4369. 220["Block 220:\n %221 = load i32, i32* %17, align 4\n %222 = add nsw i32 %221, 1\n store i32 %222, i32* %17, align 4\n %223 = load i32, i32* %16, align 4\n %224 = icmp sgt i32 %223, 2\n br i1 %224, label %230, label %231\n"]
  4370. 220 -->|true| 230
  4371. 220 -->|false| 231
  4372. 225["Block 225:\n %226 = load i32, i32* %18, align 4\n %227 = icmp slt i32 %226, 5\n br i1 %227, label %220, label %228\n"]
  4373. 225 -->|true| 220
  4374. 225 -->|false| 228
  4375. 228["Block 228:\n %229 = load i32, i32* %17, align 4\n store i32 %229, i32* %15, align 4\n br label %232\n"]
  4376. 228 --> 232
  4377. 230["Block 230:\n store i32 23, i32* %15, align 4\n br label %232\n"]
  4378. 230 --> 232
  4379. 231["Block 231:\n br label %236\n"]
  4380. 231 --> 236
  4381. 232["Block 232:\n %233 = load i32, i32* %15, align 4\n %234 = insertvalue %fused_return_multiplyMatrices_testPoints undef, i32 %233, 0\n %235 = insertvalue %fused_return_multiplyMatrices_testPoints %234, %struct.Matrix* null, 1\n ret %fused_return_multiplyMatrices_testPoints %235\n"]
  4382. 236["Block 236:\n %237 = load i32, i32* %18, align 4\n %238 = add nsw i32 %237, 1\n store i32 %238, i32* %18, align 4\n br label %target_phi_1\n"]
  4383. 236 --> target_phi_1
  4384. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  4385. ```
  4386. [INFO][performCodeFusion] Fixing blocks without terminators...
  4387. [INFO][performCodeFusion] Added return with default value to block: target_phi_1
  4388. [INFO][performCodeFusion] Starting PHI node repair
  4389. [INFO][performCodeFusion] [After fix PHI]Generated control flow graph for fused function:
  4390. ```mermaid: fused_multiplyMatrices
  4391. graph TD
  4392. entry["Block entry:\n %4 = alloca %struct.Matrix*\n %5 = alloca %struct.Matrix*\n %6 = alloca %struct.Matrix*\n %7 = alloca %struct.Matrix*\n %8 = alloca i64\n %9 = alloca i32\n %10 = alloca i32\n %11 = alloca i64\n %12 = alloca i32\n %13 = alloca i64\n %14 = alloca i32\n %15 = alloca i32\n %16 = alloca i32\n %17 = alloca i32\n %18 = alloca i32\n %19 = xor i1 %0, true\n br label %target_cond_0\n"]
  4393. entry --> target_cond_0
  4394. target_cond_0["Block target_cond_0:\n br i1 %0, label %20, label %target_skip_0\n"]
  4395. target_cond_0 -->|true| 20
  4396. target_cond_0 -->|false| target_skip_0
  4397. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  4398. target_skip_0 --> target_phi_0
  4399. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  4400. target_phi_0 --> bunker_cond_0
  4401. 20["Block 20:\n store i32 %3, i32* %16, align 4\n store i32 0, i32* %17, align 4\n store i32 1, i32* %18, align 4\n br label %target_phi_0\n"]
  4402. 20 --> target_phi_0
  4403. bunker_cond_0["Block bunker_cond_0:\n br i1 %19, label %21, label %bunker_skip_0\n"]
  4404. bunker_cond_0 -->|true| 21
  4405. bunker_cond_0 -->|false| bunker_skip_0
  4406. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  4407. bunker_skip_0 --> bunker_phi_0
  4408. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  4409. bunker_phi_0 --> target_cond_1
  4410. 21["Block 21:\n store %struct.Matrix* %1, %struct.Matrix** %5, align 8\n store %struct.Matrix* %2, %struct.Matrix** %6, align 8\n %22 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %23 = icmp ne %struct.Matrix* %22, null\n br i1 %23, label %24, label %27\n"]
  4411. 21 -->|true| 24
  4412. 21 -->|false| 27
  4413. 24["Block 24:\n %25 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %26 = icmp ne %struct.Matrix* %25, null\n br i1 %26, label %28, label %27\n"]
  4414. 24 -->|true| 28
  4415. 24 -->|false| 27
  4416. 27["Block 27:\n call void @setErrorMessage(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.21, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  4417. 27 --> 217
  4418. 28["Block 28:\n %29 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %30 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %29, i32 0, i32 0\n %31 = load i32**, i32*** %30, align 8\n %32 = icmp ne i32** %31, null\n br i1 %32, label %33, label %38\n"]
  4419. 28 -->|true| 33
  4420. 28 -->|false| 38
  4421. 33["Block 33:\n %34 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %35 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %34, i32 0, i32 0\n %36 = load i32**, i32*** %35, align 8\n %37 = icmp ne i32** %36, null\n br i1 %37, label %39, label %38\n"]
  4422. 33 -->|true| 39
  4423. 33 -->|false| 38
  4424. 38["Block 38:\n call void @setErrorMessage(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.22, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  4425. 38 --> 217
  4426. 39["Block 39:\n %40 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %41 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %40, i32 0, i32 2\n %42 = load i32, i32* %41, align 4\n %43 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %44 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %43, i32 0, i32 1\n %45 = load i32, i32* %44, align 8\n %46 = icmp ne i32 %42, %45\n br i1 %46, label %47, label %48\n"]
  4427. 39 -->|true| 47
  4428. 39 -->|false| 48
  4429. 47["Block 47:\n call void @setErrorMessage(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.23, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  4430. 47 --> 217
  4431. 48["Block 48:\n %49 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %50 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %49, i32 0, i32 2\n %51 = load i32, i32* %50, align 4\n %52 = icmp sgt i32 %51, 100\n br i1 %52, label %58, label %53\n"]
  4432. 48 -->|true| 58
  4433. 48 -->|false| 53
  4434. 53["Block 53:\n %54 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %55 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %54, i32 0, i32 1\n %56 = load i32, i32* %55, align 8\n %57 = icmp sgt i32 %56, 100\n br i1 %57, label %58, label %59\n"]
  4435. 53 -->|true| 58
  4436. 53 -->|false| 59
  4437. 58["Block 58:\n call void @setErrorMessage(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.17, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  4438. 58 --> 217
  4439. 59["Block 59:\n %60 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %61 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %60, i32 0, i32 1\n %62 = load i32, i32* %61, align 8\n %63 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %64 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %63, i32 0, i32 2\n %65 = load i32, i32* %64, align 4\n %66 = call %struct.Matrix* @createMatrix(i32 %62, i32 %65)\n store %struct.Matrix* %66, %struct.Matrix** %7, align 8\n %67 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %68 = icmp ne %struct.Matrix* %67, null\n br i1 %68, label %70, label %69\n"]
  4440. 59 -->|true| 70
  4441. 59 -->|false| 69
  4442. 69["Block 69:\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  4443. 69 --> 217
  4444. 70["Block 70:\n store i64 0, i64* %8, align 8\n store i32 0, i32* %9, align 4\n br label %71\n"]
  4445. 70 --> 71
  4446. 71["Block 71:\n %72 = load i32, i32* %9, align 4\n %73 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %74 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %73, i32 0, i32 1\n %75 = load i32, i32* %74, align 8\n %76 = icmp slt i32 %72, %75\n br i1 %76, label %77, label %205\n"]
  4447. 71 -->|true| 77
  4448. 71 -->|false| 205
  4449. 77["Block 77:\n store i32 0, i32* %10, align 4\n br label %78\n"]
  4450. 77 --> 78
  4451. 78["Block 78:\n %79 = load i32, i32* %10, align 4\n %80 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %81 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %80, i32 0, i32 2\n %82 = load i32, i32* %81, align 4\n %83 = icmp slt i32 %79, %82\n br i1 %83, label %84, label %201\n"]
  4452. 78 -->|true| 84
  4453. 78 -->|false| 201
  4454. 84["Block 84:\n store i64 0, i64* %11, align 8\n store i32 0, i32* %12, align 4\n br label %85\n"]
  4455. 84 --> 85
  4456. 85["Block 85:\n %86 = load i32, i32* %12, align 4\n %87 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %88 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %87, i32 0, i32 2\n %89 = load i32, i32* %88, align 4\n %90 = icmp slt i32 %86, %89\n br i1 %90, label %91, label %155\n"]
  4457. 85 -->|true| 91
  4458. 85 -->|false| 155
  4459. 91["Block 91:\n %92 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %93 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %92, i32 0, i32 0\n %94 = load i32**, i32*** %93, align 8\n %95 = load i32, i32* %9, align 4\n %96 = sext i32 %95 to i64\n %97 = getelementptr inbounds i32*, i32** %94, i64 %96\n %98 = load i32*, i32** %97, align 8\n %99 = load i32, i32* %12, align 4\n %100 = sext i32 %99 to i64\n %101 = getelementptr inbounds i32, i32* %98, i64 %100\n %102 = load i32, i32* %101, align 4\n %103 = sext i32 %102 to i64\n %104 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %105 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %104, i32 0, i32 0\n %106 = load i32**, i32*** %105, align 8\n %107 = load i32, i32* %12, align 4\n %108 = sext i32 %107 to i64\n %109 = getelementptr inbounds i32*, i32** %106, i64 %108\n %110 = load i32*, i32** %109, align 8\n %111 = load i32, i32* %10, align 4\n %112 = sext i32 %111 to i64\n %113 = getelementptr inbounds i32, i32* %110, i64 %112\n %114 = load i32, i32* %113, align 4\n %115 = sext i32 %114 to i64\n %116 = mul nsw i64 %103, %115\n store i64 %116, i64* %13, align 8\n %117 = load i64, i64* %13, align 8\n %118 = load i64, i64* %11, align 8\n %119 = add nsw i64 %118, %117\n store i64 %119, i64* %11, align 8\n %120 = load i64, i64* %11, align 8\n %121 = icmp sgt i64 %120, 2147483647\n br i1 %121, label %125, label %122\n"]
  4460. 91 -->|true| 125
  4461. 91 -->|false| 122
  4462. 122["Block 122:\n %123 = load i64, i64* %11, align 8\n %124 = icmp slt i64 %123, -2147483648\n br i1 %124, label %125, label %151\n"]
  4463. 122 -->|true| 125
  4464. 122 -->|false| 151
  4465. 125["Block 125:\n call void @setErrorMessage(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.24, i64 0, i64 0))\n store i32 0, i32* %14, align 4\n br label %126\n"]
  4466. 125 --> 126
  4467. 126["Block 126:\n %127 = load i32, i32* %14, align 4\n %128 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %129 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %128, i32 0, i32 1\n %130 = load i32, i32* %129, align 8\n %131 = icmp slt i32 %127, %130\n br i1 %131, label %132, label %144\n"]
  4468. 126 -->|true| 132
  4469. 126 -->|false| 144
  4470. 132["Block 132:\n %133 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %134 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %133, i32 0, i32 0\n %135 = load i32**, i32*** %134, align 8\n %136 = load i32, i32* %14, align 4\n %137 = sext i32 %136 to i64\n %138 = getelementptr inbounds i32*, i32** %135, i64 %137\n %139 = load i32*, i32** %138, align 8\n %140 = bitcast i32* %139 to i8*\n call void @free(i8* %140) #7\n br label %141\n"]
  4471. 132 --> 141
  4472. 141["Block 141:\n %142 = load i32, i32* %14, align 4\n %143 = add nsw i32 %142, 1\n store i32 %143, i32* %14, align 4\n br label %126\n"]
  4473. 141 --> 126
  4474. 144["Block 144:\n %145 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %146 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %145, i32 0, i32 0\n %147 = load i32**, i32*** %146, align 8\n %148 = bitcast i32** %147 to i8*\n call void @free(i8* %148) #7\n %149 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %150 = bitcast %struct.Matrix* %149 to i8*\n call void @free(i8* %150) #7\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  4475. 144 --> 217
  4476. 151["Block 151:\n br label %152\n"]
  4477. 151 --> 152
  4478. 152["Block 152:\n %153 = load i32, i32* %12, align 4\n %154 = add nsw i32 %153, 1\n store i32 %154, i32* %12, align 4\n br label %85\n"]
  4479. 152 --> 85
  4480. 155["Block 155:\n %156 = load i64, i64* %11, align 8\n %157 = trunc i64 %156 to i32\n %158 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %159 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %158, i32 0, i32 0\n %160 = load i32**, i32*** %159, align 8\n %161 = load i32, i32* %9, align 4\n %162 = sext i32 %161 to i64\n %163 = getelementptr inbounds i32*, i32** %160, i64 %162\n %164 = load i32*, i32** %163, align 8\n %165 = load i32, i32* %10, align 4\n %166 = sext i32 %165 to i64\n %167 = getelementptr inbounds i32, i32* %164, i64 %166\n store i32 %157, i32* %167, align 4\n %168 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %169 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %168, i32 0, i32 0\n %170 = load i32**, i32*** %169, align 8\n %171 = load i32, i32* %9, align 4\n %172 = sext i32 %171 to i64\n %173 = getelementptr inbounds i32*, i32** %170, i64 %172\n %174 = load i32*, i32** %173, align 8\n %175 = load i32, i32* %10, align 4\n %176 = sext i32 %175 to i64\n %177 = getelementptr inbounds i32, i32* %174, i64 %176\n %178 = load i32, i32* %177, align 4\n %179 = call i32 @abs(i32 %178) #8\n %180 = sext i32 %179 to i64\n %181 = load i64, i64* %8, align 8\n %182 = icmp sgt i64 %180, %181\n br i1 %182, label %183, label %197\n"]
  4481. 155 -->|true| 183
  4482. 155 -->|false| 197
  4483. 183["Block 183:\n %184 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %185 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %184, i32 0, i32 0\n %186 = load i32**, i32*** %185, align 8\n %187 = load i32, i32* %9, align 4\n %188 = sext i32 %187 to i64\n %189 = getelementptr inbounds i32*, i32** %186, i64 %188\n %190 = load i32*, i32** %189, align 8\n %191 = load i32, i32* %10, align 4\n %192 = sext i32 %191 to i64\n %193 = getelementptr inbounds i32, i32* %190, i64 %192\n %194 = load i32, i32* %193, align 4\n %195 = call i32 @abs(i32 %194) #8\n %196 = sext i32 %195 to i64\n store i64 %196, i64* %8, align 8\n br label %197\n"]
  4484. 183 --> 197
  4485. 197["Block 197:\n br label %198\n"]
  4486. 197 --> 198
  4487. 198["Block 198:\n %199 = load i32, i32* %10, align 4\n %200 = add nsw i32 %199, 1\n store i32 %200, i32* %10, align 4\n br label %78\n"]
  4488. 198 --> 78
  4489. 201["Block 201:\n br label %202\n"]
  4490. 201 --> 202
  4491. 202["Block 202:\n %203 = load i32, i32* %9, align 4\n %204 = add nsw i32 %203, 1\n store i32 %204, i32* %9, align 4\n br label %71\n"]
  4492. 202 --> 71
  4493. 205["Block 205:\n %206 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %207 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %206, i32 0, i32 1\n %208 = load i32, i32* %207, align 8\n %209 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %210 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %209, i32 0, i32 2\n %211 = load i32, i32* %210, align 4\n %212 = icmp eq i32 %208, %211\n %213 = zext i1 %212 to i32\n %214 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %215 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %214, i32 0, i32 3\n store i32 %213, i32* %215, align 8\n %216 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n store %struct.Matrix* %216, %struct.Matrix** %4, align 8\n br label %217\n"]
  4494. 205 --> 217
  4495. 217["Block 217:\n %218 = load %struct.Matrix*, %struct.Matrix** %4, align 8\n %219 = insertvalue %fused_return_multiplyMatrices_testPoints { i32 0, %struct.Matrix* undef }, %struct.Matrix* %218, 1\n ret %fused_return_multiplyMatrices_testPoints %219\n"]
  4496. target_cond_1["Block target_cond_1:\n br i1 %0, label %220, label %target_skip_1\n"]
  4497. target_cond_1 -->|true| 220
  4498. target_cond_1 -->|false| target_skip_1
  4499. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  4500. target_skip_1 --> target_phi_1
  4501. target_phi_1["Block target_phi_1:\n ret %fused_return_multiplyMatrices_testPoints zeroinitializer\n"]
  4502. 220["Block 220:\n %221 = load i32, i32* %17, align 4\n %222 = add nsw i32 %221, 1\n store i32 %222, i32* %17, align 4\n %223 = load i32, i32* %16, align 4\n %224 = icmp sgt i32 %223, 2\n br i1 %224, label %230, label %231\n"]
  4503. 220 -->|true| 230
  4504. 220 -->|false| 231
  4505. 225["Block 225:\n %226 = load i32, i32* %18, align 4\n %227 = icmp slt i32 %226, 5\n br i1 %227, label %220, label %228\n"]
  4506. 225 -->|true| 220
  4507. 225 -->|false| 228
  4508. 228["Block 228:\n %229 = load i32, i32* %17, align 4\n store i32 %229, i32* %15, align 4\n br label %232\n"]
  4509. 228 --> 232
  4510. 230["Block 230:\n store i32 23, i32* %15, align 4\n br label %232\n"]
  4511. 230 --> 232
  4512. 231["Block 231:\n br label %236\n"]
  4513. 231 --> 236
  4514. 232["Block 232:\n %233 = load i32, i32* %15, align 4\n %234 = insertvalue %fused_return_multiplyMatrices_testPoints undef, i32 %233, 0\n %235 = insertvalue %fused_return_multiplyMatrices_testPoints %234, %struct.Matrix* null, 1\n ret %fused_return_multiplyMatrices_testPoints %235\n"]
  4515. 236["Block 236:\n %237 = load i32, i32* %18, align 4\n %238 = add nsw i32 %237, 1\n store i32 %238, i32* %18, align 4\n br label %target_phi_1\n"]
  4516. 236 --> target_phi_1
  4517. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  4518. ```
  4519. [INFO][performCodeFusion] Attempting to delete original functions...
  4520. [INFO][performCodeFusion] [After erase]Generated control flow graph for fused function:
  4521. ```mermaid: fused_multiplyMatrices
  4522. graph TD
  4523. entry["Block entry:\n %4 = alloca %struct.Matrix*\n %5 = alloca %struct.Matrix*\n %6 = alloca %struct.Matrix*\n %7 = alloca %struct.Matrix*\n %8 = alloca i64\n %9 = alloca i32\n %10 = alloca i32\n %11 = alloca i64\n %12 = alloca i32\n %13 = alloca i64\n %14 = alloca i32\n %15 = alloca i32\n %16 = alloca i32\n %17 = alloca i32\n %18 = alloca i32\n %19 = xor i1 %0, true\n br label %target_cond_0\n"]
  4524. entry --> target_cond_0
  4525. target_cond_0["Block target_cond_0:\n br i1 %0, label %20, label %target_skip_0\n"]
  4526. target_cond_0 -->|true| 20
  4527. target_cond_0 -->|false| target_skip_0
  4528. target_skip_0["Block target_skip_0:\n br label %target_phi_0\n"]
  4529. target_skip_0 --> target_phi_0
  4530. target_phi_0["Block target_phi_0:\n br label %bunker_cond_0\n"]
  4531. target_phi_0 --> bunker_cond_0
  4532. 20["Block 20:\n store i32 %3, i32* %16, align 4\n store i32 0, i32* %17, align 4\n store i32 1, i32* %18, align 4\n br label %target_phi_0\n"]
  4533. 20 --> target_phi_0
  4534. bunker_cond_0["Block bunker_cond_0:\n br i1 %19, label %21, label %bunker_skip_0\n"]
  4535. bunker_cond_0 -->|true| 21
  4536. bunker_cond_0 -->|false| bunker_skip_0
  4537. bunker_skip_0["Block bunker_skip_0:\n br label %bunker_phi_0\n"]
  4538. bunker_skip_0 --> bunker_phi_0
  4539. bunker_phi_0["Block bunker_phi_0:\n br label %target_cond_1\n"]
  4540. bunker_phi_0 --> target_cond_1
  4541. 21["Block 21:\n store %struct.Matrix* %1, %struct.Matrix** %5, align 8\n store %struct.Matrix* %2, %struct.Matrix** %6, align 8\n %22 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %23 = icmp ne %struct.Matrix* %22, null\n br i1 %23, label %24, label %27\n"]
  4542. 21 -->|true| 24
  4543. 21 -->|false| 27
  4544. 24["Block 24:\n %25 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %26 = icmp ne %struct.Matrix* %25, null\n br i1 %26, label %28, label %27\n"]
  4545. 24 -->|true| 28
  4546. 24 -->|false| 27
  4547. 27["Block 27:\n call void @setErrorMessage(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.21, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  4548. 27 --> 217
  4549. 28["Block 28:\n %29 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %30 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %29, i32 0, i32 0\n %31 = load i32**, i32*** %30, align 8\n %32 = icmp ne i32** %31, null\n br i1 %32, label %33, label %38\n"]
  4550. 28 -->|true| 33
  4551. 28 -->|false| 38
  4552. 33["Block 33:\n %34 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %35 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %34, i32 0, i32 0\n %36 = load i32**, i32*** %35, align 8\n %37 = icmp ne i32** %36, null\n br i1 %37, label %39, label %38\n"]
  4553. 33 -->|true| 39
  4554. 33 -->|false| 38
  4555. 38["Block 38:\n call void @setErrorMessage(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.22, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  4556. 38 --> 217
  4557. 39["Block 39:\n %40 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %41 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %40, i32 0, i32 2\n %42 = load i32, i32* %41, align 4\n %43 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %44 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %43, i32 0, i32 1\n %45 = load i32, i32* %44, align 8\n %46 = icmp ne i32 %42, %45\n br i1 %46, label %47, label %48\n"]
  4558. 39 -->|true| 47
  4559. 39 -->|false| 48
  4560. 47["Block 47:\n call void @setErrorMessage(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.23, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  4561. 47 --> 217
  4562. 48["Block 48:\n %49 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %50 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %49, i32 0, i32 2\n %51 = load i32, i32* %50, align 4\n %52 = icmp sgt i32 %51, 100\n br i1 %52, label %58, label %53\n"]
  4563. 48 -->|true| 58
  4564. 48 -->|false| 53
  4565. 53["Block 53:\n %54 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %55 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %54, i32 0, i32 1\n %56 = load i32, i32* %55, align 8\n %57 = icmp sgt i32 %56, 100\n br i1 %57, label %58, label %59\n"]
  4566. 53 -->|true| 58
  4567. 53 -->|false| 59
  4568. 58["Block 58:\n call void @setErrorMessage(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.17, i64 0, i64 0))\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  4569. 58 --> 217
  4570. 59["Block 59:\n %60 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %61 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %60, i32 0, i32 1\n %62 = load i32, i32* %61, align 8\n %63 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %64 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %63, i32 0, i32 2\n %65 = load i32, i32* %64, align 4\n %66 = call %struct.Matrix* @createMatrix(i32 %62, i32 %65)\n store %struct.Matrix* %66, %struct.Matrix** %7, align 8\n %67 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %68 = icmp ne %struct.Matrix* %67, null\n br i1 %68, label %70, label %69\n"]
  4571. 59 -->|true| 70
  4572. 59 -->|false| 69
  4573. 69["Block 69:\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  4574. 69 --> 217
  4575. 70["Block 70:\n store i64 0, i64* %8, align 8\n store i32 0, i32* %9, align 4\n br label %71\n"]
  4576. 70 --> 71
  4577. 71["Block 71:\n %72 = load i32, i32* %9, align 4\n %73 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %74 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %73, i32 0, i32 1\n %75 = load i32, i32* %74, align 8\n %76 = icmp slt i32 %72, %75\n br i1 %76, label %77, label %205\n"]
  4578. 71 -->|true| 77
  4579. 71 -->|false| 205
  4580. 77["Block 77:\n store i32 0, i32* %10, align 4\n br label %78\n"]
  4581. 77 --> 78
  4582. 78["Block 78:\n %79 = load i32, i32* %10, align 4\n %80 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %81 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %80, i32 0, i32 2\n %82 = load i32, i32* %81, align 4\n %83 = icmp slt i32 %79, %82\n br i1 %83, label %84, label %201\n"]
  4583. 78 -->|true| 84
  4584. 78 -->|false| 201
  4585. 84["Block 84:\n store i64 0, i64* %11, align 8\n store i32 0, i32* %12, align 4\n br label %85\n"]
  4586. 84 --> 85
  4587. 85["Block 85:\n %86 = load i32, i32* %12, align 4\n %87 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %88 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %87, i32 0, i32 2\n %89 = load i32, i32* %88, align 4\n %90 = icmp slt i32 %86, %89\n br i1 %90, label %91, label %155\n"]
  4588. 85 -->|true| 91
  4589. 85 -->|false| 155
  4590. 91["Block 91:\n %92 = load %struct.Matrix*, %struct.Matrix** %5, align 8\n %93 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %92, i32 0, i32 0\n %94 = load i32**, i32*** %93, align 8\n %95 = load i32, i32* %9, align 4\n %96 = sext i32 %95 to i64\n %97 = getelementptr inbounds i32*, i32** %94, i64 %96\n %98 = load i32*, i32** %97, align 8\n %99 = load i32, i32* %12, align 4\n %100 = sext i32 %99 to i64\n %101 = getelementptr inbounds i32, i32* %98, i64 %100\n %102 = load i32, i32* %101, align 4\n %103 = sext i32 %102 to i64\n %104 = load %struct.Matrix*, %struct.Matrix** %6, align 8\n %105 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %104, i32 0, i32 0\n %106 = load i32**, i32*** %105, align 8\n %107 = load i32, i32* %12, align 4\n %108 = sext i32 %107 to i64\n %109 = getelementptr inbounds i32*, i32** %106, i64 %108\n %110 = load i32*, i32** %109, align 8\n %111 = load i32, i32* %10, align 4\n %112 = sext i32 %111 to i64\n %113 = getelementptr inbounds i32, i32* %110, i64 %112\n %114 = load i32, i32* %113, align 4\n %115 = sext i32 %114 to i64\n %116 = mul nsw i64 %103, %115\n store i64 %116, i64* %13, align 8\n %117 = load i64, i64* %13, align 8\n %118 = load i64, i64* %11, align 8\n %119 = add nsw i64 %118, %117\n store i64 %119, i64* %11, align 8\n %120 = load i64, i64* %11, align 8\n %121 = icmp sgt i64 %120, 2147483647\n br i1 %121, label %125, label %122\n"]
  4591. 91 -->|true| 125
  4592. 91 -->|false| 122
  4593. 122["Block 122:\n %123 = load i64, i64* %11, align 8\n %124 = icmp slt i64 %123, -2147483648\n br i1 %124, label %125, label %151\n"]
  4594. 122 -->|true| 125
  4595. 122 -->|false| 151
  4596. 125["Block 125:\n call void @setErrorMessage(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.24, i64 0, i64 0))\n store i32 0, i32* %14, align 4\n br label %126\n"]
  4597. 125 --> 126
  4598. 126["Block 126:\n %127 = load i32, i32* %14, align 4\n %128 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %129 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %128, i32 0, i32 1\n %130 = load i32, i32* %129, align 8\n %131 = icmp slt i32 %127, %130\n br i1 %131, label %132, label %144\n"]
  4599. 126 -->|true| 132
  4600. 126 -->|false| 144
  4601. 132["Block 132:\n %133 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %134 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %133, i32 0, i32 0\n %135 = load i32**, i32*** %134, align 8\n %136 = load i32, i32* %14, align 4\n %137 = sext i32 %136 to i64\n %138 = getelementptr inbounds i32*, i32** %135, i64 %137\n %139 = load i32*, i32** %138, align 8\n %140 = bitcast i32* %139 to i8*\n call void @free(i8* %140) #7\n br label %141\n"]
  4602. 132 --> 141
  4603. 141["Block 141:\n %142 = load i32, i32* %14, align 4\n %143 = add nsw i32 %142, 1\n store i32 %143, i32* %14, align 4\n br label %126\n"]
  4604. 141 --> 126
  4605. 144["Block 144:\n %145 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %146 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %145, i32 0, i32 0\n %147 = load i32**, i32*** %146, align 8\n %148 = bitcast i32** %147 to i8*\n call void @free(i8* %148) #7\n %149 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %150 = bitcast %struct.Matrix* %149 to i8*\n call void @free(i8* %150) #7\n store %struct.Matrix* null, %struct.Matrix** %4, align 8\n br label %217\n"]
  4606. 144 --> 217
  4607. 151["Block 151:\n br label %152\n"]
  4608. 151 --> 152
  4609. 152["Block 152:\n %153 = load i32, i32* %12, align 4\n %154 = add nsw i32 %153, 1\n store i32 %154, i32* %12, align 4\n br label %85\n"]
  4610. 152 --> 85
  4611. 155["Block 155:\n %156 = load i64, i64* %11, align 8\n %157 = trunc i64 %156 to i32\n %158 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %159 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %158, i32 0, i32 0\n %160 = load i32**, i32*** %159, align 8\n %161 = load i32, i32* %9, align 4\n %162 = sext i32 %161 to i64\n %163 = getelementptr inbounds i32*, i32** %160, i64 %162\n %164 = load i32*, i32** %163, align 8\n %165 = load i32, i32* %10, align 4\n %166 = sext i32 %165 to i64\n %167 = getelementptr inbounds i32, i32* %164, i64 %166\n store i32 %157, i32* %167, align 4\n %168 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %169 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %168, i32 0, i32 0\n %170 = load i32**, i32*** %169, align 8\n %171 = load i32, i32* %9, align 4\n %172 = sext i32 %171 to i64\n %173 = getelementptr inbounds i32*, i32** %170, i64 %172\n %174 = load i32*, i32** %173, align 8\n %175 = load i32, i32* %10, align 4\n %176 = sext i32 %175 to i64\n %177 = getelementptr inbounds i32, i32* %174, i64 %176\n %178 = load i32, i32* %177, align 4\n %179 = call i32 @abs(i32 %178) #8\n %180 = sext i32 %179 to i64\n %181 = load i64, i64* %8, align 8\n %182 = icmp sgt i64 %180, %181\n br i1 %182, label %183, label %197\n"]
  4612. 155 -->|true| 183
  4613. 155 -->|false| 197
  4614. 183["Block 183:\n %184 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %185 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %184, i32 0, i32 0\n %186 = load i32**, i32*** %185, align 8\n %187 = load i32, i32* %9, align 4\n %188 = sext i32 %187 to i64\n %189 = getelementptr inbounds i32*, i32** %186, i64 %188\n %190 = load i32*, i32** %189, align 8\n %191 = load i32, i32* %10, align 4\n %192 = sext i32 %191 to i64\n %193 = getelementptr inbounds i32, i32* %190, i64 %192\n %194 = load i32, i32* %193, align 4\n %195 = call i32 @abs(i32 %194) #8\n %196 = sext i32 %195 to i64\n store i64 %196, i64* %8, align 8\n br label %197\n"]
  4615. 183 --> 197
  4616. 197["Block 197:\n br label %198\n"]
  4617. 197 --> 198
  4618. 198["Block 198:\n %199 = load i32, i32* %10, align 4\n %200 = add nsw i32 %199, 1\n store i32 %200, i32* %10, align 4\n br label %78\n"]
  4619. 198 --> 78
  4620. 201["Block 201:\n br label %202\n"]
  4621. 201 --> 202
  4622. 202["Block 202:\n %203 = load i32, i32* %9, align 4\n %204 = add nsw i32 %203, 1\n store i32 %204, i32* %9, align 4\n br label %71\n"]
  4623. 202 --> 71
  4624. 205["Block 205:\n %206 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %207 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %206, i32 0, i32 1\n %208 = load i32, i32* %207, align 8\n %209 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %210 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %209, i32 0, i32 2\n %211 = load i32, i32* %210, align 4\n %212 = icmp eq i32 %208, %211\n %213 = zext i1 %212 to i32\n %214 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n %215 = getelementptr inbounds %struct.Matrix, %struct.Matrix* %214, i32 0, i32 3\n store i32 %213, i32* %215, align 8\n %216 = load %struct.Matrix*, %struct.Matrix** %7, align 8\n store %struct.Matrix* %216, %struct.Matrix** %4, align 8\n br label %217\n"]
  4625. 205 --> 217
  4626. 217["Block 217:\n %218 = load %struct.Matrix*, %struct.Matrix** %4, align 8\n %219 = insertvalue %fused_return_multiplyMatrices_testPoints { i32 0, %struct.Matrix* undef }, %struct.Matrix* %218, 1\n ret %fused_return_multiplyMatrices_testPoints %219\n"]
  4627. target_cond_1["Block target_cond_1:\n br i1 %0, label %220, label %target_skip_1\n"]
  4628. target_cond_1 -->|true| 220
  4629. target_cond_1 -->|false| target_skip_1
  4630. target_skip_1["Block target_skip_1:\n br label %target_phi_1\n"]
  4631. target_skip_1 --> target_phi_1
  4632. target_phi_1["Block target_phi_1:\n ret %fused_return_multiplyMatrices_testPoints zeroinitializer\n"]
  4633. 220["Block 220:\n %221 = load i32, i32* %17, align 4\n %222 = add nsw i32 %221, 1\n store i32 %222, i32* %17, align 4\n %223 = load i32, i32* %16, align 4\n %224 = icmp sgt i32 %223, 2\n br i1 %224, label %230, label %231\n"]
  4634. 220 -->|true| 230
  4635. 220 -->|false| 231
  4636. 225["Block 225:\n %226 = load i32, i32* %18, align 4\n %227 = icmp slt i32 %226, 5\n br i1 %227, label %220, label %228\n"]
  4637. 225 -->|true| 220
  4638. 225 -->|false| 228
  4639. 228["Block 228:\n %229 = load i32, i32* %17, align 4\n store i32 %229, i32* %15, align 4\n br label %232\n"]
  4640. 228 --> 232
  4641. 230["Block 230:\n store i32 23, i32* %15, align 4\n br label %232\n"]
  4642. 230 --> 232
  4643. 231["Block 231:\n br label %236\n"]
  4644. 231 --> 236
  4645. 232["Block 232:\n %233 = load i32, i32* %15, align 4\n %234 = insertvalue %fused_return_multiplyMatrices_testPoints undef, i32 %233, 0\n %235 = insertvalue %fused_return_multiplyMatrices_testPoints %234, %struct.Matrix* null, 1\n ret %fused_return_multiplyMatrices_testPoints %235\n"]
  4646. 236["Block 236:\n %237 = load i32, i32* %18, align 4\n %238 = add nsw i32 %237, 1\n store i32 %238, i32* %18, align 4\n br label %target_phi_1\n"]
  4647. 236 --> target_phi_1
  4648. classDef critical fill:#f96,stroke:#333,stroke-width:4px
  4649. ```
  4650. [INFO][performCodeFusion] Completed function fusion: fused_multiplyMatrices
  4651. [INFO][performCodeFusion] Code fusion completed, processed 6 function pairs