Age | Commit message (Collapse) | Author | |
---|---|---|---|
2015-09-15 | fix limit bug in spill | Quentin Carbonneaux | |
I think this was not a big issue because the register allocator does not consume a register when it encounters obviously dead code. | |||
2015-09-15 | start work on comparisons | Quentin Carbonneaux | |
There are two things I overlooked so far. 1. Binary instructions like cmp that do not have a result in registers need the size suffix sometimes, for example when comparing a spill location with a constant. 2. The register allocator needs to be adapted to support the comparison instruction: it is not possible to compare two spill locations without using a register. | |||
2015-09-15 | use cmp $0, it works with spill slots | Quentin Carbonneaux | |
2015-09-15 | use a new Ref type for registers | Quentin Carbonneaux | |
This might not be a good idea, the problem was that many spurious registers would be added to the Bits data-structures during compilation (and would always remain 0). However, doing the above modification de-uniformizes the handling of temps and regs, this makes the code longer and not really nicer. Also, additional Bits structures are required to track the registers independently. Overall this might be a bad idea to revert. | |||
2015-09-15 | clean the commutativity + fix bug in emit | Quentin Carbonneaux | |
The commutativity information only makes sense for arithmetic expressions. To account for that, I introduced a new tri-valued boolean type B3. Memory operations, for example, will receive an undefined commutativity trit. The code emitter was buggy when rega emitted instructions like 'rax = add 1, rax', this is now fixed using the commutativity information (we rewrite it in 'rax = add rax, 1'). | |||
2015-09-15 | add a code emitter for at&t syntax | Quentin Carbonneaux | |
2015-09-15 | simplify spiller | Quentin Carbonneaux | |
It seems that this logic of shuffling stuff around between blocks should be handled by the register allocator instead: it *will* have to shuffle between registers, so we might as well mix some spill locations in. | |||
2015-09-15 | finish spiller, now needs testing! | Quentin Carbonneaux | |
2015-09-15 | standardize error message | Quentin Carbonneaux | |
2015-09-15 | factor some spilling logic | Quentin Carbonneaux | |
2015-09-15 | comment and fix if(BSET(..)) bug | Quentin Carbonneaux | |
2015-09-15 | add slot addressing and some more spilling | Quentin Carbonneaux | |
2015-09-15 | prepare for block processing | Quentin Carbonneaux | |
2015-09-15 | refine assertion in cost computation | Quentin Carbonneaux | |
2015-09-15 | rework spilling code for jump arguments | Quentin Carbonneaux | |
2015-09-15 | refine precision of loop use sets | Quentin Carbonneaux | |
2015-09-15 | move some debug output out of main | Quentin Carbonneaux | |
2015-09-15 | simplify tests for hd | Quentin Carbonneaux | |
2015-09-15 | nicer debug, bug fixed in loop detection | Quentin Carbonneaux | |
2015-09-15 | attempt to fix loop uses/pressure in spill | Quentin Carbonneaux | |
2015-09-15 | correct phi usage accounting | Quentin Carbonneaux | |
2015-09-15 | simplifications | Quentin Carbonneaux | |
2015-09-15 | attempt more correct loop marking | Quentin Carbonneaux | |
2015-09-15 | start working with loops in spill.c | Quentin Carbonneaux | |
2015-09-15 | start work on spiller | Quentin Carbonneaux | |