summary refs log tree commit diff
path: root/lisc
AgeCommit message (Collapse)Author
2015-09-15the wide bit of OAddr matters!Quentin Carbonneaux
2015-09-15more modifications to regaQuentin Carbonneaux
2015-09-15add a size to all operations (wip)Quentin Carbonneaux
2015-09-15add new prime finding programQuentin Carbonneaux
2015-09-15fix invalid test in emitQuentin 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-15my assumptions in dopm() were wrongQuentin Carbonneaux
revert commit d0e9e3ada106dfe8dcda7a0099b341000f00afb2.
2015-09-15output labels only when necessaryQuentin Carbonneaux
2015-09-15simplify rega's dopm()Quentin Carbonneaux
2015-09-15make spiller aware of parallel assignmentsQuentin Carbonneaux
2015-09-15fix comments in pmovQuentin Carbonneaux
2015-09-15update 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-15write more tests for dopm()Quentin Carbonneaux
2015-09-15add helpful diagnosticsQuentin Carbonneaux
2015-09-15add test scaffolding codeQuentin Carbonneaux
2015-09-15start exhaustive testing dopm()Quentin Carbonneaux
2015-09-15work in progress on parallel movesQuentin 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-15use loop frequency in ties of rpoQuentin Carbonneaux
2015-09-15fix two bugs in regaQuentin 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-15change cmp $0, %reg, to test %reg, %regQuentin Carbonneaux
2015-09-15fix emit(OCopy) and use pointers in max.ssaQuentin Carbonneaux
2015-09-15alloc16 comes for free, iiuc the abiQuentin Carbonneaux
2015-09-15remove non-critical diagnosticsQuentin Carbonneaux
2015-09-15add truncation operationQuentin 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-15remove dead code from regaQuentin 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-15remove old commentQuentin Carbonneaux
2015-09-15the abi is unclear, practice suggests that changeQuentin Carbonneaux
2015-09-15treat two instruction args uniformly in regaQuentin Carbonneaux
2015-09-15OXTestw should not have 64bits argumentsQuentin Carbonneaux
2015-09-15new NAlign constant and fix frame size computationQuentin Carbonneaux
2015-09-15slight update to slot testsQuentin Carbonneaux
2015-09-15fix bug in alignment constraints of spill slotsQuentin Carbonneaux
2015-09-15move spill and emit to the new slot systemQuentin 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-15store the edit tagQuentin Carbonneaux
2015-09-15add comment about variadic functions in abiQuentin Carbonneaux
2015-09-15clarify the abiQuentin Carbonneaux
2015-09-15start summing up the abiQuentin Carbonneaux
2015-09-15tweak block-border heuristic for reg. allocationQuentin 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-15remove obsolete commentQuentin Carbonneaux
2015-09-15add sign/zero extension operationsQuentin Carbonneaux
2015-09-15refine the clobber codeQuentin Carbonneaux
It could very well be that the temporary we assign already got assigned to the right register! Good things happen.
2015-09-15fix two heuristics in regaQuentin 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-15swap a test in collatzQuentin 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-15compactify collatz testQuentin Carbonneaux
2015-09-15remove obsolete comment about MEMQuentin Carbonneaux
It turned out to be not so useful to have a MEM type for references. Instead I used an OAddr instruction that translates simply to a lea.
2015-09-15add the mul instructionQuentin Carbonneaux
2015-09-15remove round-robin in ralloc (need preferences)Quentin Carbonneaux
2015-09-15make sure tests emitted are encodableQuentin Carbonneaux
2015-09-15replace RMem refs with an OAddr opertationQuentin Carbonneaux
2015-09-15compile branches on and using testQuentin Carbonneaux
2015-09-15add a large testQuentin Carbonneaux