Age | Commit message (Collapse) | Author | |
---|---|---|---|
2016-04-13 | add new minic test | Quentin Carbonneaux | |
2016-04-13 | separate name and index in newtmp() | Quentin Carbonneaux | |
2016-04-13 | harden memopt() | Quentin Carbonneaux | |
2016-04-12 | bug in checking of multiple definitions | Quentin Carbonneaux | |
2016-04-12 | subtle bug in liveness! | Quentin Carbonneaux | |
If on of the phis in a block A uses the result of another one when coming from B, we have to be careful! | |||
2016-04-12 | add missing idiv in opdesc[] | Quentin Carbonneaux | |
2016-04-12 | cosmetic modification in fold | Quentin Carbonneaux | |
2016-04-12 | simplify latmerge() | Quentin Carbonneaux | |
2016-04-12 | nicer agony message in isel | Quentin Carbonneaux | |
2016-04-12 | the lattice merge has to be used in update() | Quentin Carbonneaux | |
2016-04-12 | fix wrong isext() macro | Quentin Carbonneaux | |
2016-04-12 | oops, dumb bug in folding | Quentin Carbonneaux | |
2016-04-12 | use a shift to divide by 2 in collatz | Quentin Carbonneaux | |
2016-04-12 | more extensive handling of fast locals | Quentin Carbonneaux | |
2016-04-12 | avoid a few hangs in parsing code | Quentin Carbonneaux | |
2016-04-12 | check invalid instruction types | Quentin Carbonneaux | |
2016-04-12 | both comparison arguments need to be fixed | Quentin Carbonneaux | |
The second argument will not be a constant because of the assertion. But it could be a fast local, and this situation needs to be handled by the last case of fixarg(). | |||
2016-04-12 | frendlier error message in emit | Quentin Carbonneaux | |
2016-04-12 | add simple il validation | Quentin Carbonneaux | |
2016-04-12 | fix typo in emit | Quentin Carbonneaux | |
2016-04-12 | handle dumb conditional jumps in isel | Quentin Carbonneaux | |
I also removed the code to handle jumps with a constant argument since those should be eliminated by the folding pass. | |||
2016-04-12 | fix bug in predecessors filling code | Quentin Carbonneaux | |
2016-04-12 | fix type bug in abi3 test | Quentin Carbonneaux | |
2016-04-12 | simplify fillpreds() code | Quentin Carbonneaux | |
2016-04-12 | diagnose some undefined uses | Quentin Carbonneaux | |
2016-04-12 | oops, wrong test in abi classify() | Quentin Carbonneaux | |
2016-04-11 | improve help message slightly | Quentin Carbonneaux | |
2016-04-09 | this can be false | Quentin Carbonneaux | |
I think I should check for Top when rewriting. Because for sure, we don't want to replace some temporary by Top, first, I can't represent it, and second, it'd mean that it is a temporary used undefined. The example that triggered the assertion was like that: @b0 jnz 1, @b1, @b3 @b1 %x =w phi @b0 10, @b2 %x1 jnz %x, @b2, @b3 @b2 %x1 =w sub %x, 1 jmp @b1 @b3 %x2 =w phi @b1 %x, @b0 42 So SCCP optimistically assumes %x is 10 when it goes through @b1, then at the branch, @b1->@b3 is left for dead. After that, @b2 is processed and the flow worklist is empty. Now uses are processed, %x2 will get processed regardless if its block is dead or not (it is at that time), then all the back-edges are dead so the phi is set to the lattice merge of tops only. BOOM! This leads to the question, should phis of dead blocks be processed? I'll check that later. | |||
2016-04-09 | cosmetic fixes in llvm comparison | Quentin Carbonneaux | |
2016-04-09 | rebuild rpo after fold | Quentin Carbonneaux | |
2016-04-09 | did I loose my c? | Quentin Carbonneaux | |
2016-04-09 | enable constant folding | Quentin Carbonneaux | |
2016-04-09 | fix wrong assertion in fold | Quentin Carbonneaux | |
2016-04-09 | oops, forgot to patch phi arguments | Quentin Carbonneaux | |
2016-04-09 | more debug tweaks in fold | Quentin Carbonneaux | |
2016-04-09 | add a proper block deletion routine | Quentin Carbonneaux | |
2016-04-09 | nicer debug info | Quentin Carbonneaux | |
2016-04-09 | quickly hack fold rewriting | Quentin Carbonneaux | |
2016-04-08 | avoid gcc warning in emit | Quentin Carbonneaux | |
2016-04-08 | simplify a buggy test | Quentin Carbonneaux | |
I found it by compiling -O2 and seeing the ABI code fail. Further investigation revealed GCC trimmed away the last iteration of the loop because I was accessing the third element of an array of size two. This is undefined behavior, so GCC "proved" that the last iteration was never run. | |||
2016-04-08 | prevent gcc warning in rega | Quentin Carbonneaux | |
2016-04-08 | fix loop header detection bug in spill | Quentin Carbonneaux | |
2016-04-08 | use union for punning in emit | Quentin Carbonneaux | |
2016-04-07 | use cast in czero() | Quentin Carbonneaux | |
2016-04-07 | inline latmerge() (cross fingers) | Quentin Carbonneaux | |
2016-04-07 | adjustments in sccp | Quentin Carbonneaux | |
2016-04-07 | add a canfold field to opdesc | Quentin Carbonneaux | |
2016-04-07 | add boring folding code | Quentin Carbonneaux | |
2016-04-06 | start work on constant propagation | Quentin Carbonneaux | |
2016-04-05 | default to gnu gas format | Quentin Carbonneaux | |