summary refs log tree commit diff
AgeCommit message (Collapse)Author
2017-02-25do sign/zero extensions removal in copy.cQuentin Carbonneaux
2017-02-24cosmetic modifications to emit.cQuentin Carbonneaux
2017-02-24start a new simplification passQuentin Carbonneaux
2017-02-24fix pretty bad bug in alias analysisQuentin 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-24wrong assumption killsl()Quentin Carbonneaux
2017-02-24improve the range of action of load eliminationQuentin 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-24deduplicate loadsz & storeszQuentin Carbonneaux
2017-02-24reenable and fix a bug in memoptQuentin 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-24update isel commentQuentin Carbonneaux
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