annotate presentation/presen.html @ 11:4cff1ef8fbf6

fix
author Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
date Sat, 04 Jul 2015 17:25:27 +0900
parents 81195c2fcf4a
children 40be058f9df8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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.
10
81195c2fcf4a fix typo
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
157 <li>Basic syntax is the same as the 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
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
168 __code f() {
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
169 goto g();
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
170 }
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
171
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
172 __code g() {
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
173 goto h();
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
174 }
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
175 </pre>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
176 </td><td valign='top'>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
177 <ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
178 <li>Code segments like C functions.
11
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
179 <li>CbC transition is goto.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
180 <li>Code segments do not return to previous.
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
181 <li>There are no return values.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
182 </ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
183 </td></tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
184 </table>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
185 </div>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
186
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
187 <div class='slide'>
10
81195c2fcf4a fix typo
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
188 <h2>CbC sample with data segments</h2>
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
189 <table border='1' align='center' width='80%'>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
190 <tr><td width='50%'>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
191 <pre class='small_code'>
10
81195c2fcf4a fix typo
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
192 __code code(struct Context* context, struct Allocate* allocate,
81195c2fcf4a fix typo
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
193 struct Element* element) {
4
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
194 allocate->after_append = Code2;
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
195 element ->value = 10;
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
196 goto meta(context, Append);
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
197 }
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
198
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
199 __code append(struct Context* context, struct Allocate* allocate,
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
200 struct List* list, struct Element* element) {
4
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
201 if(list->head) {
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
202 list->tail->next = element;
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
203 } else {
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
204 list->head = element;
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
205 }
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
206 list->tail = element;
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
207 list->tail->next = 0;
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
208 goto meta(context, allocate->after_append);
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
209 }
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
210
4
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
211 __code meta(struct Context* context, enum Code next) {
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
212 goto (context->code[next])(context);
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
213 }
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
214 </pre>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
215 </td><td valign='top'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
216 <ul>
8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
217 <li>A part of list program.
10
81195c2fcf4a fix typo
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
218 <li>Code segment transition into next one via meta code segment.
11
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
219 <li>Context has code segments name.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
220 <li>Context give meta code segments next code segment pointer.
4
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
221 </ul>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
222 </td></tr>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
223 </table>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
224 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
225
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
226 <div class='slide'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
227 <h2>CbC compilers</h2>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
228 <ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
229 <li>Micro-C(one pass standalone compiler)
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
230 <li>GCC(GNU Compiler Collection)
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
231 <li>LLVM and Clang
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
232 <ul>
4
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
233 <li><font color='red'>The latest!</font>
3
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 </ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
236 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
237
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
238 <div class='slide'>
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
239 <h2>What are LLVM and Clang?</h2>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
240 <ul>
4
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
241 <li>Compiler frameworks.
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
242 <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
243 <li>Translates LLVM IR to assembly language.
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
244 <li>Many kinds of optimization.
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
245 <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
246 <li>Clang uses LLVM for compiler backend.
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
247 </ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
248 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
249
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
250 <div class='slide'>
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
251 <h2>Why?</h2>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
252 <ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
253 <li>Apple supported.
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
254 <li>OS X default compiler.
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
255 <li>LLVM IR has readable documents.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
256 <li>More readable and modifiable than GCC.
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
257 </ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
258 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
259
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
260 <div class='slide'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
261 <h2>LLVM and Clang's compilation flow</h2>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
262 <ul>
4
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
263 <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
264 <li>LLVM translate LLVM IR into assembly code.
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
265 <li>LLVM optimize all of intermidiate representation.
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
266 </ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
267 <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
268 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
269
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
270 <div class='slide'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
271 <h2>LLVM and Clang's intermidiate representations</h2>
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
272 <ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
273 <li>clang AST
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
274 <li>LLVM IR
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
275 <li>SelectionDAG
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
276 <li>Machine Code
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
277 <li>MC Layer
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
278 </ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
279 <h3 align='center'>Intermidiate representations are not modified.</h3>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
280 </div>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
281
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
282 <div class='slide'>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
283 <h2>Clang AST</h2>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
284 <ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
285 <li>Abstract Syntax Tree.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
286 <li>Representation of the source codes structure.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
287 <li>Basic node type: Stmt, Decl, Expr.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
288 </ul>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
289 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
290
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
291 <div class='slide'>
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
292 <h2>LLVM IR</h2>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
293 <ul>
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
294 <li>The main intermidiate representation.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
295 <li>LLVM translate it into assembly codes.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
296 <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
297 </ul>
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
298 <table width='100%'>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
299 <tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
300 <td style="border: double;">
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
301 <pre class='code'>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
302 define fastcc void @factorial(i32 %x) #0 {
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
303 entry:
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
304 tail call fastcc void @factorial0(i32 1, i32 %x)
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
305 ret void
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
306 }
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
307 </pre>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
308 </td>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
309 </tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
310 </table>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
311 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
312
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
313 <div class='slide'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
314 <h2>Basic strategy of implementating</h2>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
315 <ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
316 <li>Code segments are implemented by C functions.
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
317 <li>Data segments are implemented by C structs.
11
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
318 <li>Transition is implemented by tail call elimination.
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
319 <li>Goto with environment is implemented by setjmp and longjmp.
11
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
320 <ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
321 <li>Goto with environment enable code segments to return C functions.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
322 </ul>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
323 </ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
324 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
325
11
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
326 <!--
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
327 <div class='slide'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
328 <h2>Implementating CbC compiler in LLVM and Clang</h2>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
329 <ul>
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
330 <li>__code type.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
331 <li>Goto syntax.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
332 <li>Force to do tail call elimination.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
333 <li>Goto with environment.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
334 <li>Automatically prototype declatation genarating.
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
335 </ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
336 </div>
11
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
337 -->
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
338
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
339 <div class='slide'>
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
340 <h2>Parser</h2>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
341 <ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
342 <li>__code type
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
343 <li>Prototype declaration generating
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
344 <li>Goto syntax for transitions
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
345 </ul>
11
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
346 <div align='center'><img src="fig/clang_llvm_slide_parse.svg" width="60%"></div>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
347 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
348
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
349 <div class='slide'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
350 <h2>__code type</h2>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
351 <table width='100%'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
352 <tr>
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
353 <ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
354 <li>Code segments as __code type functions.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
355 <li>Handled like void functions.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
356 </ul>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
357 </tr>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
358 </table>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
359 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
360
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
361 <div class='slide'>
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
362 <h2>Prototype declaration generating</h2>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
363 <ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
364 <li>In CbC, programmer write a lot of code segments.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
365 <li>When function pointer's arguments are omitted, TCE was failed sometimes.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
366 <li>Automatically prototype declaration generating saves a lot of effort.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
367 <li>When parser meet a code segment call, it stop current parsing and search called code segment declaration.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
368 <li>If the declaration was not found, search definision and generate declaration.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
369 <ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
370 <li>Of course you can write declaration yourself too.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
371 </ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
372 </ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
373 <table border='1' width='80%' align='center'>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
374 <tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
375 <td>original input code
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
376 <td>Clang genarates it
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
377 </tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
378 <tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
379 <td><pre class='small_code'>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
380 __code code1(int a, int b) {
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
381 :
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
382 goto code2(a,b);
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
383 }
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
384
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
385 __code code2(int a, int b){
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
386 :
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
387 }
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
388 </pre>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
389 <td><pre class='small_code'>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
390 <font color='red'>__code code2(int a, int b);</font>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
391 __code code1(int a, int b) {
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
392 :
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
393 goto code2(a,b);
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
394 }
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
395
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
396 __code code2(int a, int b){
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
397 :
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
398 }
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
399 </pre>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
400 </tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
401 </table>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
402 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
403
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
404 <div class='slide'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
405 <h2>goto syntax for transition</h2>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
406 <table width='100%'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
407 <tr><td>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
408 <ul>
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
409 <li>New goto syntax for transition.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
410 <li>Generate normal function call.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
411 <li>Tail call elimination is forced later.
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
412 </ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
413 </tr>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
414 </table>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
415 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
416
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
417 <div class='slide'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
418 <h2>goto syntax for transition</h2>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
419 <ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
420 <li>Add return statement after goto transition.
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
421 <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
422 </ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
423 <table border='1' width='80%' align='center'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
424 <tr>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
425 <td>original input code
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
426 <td>Clang genarates it
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
427 </tr>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
428 <tr>
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 __code 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 goto code2();
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
433 }
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
434 </pre>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
435 <td><pre class='small_code'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
436 void code1() {
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
437 :
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
438 code2();
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
439 <font color='red'>return;</font>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
440 }
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
441 </pre>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
442 </tr>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
443 </table>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
444 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
445
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
446 <div class='slide'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
447 <h2>Forcing Tail Call Elimination</h2>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
448 <p>TCE is enabled at CodeGen.</p>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
449 <p>TCE is act at SelectionDAGISel.</p>
11
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
450 <div align='center'><img src="fig/clang_llvm_slide_cg_DAG.svg" width="60%"></div>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
451 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
452
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
453 <div class='slide'>
11
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
454 <!-- <h2>Jmp instruction based transition</h2> -->
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
455 <h2>What is tail call elimination?</h2>
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
456 <ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
457 <li>Tail call is immediately followed by return.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
458 <li>Tail call elimination replace tail call's call instructions with jmp instructions.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
459 <li>Transitions are implemented by forced tail call elimination.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
460 </ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
461 <div align='center'><img src="fig/TCE.svg" width="40%"></div>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
462 </div>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
463
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
464
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
465 <div class='slide'>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
466 <h2>Forcing Tail Call Elimination</h2>
5
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
467 <ul>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
468 <li>LLVM IR has function call flags.
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
469 <li>tail mean it is tail call.
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
470 <li>Calling convention tell compiler how callee functions receive parameters from their caller.
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
471 </ul>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
472 <table width='100%'>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
473 <tr>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
474 <td style="border: double;">
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
475 <pre class='code'>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
476 define fastcc void @factorial(i32 %x) #0 {
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
477 entry:
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
478 <font color='red'>tail</font> call <font color='red'>fastcc</font> void @factorial0(i32 1, i32 %x)
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
479 ret void
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
480 }
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
481 </pre>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
482 </td>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
483 </tr>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
484 </table>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
485 <div align='center'><h3>Use them for force to tail call elimination.</h3></div>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
486 </div>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
487
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
488 <div class='slide'>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
489 <h2>Forcing Tail Call Elimination</h2>
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
490 <p>Tail Call Elimination requirements</p>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
491 <ul>
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
492 <li>Set tail flag at the code segments call.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
493 <li>Tailcallopt is enabled.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
494 <li>The caller and calle's calling conventions must be the same and their types should be cc10, cc11 or fastcc.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
495 <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
496 </ul>
5
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
497 </div>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
498
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
499 <div class='slide'>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
500 <h2>Forcing Tail Call Elimination</h2>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
501 <ul>
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
502 <li>Always add tail call elimination pass.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
503 <li>Tailcallopt is enabled in CbC.
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
504 <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
505 <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
506 </ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
507 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
508
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
509 <div class='slide'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
510 <h2>What is a Goto with environment?</h2>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
511 <ul>
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
512 <li>Code segments can reutn C functions by Goto with environment.
10
81195c2fcf4a fix typo
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
513 <ul>
81195c2fcf4a fix typo
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
514 Code segment do not have return.
81195c2fcf4a fix typo
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
515 </ul>
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
516 <li>In the GCC, use nested functions.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
517 <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
518 </ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
519 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
520
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
521 <div class='slide'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
522 <h2>Sample code of Goto with environment</h2>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
523 <table width='100%'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
524 <tr><td valign='top'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
525 <ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
526 <li>Use new keywords __return and __environment.
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
527 <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
528 <li>__environment is a envitonment for C functions.
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
529 <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
530 </ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
531 <td style="border: double;">
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
532 <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
533 printf("code1 : code entry1\n");
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
534 goto exit_code(n,exit_env);
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
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
537 int caller(){
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
538 printf("caller : main1 entry\n");
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
539 __code (*__ret)(int, void *) = <font color='red'>__return</font>;
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
540 struct __CbC_env *__env = <font color='red'>__environment</font>;
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
541 goto code1(1, __ret, __env);
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
542 return 0;
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
543 }
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
544
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
545 int main(){
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
546 int n;
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
547 n = caller();
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
548 printf("return = %d\n",n);
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
549 return 0;
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
550 } </div></pre>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
551 </tr>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
552 </table>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
553 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
554
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
555 <div class='slide'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
556 <h2>Implementing goto with environment</h2>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
557 <ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
558 <li>Include setjmp.h always.
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
559 <li>Generate C struct for saving environment.
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
560 <ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
561 <li>This struct is __environment.
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
562 </ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
563 <li>Insert setjmp in C function.
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
564 <li>Generate longjmp code segment as return.
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
565 <ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
566 <li>This code segment is pointed by __return.
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
567 </ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
568 </ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
569 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
570
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
571
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
572 <div class='slide'>
5
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
573 <h2>Compiling result</h2>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
574 <table width='100%' align='center' border='1'>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
575 <tr>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
576 <td valign='top'>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
577 <pre class='small_code'>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
578
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
579 __code caller(int x)
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
580 {
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
581 goto code1(1, x); // should be jmp
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
582 }
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
583 </pre>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
584 <td>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
585 <pre class='small_code'>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
586 _caller: ## @factorial
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
587 .cfi_startproc
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
588 ## BB#0: ## %entry
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
589 subq $24, %rsp
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
590 Ltmp5:
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
591 .cfi_def_cfa_offset 32
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
592 movl $1, %eax
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
593 movl %edi, 20(%rsp) ## 4-byte Spill
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
594 movl %eax, %edi
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
595 movl 20(%rsp), %esi ## 4-byte Reload
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
596 addq $24, %rsp
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
597 <font color='red'>jmp</font> _code1 ## TAILCALL
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
598 .cfi_endproc
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
599 </pre>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
600 </tr>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
601 </table>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
602 <ul>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
603 <li>Code1 should called by jmp instruction.
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
604 <li>In assembly code, code1 called by jmp instruction.
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
605 <li>Tail call elimination was forced.
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
606 <li>If tail call elimination was failed, compiler output error messages.
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
607 </ul>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
608 </div>
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
609 <!--
5
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
610 <div class='slide'>
6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
611 <h2>Execution Result</h2>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
612 <ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
613 <li>Conv1 program.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
614 <ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
615 <li>Repeat calculation program.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
616 <li>Stack is defined in the program.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
617 </ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
618 <li>Select execution code by arguments.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
619 <ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
620 <li>1: not optimized.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
621 <li>2,3: optimized stack operation.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
622 </ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
623 <li>Inline optimization is omitted.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
624 </ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
625 <table width='80%' align='center' border='1'>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
626 <tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
627 <td width='30%'>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
628 <td>Argument 1
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
629 <td>Argument 2
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
630 <td>Argument 3
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
631 </tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
632 <tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
633 <td>Micro-C
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
634 <td>6.875
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
635 <td>2.4562
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
636 <td>3.105
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
637 </tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
638 <tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
639 <td>GCC -O2
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
640 <td>2.9438
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
641 <td>0.955
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
642 <td>1.265
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
643 </tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
644 <tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
645 <td>LLVM and Clang -O0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
646 <td>5.835
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
647 <td>4.1887
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
648 <td>5.0625
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
649 </tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
650 <tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
651 <td>LLVM and Clang -O2
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
652 <td>3.3875
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
653 <td>2.29
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
654 <td>2.5087
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
655 </tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
656 </table>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
657 <table width='80%' align='center' border='0'>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
658 <tr><td align='right'>unit : seconds</tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
659 </table>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
660 <ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
661 <li>LLVM and Clang compilers are faster than Micro-C when optimize is enabled.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
662 <li>CbC gets benefits from LLVM optimizations.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
663 <li>LLVM can compile CbC examples.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
664 </ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
665 </div>
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
666 -->
6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
667 <div class='slide'>
4
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
668 <h2>Conclusion</h2>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
669 <ul>
6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
670 <li>CbC compiler on LLVM and Clang is implemented.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
671 <li>LLVM IR is not modified.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
672 <li>goto with environment is implemented by setjmp and longjmp.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
673 <li>Automatic prototype generating.
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
674 </ul>
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
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
677 <div class='slide'>
4
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
678 <h2>Future works</h2>
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
679 <ul>
6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
680 <li>Write operating system in CbC.
10
81195c2fcf4a fix typo
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
681 <ul>
81195c2fcf4a fix typo
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
682 <li>Gears OS
81195c2fcf4a fix typo
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
683 </ul>
6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
684 <li>Meta computation syntax.
10
81195c2fcf4a fix typo
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
685 <li>More user friendly syntax.
6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
686 <li>Automitic data segment generator.
10
81195c2fcf4a fix typo
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
687 <li>Signature for data segment.
4
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
688 </ul>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
689 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
690
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
691 <div class='slide'>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
692 <h2>LLVM and Clang's intermidiate representations</h2>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
693 <table border='1' align='center' width='80%'>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
694 <tr><td width='25%'>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
695 Name
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
696 </td><td>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
697 Desctiption
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
698 </td></tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
699 <tr><td>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
700 clang AST
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
701 </td><td>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
702 Abstract Syntax Tree. It is a representation of the structure source codes.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
703 </td></tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
704 <tr><td>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
705 LLVM IR
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
706 </td><td>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
707 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.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
708 </td></tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
709 <tr><td>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
710 SelectionDAG
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
711 </td><td>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
712 Directed Acyclic Graph. Its nodes indicate what operation the node performs and the operands to the operation.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
713 </td></tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
714 <tr><td>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
715 Machine Code
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
716 </td><td>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
717 This representation is designed to support both an SSA representation for machine code, as well as register allocated, non-SSA form.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
718 </td></tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
719 <tr><td>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
720 MC Layer
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
721 </td><td>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
722 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.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
723 </td></tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
724 </table>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
725 </div>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
726
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
727 </div> <!-- presentation -->
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
728 </body>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
729 </html>