Age | Commit message (Collapse) | Author | |
---|---|---|---|
2017-04-08 | fix bug in union size computation | Quentin Carbonneaux | |
The size of a union is the size of the largest element aligned with the largest alignment. For example, the size of the following union is 16, not 13 (as returned before this patch). union { char c[13]; int i; }; | |||
2017-03-29 | improve global registers handling | Quentin Carbonneaux | |
The register allocation now has stricter assertions about global registers. The stricter assertions required changes in the spiller: We now correctly indicate to the register allocator what registers are used by "ret" instructions. | |||
2017-03-03 | add another idiomatic C test (rega does no good) | Quentin Carbonneaux | |
2017-02-27 | make install/uninstall phonies | Quentin Carbonneaux | |
2017-02-27 | add install and uninstall targets to Makefile | Quentin Rameau | |
2017-02-27 | remove unused parameter from uffind() | Quentin Carbonneaux | |
2017-02-27 | minor tweaks to simpljmp pass | Quentin Carbonneaux | |
2017-02-27 | fix int parsing | Quentin Carbonneaux | |
The spec says that numbers can be arbitrarily big, and only the last 64 bits will be taken into consideration. Calling sscanf does not implement this, so I wrote an ad-hoc function. | |||
2017-02-27 | scrub assembly output | Quentin Carbonneaux | |
Notably, this adds a new pass to get rid of jumps on jumps. | |||
2017-02-27 | update license years | Quentin Carbonneaux | |
2017-02-27 | cosmetic fixes | Quentin Carbonneaux | |
2017-02-25 | do sign/zero extensions removal in copy.c | Quentin Carbonneaux | |
2017-02-24 | cosmetic modifications to emit.c | Quentin Carbonneaux | |
2017-02-24 | start a new simplification pass | Quentin Carbonneaux | |
2017-02-24 | fix pretty bad bug in alias analysis | Quentin Carbonneaux | |
When a temporary marked local is escaping, the whole slot must be marked as such. To solve this, Alias now holds a pointer to the alias information of the slot. For simplicity of the code, this pointer is always valid and fetching ->type out of it is meaningful. | |||
2017-02-24 | wrong assumption killsl() | Quentin Carbonneaux | |
2017-02-24 | improve the range of action of load elimination | Quentin Carbonneaux | |
When eliminating `load %foo`, don't limit the search to the live range of %foo, but to the live range of its aliasing information. For example, if %foo is a constant offset into a stack-allocated slot, %foo =l add %slot, 42 the search will proceed on all the code in which %slot is live, not only below the definition of %foo, like before. | |||
2017-02-24 | deduplicate loadsz & storesz | Quentin Carbonneaux | |
2017-02-24 | reenable and fix a bug in memopt | Quentin Carbonneaux | |
While a minimal dead store elimination is not implemented, the generated code looks quite a bit better with them enabled. It also is quite cheap. | |||
2017-02-24 | update isel comment | Quentin Carbonneaux | |
2017-02-23 | add simple idiomatic c test | Quentin Carbonneaux | |
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 | |