annotate presentation/presen.html @ 22:26e2376219e0

fixxxxxx
author Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
date Sun, 05 Jul 2015 03:21:54 +0900
parents a6b9e8b67857
children 5fa7d8240579
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'>
14
b9179e9084d9 spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
5 <title>Presentation</title>
3
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">
17
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
57 <h1><font color="#808db5">Implementing 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">
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
62 Kaito Tokumori, Shinji Kono <br>
15
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
63 University of the Ryukyus
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 <script>
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
65 document.write("<br>July 5, 2015");
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 </script>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 <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
68 </div></td>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 </tr>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 </table>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 <div class='slide'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 <h2>Objective</h2>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 <ul>
14
b9179e9084d9 spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
76 <li>Achieve Reliable computation
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
77 <li>Extract Concurrent Execution Automatically
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
78 <li>Modify and Improve software in a Reliable way
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
79 <li>Get more Reusablity
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 </ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 <h3>Introducing new units of programming</h3>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 </div>
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
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 <div class='slide'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 <h2>Traditional units of programming</h2>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 <ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 <li>Machine instruction
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 <li>Statements of programming language
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 <li>Function call / Method
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 <li>Module / Class / Interface
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 <li>Thread / Process
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 <li>Object
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 <li>Record / Table
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 </ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
97
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 <div class='slide'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 <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
100 <ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 <li>Divide large functions into small parts.
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 <li>Add hidden arguments without code modification.
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 <li>Add meta computation.
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 <li>Extract concurrency from programming units.
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 </ul>
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
106 <h3>It is not easy to do this in the traditional units.</h3>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
108
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 <div class='slide'>
14
b9179e9084d9 spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
110 <h2>New programming units</h2>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 <ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 <li>Units of programming: code segments, data segments.
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 <li>Code segments are units of calculation.
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 <li>Data segments are sets of typed data.
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 </ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
117
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 <div class='slide'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
119 <h2>Code segments</h2>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 <ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
121 <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
122 <li>Code segments have no states.
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 <li>Access in typed data in the data segments by name.
14
b9179e9084d9 spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
124 <li>Specify code segments to be executed using goto.
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
125 </ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 <h3>It is easy to divide or combine.</h3>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
128
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
129 <div class='slide'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
130 <h2>Data segments</h2>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
131 <ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
132 <li>Set of typed data.
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
133 <li>Type signatures are in meta data segments.
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
134 <li>Variable and extendable data structure.
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 <li>Data segments are dominated by connected code segments.
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
136 <li>Code segments atomically access connected data segments.
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 </ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
138 <h3>It is easy to divide or combine.</h3>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
139 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
140
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
141 <div class='slide'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
142 <h2>Meta code / data segments</h2>
15
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
143 <p>A thread of code segments has a context as a meta data segment</p>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
144 <ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
145 <li>Execution contexts: Thread
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
146 <li>Type signatures of data segments.
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
147 <li>Data segment linkages: Pointer
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
148 <li>Machine code of code segments
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
149 </ul>
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.
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
157 <li>Basic syntax is the same as the C, except __code and goto.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
158 <li>__code is a type of code segment
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
159 <li>Code segments end with parameterized goto.
14
b9179e9084d9 spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
160 <li>Data segments are implemented as C structures.
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
161 </ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
162 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
163
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
164 <div class='slide'>
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
165 <h2>code segment syntax</h2>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
166 <table border='1' align='center' width='80%'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
167 <tr><td width='50%'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
168 <pre class='small_code'>
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
169 __code f() {
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
170 goto g();
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
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
173 __code g() {
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
174 goto h();
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
175 }
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
176 </pre>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
177 </td><td valign='top'>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
178 <ul>
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
179 <li>code segment transition is goto.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
180 <li>Code segments have no return statement.
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'>
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
188 <h2>code segment syntax with data segments</h2>
22
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
189 <p>data segments are arguments of a code segment and a goto statement.</p>
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
190 <table border='1' align='center' width='80%'>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
191 <tr><td width='50%'>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
192 <pre class='small_code'>
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
193 __code code1(struct Allocate* allocate,
10
81195c2fcf4a fix typo
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
194 struct Element* element) {
4
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
195 element ->value = 10;
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
196 struct List* list = (struct List *)malloc(sizeof( struct List));
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
197 goto append(allocate,list, element);
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
198 }
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
199
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
200 __code append(struct Allocate* allocate, 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;
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
208 goto code2(allocate,list, element);
4
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
209 }
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
210 </pre>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
211 </td><td valign='top'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
212 </td></tr>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
213 </table>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
214 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
215
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
216 <div class='slide'>
22
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
217 <h2>CbC meta computation</h2>
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
218 <p> add meta part to both code and data, keep object level computation</p>
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
219 <div align="center"><img src="fig/meta.svg" width="45%"></div>
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
220 </div>
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
221
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
222 <div class='slide'>
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
223 <h2>meta computation example</h2>
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
224 <ul>
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
225 <li> pointer operation
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
226 <li> code/data segment interconnection
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
227 <li> memory management (malloc)
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
228 <li> thread management
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
229 <li> synchronization
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
230 <li> data segment signature
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
231 </ul>
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
232 </div>
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
233
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
234 <div class='slide'>
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
235 <h2>list with meta data segment</h2>
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
236 <p> In cons cell, pointer part is visible to object level.</p>
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
237 <p> Hide pointer part in meta data segment.</p>
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
238 <p> Handle pointer operation in meta code segment.</p>
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
239 <div align="center"><img src="fig/list.svg" width="45%"></div>
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
240 </div>
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
241
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
242
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
243 <div class='slide'>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
244 <h2>CbC compilers</h2>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
245 <ul>
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
246 <li>Micro-C(one pass standalone compiler) 2001
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
247 <li>on GCC(GNU Compiler Collection) 2008
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
248 <li>on LLVM and Clang (Compiler framework) 2014
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
249 <ul>
4
20257f618ddd slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
250 <li><font color='red'>The latest!</font>
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 </ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
253 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
254
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
255 <div class='slide'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
256 <h2>LLVM and Clang's compilation flow</h2>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
257 <ul>
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
258 <li>AST : Abstract Syntax Tree (C++ object)
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
259 <li>LLVM IR is Intermediate Representation (bit code).
14
b9179e9084d9 spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
260 <li>SelectionDAG : Code generator internal
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
261 <li>Machine Code : LLVM Machine code
19
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
262 <li>Clang translate C/C++/Obj-C into LLVM IR.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
263 <li>LLVM translate LLVM IR into Assembly code.
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
264 </ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
265 <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
266 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
267
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
268 <div class='slide'>
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
269 <h2>Advantage of LLVM implementation</h2>
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
270 <ul>
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
271 <li>Apple supported (working on OS X).
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
272 <li>OS X default compiler.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
273 <li>LLVM IR is well documented.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
274 <li>better than GCC
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
275 </ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
276 </div>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
277
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
278 <div class='slide'>
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
279 <h2>CbC implementation strategy</h2>
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
280 <ul>
14
b9179e9084d9 spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
281 <li>define special type __code for code segments
b9179e9084d9 spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
282 <li>no code segment prototyping (otherwise it becomes quite messy )
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
283 <li>code segments are implemented as tail call force functions
14
b9179e9084d9 spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
284 <li>Do not modify IR (Intermediate representations )
b9179e9084d9 spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
285 <li>goto statement is actually a function call with following return statement <br>
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
286 goto f() --> { f() ; return; }
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
287 <li>allow mixing code segments and normal function calls ( goto with environment )
9
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>
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
294 <li>Intermediate Representation (bit code).
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
295 <li>Three forms: in-memory IR, bitcode stream, human readable language.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
296 <li>it has precise type, data size, alignment
21
a6b9e8b67857 fixxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
297 <li>function call flags : tail, fastcc, cc10(GHC), cc11(HiPE), ccc
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
298 </ul>
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
299 <table width='100%'>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
300 <tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
301 <td style="border: double;">
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
302 <pre class='code'>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
303 define fastcc void @factorial(i32 %x) #0 {
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
304 entry:
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
305 tail call fastcc void @factorial0(i32 1, i32 %x)
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
306 ret void
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
307 }
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
308 </pre>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
309 </td>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
310 </tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
311 </table>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
312 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
313
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
314 <div class='slide'>
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
315 <h2>CbC implementation strategy</h2>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
316 <ul>
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
317 <li>Code segments are implemented by C functions with return-type __code.
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
318 <li>Data segments are implemented by C structs.
14
b9179e9084d9 spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
319 <li>Goto statement is implemented by setting tail call flag.
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
320 <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
321 </ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
322 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
323
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
324
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
325 <div class='slide'>
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
326 <h2>Prototype declaration generating</h2>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
327 <ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
328 <li>In CbC, programmer write a lot of code segments.
12
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
329 <li>Automatically prototype declarator support it.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
330 <!-- <li>When parser meet a code segment call, it stop current parsing and search called code segment declaration.-->
14
b9179e9084d9 spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
331 <li>If the declaration was not found, search definition and generate declaration.
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
332 <ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
333 <li>Of course you can write declaration yourself too.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
334 </ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
335 </ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
336 <table border='1' width='80%' align='center'>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
337 <tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
338 <td>original input code
14
b9179e9084d9 spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
339 <td>Clang generates it internally
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
340 </tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
341 <tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
342 <td><pre class='small_code'>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
343 __code code1(int a, int b) {
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
344 :
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
345 goto code2(a,b);
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
346 }
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
347
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
348 __code code2(int a, int b){
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
349 :
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
350 }
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
351 </pre>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
352 <td><pre class='small_code'>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
353 <font color='red'>__code code2(int a, int b);</font>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
354 __code code1(int a, int b) {
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
355 :
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
356 goto code2(a,b);
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
357 }
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
358
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
359 __code code2(int a, int b){
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
360 :
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
361 }
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
362 </pre>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
363 </tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
364 </table>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
365 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
366
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
367 <div class='slide'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
368 <h2>goto syntax for transition</h2>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
369 <ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
370 <li>Add return statement after goto transition.
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
371 <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
372 </ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
373 <table border='1' width='80%' align='center'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
374 <tr>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
375 <td>original input code
14
b9179e9084d9 spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
376 <td>Clang generates it
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
377 </tr>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
378 <tr>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
379 <td><pre class='small_code'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
380 __code code1() {
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
381 :
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
382 goto code2();
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
383 }
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
384 </pre>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
385 <td><pre class='small_code'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
386 void code1() {
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
387 :
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
388 code2();
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
389 <font color='red'>return;</font>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
390 }
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
391 </pre>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
392 </tr>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
393 </table>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
394 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
395
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
396 <div class='slide'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
397 <h2>Forcing Tail Call Elimination</h2>
20
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
398 <p>Tail call elimination pass is added in CodeGen.</p>
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
399 <p>Ensure TCE in SelectionDAGISel.</p>
11
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
400 <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
401 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
402
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
403 <div class='slide'>
11
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
404 <h2>What is tail call elimination?</h2>
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
405 <ul>
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
406 <li>Tail call is a function call immediately followed by return.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
407 <li>If stack frame have to be unchanged,
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
408 <li>Tail call elimination replace tail call's call instructions with jmp instructions.
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
409 <li>that is tail call function should have the same arguments and the same return type
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
410 </ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
411 <div align='center'><img src="fig/TCE.svg" width="40%"></div>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
412 </div>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
413
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
414
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
415 <div class='slide'>
5
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
416 <h2>Forcing Tail Call Elimination</h2>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
417 <ul>
9
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
418 <li>Always add tail call elimination pass.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
419 <li>Tailcallopt is enabled in CbC.
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
420 <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
421 <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
422 </ul>
21
a6b9e8b67857 fixxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
423 <p>These are the reason why we need __code type for code segments.</p>
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
424 </div>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
425
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
426 <div class='slide'>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
427 <h2>goto a code segment from a normal C function</h2>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
428 <ul>
14
b9179e9084d9 spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
429 <li>Assume we have code segment g and normal function f
22
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
430 <li>simply goto g in C function f
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
431 <li>code segment g never returns to function f
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
432 </ul>
15
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
433 <p>How to return to C from a code segment?</p>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
434 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
435
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
436 <div class='slide'>
12
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
437 <h2>Goto with environment</h2>
22
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
438 <ul>
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
439 <li>We want provide continuation of function f.
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
440 <li>The continuation is not a simple code segment because code segment has no state.
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
441 <li>We represent the continuation with a code segment (__return) and a meta data segment (__environment).
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
442 </ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
443 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
444
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
445 <div class='slide'>
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
446 <h2>Syntax of Goto with environment</h2>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
447 <table width='100%'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
448 <tr><td valign='top'>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
449 <ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
450 <li>Use new keywords __return and __environment.
22
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
451 <li>__return is a code segment pointer for C functions caller.
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
452 <li>__environment is a environment for C functions caller.
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
453 <li>G use a continuation with environments to return main function.
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
454 </ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
455 <td style="border: double;">
22
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
456 <pre class='small_code'><div class='highlight'>__code g(int n,__code(*exit_code)(int,void *),void *exit_env){
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
457 printf("code1 : code entry1\n");
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
458 goto exit_code(n,exit_env);
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
459 }
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
460
22
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
461 int f(){
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
462 printf("caller : main1 entry\n");
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
463 __code (*__ret)(int, void *) = <font color='red'>__return</font>;
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
464 struct __CbC_env *__env = <font color='red'>__environment</font>;
22
26e2376219e0 fixxxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
465 goto g(1, __ret, __env);
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
466 return 0;
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
467 }
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
468
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
469 int main(){
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
470 int n;
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
471 n = caller();
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
472 printf("return = %d\n",n);
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
473 return 0;
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
474 } </div></pre>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
475 </tr>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
476 </table>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
477 </div>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
478
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
479 <div class='slide'>
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
480 <h2>Implementation of goto with environment</h2>
15
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
481 <p>Several ways to implementation</p>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
482 <ul>
14
b9179e9084d9 spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
483 <li>setjmp/longjmp (LLVM)
13
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
484 <li>nested function closure with thread safe variable (GCC)
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
485 <li>direct manipulation of frame pointer and return value (Micro-C)
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
486 </ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
487 </div>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
488
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
489 <div class='slide'>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
490 <h2>LLVM Implementation of goto with environment</h2>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
491 <ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
492 <li>Include setjmp.h internally.
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
493 <li>Generate C struct for saving environment.
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
494 <ul>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
495 <li>This struct is __environment.
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
496 </ul>
16
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
497 <li>Insert setjmp in C function, when __return is used.
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
498 <li>Generate longjmp code segment as __return.
3
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
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
503 <div class='slide'>
5
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
504 <h2>Compiling result</h2>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
505 <table width='100%' align='center' border='1'>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
506 <tr>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
507 <td valign='top'>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
508 <pre class='small_code'>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
509
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
510 __code caller(int x)
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
511 {
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
512 goto code1(1, x); // should be jmp
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
513 }
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
514 </pre>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
515 <td>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
516 <pre class='small_code'>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
517 _caller: ## @factorial
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
518 .cfi_startproc
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
519 ## BB#0: ## %entry
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
520 subq $24, %rsp
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
521 Ltmp5:
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
522 .cfi_def_cfa_offset 32
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
523 movl $1, %eax
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
524 movl %edi, 20(%rsp) ## 4-byte Spill
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
525 movl %eax, %edi
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
526 movl 20(%rsp), %esi ## 4-byte Reload
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
527 addq $24, %rsp
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
528 <font color='red'>jmp</font> _code1 ## TAILCALL
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
529 .cfi_endproc
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
530 </pre>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
531 </tr>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
532 </table>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
533 <ul>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
534 <li>Code1 should called by jmp instruction.
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
535 <li>In assembly code, code1 called by jmp instruction.
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
536 <li>Tail call elimination was forced.
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
537 <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
538 </ul>
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
539 </div>
16
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
540
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
541 <div class='slide'>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
542 <h2>Usage of CbC : as an instruction description</h2>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
543 <p>CbC can be used as a hardware description language (RTL level)</p>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
544 <ul>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
545 <li>VU (Vector unit) in PS2
21
a6b9e8b67857 fixxxxx
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
546 <li>SPU (Sound Processing Unit) in PS3
16
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
547 </ul>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
548 </div>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
549
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
550 <div class='slide'>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
551 <h2>Usage of CbC : Parallel Task representation</h2>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
552 <p>CbC can be used as a parallel programming language</p>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
553 <ul>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
554 <li>run on GPU or Many Core
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
555 <li>a code segment is a kernel in Open CL
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
556 <li>a code segment execution is atomic
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
557 <li>during an execution of code, data segments are owned by the code
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
558 <li>task structure is a meta data segment
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
559 <li>task manager is a meta code segment
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
560 </ul>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
561 </div>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
562
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
563 <div class='slide'>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
564 <h2>Usage of CbC : OS API description</h2>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
565 <ul>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
566 <li>detailed description of open/read/write/select
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
567 <li>we can implement kernel in CbC
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
568 </ul>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
569 </div>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
570
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
571 <div class='slide'>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
572 <h2>Usage of CbC : meta computation</h2>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
573 <ul>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
574 <li>call meta code segment during goto
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
575 <li>thread context is a meta data segment
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
576 <li>it can be seen as a monadic meta computation
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
577 </ul>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
578 </div>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
579
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
580 <div class='slide'>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
581 <h2>Usage of CbC : Model checking</h2>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
582 <ul>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
583 <li>try all possible non deterministic computation
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
584 <li>keep track data segment state
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
585 <li>Do the model checking without modifying the code
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
586 <li>cf. Java Pathfinder (Model checking by replacing JVM)
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
587 </ul>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
588 </div>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
589
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
590 <div class='slide'>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
591 <h2>Conclusion</h2>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
592 <ul>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
593 <li>CbC compiler on LLVM and Clang is implemented.
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
594 <li>LLVM IR is not modified.
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
595 <li>goto with environment is implemented by setjmp and longjmp.
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
596 <li>Automatic prototype generating.
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
597 <li>Various application of CbC.
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
598 </ul>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
599 </div>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
600
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
601 <div class='slide'>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
602 <h2>Future works</h2>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
603 <ul>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
604 <li>Write operating system in CbC.
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
605 <ul>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
606 <li>Gears OS
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
607 </ul>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
608 <li>Meta computation syntax.
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
609 <li>More user friendly syntax.
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
610 <li>Automatic data segment generator.
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
611 <li>Signature for data segment.
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
612 <li>Dependent type and implicit parameter
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
613 </ul>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
614 </div>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
615
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
616 <div class='slide'>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
617 <h2>LLVM and Clang's intermediate representations</h2>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
618 <table border='1' align='center' width='80%'>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
619 <tr><td width='25%'>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
620 Name
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
621 </td><td>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
622 Description
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
623 </td></tr>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
624 <tr><td>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
625 clang AST
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
626 </td><td>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
627 Abstract Syntax Tree. It is a representation of the structure source codes.
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
628 </td></tr>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
629 <tr><td>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
630 LLVM IR
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
631 </td><td>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
632 The main intermediate representation of LLVM. It has three different forms: as an in-memory compiler IR, as an on-disk bitcode representation, and as a human readable assembly language representation.
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
633 </td></tr>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
634 <tr><td>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
635 SelectionDAG
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
636 </td><td>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
637 Directed Acyclic Graph. Its nodes indicate what operation the node performs and the operands to the operation.
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
638 </td></tr>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
639 <tr><td>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
640 Machine Code
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
641 </td><td>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
642 This representation is designed to support both an SSA representation for machine code, as well as register allocated, non-SSA form.
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
643 </td></tr>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
644 <tr><td>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
645 MC Layer
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
646 </td><td>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
647 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.
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
648 </td></tr>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
649 </table>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
650 </div>
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
651
c3d20ec1ec4b spell check
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
652 </div> <!-- presentation -->
5
ac2ec4334d49 implementation
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
653 <div class='slide'>
6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
654 <h2>Execution Result</h2>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
655 <ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
656 <li>Conv1 program.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
657 <ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
658 <li>Repeat calculation program.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
659 <li>Stack is defined in the program.
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>Select execution code by arguments.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
662 <ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
663 <li>1: not optimized.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
664 <li>2,3: optimized stack operation.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
665 </ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
666 <li>Inline optimization is omitted.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
667 </ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
668 <table width='80%' align='center' border='1'>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
669 <tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
670 <td width='30%'>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
671 <td>Argument 1
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
672 <td>Argument 2
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
673 <td>Argument 3
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
674 </tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
675 <tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
676 <td>Micro-C
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
677 <td>6.875
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
678 <td>2.4562
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
679 <td>3.105
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
680 </tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
681 <tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
682 <td>GCC -O2
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
683 <td>2.9438
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
684 <td>0.955
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
685 <td>1.265
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
686 </tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
687 <tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
688 <td>LLVM and Clang -O0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
689 <td>5.835
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
690 <td>4.1887
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
691 <td>5.0625
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
692 </tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
693 <tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
694 <td>LLVM and Clang -O2
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
695 <td>3.3875
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
696 <td>2.29
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
697 <td>2.5087
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
698 </tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
699 </table>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
700 <table width='80%' align='center' border='0'>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
701 <tr><td align='right'>unit : seconds</tr>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
702 </table>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
703 <ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
704 <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
705 <li>CbC gets benefits from LLVM optimizations.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
706 <li>LLVM can compile CbC examples.
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
707 </ul>
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
708 </div>
3
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
709 </body>
c50a033e6635 create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
710 </html>