Age | Commit message (Collapse) | Author | |
---|---|---|---|
2016-02-27 | simplify a little more limit2() | Quentin Carbonneaux | |
2016-02-27 | leave only the most important free todos | Quentin Carbonneaux | |
2016-02-27 | use a new bits type for bitmaps | Quentin Carbonneaux | |
2016-02-26 | make the comment greppable | Quentin Carbonneaux | |
2016-02-26 | get rid of Bits | Quentin Carbonneaux | |
2016-02-26 | bug in liveout() | Quentin Carbonneaux | |
Because of the bsclr() call, liveout was not actually making the union correctly. Instead of performing an union, it now fully sets the bitset passed as parameter. | |||
2016-02-26 | use bitset in spill.c | Quentin Carbonneaux | |
2016-02-22 | cosmetics | Quentin Carbonneaux | |
2016-02-21 | do not spill dead phis | Quentin Carbonneaux | |
Regalloc will be able to handle these spurious phis, however, some other spurious dead instructions can be emitted. It would be better to get rid of them upfront; maybe by modifying isel, or by inserting a proper dce pass. An example of that undesirable behavior is exposed below. @l1 %foo =w ... @l2 %dead =w phi @l1 %foo, ... | |||
2016-02-18 | stop using OXxx1 and use new OLoad | Quentin Carbonneaux | |
2016-02-04 | iterate correctly on blocks in spiller... | Quentin Carbonneaux | |
2016-02-04 | fix hinting bug in spiller | Quentin Carbonneaux | |
We have to first free the output register of an instruction before setting the interference hints for inregs temporaries. | |||
2016-02-04 | fix spill bug on return nodes | Quentin Carbonneaux | |
When a node has no successor, its inregs out was initialized with garbage. | |||
2016-01-28 | cosmetics | Quentin Carbonneaux | |
2016-01-28 | fix non-updated limit() call in spiller | Quentin Carbonneaux | |
2016-01-22 | fix wrong assumption in spill.c | Quentin Carbonneaux | |
2016-01-04 | fix dopm() in spill | Quentin Carbonneaux | |
2016-01-03 | change design in spill.c | Quentin Carbonneaux | |
2015-12-27 | more work on spill, not elegant | Quentin Carbonneaux | |
2015-12-25 | wip fp lifting in spill.c, pheeew | Quentin Carbonneaux | |
2015-12-23 | missing case in tmpuse() of spiller | Quentin Carbonneaux | |
2015-11-25 | add note about comparisons in spill | Quentin Carbonneaux | |
2015-11-20 | fix spill bug in dopm() | Quentin Carbonneaux | |
2015-11-13 | this is a buggy shortcut! | Quentin Carbonneaux | |
2015-11-09 | provide BZERO macro for bitsets | Quentin Carbonneaux | |
2015-11-03 | add interference hints | Quentin Carbonneaux | |
2015-10-30 | fix two bugs in spiller | Quentin Carbonneaux | |
1. In limit(), there can be machine registers that are live, thus we need to iterate from 0 (not Tmp0) to ntmp in the for loop building the array. 2. When an instruction can have a memory argument, we must not reload arguments that got spilled and were not live. Instead, the must be replaced by SLOT() arguments. | |||
2015-10-30 | port spill.c to work with RAMem | Quentin Carbonneaux | |
2015-10-30 | rename spill field in Tmp to slot | Quentin Carbonneaux | |
2015-10-08 | rename ealloc to emalloc | Quentin Carbonneaux | |
2015-10-06 | add pool memory management | Quentin Carbonneaux | |
2015-10-06 | specialize vdup into idup | Quentin Carbonneaux | |
2015-10-05 | factor vector duplication in vdup() | Quentin Carbonneaux | |
2015-10-05 | factor some utility functions/data in util.c | Quentin Carbonneaux | |
2015-10-05 | clean the command line interface | Quentin Carbonneaux | |
2015-09-29 | wip on new stack slots (emit, spill) | Quentin Carbonneaux | |
2015-09-26 | move the liveon() function in live.c | Quentin Carbonneaux | |
2015-09-15 | simplify call handling in spiller | 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 | add a size to all operations (wip) | Quentin Carbonneaux | |
2015-09-15 | make spiller aware of parallel assignments | 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 | remove obsolete comment | Quentin Carbonneaux | |
2015-09-15 | forgot about phi nodes in the spiller | Quentin Carbonneaux | |
When we are dealing with a block that is not a loop, we must make sure to consider phi arguments of successors as live variables. Ideally we could move the code to find all live-ins (including phi arguments) to the live module. | |||
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 | split store into store{w,l} | 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 | forbid two memory operands for comparisons | Quentin Carbonneaux | |