269 |
269 |
270 |
270 |
271 def main(args: Array[String]) : Unit = |
271 def main(args: Array[String]) : Unit = |
272 //println(compile(args(0))) |
272 //println(compile(args(0))) |
273 compile_and_run(args(0)) |
273 compile_and_run(args(0)) |
274 |
274 } |
275 } |
275 |
|
276 |
|
277 |
|
278 |
|
279 |
|
280 /* |
|
281 LLVM notes |
|
282 |
|
283 Registers are places for data inside the CPU. |
|
284 + up to 10 times faster access than to main memory |
|
285 - expensive; typically just 32 of them in a 32-bit CPU |
|
286 |
|
287 High-level view of x86 |
|
288 • Not a stack machine; no direct correspondence to operand stacks |
|
289 • Arithmetics, etc. is done with values in registers |
|
290 |
|
291 • Started as academic project at University of Illinois in 2002 |
|
292 • Now a large open source project with many contributors and a growing user base |
|
293 |
|
294 Single Static Assignment (SSA) form |
|
295 • Only one assignment in the program text to each variable |
|
296 • But dynamically, this assignment can be executed many times |
|
297 • Many stores to a memory location are allowed |
|
298 • Also, Φ (phi) instructions can be used, in the beginning of a basic block |
|
299 • Value is one of the arguments, depending on from which block control came to this block |
|
300 • Register allocation tries to keep these variables in same real register |
|
301 |
|
302 Why SSA form? |
|
303 Many code optimizations can be done more efficiently |
|
304 |
|
305 Function definition form |
|
306 define t @name(t1 x1, t2 x2, ..., tn xn) { |
|
307 l1: block1 |
|
308 l2: block2 |
|
309 ... |
|
310 lm : blockm |
|
311 } |
|
312 |
|
313 |
|
314 |
|
315 |
|
316 */ |