Age | Commit message (Collapse) | Author | |
---|---|---|---|
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 | |
2016-04-05 | use bsiter() for better performance | Quentin Carbonneaux | |
2016-04-05 | speedup bscount() | Quentin Carbonneaux | |
2016-04-05 | yay, support freebsd | Quentin Carbonneaux | |
2016-04-04 | fat il! | Quentin Carbonneaux | |
2016-04-04 | reorder instructions | Quentin Carbonneaux | |
2016-04-04 | cosmetics in sysv abi | Quentin Carbonneaux | |
A struct of size 0 is now marked as passed in memory. All the ABI code assumes structs passed in registers have size at least 8. This could have an impact on the alignment in the stack, but eh, I guess they are rare. | |||
2016-04-04 | remove old selpar() code | Quentin Carbonneaux | |
2016-04-03 | fix alignment code in selpar() | Quentin Carbonneaux | |
2016-04-03 | rewrite of selpar() for factoring | Quentin Carbonneaux | |
2016-04-01 | typo in readme | Quentin Carbonneaux | |
2016-04-01 | don't try to keep use counts in abi() | Quentin Carbonneaux | |
Abi lowering does not need use counts, but they are needed for instruction selection. I changed main to call filluse() between these two passes. | |||
2016-04-01 | cheap massive performance gain on brainfuck | Quentin Carbonneaux | |
2016-04-01 | tradeoff the type of bsiter() | Quentin Carbonneaux | |
int is used all over the place for temporaries, maybe this should be changed, I don't know. Another thing to consider is that temporaries are currently on 12 bits (and will be on 29 or 30 bits in the future), so int will always be safe to store them. We just loose the free invariant of non-negativity. | |||
2016-04-01 | use bsiter in critical loop | Quentin Carbonneaux | |
2016-04-01 | add huge mandelbrot brainfuck example | Quentin Carbonneaux | |