Age | Commit message (Collapse) | Author | |
---|---|---|---|
2015-09-15 | add the first generated test! | Quentin Carbonneaux | |
2015-09-15 | split some long calls | Quentin Carbonneaux | |
2015-09-15 | new alignment test | Quentin Carbonneaux | |
This test also exposes a loose handling of clobbers, I think it should be possible to compile it without spilling. | |||
2015-09-15 | get rid of OTrunc | Quentin Carbonneaux | |
2015-09-15 | fix two bugs in new emit | Quentin Carbonneaux | |
2015-09-15 | update emit to the new setting | Quentin Carbonneaux | |
2015-09-15 | new meaning for comparison types | Quentin Carbonneaux | |
Before, they designated the width of the comparison result, but now, it specifies the size of the arguments. | |||
2015-09-15 | the wide bit of OAddr matters! | Quentin Carbonneaux | |
2015-09-15 | more modifications to rega | Quentin Carbonneaux | |
2015-09-15 | add a size to all operations (wip) | Quentin Carbonneaux | |
2015-09-15 | add new prime finding program | Quentin Carbonneaux | |
2015-09-15 | fix invalid test in emit | Quentin Carbonneaux | |
It could be that the destination of the copy is a spill location, so we have to check the type of i.to first. | |||
2015-09-15 | my assumptions in dopm() were wrong | Quentin Carbonneaux | |
revert commit d0e9e3ada106dfe8dcda7a0099b341000f00afb2. | |||
2015-09-15 | output labels only when necessary | Quentin Carbonneaux | |
2015-09-15 | simplify rega's dopm() | Quentin Carbonneaux | |
2015-09-15 | make spiller aware of parallel assignments | Quentin Carbonneaux | |
2015-09-15 | fix comments in pmov | Quentin Carbonneaux | |
2015-09-15 | update dopm() | Quentin Carbonneaux | |
I could never figure out a correct version without the tests. I'm now fairly confident dopm() will work as we need it to. | |||
2015-09-15 | write more tests for dopm() | Quentin Carbonneaux | |
2015-09-15 | add helpful diagnostics | Quentin Carbonneaux | |
2015-09-15 | add test scaffolding code | Quentin Carbonneaux | |
2015-09-15 | start exhaustive testing dopm() | Quentin Carbonneaux | |
2015-09-15 | work in progress on parallel moves | Quentin Carbonneaux | |
The old code was broken for sure, this one might be. I have to create a test bench for the dopm function. It would also test the parallel move lowering (pmgen and folks). | |||
2015-09-15 | use loop frequency in ties of rpo | Quentin Carbonneaux | |
2015-09-15 | fix two bugs in rega | Quentin Carbonneaux | |
The first one was not so bad, when we a parallel move clobbers one machine register in use, we used to free the temporary t* using it, mark the register as unavailable and allocate a new location for the t*. But this fails when all the registers are in use. In that case, the destination of the move must be in a register r1, so I require a swap of the register to copy (used by t*) with r1 and update the map accordingly. I would like to move all the above logic in a function dealing with clobbers in general. The second bug is in the parallel move compiler, this one was a little more nasty and could have caused much debugging pain. It would be reasonable to test it in a similar way that I did for the slota() allocator. | |||
2015-09-15 | change cmp $0, %reg, to test %reg, %reg | Quentin Carbonneaux | |
2015-09-15 | fix emit(OCopy) and use pointers in max.ssa | Quentin Carbonneaux | |
2015-09-15 | alloc16 comes for free, iiuc the abi | Quentin Carbonneaux | |
2015-09-15 | remove non-critical diagnostics | Quentin Carbonneaux | |
2015-09-15 | add truncation operation | Quentin Carbonneaux | |
It would be nicer to have some kind of subtyping where a l variable can be used in place of a w variable but it is more complications than a truncation insutruction. In some cases, it might be less efficient than the above solution by requiring two registers instead of one. (I.e when both the truncated variable and the long variable live together.) We have to see what are the usage patterns. | |||
2015-09-15 | remove dead code from rega | Quentin Carbonneaux | |
An invariant is that all registers allocated at some point have a hint. This makes the code removed by this commit dead because of the if condition testing for empty hints. | |||
2015-09-15 | remove old comment | Quentin Carbonneaux | |
2015-09-15 | the abi is unclear, practice suggests that change | Quentin Carbonneaux | |
2015-09-15 | treat two instruction args uniformly in rega | Quentin Carbonneaux | |
2015-09-15 | OXTestw should not have 64bits arguments | Quentin Carbonneaux | |
2015-09-15 | new NAlign constant and fix frame size computation | Quentin Carbonneaux | |
2015-09-15 | slight update to slot tests | Quentin Carbonneaux | |
2015-09-15 | fix bug in alignment constraints of spill slots | Quentin Carbonneaux | |
2015-09-15 | move spill and emit to the new slot system | Quentin Carbonneaux | |
In emit, I worked a little to make sure that framesz works when we change the size of the svec array (if we need more alignments). | |||
2015-09-15 | store the edit tag | Quentin Carbonneaux | |
2015-09-15 | add comment about variadic functions in abi | Quentin Carbonneaux | |
2015-09-15 | clarify the abi | Quentin Carbonneaux | |
2015-09-15 | start summing up the abi | Quentin Carbonneaux | |
2015-09-15 | tweak block-border heuristic for reg. allocation | Quentin Carbonneaux | |
We only allocate a register that has a hint if the hint register is not used already. In the max example it gives a better result and it does not seem to affect the collatz test. | |||
2015-09-15 | remove obsolete comment | Quentin Carbonneaux | |
2015-09-15 | add sign/zero extension operations | Quentin Carbonneaux | |
2015-09-15 | refine the clobber code | Quentin Carbonneaux | |
It could very well be that the temporary we assign already got assigned to the right register! Good things happen. | |||
2015-09-15 | fix two heuristics in rega | Quentin Carbonneaux | |
There was a typo that made always the same successor to be selected for register allocation hinting. Also, I now attempt to prioritize hints over succeccor's choices as it appears to give slightly better results... Now that I think about it, the code re-using the most frequent successor block's assignment might be dead because all registers have hints if they got assigned once. To investigate. | |||
2015-09-15 | swap a test in collatz | Quentin Carbonneaux | |
This is pretty stupid... Since we rely on rpo only for code output (and not a proper scheduler), I have to be careful with the ordering of tests to get cleaner code. | |||
2015-09-15 | compactify collatz test | Quentin Carbonneaux | |