|    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 */ |