aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* mem2reg: fix rare edge case with weird control flowlemon2026-03-221-0/+6
| | | | | | | | | mem2reg was assuming alloca's appeared before all their uses. When this didn't happen it broke the logic re. sealed blocks. Normally this doesn't happen in most natural code. Even with gotos, RPO would assure this in most cases, the exception I found is a goto that jumps into a loop past a variable declaration that is earlier in the loop. Then even RPO would keep the alloca itself past the first uses, breaking things.
* IR: add 3rd operand to Instrlemon2026-03-2219-167/+171
| | | | | The motivation is for aarch64 msub/madd instrs, for isel to produce. But it should be useful for other things too.
* Rework handling of predefined macros.lemon2026-03-2110-92/+227
| | | | And add some GCC predefs like __SIZE_TYPE__, __LONG_SIZE__, etc
* 0.2.2lemon2026-03-211-2/+2
|
* Tweak configure & driver, fallback to cclemon2026-03-211-7/+13
|
* fix again for openbsdlemon2026-03-201-1/+1
|
* c: fix crash with dead code in condexprlemon2026-03-201-1/+2
|
* driver: only depend on ld for linking (todo)lemon2026-03-203-24/+62
|
* c: better preserve source location in some caseslemon2026-03-202-2/+8
|
* io: make -w suppress notes toolemon2026-03-205-16/+17
|
* c: fix isboollike() for phislemon2026-03-191-2/+3
|
* 0.2.1lemon2026-03-191-2/+2
|
* c: fix qualifiers for array declaratorslemon2026-03-191-7/+10
| | | | | | `const int x[]` was being treated as `const int x[const]`, which is wrong, and matters when `x` is a function parameter that really decays to a pointer (`int const *const x`)
* ir: do not always try to put small literals in .textlemon2026-03-192-4/+13
| | | | | OpenBSD enforces read xor execute (XOM) even in x86-64. Not aware of any other platforms that do this.
* preeliminary support for openBSDlemon2026-03-194-10/+34
|
* regalloc & emit: explicit comparisons over memcmp of small structureslemon2026-03-192-3/+19
| | | | | The one in x86-64_emit was not portable due to relying on zero initialization of inactive union fields/padding.
* cpp: fix nullptr deref for unknown target predefslemon2026-03-191-1/+1
|
* c: remove unused initialization of decl.alignlemon2026-03-191-3/+3
| | | | | The intent is for _Alignas declarations but those aren't implemented yet. And initializing that field in declarator() can mess with .sym.
* c: fix edge cases with zero sized bitfields and static initializerslemon2026-03-182-9/+12
|
* regalloc: use in-place mergesort for intervalslemon2026-03-181-60/+60
| | | | | | Instead of constructing an array and doing quicksort. i love .02% speedup microoptimizations
* cpp: do not warn for "#define X(){}" with no space after the )lemon2026-03-181-1/+1
|
* 0.2.0lemon2026-03-181-3/+3
| | | | Changed directory/source files structure warrants minor version update.
* Use #pragma oncelemon2026-03-188-17/+12
|
* c.h: accidentally removed a constlemon2026-03-181-1/+1
|
* Refactor: use typedefs and CamelCase for aggregate typeslemon2026-03-1842-2066/+2092
| | | | Looks nicer
* Refactor: antcc.h move things aroundlemon2026-03-171-10/+10
|
* Refactor: move some utils from antcc.h to their own headerslemon2026-03-1712-117/+136
|
* REFACTOR: finish renaminglemon2026-03-1731-116/+121
|
* REFACTOR: move sources to src/lemon2026-03-1746-0/+21998