Mercurial > hg > Papers > 2015 > kaito-lola
view presentation/mindmap.mm @ 25:8144b7f25874 default tip
add graffle
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 05 Jul 2015 16:39:46 +0900 |
parents | c50a033e6635 |
children |
line wrap: on
line source
<map version="1.0.1"> <!-- To view this file, download free mind mapping software FreeMind from http://freemind.sourceforge.net --> <node CREATED="1435501007733" ID="ID_1604379277" MODIFIED="1435741670509" TEXT="Implimantating Continuation based language in Clang and LLVM"> <node CREATED="1435741674048" ID="ID_760354330" MODIFIED="1435741677369" POSITION="right" TEXT="background"> <node CREATED="1435741677767" ID="ID_1376749743" MODIFIED="1435741704550" TEXT="CbC compiler on GCC was born in 2008"/> <node CREATED="1435741704870" ID="ID_1775575179" MODIFIED="1435741726188" TEXT="nested function based goto with environment is implemented in 2011"/> <node CREATED="1435741726680" ID="ID_1292129969" MODIFIED="1435741835281" TEXT="CbC compiler on LLVM and Clang is implemented in 2015"/> </node> <node CREATED="1435725148481" ID="ID_1271920735" MODIFIED="1435725152483" POSITION="right" TEXT="Objective"> <node CREATED="1435725152944" ID="ID_1312266033" MODIFIED="1435725527433" TEXT="code segments and data segments based programming paradigm"/> <node CREATED="1435726304836" ID="ID_1487102481" MODIFIED="1435726317757" TEXT="CbC uses this programming paradigm"/> <node CREATED="1435726492377" ID="ID_804782596" MODIFIED="1435726534918" TEXT="Transition does not keep environment."> <node CREATED="1435726543160" ID="ID_1972756516" MODIFIED="1435726548571" TEXT="light weight continuation"/> </node> <node CREATED="1435726573855" ID="ID_1310732006" MODIFIED="1435726581503" TEXT="for state mechine"> <node CREATED="1435726590874" ID="ID_774127327" MODIFIED="1435726609496" TEXT="more readable than assembly language"/> </node> </node> <node CREATED="1435558844692" ID="ID_234248593" MODIFIED="1435558900590" POSITION="right" TEXT="CbC compilers"> <node CREATED="1435558849331" ID="ID_1530553038" MODIFIED="1435558852725" TEXT="Micro-C"/> <node CREATED="1435558853090" ID="ID_226984472" MODIFIED="1435558864074" TEXT="GCC(GNU Compiler Collection)"/> <node CREATED="1435558864742" ID="ID_1430199015" MODIFIED="1435558869743" TEXT="LLVM and Clang"/> </node> <node CREATED="1435558903538" ID="ID_1434598449" MODIFIED="1435558912130" POSITION="right" TEXT="What is LLVM?"> <node CREATED="1435558912607" ID="ID_430822211" MODIFIED="1435558918208" TEXT="compiler framework"/> <node CREATED="1435558920045" ID="ID_1817303164" MODIFIED="1435559010148" TEXT="translate LLVM IR to assembly language"/> </node> <node CREATED="1435559227013" ID="ID_1907223714" MODIFIED="1435559238221" POSITION="right" TEXT="What is Clang?"> <node CREATED="1435559238554" ID="ID_162988667" MODIFIED="1435559254548" TEXT="C/C++/Obj-C compiler fromtend"/> <node CREATED="1435559254941" ID="ID_1866537519" MODIFIED="1435559263949" TEXT="use LLVM for backend"/> </node> <node CREATED="1435501394895" ID="ID_1596189760" MODIFIED="1435558842279" POSITION="right" TEXT="Why LLVM?"> <node CREATED="1435501413622" ID="ID_440137288" MODIFIED="1435501419126" TEXT="Apple supported"/> <node CREATED="1435501420211" ID="ID_788972414" MODIFIED="1435501428531" TEXT="LLVM IR"> <node CREATED="1435559306780" ID="ID_864368890" MODIFIED="1435559328385" TEXT="intermidiate representation"/> <node CREATED="1435559329054" ID="ID_801485061" MODIFIED="1435559339118" TEXT="LLVM language"/> <node CREATED="1435501428720" ID="ID_427621961" MODIFIED="1435502010503" TEXT="friendly and useful documents"/> </node> <node CREATED="1435501470372" ID="ID_1442059475" MODIFIED="1435501505259" TEXT="has many front end"> <node CREATED="1435501505537" ID="ID_1643700220" MODIFIED="1435501512313" TEXT="C/C++/Obj-C"/> <node CREATED="1435501513150" ID="ID_146696433" MODIFIED="1435501514512" TEXT="Go"/> <node CREATED="1435501516341" ID="ID_1131765970" MODIFIED="1435501576373" TEXT="GHC(Haskell)"/> <node CREATED="1435644034797" ID="ID_681214230" MODIFIED="1435644043076" TEXT="HiPE(Erlang)"/> </node> <node CREATED="1435501619956" ID="ID_781379815" MODIFIED="1435559016082" TEXT="All programming languages can be supported if you can transtlte it into LLVM IR"/> <node CREATED="1435501861739" ID="ID_1227695304" MODIFIED="1435501866235" TEXT="C++ base"/> <node CREATED="1435502019202" ID="ID_594005899" MODIFIED="1435502021515" TEXT="doxygen"> <node CREATED="1435502024423" ID="ID_1102201599" MODIFIED="1435643888459" TEXT="readable source code documentation"/> </node> </node> <node CREATED="1435554687473" ID="ID_621446993" MODIFIED="1435554694392" POSITION="right" TEXT="What is CbC?"> <node CREATED="1435554734495" ID="ID_1081007624" MODIFIED="1435554741121" TEXT="Continuation based C"> <node CREATED="1435554911546" ID="ID_1385876394" MODIFIED="1435554928118" TEXT="tail call elimination"/> </node> <node CREATED="1435554696155" ID="ID_149274142" MODIFIED="1435554701580" TEXT="programming language"/> <node CREATED="1435554749075" ID="ID_1370258342" MODIFIED="1435554763190" TEXT="data segments and code segments"> <node CREATED="1435555863865" ID="ID_386674946" MODIFIED="1435555884776" TEXT="code segments"> <node CREATED="1435554942439" ID="ID_1612698622" MODIFIED="1435555908494" TEXT="unit of processes"/> <node CREATED="1435554955675" ID="ID_1491940477" MODIFIED="1435554976290" TEXT="We can write code segmnets like functions"/> <node CREATED="1435554977059" ID="ID_1409331936" MODIFIED="1435555314909" TEXT="code segments do not return to a previous one"/> </node> </node> <node CREATED="1435554767637" ID="ID_1986585855" MODIFIED="1435554772518" TEXT="for meta computation"/> <node CREATED="1435554774683" ID="ID_1472177279" MODIFIED="1435558640413" TEXT="for state machine"> <node CREATED="1435558553023" ID="ID_892482468" MODIFIED="1435558589096" TEXT="code segments do not have environment"/> <node CREATED="1435558589645" ID="ID_182453927" MODIFIED="1435558659504" TEXT="CbC's transition is a state machine itself"/> </node> <node CREATED="1435554778322" ID="ID_919461270" MODIFIED="1435554782355" TEXT="for pararell tasks"/> </node> <node CREATED="1435723849541" ID="ID_1768881597" MODIFIED="1435723854441" POSITION="right" TEXT="Why CbC?"> <node CREATED="1435723854757" ID="ID_407018303" MODIFIED="1435723873940" TEXT="TCE forced language"/> <node CREATED="1435724075582" ID="ID_1537487605" MODIFIED="1435724081345" TEXT="state machine"> <node CREATED="1435724354881" ID="ID_62280549" MODIFIED="1435724377814" TEXT="code segments have no environment(state)"/> </node> </node> <node CREATED="1435724093766" ID="ID_1769815102" MODIFIED="1435724096928" POSITION="right" TEXT="In future"> <node CREATED="1435724098451" ID="ID_1788252967" MODIFIED="1435724183997" TEXT="CbC superset language"> <node CREATED="1435558074653" ID="ID_1160075184" MODIFIED="1435558082356" TEXT="meta code segment"> <node CREATED="1435558082672" ID="ID_1723384571" MODIFIED="1435558092791" TEXT="memory allocation and protection"/> <node CREATED="1435558094612" ID="ID_1339356450" MODIFIED="1435558099838" TEXT="scheduling"/> <node CREATED="1435558726018" ID="ID_349670294" MODIFIED="1435558741328" TEXT="exceptions"/> </node> <node CREATED="1435555877428" ID="ID_297263705" MODIFIED="1435555882046" TEXT="data segments"> <node CREATED="1435555888505" ID="ID_1393969154" MODIFIED="1435555898793" TEXT="unit of data"/> <node CREATED="1435555945415" ID="ID_1502751154" MODIFIED="1435556032508" TEXT="has two different forms in CbC"> <node CREATED="1435556008236" ID="ID_1766002292" MODIFIED="1435556011294" TEXT="c struct"> <node CREATED="1435556043033" ID="ID_885307189" MODIFIED="1435556048203" TEXT="for programming in CbC"/> </node> <node CREATED="1435556011835" ID="ID_1638878719" MODIFIED="1435556016708" TEXT="message pack"> <node CREATED="1435556049647" ID="ID_1165011694" MODIFIED="1435556149930" TEXT="for network transporting"/> </node> </node> <node CREATED="1435557466329" ID="ID_1100755375" MODIFIED="1435557482025" TEXT="use type information for meta computing"> <node CREATED="1435557482324" ID="ID_385146293" MODIFIED="1435557496987" TEXT="signature"/> </node> <node CREATED="1435557558301" ID="ID_1254522982" MODIFIED="1435557602596" TEXT="extensible and backward compatibility"> <node CREATED="1435558047468" ID="ID_1003388610" MODIFIED="1435558058358" TEXT="implemented by signature and type information"/> </node> </node> </node> </node> <node CREATED="1393415255084" ID="ID_1255273744" MODIFIED="1393415345099" POSITION="left" TEXT="Implementation"> <node CREATED="1393415462537" ID="ID_1012460054" MODIFIED="1393415470448" TEXT="basic strategy"> <node CREATED="1393415472602" ID="ID_484481910" MODIFIED="1393415482097" TEXT="code segment as normal function"/> <node CREATED="1393415485468" ID="ID_1042900495" MODIFIED="1393415504659" TEXT="transition as forced tail call"/> <node CREATED="1393415518303" ID="ID_1865357667" MODIFIED="1393415530070" TEXT="nomodification on intermidiate code"> <node CREATED="1393415532177" ID="ID_1877009195" MODIFIED="1393415546209" TEXT="do not modify optimizer part"/> </node> <node CREATED="1393415567244" ID="ID_512214482" MODIFIED="1393415592237" TEXT="goto with env as longjmp"> <node CREATED="1393415598752" ID="ID_1050206315" MODIFIED="1393415607144" TEXT="GCC uses nested function"/> <node CREATED="1393415613281" ID="ID_1663927810" MODIFIED="1393415620857" TEXT="LLVM has no nested function"> <node CREATED="1435560165938" ID="ID_1261087430" MODIFIED="1435560175898" TEXT="setjmp and longjmp"/> </node> </node> <node CREATED="1435560472003" ID="ID_383138342" MODIFIED="1435560484071" TEXT="automatically prototype generation"> <node CREATED="1435560484473" ID="ID_965533009" MODIFIED="1435560521644" TEXT="generate on parsing continuation"/> </node> <node CREATED="1435560618814" ID="ID_166406179" MODIFIED="1435560630220" TEXT="data segment generation"/> <node CREATED="1435560639478" ID="ID_1216392292" MODIFIED="1435560643602" TEXT="meta computing"> <node CREATED="1435561365449" ID="ID_1038042566" MODIFIED="1435561375726" TEXT="meta code segment"> <node CREATED="1435561376276" ID="ID_1035065432" MODIFIED="1435561390395" TEXT="as normal code segment"/> <node CREATED="1435561390798" ID="ID_945434963" MODIFIED="1435561409195" TEXT="default meta code segment generate by compiler"> <node CREATED="1435561411794" ID="ID_162690299" MODIFIED="1435561603775" TEXT="code segment must transition to next code segment via meta code segment"/> </node> </node> </node> <node CREATED="1435561653445" ID="ID_76262488" MODIFIED="1435561655871" TEXT="data segment"> <node CREATED="1435561656181" ID="ID_1943384289" MODIFIED="1435561659342" TEXT="C struct"/> <node CREATED="1435561659835" ID="ID_1056175512" MODIFIED="1435561662277" TEXT="message pack"/> </node> </node> <node CREATED="1393415347894" ID="ID_28770432" MODIFIED="1393415350451" TEXT="parser"> <node CREATED="1393415266645" ID="ID_951993899" MODIFIED="1393415283396" TEXT="code segment"> <node CREATED="1393415284799" ID="ID_764459625" MODIFIED="1393415298631" TEXT="__code return type"> <node CREATED="1393415302801" ID="ID_236035508" MODIFIED="1393415304446" TEXT="void"/> </node> </node> <node CREATED="1393415312026" ID="ID_1621189741" MODIFIED="1393415315007" TEXT="transition"> <node CREATED="1393415315450" ID="ID_736316481" MODIFIED="1393415320935" TEXT="goto statement"> <node CREATED="1393415322459" ID="ID_175709429" MODIFIED="1393415332993" TEXT="tail call"/> </node> </node> <node CREATED="1435560111315" ID="ID_1074962285" MODIFIED="1435560148034" TEXT="automatically prototype generation"/> </node> <node CREATED="1393415368224" ID="ID_517402653" MODIFIED="1393415371502" TEXT="LLVM IR"> <node CREATED="1393415373512" ID="ID_693847326" MODIFIED="1393415376430" TEXT="no modification"/> <node CREATED="1393415388666" ID="ID_1311715893" MODIFIED="1393415391368" TEXT="no longjmp"/> <node CREATED="1393415413716" ID="ID_1613264825" MODIFIED="1393415417306" TEXT="call flag"> <node CREATED="1393415421541" ID="ID_1608008781" MODIFIED="1393415431244" TEXT="tail fastcc"/> </node> </node> <node CREATED="1393415627042" ID="ID_1257476113" MODIFIED="1393415632184" TEXT="code generator"> <node CREATED="1393415637962" ID="ID_612555038" MODIFIED="1393415652834" TEXT="keep tail call elimination"> <node CREATED="1393415656725" ID="ID_1961345681" MODIFIED="1393415846167" TEXT="enable to tailcallopt LangOption"/> <node CREATED="1393415679712" ID="ID_784535884" MODIFIED="1393415787328" TEXT="return statement immediatly follows call"/> <node CREATED="1393415692481" ID="ID_1629653521" MODIFIED="1393415708511" TEXT="calling convenstion"> <node CREATED="1393415762376" ID="ID_1065699593" MODIFIED="1393415764534" TEXT="fastcc"/> </node> <node CREATED="1393415849865" ID="ID_931200842" MODIFIED="1393415866881" TEXT="enable to TailCallElim pass"/> </node> <node CREATED="1393415992520" ID="ID_1711082448" MODIFIED="1393415998718" TEXT="goto with env"> <node CREATED="1393415999016" ID="ID_1012787705" MODIFIED="1393416024713" TEXT="include setjmp.h always"/> <node CREATED="1393416029172" ID="ID_1895175823" MODIFIED="1393416048388" TEXT="allocate jmp_buf"> <node CREATED="1393416101011" ID="ID_1966590300" MODIFIED="1393416119091" TEXT="generate C struct"/> </node> <node CREATED="1393416055534" ID="ID_1096279693" MODIFIED="1393416059181" TEXT="insert setjmp"/> <node CREATED="1393416061799" ID="ID_178743765" MODIFIED="1393416073113" TEXT="generate longjmp code segment as return"> <node CREATED="1393416123989" ID="ID_1856531908" MODIFIED="1393416131780" TEXT="generate unique name"/> </node> </node> </node> </node> <node CREATED="1393416671758" ID="ID_1340653074" MODIFIED="1393416673157" POSITION="left" TEXT="slides"> <node CREATED="1435569039705" ID="ID_491420761" MODIFIED="1435569043620" TEXT="introduction"> <node CREATED="1435569043953" ID="ID_541306171" MODIFIED="1435569103929" TEXT="we propose the programming paradigm which uses data segments and code segments"/> <node CREATED="1435573490489" ID="ID_1006482183" MODIFIED="1435573542528" TEXT="code segments are units of calculation"> <node CREATED="1435573542903" ID="ID_861672222" MODIFIED="1435573546311" TEXT="no state"/> </node> <node CREATED="1435573548821" ID="ID_806295670" MODIFIED="1435573559548" TEXT="data segments are sets of typed data"/> <node CREATED="1435573562551" ID="ID_1864031110" MODIFIED="1435573615252" TEXT="calculation and data was divided clearity"/> <node CREATED="1435573039804" ID="ID_257264230" MODIFIED="1435573139737" TEXT="This paradigm uses Continuation based C"> <node CREATED="1435573142390" ID="ID_1047016117" MODIFIED="1435573149899" TEXT="extension and subset of C"/> </node> </node> <node CREATED="1393416863961" ID="ID_1693901399" MODIFIED="1435574590238" TEXT="introduction of CbC"> <node CREATED="1393414821640" ID="ID_396781801" MODIFIED="1393414829757" TEXT="Usage"> <node CREATED="1393414831976" ID="ID_456207902" MODIFIED="1393414842247" TEXT="state machine"> <node CREATED="1435574641852" ID="ID_790129008" MODIFIED="1435574652141" TEXT="code segments have no state"> <node CREATED="1435574662925" ID="ID_1913946763" MODIFIED="1435574674997" TEXT="it is a state machine itself "/> </node> </node> <node CREATED="1393414843426" ID="ID_102862002" MODIFIED="1393417089181" TEXT="pararell tasks"> <node CREATED="1435574704857" ID="ID_1138758353" MODIFIED="1435574723741" TEXT="pararell framework"> <node CREATED="1435574725395" ID="ID_1770407063" MODIFIED="1435574727445" TEXT="CUDA"/> <node CREATED="1435574727747" ID="ID_792225337" MODIFIED="1435574730490" TEXT="OpenCL"/> <node CREATED="1435574730848" ID="ID_188432968" MODIFIED="1435574733218" TEXT="Cerium"/> </node> </node> <node CREATED="1435574739071" ID="ID_393185709" MODIFIED="1435574745431" TEXT="operating system"> <node CREATED="1435574745652" ID="ID_750453396" MODIFIED="1435574749286" TEXT="Gears OS"/> </node> <node CREATED="1393414891031" ID="ID_525611210" MODIFIED="1393414894788" TEXT="meta computation"> <node CREATED="1435558074653" ID="ID_1478823741" MODIFIED="1435574958109" TEXT="meta code segment"> <node CREATED="1435558082672" ID="ID_354188544" MODIFIED="1435558092791" TEXT="memory allocation and protection"/> <node CREATED="1435558094612" ID="ID_1237672275" MODIFIED="1435558099838" TEXT="scheduling"/> <node CREATED="1435558726018" ID="ID_109958332" MODIFIED="1435558741328" TEXT="exceptions"/> </node> <node CREATED="1435574917323" ID="ID_232327278" MODIFIED="1435574999368" TEXT="normal code segments have only essentially calculation"/> </node> <node CREATED="1393414931419" ID="ID_488599855" MODIFIED="1435575883681" TEXT="motivation"> <node CREATED="1393414935523" ID="ID_1783768164" MODIFIED="1393414945209" TEXT="programming language for machine"/> </node> </node> <node CREATED="1393414737791" ID="ID_380706666" MODIFIED="1393417084781" TEXT="CbC"> <node CREATED="1393414742576" ID="ID_1643290496" MODIFIED="1435573665661" TEXT="code segments"> <node CREATED="1393414754993" ID="ID_230114117" MODIFIED="1393414758878" TEXT="__code"/> </node> <node CREATED="1393414764666" ID="ID_1197065414" MODIFIED="1393414778848" TEXT="transition"> <node CREATED="1393414779916" ID="ID_787914818" MODIFIED="1393414781703" TEXT="goto"/> </node> <node CREATED="1393414787748" ID="ID_1204285148" MODIFIED="1393414799130" TEXT="goto with env"> <node CREATED="1393414800806" ID="ID_1222521953" MODIFIED="1393414807315" TEXT="return to C"/> </node> <node CREATED="1435569381558" ID="ID_1994058439" MODIFIED="1435569428577" TEXT="compatible with C"> <font NAME="SansSerif" SIZE="12"/> </node> <node CREATED="1435573649310" ID="ID_713997746" MODIFIED="1435573653576" TEXT="data segments"> <node CREATED="1435573653733" ID="ID_241631707" MODIFIED="1435573658624" TEXT="typed data"/> </node> </node> </node> <node CREATED="1393416884379" ID="ID_1172740034" MODIFIED="1393476595365" TEXT="CbC compiler"> <node CREATED="1393414968247" ID="ID_1953752240" MODIFIED="1393414976300" TEXT="Implementation"> <node CREATED="1393414977096" ID="ID_697073293" MODIFIED="1393414993451" TEXT="Micro-C"> <node CREATED="1393414994914" ID="ID_1531301148" MODIFIED="1393415003568" TEXT="one pass standalone compiler"/> </node> <node CREATED="1393415006802" ID="ID_1773649193" MODIFIED="1393415008399" TEXT="GCC"/> <node CREATED="1393415015692" ID="ID_371860294" MODIFIED="1393415017216" TEXT="LLVM"> <node CREATED="1393415019436" ID="ID_260478404" MODIFIED="1393415023185" TEXT="new!!"/> </node> </node> </node> <node CREATED="1393415033662" ID="ID_357796199" MODIFIED="1435563911313" TEXT="Why LLVM??"> <node CREATED="1393415039598" ID="ID_664184138" MODIFIED="1393415058997" TEXT="compiler framework"/> <node CREATED="1393415060968" ID="ID_339954698" MODIFIED="1393415071478" TEXT="Apple supported"> <node CREATED="1393415077490" ID="ID_146949057" MODIFIED="1393415080567" TEXT="Open source"/> <node CREATED="1393415224217" ID="ID_23238840" MODIFIED="1393415230393" TEXT="OS X default compiler"/> </node> <node CREATED="1393415087594" ID="ID_524041551" MODIFIED="1393415093328" TEXT="C++ base"/> <node CREATED="1393415095596" ID="ID_924041337" MODIFIED="1393415115930" TEXT="AST generation"/> <node CREATED="1393415120087" ID="ID_849295848" MODIFIED="1393415128259" TEXT="IR"> <node CREATED="1393415128663" ID="ID_1777758663" MODIFIED="1393415134845" TEXT="intermidiate representation"/> </node> <node CREATED="1393415157589" ID="ID_872050716" MODIFIED="1393415159047" TEXT="JIT"> <node CREATED="1393415168027" ID="ID_1667235842" MODIFIED="1393415174976" TEXT="dynamic execution"/> <node CREATED="1393415182325" ID="ID_1066032053" MODIFIED="1393415192090" TEXT="dynamic compile"/> </node> </node> <node CREATED="1393415462537" ID="ID_1811363439" MODIFIED="1393415470448" TEXT="basic strategy"> <node CREATED="1393415472602" ID="ID_1476331781" MODIFIED="1393415482097" TEXT="code segment as normal function"/> <node CREATED="1393415485468" ID="ID_887912777" MODIFIED="1393415504659" TEXT="transition as forced tail call"/> <node CREATED="1393415518303" ID="ID_993692066" MODIFIED="1393415530070" TEXT="nomodification on intermidiate code"> <node CREATED="1393415532177" ID="ID_1380774714" MODIFIED="1393415546209" TEXT="do not modify optimizer part"/> </node> <node CREATED="1393415567244" ID="ID_1715799047" MODIFIED="1393415592237" TEXT="goto with env as longjmp"> <node CREATED="1393415598752" ID="ID_815289397" MODIFIED="1393415607144" TEXT="GCC uses nested function"/> <node CREATED="1393415613281" ID="ID_524371399" MODIFIED="1393415620857" TEXT="LLVM has no nested function"/> </node> </node> <node CREATED="1393417146814" ID="ID_1237395406" MODIFIED="1393417160207" TEXT="Problems"> <node CREATED="1393417160640" ID="ID_471304556" MODIFIED="1393417166056" TEXT="LLVM IR"> <node CREATED="1393417166464" ID="ID_988821722" MODIFIED="1393417169304" TEXT="no longjmp"/> <node CREATED="1393417290317" ID="ID_1546790643" MODIFIED="1393417370845" TEXT="LLVM IR sample"> <node CREATED="1393417371773" ID="ID_220201847" MODIFIED="1393417434364" TEXT="call flag"> <node CREATED="1393417434724" ID="ID_754626436" MODIFIED="1393417437636" TEXT="tail fastcc"/> </node> </node> </node> </node> <node CREATED="1393417519436" ID="ID_881884451" MODIFIED="1393417522941" TEXT="Implementation"> <node CREATED="1393415347894" ID="ID_981559264" MODIFIED="1393432405649" TEXT="parser"> <node CREATED="1393415266645" ID="ID_1682610717" MODIFIED="1393415283396" TEXT="code segment"> <node CREATED="1393415284799" ID="ID_965880208" MODIFIED="1393415298631" TEXT="__code return type"> <node CREATED="1393415302801" ID="ID_460767008" MODIFIED="1393415304446" TEXT="void"/> </node> </node> <node CREATED="1393415312026" ID="ID_1424951265" MODIFIED="1393415315007" TEXT="transition"> <node CREATED="1393415315450" ID="ID_1337913466" MODIFIED="1393415320935" TEXT="goto statement"> <node CREATED="1393415322459" ID="ID_3085529" MODIFIED="1393415332993" TEXT="tail call"/> </node> </node> </node> <node CREATED="1393415627042" ID="ID_741521429" MODIFIED="1393432403066" TEXT="code generator"> <node CREATED="1393415637962" ID="ID_1977344897" MODIFIED="1393415652834" TEXT="keep tail call elimination"> <node CREATED="1393415656725" ID="ID_1064982533" MODIFIED="1393415846167" TEXT="enable to tailcallopt LangOption"/> <node CREATED="1393415679712" ID="ID_1236302074" MODIFIED="1393415787328" TEXT="return statement immediatly follows call"/> <node CREATED="1393415692481" ID="ID_321900911" MODIFIED="1393415708511" TEXT="calling convenstion"> <node CREATED="1393415762376" ID="ID_188704360" MODIFIED="1393415764534" TEXT="fastcc"/> </node> <node CREATED="1393415849865" ID="ID_165554506" MODIFIED="1393415866881" TEXT="enable to TailCallElim pass"/> </node> <node CREATED="1393415992520" ID="ID_1662020634" MODIFIED="1393415998718" TEXT="goto with env"> <node CREATED="1393415999016" ID="ID_1021819186" MODIFIED="1393416024713" TEXT="include setjmp.h always"/> <node CREATED="1393416029172" ID="ID_20885096" MODIFIED="1393416048388" TEXT="allocate jmp_buf"> <node CREATED="1393416101011" ID="ID_1442960034" MODIFIED="1393416119091" TEXT="generate C struct"/> </node> <node CREATED="1393416055534" ID="ID_1822902179" MODIFIED="1393416059181" TEXT="insert setjmp"/> <node CREATED="1393416061799" ID="ID_1218489026" MODIFIED="1393416073113" TEXT="generate longjmp code segment as return"> <node CREATED="1393416123989" ID="ID_232453499" MODIFIED="1393416131780" TEXT="generate unique name"/> </node> </node> </node> <node CREATED="1393415877748" ID="ID_65529003" MODIFIED="1393431877271" TEXT="structure of LLVM"> <node CREATED="1393415891566" ID="ID_437797489" MODIFIED="1393415895675" TEXT="clang"> <node CREATED="1393415896022" ID="ID_565636299" MODIFIED="1393415897764" TEXT="parser"/> <node CREATED="1393415898366" ID="ID_1706796038" MODIFIED="1393415902076" TEXT="codegen"/> </node> <node CREATED="1393415905895" ID="ID_55704278" MODIFIED="1393415907605" TEXT="LLVM"> <node CREATED="1393415908934" ID="ID_1807613827" MODIFIED="1393415925823" TEXT="Selection instruction "/> <node CREATED="1393415929097" ID="ID_1153487463" MODIFIED="1393415936040" TEXT="optimizier"> <node CREATED="1393415957772" ID="ID_1315016882" MODIFIED="1393415964611" TEXT="passes"> <node CREATED="1393415975438" ID="ID_1183201430" MODIFIED="1393415980004" TEXT="CodeGenPrepare"/> <node CREATED="1393415964845" ID="ID_1061645086" MODIFIED="1393415968707" TEXT="TailCallElim"/> </node> </node> <node CREATED="1393415936994" ID="ID_380442434" MODIFIED="1393415943184" TEXT="Code generator"/> </node> </node> </node> <node CREATED="1393416184003" ID="ID_1836859823" MODIFIED="1393416187690" TEXT="Result"> <node CREATED="1393416189596" ID="ID_325187767" MODIFIED="1393416207660" TEXT="jmp instruction in assembler source"/> <node CREATED="1393416209206" ID="ID_838681270" MODIFIED="1393416226606" TEXT="compare with Micro-C"/> <node CREATED="1393416231104" ID="ID_1436390030" MODIFIED="1393416235071" TEXT="compare with GCC"/> <node CREATED="1393416242714" ID="ID_1983472838" MODIFIED="1393416245584" TEXT="noinline"/> </node> </node> </node> </map>