Age | Commit message (Collapse) | Author | |
---|---|---|---|
2015-09-15 | emit stack fixup only when necessary | Quentin Carbonneaux | |
2015-09-15 | cosmetic indentation style fix | Quentin Carbonneaux | |
2015-09-15 | reshuffle instructions around call | Quentin Carbonneaux | |
2015-09-15 | drop arity information from OpDesc | Quentin Carbonneaux | |
2015-09-15 | add a simple function call test | Quentin Carbonneaux | |
2015-09-15 | hack to enable proper regalloc on calls | Quentin Carbonneaux | |
I add the dual to dummy uses: dummy defs. They are compiled to nothing, but help preserving the invariants I had when writing the register allocator. Clearly, there should be a better way. | |||
2015-09-15 | fix alignment for structs on the stack | Quentin Carbonneaux | |
2015-09-15 | diagnose float structs | Quentin Carbonneaux | |
2015-09-15 | implement aggregate passing in regs | Quentin Carbonneaux | |
2015-09-15 | start function call lowering (wip) | Quentin Carbonneaux | |
2015-09-15 | add parsing code for function calls | Quentin Carbonneaux | |
2015-09-15 | define a new CMPS macro, shorten Type | Quentin Carbonneaux | |
2015-09-15 | make type size unsigned | Quentin Carbonneaux | |
2015-09-15 | fix minor type parsing bugs | Quentin Carbonneaux | |
2015-09-15 | turn test files in one function definition | Quentin Carbonneaux | |
2015-09-15 | start work on aggregate types | Quentin Carbonneaux | |
The parser now has some code to parse the description of structured types. I tried to be even less specific than LLVM "type" by creating just enough abstraction so that I can deal with both AARCH64 and x64. The base types used in the definition of an aggregate are really just syntactic sugar to give a structure a size and an alignment. Only the location of float components matters for the compilation. In particular this means that the front-ends have to know how the ABI works to pass/return small integer types. This also means that the font-end has to be aware of the layout of structures. Chris Lattner has a proposition [1] for LLVM that is still pending and goes in the direction of giving more control of the ABI the front-end. [1]: http://www.nondot.org/sabre/LLVMNotes/ExtendedIntegerResults.txt | |||
2015-09-15 | add source and authorship to cprime.ssa | Quentin Carbonneaux | |
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 | |