Age | Commit message (Collapse) | Author | |
---|---|---|---|
2017-02-23 | propagate aliasing information through copies | Quentin Carbonneaux | |
2017-02-22 | do not err on address comparisons | Quentin Carbonneaux | |
While I was at it I also refreshed some bits in the instruction selection. | |||
2017-02-22 | turn the instruction index into a list | Quentin Carbonneaux | |
2017-02-17 | stricter class constraints for store & vastart | Quentin Carbonneaux | |
2017-02-15 | comment fix | Quentin Carbonneaux | |
2017-02-15 | add support for closure calls | Quentin Carbonneaux | |
Compiling languages with closures often requires passing an extra environment parameter to the called function. One solution is to use a convention, and reserve, say, the first argument for that purpose. However, that makes binding to C a little less smooth. Alternatively, QBE now provides a way to remain fully ABI compatible with C by having a "hidden" environment argument (marked with the keyword 'env'). Calling a function expecting an environment from C will make the contents of the environment undefined, but the normal arguments will be passed without alteration. Conversely, calling a C function like it is a closure by passing it an environemnt will work smoothly. | |||
2017-02-14 | minor cleanup in all.h | Quentin Carbonneaux | |
2017-02-10 | update minic for new vararg support | Quentin Carbonneaux | |
We conservatively assume all functions have variable argument lists. | |||
2017-02-10 | tests for variable argument lists | Quentin Carbonneaux | |
2017-02-10 | support variable argument lists | Quentin Carbonneaux | |
This change is backward compatible, calls to "variadic" functions (like printf) must now be annotated (with ...). | |||
2017-02-08 | make rsp and rbp globally live | Quentin Carbonneaux | |
2017-02-07 | update assert() missed in 7e1c1f | Quentin Carbonneaux | |
2017-02-06 | fix edge deletion bug in sccp | Quentin Carbonneaux | |
When an edge is deleted, the phis and predecessors of the destination block have to be updated. This is what blkdel() was doing, but at a level too coarse. The new function edgedel() allows to remove a single edge (and takes care of multiple edges). | |||
2017-02-06 | robustness fix in fillfron() | Quentin Carbonneaux | |
This makes it possible to call it several times in a row. | |||
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); |