Age | Commit message (Collapse) | Author | |
---|---|---|---|
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 | deduplicate loadsz & storesz | 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 | 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-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 | use uint for block ids | Quentin Carbonneaux | |
2017-01-12 | use a less obtuse api for vnew() | Quentin Carbonneaux | |
2016-12-21 | schedule loop nesting computations earlier | 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-08-17 | silent a few warnings | 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 | 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-22 | use short for classes (so it is signed for sure) | Quentin Carbonneaux | |
2016-04-22 | refine fp conversion instructions | Quentin Carbonneaux | |
2016-04-21 | cosmetics in all.h | Quentin Carbonneaux | |
2016-04-20 | match jumps/ops with il text | Quentin Carbonneaux | |
2016-04-18 | factor some subtyping logic in clsmerge() | Quentin Carbonneaux | |
2016-04-16 | use unsigned long long for bits | Quentin Carbonneaux | |
2016-04-13 | hack an ssa validator (likely buggy) | Quentin Carbonneaux | |
2016-04-12 | fix wrong isext() macro | Quentin Carbonneaux | |
2016-04-09 | enable constant folding | Quentin Carbonneaux | |
2016-04-09 | add a proper block deletion routine | Quentin Carbonneaux | |
2016-04-07 | add a canfold field to opdesc | Quentin Carbonneaux | |
2016-04-04 | fat il! | Quentin Carbonneaux | |
2016-04-04 | reorder instructions | Quentin Carbonneaux | |
2016-04-01 | tradeoff the type of bsiter() | Quentin Carbonneaux | |
int is used all over the place for temporaries, maybe this should be changed, I don't know. Another thing to consider is that temporaries are currently on 12 bits (and will be on 29 or 30 bits in the future), so int will always be safe to store them. We just loose the free invariant of non-negativity. | |||
2016-03-31 | move abi code in a new file | Quentin Carbonneaux | |
2016-03-31 | cleanup error handling | Quentin Carbonneaux | |
2016-03-29 | new layout, put LICENSE in root | Quentin Carbonneaux | |