summary refs log tree commit diff
AgeCommit message (Collapse)Author
2016-04-13turn alignment asserts into err()Quentin Carbonneaux
2016-04-13handle odd jumps in blkdel() an renblk()Quentin Carbonneaux
2016-04-13do not compute def-use links for regsQuentin Carbonneaux
2016-04-13hack an ssa validator (likely buggy)Quentin Carbonneaux
2016-04-13add unsigned comparisons to emitQuentin Carbonneaux
2016-04-13handle the bad jump caseQuentin Carbonneaux
2016-04-13add new minic testQuentin Carbonneaux
2016-04-13separate name and index in newtmp()Quentin Carbonneaux
2016-04-13harden memopt()Quentin Carbonneaux
2016-04-12bug in checking of multiple definitionsQuentin Carbonneaux
2016-04-12subtle 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-12add missing idiv in opdesc[]Quentin Carbonneaux
2016-04-12cosmetic modification in foldQuentin Carbonneaux
2016-04-12simplify latmerge()Quentin Carbonneaux
2016-04-12nicer agony message in iselQuentin Carbonneaux
2016-04-12the lattice merge has to be used in update()Quentin Carbonneaux
2016-04-12fix wrong isext() macroQuentin Carbonneaux
2016-04-12oops, dumb bug in foldingQuentin Carbonneaux
2016-04-12use a shift to divide by 2 in collatzQuentin Carbonneaux
2016-04-12more extensive handling of fast localsQuentin Carbonneaux
2016-04-12avoid a few hangs in parsing codeQuentin Carbonneaux
2016-04-12check invalid instruction typesQuentin Carbonneaux
2016-04-12both comparison arguments need to be fixedQuentin 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-12frendlier error message in emitQuentin Carbonneaux
2016-04-12add simple il validationQuentin Carbonneaux
2016-04-12fix typo in emitQuentin Carbonneaux
2016-04-12handle dumb conditional jumps in iselQuentin Carbonneaux
I also removed the code to handle jumps with a constant argument since those should be eliminated by the folding pass.
2016-04-12fix bug in predecessors filling codeQuentin Carbonneaux
2016-04-12fix type bug in abi3 testQuentin Carbonneaux
2016-04-12simplify fillpreds() codeQuentin Carbonneaux
2016-04-12diagnose some undefined usesQuentin Carbonneaux
2016-04-12oops, wrong test in abi classify()Quentin Carbonneaux
2016-04-11improve help message slightlyQuentin Carbonneaux
2016-04-09this can be falseQuentin 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-09cosmetic fixes in llvm comparisonQuentin Carbonneaux
2016-04-09rebuild rpo after foldQuentin Carbonneaux
2016-04-09did I loose my c?Quentin Carbonneaux
2016-04-09enable constant foldingQuentin Carbonneaux
2016-04-09fix wrong assertion in foldQuentin Carbonneaux
2016-04-09oops, forgot to patch phi argumentsQuentin Carbonneaux
2016-04-09more debug tweaks in foldQuentin Carbonneaux
2016-04-09add a proper block deletion routineQuentin Carbonneaux
2016-04-09nicer debug infoQuentin Carbonneaux
2016-04-09quickly hack fold rewritingQuentin Carbonneaux
2016-04-08avoid gcc warning in emitQuentin Carbonneaux
2016-04-08simplify a buggy testQuentin 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-08prevent gcc warning in regaQuentin Carbonneaux
2016-04-08fix loop header detection bug in spillQuentin Carbonneaux
2016-04-08use union for punning in emitQuentin Carbonneaux
2016-04-07use cast in czero()Quentin Carbonneaux