Age | Commit message (Collapse) | Author | |
---|---|---|---|
2015-10-06 | factor ins array edition in icpy | Quentin Carbonneaux | |
2015-10-05 | factor vector duplication in vdup() | Quentin Carbonneaux | |
2015-10-05 | rename blocka to balloc | Quentin Carbonneaux | |
2015-10-05 | factor some utility functions/data in util.c | Quentin Carbonneaux | |
2015-09-30 | use more machine registers | Quentin Carbonneaux | |
2015-09-29 | wip on new stack slots (emit, spill) | Quentin Carbonneaux | |
2015-09-29 | more fixes for the new slot representation | Quentin Carbonneaux | |
2015-09-29 | wip on a simpler slot handling | Quentin Carbonneaux | |
2015-09-28 | stupid hinting works better without traces! | Quentin Carbonneaux | |
2015-09-27 | compute reg interferences in filllive() | Quentin Carbonneaux | |
2015-09-26 | move the liveon() function in live.c | Quentin Carbonneaux | |
2015-09-25 | add union-find based phi-class computation | Quentin Carbonneaux | |
2015-09-25 | change controversial (at best) typedef | Quentin Carbonneaux | |
2015-09-25 | move return type information into Fn | Quentin Carbonneaux | |
2015-09-22 | parse return types of functions | Quentin Carbonneaux | |
2015-09-20 | save callee-save registers | Quentin Carbonneaux | |
2015-09-17 | start work on fuction parameters | Quentin Carbonneaux | |
2015-09-16 | follow suggestion of gcc | Quentin Carbonneaux | |
2015-09-15 | heavy modification of call handling | Quentin Carbonneaux | |
The IR generated by calls was very bulky because two instructions were used for marking the live range of a clobber. This patch attempts to store the information of what registers are use/def/clobber in the call instruction itself, this leads to more compact code (even more when we'll have SSE registers). However, I find that the amount of extra code needed is not really easonable. Fortunately it is not too invasive, thus if the complexity creeps in, it should be easy to revert. | |||
2015-09-15 | drop arity information from OpDesc | 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 | 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 | get rid of OTrunc | Quentin Carbonneaux | |
2015-09-15 | add a size to all operations (wip) | Quentin Carbonneaux | |
2015-09-15 | make spiller aware of parallel assignments | 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 | new NAlign constant and fix frame size computation | 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 | add sign/zero extension operations | Quentin Carbonneaux | |
2015-09-15 | add the mul instruction | Quentin Carbonneaux | |
2015-09-15 | replace RMem refs with an OAddr opertation | Quentin Carbonneaux | |
2015-09-15 | compile branches on and using test | Quentin Carbonneaux | |
2015-09-15 | tentative support for fast allocs | Quentin Carbonneaux | |
It seems that the MEM reference type is meaningless in too many positions. Because of this, it is unclear if we should keep it or just introduce a OAddr instruction that only accepts slots. Regardless of the above, the spilling module needs to use the new slot_() function, also, the emit function needs to fetch the size of the stack frame from the slot[] array. The naming is still very transitional, here is a list of all bogus names I can think of: - SLOT() - Tmp.spill - slot_ | |||
2015-09-15 | major lifting: get rid of RReg | Quentin Carbonneaux | |
I've been septic since I introduced it, this commit proves that it costs more than it helps. I've also fixed a bad bug in rega() where I alloc'ed the wrong size for internal arrays. Enums now have names so I can use them to cast in gdb to get the name corresponding to a constant. | |||
2015-09-15 | add basic support for stack allocation | Quentin Carbonneaux | |
2015-09-15 | split store into store{w,l} | Quentin Carbonneaux | |
2015-09-15 | prefix register macros | Quentin Carbonneaux | |
2015-09-15 | cosmetics | Quentin Carbonneaux | |
2015-09-15 | simplify parsing | Quentin Carbonneaux | |
2015-09-15 | add nmem to opdesc for use in the spiller | Quentin Carbonneaux | |
This new machine-independent mechanism might not be general enough in the long term but, now, it provides a flexible way to inform the spiller about the maximum number of arguments of an instruction that can be spill locations. | |||
2015-09-15 | add some load/store operations | Quentin Carbonneaux | |
2015-09-15 | jez becomes jnz, complete cmp+jmp contraction | Quentin Carbonneaux | |
2015-09-15 | implement smarter compare+branch | Quentin Carbonneaux | |
2015-09-15 | split cmp in two sizes | Quentin Carbonneaux | |