Age | Commit message (Collapse) | Author | |
---|---|---|---|
2017-02-06 | use uint for block ids | Quentin Carbonneaux | |
2017-02-03 | create an index for the instructions in the IL doc | Quentin Rameau | |
2017-02-01 | fix the same bug in varget() | Quentin Carbonneaux | |
2017-02-01 | fix bug in varadd(), thanks Ed Davis | Quentin Carbonneaux | |
2017-01-20 | create an instruction index for the IL doc | Quentin Rameau | |
2017-01-20 | change 'b' and 'h' ordering in IL doc | Quentin Rameau | |
2017-01-12 | use a less obtuse api for vnew() | Quentin Carbonneaux | |
2017-01-10 | isel fixes for lame apple assembler | Quentin Carbonneaux | |
2017-01-07 | remove styling from generated html | Quentin Carbonneaux | |
2017-01-06 | prepare for new c9x infrastructure | Quentin Carbonneaux | |
2017-01-04 | attempt to fix cc flags in tests | Quentin Carbonneaux | |
2017-01-04 | improve performance of bsiter() | Quentin Carbonneaux | |
2017-01-04 | more performance improvements in the parser | Quentin Carbonneaux | |
2016-12-31 | use a perfect hash for lexing | Quentin Carbonneaux | |
2016-12-31 | minor bugs in lexh tool | Quentin Carbonneaux | |
2016-12-30 | new tool to improve lexing speed | Quentin Carbonneaux | |
2016-12-29 | remove debugging stub | Quentin Carbonneaux | |
2016-12-29 | do not create useless mem refs | Quentin Carbonneaux | |
2016-12-29 | simplify seladdr() | Quentin Carbonneaux | |
This also provides a violent fix to a bug causing an invalid addressing to be generated when indexing into a global variable. The fix is not satisfactory, though, as bad code is generated (instead of invalid code before). | |||
2016-12-28 | fix escapes handling (patch from ac) | Quentin Carbonneaux | |
2016-12-28 | loosen assertion in load elimination | Quentin Carbonneaux | |
The assertion was invalid, I was assuming il->blk was b when writing it. The new assertion should be right: If the loop level were to decrease we would get out of a cycle in cfg, this should not be possible unless we go through a block with more than 1 predecessor. | |||
2016-12-21 | schedule loop nesting computations earlier | Quentin Carbonneaux | |
2016-12-21 | fix wrong assertion in load elimination | Quentin Carbonneaux | |
The assertion fails incorrectly on a block right after the end of a loop. | |||
2016-12-12 | use the new load optimization | Quentin Carbonneaux | |
2016-12-12 | new tests for the load optimization | Quentin Carbonneaux | |
2016-12-12 | implement a simple load elimination pass | Quentin Carbonneaux | |
2016-12-12 | implement a simple alias analysis | Quentin Carbonneaux | |
2016-12-12 | create cfg.c for cfg-related functions | Quentin Carbonneaux | |
2016-12-12 | make newtmp() return zeroed out temporaries | Quentin Carbonneaux | |
This was not necessary as temporaries were never freed and returned from an array zero initialized. But in the coming load optimization, we sometimes free temporaries by resetting fn->ntmp. | |||
2016-12-12 | new eight queens test | Quentin Carbonneaux | |
2016-12-08 | use a queue for copy elimination | Quentin Carbonneaux | |
2016-12-05 | move some liveness code where it belongs | Quentin Carbonneaux | |
2016-12-05 | disable pie (default on some os) | Quentin Carbonneaux | |
2016-11-09 | doc nits | Quentin Carbonneaux | |
2016-10-24 | return non-zero when tests fail | 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-10-22 | fix bug in copy propagation | Quentin Carbonneaux | |
The pass was not doing anything incorrect, but it missed some opportunities to optimize. On a copy heavy example I observed that, in the output of the pass a phi of the following shape remained: %a =w phi @A %c, @B %a Originally the phi for %a was: %a =w phi @A %b, @B %a Since %b was discovered a copy of %c, %a should have been eliminated and replaced with %c. I think the problem is that knowledge on the first argument of the phi %a changes as the algorithm progresses, a more detailed walk- through follows. In the first round of the algoritm, %a is discovered to be a copy of its first argument %b. phi(%b, %a) -> %b In the second round, %a is computed as the phi of %c (since the first argument changed) and %b (the result of the first iteration), in our lattice, the glb of those two is bottom. phi(%c, %b) -> %a (Bottom) Finally, there is a third round in which we compute %a as the phi of %a and %c, which again, gives bottom. phi(%c, %a) -> %a (Bottom) The bug is not tied to a phi of a copy, for example, if the first argument is speculated to be a copy of 0 and then, this knowledge is retracted; we will compute in sequence: phi(0, %a) -> 0 phi(%b, 0) -> %a (Bottom) phi(%b, %a) -> %a (Bottom) The way I fixed this is by ignoring arguments of the phi that were discovered to be copies of the phi node itself. This will make the last rounds above do the correct thing. | |||
2016-10-19 | improve tests output for contbuild | Quentin Carbonneaux | |
2016-10-19 | add magic for mobile viewing of doc | Quentin Carbonneaux | |
2016-09-27 | accept "ret" for functions with a return type | Quentin Carbonneaux | |
This happens to be needed for C. The standard mandates that a return value is used if the caller uses it. Surprisingly, if the return "value" is not used, the callee can use "return;". A better solution is to add an "undef" value and return it, "undef" would also have other use cases for compiling C. | |||
2016-08-17 | silent a few warnings | Quentin Carbonneaux | |
2016-08-16 | update help message of unit tester | Quentin Carbonneaux | |
2016-08-16 | add support for unions in sysv abi | Quentin Carbonneaux | |
2016-08-16 | parse union types | Quentin Carbonneaux | |
2016-08-15 | specify the allocation function in vnew | Quentin Carbonneaux | |
2016-08-14 | couple of case fixes in tokens | Quentin Carbonneaux | |
2016-08-14 | use an enum for aggregate segments | Quentin Carbonneaux | |
2016-08-14 | get rid of old Alt enum | Quentin Carbonneaux | |
2016-04-25 | fix type size computations in parser | Quentin Carbonneaux | |
The type sizes are important to get right because the ABI relies on them when it emits memory blits to pass/return structs. | |||
2016-04-23 | correctly update nuse for jump arguments | Quentin Carbonneaux | |