Age | Commit message (Collapse) | Author | |
---|---|---|---|
2015-09-15 | change strategy for phi nodes | Quentin Carbonneaux | |
2015-09-15 | avoid depending on uninitialized r | 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 | hack a slot-packing function and its tests | Quentin Carbonneaux | |
2015-09-15 | use the same bitset for regs and tmps in rega() | Quentin Carbonneaux | |
This is possible because we know that they are represented by different integers. | |||
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 | minor size optimization for 0XSet | Quentin Carbonneaux | |
2015-09-15 | fix typos in selcmp and comment | Quentin Carbonneaux | |
2015-09-15 | comment about immutables | Quentin Carbonneaux | |
2015-09-15 | fail on constant comparisons | Quentin Carbonneaux | |
In the future they will be eliminated by constant propagation. | |||
2015-09-15 | add a small size optimization to emit | Quentin Carbonneaux | |
2015-09-15 | support for large constants | Quentin Carbonneaux | |
It was not as simple as I thought. All constants used in 32b context get truncated to 32 bits. All constants in 64b contexts can either remain as immutables are have to be evicted in a register, this choice is taken in noimm(). The case of the comparison needs to be documented since the context is not clearly 32 or 64 bits. I am still unsure if this is fully correct. | |||
2015-09-15 | store gcd result in a | Quentin Carbonneaux | |
2015-09-15 | use proper store suffix in max test | Quentin Carbonneaux | |
2015-09-15 | split store into store{w,l} | Quentin Carbonneaux | |
2015-09-15 | prefix register macros | Quentin Carbonneaux | |
2015-09-15 | fix my sloppy understanding of x86 assembly! | Quentin Carbonneaux | |
2015-09-15 | use round-robin in ralloc | Quentin Carbonneaux | |
This gives a more uniform use of the registers. | |||
2015-09-15 | add funny little max ssa test | Quentin Carbonneaux | |
2015-09-15 | cosmetics | Quentin Carbonneaux | |
2015-09-15 | movsb is not movsbl without suffix... | Quentin Carbonneaux | |
2015-09-15 | attempt factoring store emission code | Quentin Carbonneaux | |
2015-09-15 | parse variants of store | Quentin Carbonneaux | |
2015-09-15 | ugly support for store/load | Quentin Carbonneaux | |
2015-09-15 | parse operations with no result | 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 | fix wrong instruction in emit | Quentin Carbonneaux | |
2015-09-15 | forbid two memory operands for comparisons | Quentin Carbonneaux | |
2015-09-15 | fix a bug in setloc | Quentin Carbonneaux | |
The way we detected if limit had spilled a variable was incorrect. This is because two consecutive calls to limit could require a spill of the same variable. Instead, we now use a return value from limit. Note that this is still not so ideal. Indeed, it works properly only when limit spills one value only, if not, we should return a bitset. In the current use scheme of limit, this invariant is true but ideally we would like to call limit with *all arguments added at once*, not one after the other. | |||
2015-09-15 | add very nice spilling stress test | Quentin Carbonneaux | |
2015-09-15 | minor change in rpo walking | Quentin Carbonneaux | |
2015-09-15 | simplify frequent pred detection in rega | Quentin Carbonneaux | |
2015-09-15 | factor some comparison emitting code | Quentin Carbonneaux | |
2015-09-15 | add some more specific comments | Quentin Carbonneaux | |
2015-09-15 | the only wrong use count is the one of r | Quentin Carbonneaux | |
2015-09-15 | I forgot cmp as flag setting instruction! | 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 | |
2015-09-15 | get rid of the iteration macro | Quentin Carbonneaux | |
2015-09-15 | fix two bugs in isel | Quentin Carbonneaux | |
2015-09-15 | fix 2 bad bugs in rega and improve substraction | Quentin Carbonneaux | |
The substraction contrained the register allocator to allocate a different register for the result and the second operand, now, we use a neg trick to compile it down. The machinery that was setup is, regardless, interesting and will have to be used for floating point computations (division). The first bug in rega made broke the explicited loop invariant: we were using register allocation unavailable information from other blocks. It's still unclear how we got wrong results from that considering mappings are all 0-initialized. The second bug is a stupid one, one sizeof operator was missing from a memcpy... | |||
2015-09-15 | use nreg only when != NReg | Quentin Carbonneaux | |
2015-09-15 | use a temporary for constant comparisons | Quentin Carbonneaux | |
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 | remove useless TODO for now | Quentin Carbonneaux | |
2015-09-15 | quick fix for comparisons with constants | Quentin Carbonneaux | |