| Commit message (Collapse) | Author | Age | Files | Lines | |
|---|---|---|---|---|---|
| * | ir: make address ref hash table resizable | 2026-02-28 | 1 | -14/+29 | |
| | | | | | Would hit the limit on very large functions (thanks csmith). | ||||
| * | fix various warnings | 2026-02-24 | 1 | -1/+1 | |
| | | |||||
| * | IR: just use an array for extended constants | 2026-02-19 | 1 | -24/+12 | |
| | | | | | | The extra work of using a hashtable to intern them is probably unnecessary. | ||||
| * | ir: basic inlining pass implementation | 2026-02-18 | 1 | -5/+16 | |
| | | |||||
| * | basic CSE | 2026-01-04 | 1 | -0/+3 | |
| | | |||||
| * | rega: fix spill copy of i32 -> i64 | 2026-01-04 | 1 | -1/+1 | |
| | | |||||
| * | backend: separate instrs for integer/float store | 2025-12-31 | 1 | -0/+5 | |
| | | |||||
| * | avoid GOT relocations in unnecessary instances | 2025-12-25 | 1 | -4/+4 | |
| | | | | | | Also change xcon to have a flagset for symbols (whether it's a function, locally defined; later: thread local, etc). | ||||
| * | ir: arena-backed linked list for uselists | 2025-12-24 | 1 | -55/+50 | |
| | | | | | | Is much simpler than the growable buffers, seems to be just as efficient if not a little faster when benchmarked. | ||||
| * | lower alloca as a separate pass before isel | 2025-12-23 | 1 | -0/+2 | |
| | | |||||
| * | driver: -fsyntax-only | 2025-12-20 | 1 | -1/+1 | |
| | | |||||
| * | backend: unify pass memory allocation strategies | 2025-12-20 | 1 | -0/+9 | |
| | | | | | | | It was all over the place for temporary data structures used by individual passes. Now there is an arena specifically for that, which is nicer. | ||||
| * | backend: general simplification pass skeleton | 2025-12-20 | 1 | -1/+4 | |
| | | |||||
| * | ir: move some filluses() to ir.c, rename optmem.c -> mem2reg.c | 2025-12-19 | 1 | -0/+27 | |
| | | |||||
| * | ir: move cls2load to interface | 2025-12-18 | 1 | -3/+6 | |
| | | | | | | There's plenty of code duplication like this around I'm looking to reduce. | ||||
| * | create distinct interned string type | 2025-12-15 | 1 | -3/+3 | |
| | | | | | | | | | | | | | | | Interned strings are used pervasively, so it's a good idea to add a layer of type safety to differentiate them from general cstrs and avoid potential bugs from comparing non-interned and interned strings. Not that that's happened so far that I can remember, but it could. I'm 90% sure it's legal to alias `struct {char c;}` pointers with `char` pointers. This specific typedef gives type safety but with a simple one-way `internstr -> const char *` typecast (with `&istr->c`). Converting the other way around is more intentional: a straight up cast `(internstr)cstr` which sticks out as unchecked and probably wrong, or calling the intern(cstr) function, which is the right way. | ||||
| * | move intern() to mem.c | 2025-12-15 | 1 | -1/+0 | |
| | | | | | | Being in lex.c was vestigial, since it was being used all over the frontend and backend. | ||||
| * | only put dats can in .text now when emitting it | 2025-12-14 | 1 | -1/+1 | |
| | | |||||
| * | various relocation related optimization | 2025-12-14 | 1 | -4/+6 | |
| | | | | | | | | | | | With 59ca5a8db, querying if a symbol is defined is cheap. If we're compiling code that calls foo() and we defined foo() in this compilation unit, we already know its offset within the .text section, so use it instead of emitting a relocation for the linker to handle. Also, put small literal data in the .text section instead of .rodata. This seems to improve performance (cache locality?), and as a bonus, it will be good for aarch64's instr encoding with smallish PC-relative offsets. | ||||
| * | Add -O optimization flag | 2025-12-13 | 1 | -2/+4 | |
| | | |||||
| * | fix position independent loads of function symbols. | 2025-12-13 | 1 | -3/+3 | |
| | | | | | | | | | For `extern int x[1];`, can use PCREL32 for &x. But for `extern int x(int)`, must use GOTREL, when not being called directly (that's PLT). Therefore the type of an external symbol (actually just whether it denotes a function) matters when deciding what kind of relocation to emit, so keep that information. | ||||
| * | rename arraylength macro -> countof | 2025-12-11 | 1 | -14/+14 | |
| | | |||||
| * | c: check actual reachability for non-void func may not return value | 2025-11-23 | 1 | -0/+21 | |
| | | |||||
| * | implement float varargs, and some other fixes | 2025-11-23 | 1 | -1/+2 | |
| | | |||||
| * | ir: freeblk: clear preds | 2025-11-22 | 1 | -0/+2 | |
| | | |||||
| * | ir/ir.c: fix assert in mkcallarg | 2025-11-22 | 1 | -1/+1 | |
| | | |||||
| * | ir: barebones IR passes checked contracts | 2025-11-21 | 1 | -0/+3 | |
| | | |||||
| * | rename IR classes to reflect bitsize | 2025-11-21 | 1 | -9/+9 | |
| | | |||||
| * | ir: fix delpred when npred becomes 1 | 2025-11-21 | 1 | -2/+12 | |
| | | |||||
| * | ir: for easier debugging, keep ctype in dats, print as literal when possible | 2025-11-20 | 1 | -2/+2 | |
| | | |||||
| * | debug output to stdout | 2025-11-19 | 1 | -1/+1 | |
| | | |||||
| * | preeliminary va_list support | 2025-11-14 | 1 | -9/+44 | |
| | | |||||
| * | ir: fix addcon equality check.. | 2025-11-12 | 1 | -1/+1 | |
| | | |||||
| * | ir: free uses | 2025-11-12 | 1 | -0/+4 | |
| | | |||||
| * | amd64: fix aggregate abi stuff;; ir: fold, peephole optimizing constructors | 2025-11-05 | 1 | -93/+2 | |
| | | |||||
| * | c: also propagate terminates in genswitch | 2025-10-24 | 1 | -1/+0 | |
| | | |||||
| * | codegen fixes, propagate terminate | 2025-10-24 | 1 | -1/+2 | |
| | | |||||
| * | ir bugfixes | 2025-10-23 | 1 | -1/+20 | |
| | | |||||
| * | refactor vec_of(T) and misc | 2025-10-20 | 1 | -1/+1 | |
| | | |||||
| * | Organize source files into directories | 2025-10-19 | 1 | -0/+618 | |