Age | Commit message (Collapse) | Author | |
---|---|---|---|
2017-01-12 | use a less obtuse api for vnew() | Quentin Carbonneaux | |
2016-10-24 | fix bug in folding of w comparisons | Quentin Carbonneaux | |
The casting to uint32_t made the code for comparing two signed words invalid. Interestingly, this can be fixed by casting to int32_t instead. Because sign extension is monotonic, all the unsigned comparisons remain valid. CVC4 can even check that for us: x, y : BITVECTOR(32); QUERY BVLT(SX(x, 64), SX(y, 64)) <=> BVLT(x, y); QUERY BVLE(SX(x, 64), SX(y, 64)) <=> BVLE(x, y); QUERY BVGT(SX(x, 64), SX(y, 64)) <=> BVGT(x, y); QUERY BVGE(SX(x, 64), SX(y, 64)) <=> BVGE(x, y); | |||
2016-08-15 | specify the allocation function in vnew | Quentin Carbonneaux | |
2016-04-22 | refine fp conversion instructions | Quentin Carbonneaux | |
2016-04-20 | match jumps/ops with il text | Quentin Carbonneaux | |
2016-04-19 | use assert for ssa invariants in fold/copy | Quentin Carbonneaux | |
2016-04-19 | rename only live phi arguments in fold | Quentin Carbonneaux | |
AFL found that. | |||
2016-04-17 | compute dead phi args correctly in fold | Quentin Carbonneaux | |
The code computing if "the" edge of a phi argument is live or dead was wrong. AFL found that. | |||
2016-04-12 | cosmetic modification in fold | Quentin Carbonneaux | |
2016-04-12 | simplify latmerge() | Quentin Carbonneaux | |
2016-04-12 | the lattice merge has to be used in update() | Quentin Carbonneaux | |
2016-04-12 | oops, dumb bug in folding | Quentin Carbonneaux | |
2016-04-12 | diagnose some undefined uses | 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 | 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-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 boring folding code | Quentin Carbonneaux | |
2016-04-06 | start work on constant propagation | Quentin Carbonneaux | |