summary refs log tree commit diff
path: root/lo2.ml
AgeCommit message (Collapse)Author
2015-03-25more codegenQuentin Carbonneaux
2015-03-25start writing some codegenQuentin Carbonneaux
2015-02-20fix bugs in movgenQuentin Carbonneaux
2015-02-20start work on movgenQuentin Carbonneaux
2015-02-18cosmeticsQuentin Carbonneaux
2015-02-18add spill testQuentin Carbonneaux
2015-02-18kind of working!Quentin Carbonneaux
2015-02-18wipQuentin Carbonneaux
2015-02-18wipQuentin Carbonneaux
2015-02-15add notesQuentin Carbonneaux
I start to believe that it is possible to simply reuse the regalloc I wrote. All the data structures seem fine. Here is a list modifications to make for sure: - Keep track of the mapping for live in variables for each block. - Make sure 'loc' (or a new function) returns registers for the arguments of base instructions. Spilling -------- When we need a register and none are left. If we are at the end of a block, simply spill anybody (the resolving will take care of adding the moves). If we are in a block, find somebody to spill and its next use, if the next use is in the same block, emit reload code, otherwise, decide to emit the reload at the end of the cheapest block (this means that we have to patch some mappings that were already stored). We let the resolve handle the insertion of the reload code. Example: +----------------------+ | | | | | +----+ +----+ | +----+ -+-> | b1 | --> | b2 | -+-> | b3 | --> +----+ +----+ +----+ ^ ^ Spill x First use of x (Was in r1) The cheapest position for reload code is at the beginning of b3, so we have to modify the mapping at the end of b1, beginning of b2, and end of b2 to change it from (x -> r1) to (x -> spill). Reloading --------- When a spilled variable is needed in register. In this case, we are necessarily inside a block (or at a branch) because that is the only place we require a variable to be in register. Here again we are constrained to insert the spill code before the next use of the variable, but more importantly, we must do it before the register chosen is *in use next*.
2015-02-13finished interval building, untestedQuentin Carbonneaux
2015-02-13attempt a new linear scan implementationQuentin Carbonneaux
2015-01-22release also non-register locationsQuentin Carbonneaux
2015-01-22add some test programsQuentin Carbonneaux
2015-01-22implement linear scan ideas in lo2.mlQuentin Carbonneaux
2015-01-14start hacking new regallocQuentin Carbonneaux
2015-01-11more typesQuentin Carbonneaux
2015-01-09type surgeryQuentin Carbonneaux
2015-01-08try new presentation in lo2.mlQuentin Carbonneaux