summary refs log tree commit diff
AgeCommit message (Collapse)Author
2017-02-23add simple idiomatic c testQuentin Carbonneaux
2017-02-23propagate aliasing information through copiesQuentin Carbonneaux
2017-02-22do not err on address comparisonsQuentin Carbonneaux
While I was at it I also refreshed some bits in the instruction selection.
2017-02-22turn the instruction index into a listQuentin Carbonneaux
2017-02-17stricter class constraints for store & vastartQuentin Carbonneaux
2017-02-15comment fixQuentin Carbonneaux
2017-02-15add support for closure callsQuentin 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-14minor cleanup in all.hQuentin Carbonneaux
2017-02-10update minic for new vararg supportQuentin Carbonneaux
We conservatively assume all functions have variable argument lists.
2017-02-10tests for variable argument listsQuentin Carbonneaux
2017-02-10support variable argument listsQuentin Carbonneaux
This change is backward compatible, calls to "variadic" functions (like printf) must now be annotated (with ...).
2017-02-08make rsp and rbp globally liveQuentin Carbonneaux
2017-02-07update assert() missed in 7e1c1fQuentin Carbonneaux
2017-02-06fix edge deletion bug in sccpQuentin 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-06robustness fix in fillfron()Quentin Carbonneaux
This makes it possible to call it several times in a row.
2017-02-06use uint for block idsQuentin Carbonneaux
2017-02-03create an index for the instructions in the IL docQuentin Rameau
2017-02-01fix the same bug in varget()Quentin Carbonneaux
2017-02-01fix bug in varadd(), thanks Ed DavisQuentin Carbonneaux
2017-01-20create an instruction index for the IL docQuentin Rameau
2017-01-20change 'b' and 'h' ordering in IL docQuentin Rameau
2017-01-12use a less obtuse api for vnew()Quentin Carbonneaux
2017-01-10isel fixes for lame apple assemblerQuentin Carbonneaux
2017-01-07remove styling from generated htmlQuentin Carbonneaux
2017-01-06prepare for new c9x infrastructureQuentin Carbonneaux
2017-01-04attempt to fix cc flags in testsQuentin Carbonneaux
2017-01-04improve performance of bsiter()Quentin Carbonneaux
2017-01-04more performance improvements in the parserQuentin Carbonneaux
2016-12-31use a perfect hash for lexingQuentin Carbonneaux
2016-12-31minor bugs in lexh toolQuentin Carbonneaux
2016-12-30new tool to improve lexing speedQuentin Carbonneaux
2016-12-29remove debugging stubQuentin Carbonneaux
2016-12-29do not create useless mem refsQuentin Carbonneaux
2016-12-29simplify 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-28fix escapes handling (patch from ac)Quentin Carbonneaux
2016-12-28loosen assertion in load eliminationQuentin 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-21schedule loop nesting computations earlierQuentin Carbonneaux
2016-12-21fix wrong assertion in load eliminationQuentin Carbonneaux
The assertion fails incorrectly on a block right after the end of a loop.
2016-12-12use the new load optimizationQuentin Carbonneaux
2016-12-12new tests for the load optimizationQuentin Carbonneaux
2016-12-12implement a simple load elimination passQuentin Carbonneaux
2016-12-12implement a simple alias analysisQuentin Carbonneaux
2016-12-12create cfg.c for cfg-related functionsQuentin Carbonneaux
2016-12-12make newtmp() return zeroed out temporariesQuentin 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-12new eight queens testQuentin Carbonneaux
2016-12-08use a queue for copy eliminationQuentin Carbonneaux
2016-12-05move some liveness code where it belongsQuentin Carbonneaux
2016-12-05disable pie (default on some os)Quentin Carbonneaux
2016-11-09doc nitsQuentin Carbonneaux
2016-10-24return non-zero when tests failQuentin Carbonneaux