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