Mercurial > hg > Papers > 2015 > kaito-lola
annotate presentation/presen.html @ 9:41fe2e188445
fix
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 03 Jul 2015 20:06:57 +0900 |
parents | a6907650e3e1 |
children | 81195c2fcf4a |
rev | line source |
---|---|
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 <!DOCTYPE html> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 <html> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 <head> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 <meta charset='utf-8'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 <title>Presen</title> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 <!-- style sheet links --> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 <link rel="stylesheet/less" href="themes/blank/projection.css.less" media="screen,projection"> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 <link rel="stylesheet/less" href="themes/blank/screen.css.less" media="screen"> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 <link rel="stylesheet/less" href="themes/blank/print.css.less" media="print"> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 <link rel="stylesheet/less" href="blank.css.less" media="screen,projection"> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
13 <!-- add js libs (less, jquery) --> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 <script src="js/less-1.1.4.min.js"></script> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15 <script src="js/jquery-1.7.min.js"></script> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 <!-- S6 JS --> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 <script src="js/jquery.slideshow.js"></script> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 <script src="js/jquery.slideshow.counter.js"></script> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
20 <script src="js/jquery.slideshow.controls.js"></script> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21 <script src="js/jquery.slideshow.footer.js"></script> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22 <script src="js/jquery.slideshow.autoplay.js"></script> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 <script> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 $(document).ready( function() { |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25 Slideshow.init(); |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 // Example 2: Start Off in Outline Mode |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 // Slideshow.init( { mode: 'outline' } ); |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30 // Example 3: Use Custom Transition |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31 // Slideshow.transition = transitionScrollUp; |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
32 // Slideshow.init(); |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
33 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
34 // Example 4: Start Off in Autoplay Mode with Custom Transition |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
35 // Slideshow.transition = transitionScrollUp; |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
36 // Slideshow.init( { mode: 'autoplay' } ); |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
37 } ); |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
38 </script> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
39 </head> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
40 <body> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
41 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
42 <div class="layout"> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
43 <div id="header"></div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
44 <div id="footer"> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
45 <div align="right"> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
46 <img src="images/concurrency.png" width="200"> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
47 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
48 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
49 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
50 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
51 <div class="presentation"> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
52 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
53 <div class='slide cover'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
54 <table width="90%" height="90%" border="0" align="center"> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
55 <tr> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
56 <td><div align="center"> |
4
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
57 <h1><font color="#808db5">Implementating Continuation based language in Clang and LLVM</font></h1> |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
58 </div></td> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
59 </tr> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
60 <tr> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
61 <td><div align="left"> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
62 Kaito Tokumori, Shinji Kono |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
63 <script> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
64 document.write("<br>July 4, 2015"); |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
65 </script> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
66 <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:300%;height:0.2em;"> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
67 </div></td> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
68 </tr> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
69 </table> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
70 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
71 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
72 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
73 <h2>Objective</h2> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
74 <ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
75 <li>Reliable computation |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
76 <li>Concurrent execution |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
77 <li>Reliable improvement |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
78 <li>Reusablity |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
79 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
80 <h3>Introducing new units of programming</h3> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
81 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
82 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
83 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
84 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
85 <h2>Traditional units of programming</h2> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
86 <ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
87 <li>Machine instruction |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
88 <li>Statements of programming language |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
89 <li>Function call / Method |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
90 <li>Module / Class / Interface |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
91 <li>Thread / Process |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
92 <li>Object |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
93 <li>Record / Table |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
94 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
95 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
96 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
97 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
98 <h2>What we want to do with programming units?</h2> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
99 <ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
100 <li>Divide large functions into small parts. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
101 <li>Add hidden arguments without code modification. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
102 <li>Add meta computation. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
103 <li>Extract concurrency from programming units. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
104 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
105 <h3>It is not easy in the traditional units.</h3> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
106 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
107 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
108 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
109 <h2>New programing units</h2> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
110 <ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
111 <li>Units of programming: code segments, data segments. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
112 <li>Code segments are units of calculation. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
113 <li>Data segments are sets of typed data. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
114 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
115 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
116 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
117 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
118 <h2>Code segments</h2> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
119 <ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
120 <li>Function from input data segments to output data segments. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
121 <li>Code segments have no states. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
122 <li>Access in typed data in the data segments by name. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
123 <li>Specify code segmnets to be executed using goto. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
124 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
125 <h3>It is easy to divide or combine.</h3> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
126 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
127 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
128 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
129 <h2>Data segments</h2> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
130 <ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
131 <li>Set of typed data. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
132 <li>Type signatures are in meta data segments. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
133 <li>Variable and extendable data structure. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
134 <li>Data segments are dominated by connected code segments. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
135 <li>Code segments atomically access connected data segments. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
136 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
137 <h3>It is easy to divide or combine.</h3> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
138 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
139 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
140 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
141 <h2>Meta code / data segments</h2> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
142 <ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
143 <li>Execution contexts: Thread |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
144 <li>Type signatures of data segments. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
145 <li>Data segment linkages: Pointer |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
146 <li>Machine code |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
147 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
148 <h3>Meta code segments are executed right after the goto.</h3> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
149 <h3>Meta data segments are kinds of process data.</h3> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
150 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
151 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
152 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
153 <h2>Continuation based C (CbC)</h2> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
154 <ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
155 <li>An implementation of code segments. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
156 <li>CbC stands for Continuation based C. |
4
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
157 <li>Basic syntax is the same as the C.CbC stands for Continuation based C. |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
158 <li>Code segments are set of C statements with goto. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
159 <li>Data segments are inplemented as C structures. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
160 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
161 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
162 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
163 <div class='slide'> |
4
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
164 <h2>CbC sample</h2> |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
165 <table border='1' align='center' width='80%'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
166 <tr><td width='50%'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
167 <pre class='small_code'> |
9 | 168 __code f() { |
169 goto g(); | |
170 } | |
171 | |
172 __code g() { | |
173 goto h(); | |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
174 } |
9 | 175 </pre> |
176 </td><td valign='top'> | |
177 <ul> | |
178 <li>A part of list program. | |
179 <li>Code segments like C functions. | |
180 <li>CbC transition is goto so code segments do not return to previous. | |
181 <li>There are no return values. | |
182 </ul> | |
183 </td></tr> | |
184 </table> | |
185 </div> | |
186 | |
187 <div class='slide'> | |
188 <h2>CbC sample</h2> | |
189 <table border='1' align='center' width='80%'> | |
190 <tr><td width='50%'> | |
191 <pre class='small_code'> | |
4
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
192 __code code(struct Context* context, struct Allocate* allocate, struct Element* element) { |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
193 allocate->after_append = Code2; |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
194 element ->value = 10; |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
195 goto meta(context, Append); |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
196 } |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
197 |
9 | 198 __code append(struct Context* context, struct Allocate* allocate, |
199 struct List* list, struct Element* element) { | |
4
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
200 if(list->head) { |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
201 list->tail->next = element; |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
202 } else { |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
203 list->head = element; |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
204 } |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
205 list->tail = element; |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
206 list->tail->next = 0; |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
207 goto meta(context, allocate->after_append); |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
208 } |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
209 |
4
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
210 __code meta(struct Context* context, enum Code next) { |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
211 goto (context->code[next])(context); |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
212 } |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
213 </pre> |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
214 </td><td valign='top'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
215 <ul> |
8 | 216 <li>A part of list program. |
4
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
217 <li>Code segments like C functions. |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
218 <li>CbC transition is goto so code segments do not return to previous. |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
219 <li>There are no return values. |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
220 </ul> |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
221 </td></tr> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
222 </table> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
223 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
224 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
225 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
226 <h2>CbC compilers</h2> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
227 <ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
228 <li>Micro-C(one pass standalone compiler) |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
229 <li>GCC(GNU Compiler Collection) |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
230 <li>LLVM and Clang |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
231 <ul> |
4
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
232 <li><font color='red'>The latest!</font> |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
233 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
234 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
235 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
236 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
237 <div class='slide'> |
9 | 238 <h2>What are LLVM and Clang?</h2> |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
239 <ul> |
4
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
240 <li>Compiler frameworks. |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
241 <li>has a intermidiate language which is called LLVM IR, LLVM language or LLVM bitcode. |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
242 <li>Translates LLVM IR to assembly language. |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
243 <li>Many kinds of optimization. |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
244 <li>Clang is C, C++ and Obj-C compiler frontend. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
245 <li>Clang uses LLVM for compiler backend. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
246 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
247 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
248 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
249 <div class='slide'> |
9 | 250 <h2>Why?</h2> |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
251 <ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
252 <li>Apple supported. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
253 <li>OS X default compiler. |
9 | 254 <li>LLVM IR has readable documents. |
255 <li>More readable and modifiable than GCC. | |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
256 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
257 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
258 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
259 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
260 <h2>LLVM and Clang's compilation flow</h2> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
261 <ul> |
4
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
262 <li>Clang translate C/C++/Obj-C into LLVM IR. |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
263 <li>LLVM translate LLVM IR into assembly code. |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
264 <li>LLVM optimize all of intermidiate representation. |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
265 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
266 <div align="center"><img src="fig/clang_llvm_structure.svg" width="45%"></div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
267 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
268 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
269 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
270 <h2>LLVM and Clang's intermidiate representations</h2> |
9 | 271 <ul> |
272 <li>clang AST | |
273 <li>LLVM IR | |
274 <li>SelectionDAG | |
275 <li>Machine Code | |
276 <li>MC Layer | |
277 </ul> | |
278 <h3 align='center'>Intermidiate representations are not modified.</h3> | |
279 </div> | |
280 | |
281 <div class='slide'> | |
282 <h2>Clang AST</h2> | |
283 <ul> | |
284 <li>Abstract Syntax Tree. | |
285 <li>Representation of the source codes structure. | |
286 <li>Basic node type: Stmt, Decl, Expr. | |
287 </ul> | |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
288 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
289 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
290 <div class='slide'> |
9 | 291 <h2>LLVM IR</h2> |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
292 <ul> |
9 | 293 <li>The main intermidiate representation. |
294 <li>LLVM translate it into assembly codes. | |
295 <li>Three forms: in-memory compiler IR, on-disk bitcode, assembly language. | |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
296 </ul> |
9 | 297 <table width='100%'> |
298 <tr> | |
299 <td style="border: double;"> | |
300 <pre class='code'> | |
301 define fastcc void @factorial(i32 %x) #0 { | |
302 entry: | |
303 tail call fastcc void @factorial0(i32 1, i32 %x) | |
304 ret void | |
305 } | |
306 </pre> | |
307 </td> | |
308 </tr> | |
309 </table> | |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
310 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
311 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
312 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
313 <h2>Basic strategy of implementating</h2> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
314 <ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
315 <li>Code segments are implemented by C functions. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
316 <li>Data segments are implemented by C structs. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
317 <li>Transition is implemented by forced tail call elimination. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
318 <li>Goto with environment is implemented by setjmp and longjmp. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
319 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
320 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
321 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
322 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
323 <h2>Implementating CbC compiler in LLVM and Clang</h2> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
324 <ul> |
9 | 325 <li>__code type. |
326 <li>Goto syntax. | |
327 <li>Force to do tail call elimination. | |
328 <li>Goto with environment. | |
329 <li>Automatically prototype declatation genarating. | |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
330 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
331 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
332 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
333 <div class='slide'> |
9 | 334 <h2>Parser</h2> |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
335 <div align='center'><img src="fig/clang_llvm_slide_parse.svg" width="70%"></div> |
9 | 336 <ul> |
337 <li>__code type | |
338 <li>Prototype declaration generating | |
339 <li>Goto syntax for transitions | |
340 </ul> | |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
341 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
342 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
343 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
344 <h2>__code type</h2> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
345 <table width='100%'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
346 <tr> |
9 | 347 <ul> |
348 <li>Code segments as __code type functions. | |
349 <li>Handled like void functions. | |
350 </ul> | |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
351 </tr> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
352 </table> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
353 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
354 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
355 <div class='slide'> |
9 | 356 <h2>Prototype declaration generating</h2> |
357 <ul> | |
358 <li>In CbC, programmer write a lot of code segments. | |
359 <li>When function pointer's arguments are omitted, TCE was failed sometimes. | |
360 <li>Automatically prototype declaration generating saves a lot of effort. | |
361 <li>When parser meet a code segment call, it stop current parsing and search called code segment declaration. | |
362 <li>If the declaration was not found, search definision and generate declaration. | |
363 <ul> | |
364 <li>Of course you can write declaration yourself too. | |
365 </ul> | |
366 </ul> | |
367 <table border='1' width='80%' align='center'> | |
368 <tr> | |
369 <td>original input code | |
370 <td>Clang genarates it | |
371 </tr> | |
372 <tr> | |
373 <td><pre class='small_code'> | |
374 __code code1(int a, int b) { | |
375 : | |
376 goto code2(a,b); | |
377 } | |
378 | |
379 __code code2(int a, int b){ | |
380 : | |
381 } | |
382 </pre> | |
383 <td><pre class='small_code'> | |
384 <font color='red'>__code code2(int a, int b);</font> | |
385 __code code1(int a, int b) { | |
386 : | |
387 goto code2(a,b); | |
388 } | |
389 | |
390 __code code2(int a, int b){ | |
391 : | |
392 } | |
393 </pre> | |
394 </tr> | |
395 </table> | |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
396 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
397 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
398 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
399 <h2>goto syntax for transition</h2> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
400 <table width='100%'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
401 <tr><td> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
402 <ul> |
9 | 403 <li>New goto syntax for transition. |
404 <li>Generate normal function call. | |
405 <li>Tail call elimination is forced later. | |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
406 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
407 </tr> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
408 </table> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
409 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
410 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
411 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
412 <h2>goto syntax for transition</h2> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
413 <ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
414 <li>Add return statement after goto transition. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
415 <li>It is one the requirement force to tail call elimination. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
416 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
417 <table border='1' width='80%' align='center'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
418 <tr> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
419 <td>original input code |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
420 <td>Clang genarates it |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
421 </tr> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
422 <tr> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
423 <td><pre class='small_code'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
424 __code code1() { |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
425 : |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
426 goto code2(); |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
427 } |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
428 </pre> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
429 <td><pre class='small_code'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
430 void code1() { |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
431 : |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
432 code2(); |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
433 <font color='red'>return;</font> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
434 } |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
435 </pre> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
436 </tr> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
437 </table> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
438 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
439 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
440 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
441 <h2>Forcing Tail Call Elimination</h2> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
442 <p>TCE is enabled at CodeGen.</p> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
443 <p>TCE is act at SelectionDAGISel.</p> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
444 <div align='center'><img src="fig/clang_llvm_slide_cg_DAG.svg" width="70%"></div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
445 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
446 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
447 <div class='slide'> |
9 | 448 <h2>Jmp instruction based transition</h2> |
449 <ul> | |
450 <li>Tail call is immediately followed by return. | |
451 <li>Tail call elimination replace tail call's call instructions with jmp instructions. | |
452 <li>Transitions are implemented by forced tail call elimination. | |
453 </ul> | |
454 <div align='center'><img src="fig/TCE.svg" width="40%"></div> | |
455 </div> | |
456 | |
457 | |
458 <div class='slide'> | |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
459 <h2>Forcing Tail Call Elimination</h2> |
5 | 460 <ul> |
461 <li>LLVM IR has function call flags. | |
462 <li>tail mean it is tail call. | |
463 <li>Calling convention tell compiler how callee functions receive parameters from their caller. | |
464 </ul> | |
465 <table width='100%'> | |
466 <tr> | |
467 <td style="border: double;"> | |
468 <pre class='code'> | |
469 define fastcc void @factorial(i32 %x) #0 { | |
470 entry: | |
471 <font color='red'>tail</font> call <font color='red'>fastcc</font> void @factorial0(i32 1, i32 %x) | |
472 ret void | |
473 } | |
474 </pre> | |
475 </td> | |
476 </tr> | |
477 </table> | |
478 <div align='center'><h3>Use them for force to tail call elimination.</h3></div> | |
479 </div> | |
480 | |
481 <div class='slide'> | |
482 <h2>Forcing Tail Call Elimination</h2> | |
9 | 483 <p>Tail Call Elimination requirements</p> |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
484 <ul> |
9 | 485 <li>Set tail flag at the code segments call. |
486 <li>Tailcallopt is enabled. | |
487 <li>The caller and calle's calling conventions must be the same and their types should be cc10, cc11 or fastcc. | |
488 <li>Return value type has to be the same as the caller's. | |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
489 </ul> |
5 | 490 </div> |
491 | |
492 <div class='slide'> | |
493 <h2>Forcing Tail Call Elimination</h2> | |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
494 <ul> |
9 | 495 <li>Always add tail call elimination pass. |
496 <li>Tailcallopt is enabled in CbC. | |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
497 <li>Fast cc is used consistently in code segments call. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
498 <li>All the code segments return value type is void. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
499 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
500 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
501 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
502 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
503 <h2>What is a Goto with environment?</h2> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
504 <ul> |
9 | 505 <li>Code segments do not have environment but C functions have. |
506 <li>Code segments can reutn C functions by Goto with environment. | |
507 <li>In the GCC, use nested functions. | |
508 <li>In the LLVM and Clang, use setjmp and longjmp. | |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
509 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
510 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
511 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
512 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
513 <h2>Sample code of Goto with environment</h2> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
514 <table width='100%'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
515 <tr><td valign='top'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
516 <ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
517 <li>Use new keywords __return and __environment. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
518 <li>__return is a code segment pointer for C functions. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
519 <li>__environment is a envitonment for C functions. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
520 <li>Code1 use a continuation with environments to return main function. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
521 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
522 <td style="border: double;"> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
523 <pre class='small_code'><div class='highlight'>__code code1(int n,__code(*exit_code)(int,void *),void *exit_env){ |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
524 printf("code1 : code entry1\n"); |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
525 goto exit_code(n,exit_env); |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
526 } |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
527 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
528 int caller(){ |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
529 printf("caller : main1 entry\n"); |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
530 __code (*__ret)(int, void *) = <font color='red'>__return</font>; |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
531 struct __CbC_env *__env = <font color='red'>__environment</font>; |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
532 goto code1(1, __ret, __env); |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
533 return 0; |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
534 } |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
535 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
536 int main(){ |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
537 int n; |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
538 n = caller(); |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
539 printf("return = %d\n",n); |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
540 return 0; |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
541 } </div></pre> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
542 </tr> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
543 </table> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
544 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
545 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
546 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
547 <h2>Implementing goto with environment</h2> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
548 <ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
549 <li>Include setjmp.h always. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
550 <li>Generate C struct for saving environment. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
551 <ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
552 <li>This struct is __environment. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
553 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
554 <li>Insert setjmp in C function. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
555 <li>Generate longjmp code segment as return. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
556 <ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
557 <li>This code segment is pointed by __return. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
558 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
559 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
560 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
561 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
562 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
563 <div class='slide'> |
5 | 564 <h2>Compiling result</h2> |
565 <table width='100%' align='center' border='1'> | |
566 <tr> | |
567 <td valign='top'> | |
568 <pre class='small_code'> | |
569 | |
570 __code caller(int x) | |
571 { | |
572 goto code1(1, x); // should be jmp | |
573 } | |
574 </pre> | |
575 <td> | |
576 <pre class='small_code'> | |
577 _caller: ## @factorial | |
578 .cfi_startproc | |
579 ## BB#0: ## %entry | |
580 subq $24, %rsp | |
581 Ltmp5: | |
582 .cfi_def_cfa_offset 32 | |
583 movl $1, %eax | |
584 movl %edi, 20(%rsp) ## 4-byte Spill | |
585 movl %eax, %edi | |
586 movl 20(%rsp), %esi ## 4-byte Reload | |
587 addq $24, %rsp | |
588 <font color='red'>jmp</font> _code1 ## TAILCALL | |
589 .cfi_endproc | |
590 </pre> | |
591 </tr> | |
592 </table> | |
593 <ul> | |
594 <li>Code1 should called by jmp instruction. | |
595 <li>In assembly code, code1 called by jmp instruction. | |
596 <li>Tail call elimination was forced. | |
597 <li>If tail call elimination was failed, compiler output error messages. | |
598 </ul> | |
599 </div> | |
9 | 600 <!-- |
5 | 601 <div class='slide'> |
6 | 602 <h2>Execution Result</h2> |
603 <ul> | |
604 <li>Conv1 program. | |
605 <ul> | |
606 <li>Repeat calculation program. | |
607 <li>Stack is defined in the program. | |
608 </ul> | |
609 <li>Select execution code by arguments. | |
610 <ul> | |
611 <li>1: not optimized. | |
612 <li>2,3: optimized stack operation. | |
613 </ul> | |
614 <li>Inline optimization is omitted. | |
615 </ul> | |
616 <table width='80%' align='center' border='1'> | |
617 <tr> | |
618 <td width='30%'> | |
619 <td>Argument 1 | |
620 <td>Argument 2 | |
621 <td>Argument 3 | |
622 </tr> | |
623 <tr> | |
624 <td>Micro-C | |
625 <td>6.875 | |
626 <td>2.4562 | |
627 <td>3.105 | |
628 </tr> | |
629 <tr> | |
630 <td>GCC -O2 | |
631 <td>2.9438 | |
632 <td>0.955 | |
633 <td>1.265 | |
634 </tr> | |
635 <tr> | |
636 <td>LLVM and Clang -O0 | |
637 <td>5.835 | |
638 <td>4.1887 | |
639 <td>5.0625 | |
640 </tr> | |
641 <tr> | |
642 <td>LLVM and Clang -O2 | |
643 <td>3.3875 | |
644 <td>2.29 | |
645 <td>2.5087 | |
646 </tr> | |
647 </table> | |
648 <table width='80%' align='center' border='0'> | |
649 <tr><td align='right'>unit : seconds</tr> | |
650 </table> | |
651 <ul> | |
652 <li>LLVM and Clang compilers are faster than Micro-C when optimize is enabled. | |
653 <li>CbC gets benefits from LLVM optimizations. | |
654 <li>LLVM can compile CbC examples. | |
655 </ul> | |
656 </div> | |
9 | 657 --> |
6 | 658 <div class='slide'> |
4
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
659 <h2>Conclusion</h2> |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
660 <ul> |
6 | 661 <li>CbC compiler on LLVM and Clang is implemented. |
662 <li>LLVM IR is not modified. | |
663 <li>goto with environment is implemented by setjmp and longjmp. | |
664 <li>Automatic prototype generating. | |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
665 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
666 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
667 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
668 <div class='slide'> |
4
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
669 <h2>Future works</h2> |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
670 <ul> |
6 | 671 <li>Write operating system in CbC. |
672 <li>Meta computation syntax. | |
673 <li>Automitic data segment generator. | |
4
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
674 </ul> |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
675 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
676 |
9 | 677 <div class='slide'> |
678 <h2>LLVM and Clang's intermidiate representations</h2> | |
679 <table border='1' align='center' width='80%'> | |
680 <tr><td width='25%'> | |
681 Name | |
682 </td><td> | |
683 Desctiption | |
684 </td></tr> | |
685 <tr><td> | |
686 clang AST | |
687 </td><td> | |
688 Abstract Syntax Tree. It is a representation of the structure source codes. | |
689 </td></tr> | |
690 <tr><td> | |
691 LLVM IR | |
692 </td><td> | |
693 The main intermidiate representation of LLVM. It has three diffirent forms: as an in-memory compiler IR, as an on-disk bitcode representation, and as a human readable assembly language representation. | |
694 </td></tr> | |
695 <tr><td> | |
696 SelectionDAG | |
697 </td><td> | |
698 Directed Acyclic Graph. Its nodes indicate what operation the node performs and the operands to the operation. | |
699 </td></tr> | |
700 <tr><td> | |
701 Machine Code | |
702 </td><td> | |
703 This representation is designed to support both an SSA representation for machine code, as well as register allocated, non-SSA form. | |
704 </td></tr> | |
705 <tr><td> | |
706 MC Layer | |
707 </td><td> | |
708 It is used to represent and process code at the raw machine code level. User can some kinds of file (.s, .o, .ll, a.out) by same API. | |
709 </td></tr> | |
710 </table> | |
711 <br> | |
712 <p align='center' class='step emphasize'>Intermidiate representations are not modified.</p> | |
713 </div> | |
714 | |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
715 </div> <!-- presentation --> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
716 </body> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
717 </html> |