aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* get rid of imap (was only used for mem2reg, no longer) lemon2026-03-242-111/+0
|
* mem2reg rewrite lemon2026-03-242-108/+74
| | | | | | | Do it in 2 passes: 1. gather variables, 2. step thru RPO transforming loads/stores to each variable. More elegant solution to f9e3a52eaa. More efficient since all variable usages are visited in CFG order, which matters due to block sealing.
* 0.2.3 lemon2026-03-231-2/+2
|
* IR: emit inline function standalone bodies lazily lemon2026-03-2310-41/+139
| | | | | | | If a function is stashed for inlining and inlined in all of its callsites or unused, it never ends up in the object file. If any symbol reference to it is emitted, then it must be de-inlined (rematerialized), and this is done near the end before emitting the actual object file.
* IR: mark free'd instructions as such lemon2026-03-238-44/+54
| | | | | That way they are not copied when inlining. Also rename ninstr -> ninstrtab. opnarg -> opnoper
* <iso646.h>, test for libc headers lemon2026-03-232-4/+14
|
* rega/devirt: don't assume unused operands are zeroinitialized lemon2026-03-231-1/+1
|
* c: recognize __alignof__ and __alignas__ lemon2026-03-231-2/+2
|
* c: __attribute__ after declarator lemon2026-03-231-0/+1
|
* io: use FILE* for buf fp impl lemon2026-03-232-8/+10
|
* c: __attribute__ in more places lemon2026-03-231-0/+2
|
* c: remove inline 'backing' type tag for enums lemon2026-03-233-9/+4
| | | | | | | | | | It was meant as a micro-optimization but actually keeping it in sync was annoying. This for example was broken: ``` extern enum foo { ... } g_foo; enum foo g_foo; ```
* style: change uvlong -> u64int, vlong -> s64int lemon2026-03-2222-125/+125
| | | | | Is much nicer. I don't know whether I want to do it for the other int types too. char and uchar are fine as bytes. u/short -> u/s16int, maybe.
* aarch64: rem/urem, bswap*, arg bugfix lemon2026-03-224-11/+66
|
* eval: fix errata in EGETF addr case lemon2026-03-221-1/+1
| | | | | | | The symref given by staticaddrof is in ex2, not sub. This worked by chance (with sub->ssym.off happening to be zero) on linux, but on OpenBSD it would give garbage. Which would result in messed up relocations later leading to miscompilations.
* mem2reg: improve on f9e3a52eaa lemon2026-03-221-2/+18
| | | | | Move the alloca to the beginning of the block and do a 2nd pass on those odd cases.
* mem2reg: fix rare edge case with weird control flow lemon2026-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 Instr lemon2026-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.2 lemon2026-03-211-2/+2
|
* Tweak configure & driver, fallback to cc lemon2026-03-211-7/+13
|
* fix again for openbsd lemon2026-03-201-1/+1
|
* c: fix crash with dead code in condexpr lemon2026-03-201-1/+2
|
* driver: only depend on ld for linking (todo) lemon2026-03-203-24/+62
|
* c: better preserve source location in some cases lemon2026-03-202-2/+8
|
* io: make -w suppress notes too lemon2026-03-205-16/+17
|
* c: fix isboollike() for phis lemon2026-03-191-2/+3
|
* 0.2.1 lemon2026-03-191-2/+2
|
* c: fix qualifiers for array declarators lemon2026-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 .text lemon2026-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 openBSD lemon2026-03-194-10/+34
|
* regalloc & emit: explicit comparisons over memcmp of small structures lemon2026-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 predefs lemon2026-03-191-1/+1
|
* c: remove unused initialization of decl.align lemon2026-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 initializers lemon2026-03-182-9/+12
|
* regalloc: use in-place mergesort for intervals lemon2026-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.0 lemon2026-03-181-3/+3
| | | | Changed directory/source files structure warrants minor version update.
* Use #pragma once lemon2026-03-188-17/+12
|
* c.h: accidentally removed a const lemon2026-03-181-1/+1
|
* Refactor: use typedefs and CamelCase for aggregate types lemon2026-03-1842-2066/+2092
| | | | Looks nicer
* Refactor: antcc.h move things around lemon2026-03-171-10/+10
|
* Refactor: move some utils from antcc.h to their own headers lemon2026-03-1712-117/+136
|
* REFACTOR: finish renaming lemon2026-03-1731-116/+121
|
* REFACTOR: move sources to src/ lemon2026-03-1746-0/+21998