| Commit message (Collapse) | Author | Age | Files | Lines | |
|---|---|---|---|---|---|
| * | REFACTOR: move sources to src/ | 2026-03-17 | 17 | -5073/+0 | |
| | | |||||
| * | regalloc: improve spilling and cleanup | 2026-03-16 | 3 | -349/+396 | |
| | | | | | | | | | Instead of spilling current interval when running out of registers, spill the longest-lived active interval with a lower spill cost than current. Spill costs are estimated based on multiplicative loop depth. Also cleanup regalloc.c somewhat. Update todo.txt too. | ||||
| * | ir: blk loop index for spill cost | 2026-03-16 | 3 | -4/+39 | |
| | | |||||
| * | eval & fold: handle division overflow for MIN/-1 | 2026-03-14 | 1 | -2/+6 | |
| | | |||||
| * | c: static eval refactoring | 2026-03-14 | 2 | -4/+7 | |
| | | | | | | Explicit node for static symbol (addresses). Should not break with edge cases like the previous ad-hoc approach. And some other bugfixes | ||||
| * | ir/fold: fix float conversion overflows | 2026-03-08 | 1 | -4/+14 | |
| | | |||||
| * | ir: fix inlining getting stuck on complex recursive call sequences | 2026-03-08 | 1 | -8/+17 | |
| | | | | | | By maintaining a proper stack of inline expansions and refusing to expand callers already present in the stack. | ||||
| * | ir: increase per-function stack size limit | 2026-03-06 | 1 | -1/+1 | |
| | | |||||
| * | ir/dump: fix dumping data in .text | 2026-03-04 | 1 | -4/+16 | |
| | | |||||
| * | regalloc: fix minor regression with storing of regs into spilled stack slots | 2026-03-04 | 1 | -1/+1 | |
| | | |||||
| * | add bswap16/32/64 | 2026-03-02 | 3 | -0/+9 | |
| | | | | | | - frontend: __builtin_bswapX intrinsics - backend: ObswapX instructions | ||||
| * | ir: make address ref hash table resizable | 2026-02-28 | 4 | -21/+43 | |
| | | | | | Would hit the limit on very large functions (thanks csmith). | ||||
| * | backend: fix edgecases where imm32 immediate overflows | 2026-02-28 | 1 | -0/+1 | |
| | | |||||
| * | regalloc: fix defn of spilled var with immediate | 2026-02-28 | 1 | -1/+14 | |
| | | | | | | | With `i64 %a = copy 0xabcdef12345`, if `%a` was spilled, this would turn into a `storei64` instruction with an unencondable immediate operand (larger than 32 bits in x86, non-zero in aarch64). | ||||
| * | fix various warnings | 2026-02-24 | 3 | -9/+7 | |
| | | |||||
| * | inline: fix undefined value returns | 2026-02-24 | 1 | -1/+2 | |
| | | | | | | | Previously if an inlined function has a return statement with no value (control flow reaching the closing brace of the function), would use an invalid null reference in the inlined body. Turn it into undef. | ||||
| * | IR: just use an array for extended constants | 2026-02-19 | 5 | -37/+25 | |
| | | | | | | The extra work of using a hashtable to intern them is probably unnecessary. | ||||
| * | cfg: dominator computation should ignore blocks with no predecessors | 2026-02-19 | 1 | -1/+1 | |
| | | | | | | | | These didn't show up atp before but with inlining, for example, a noreturn function, they could be introduced. And the pass ordering means they wouldn't have been cleaned up before filldom(). An unreachable block having no dominator makes sense too. | ||||
| * | ir: regalloc & x86-64 isel bugfixes | 2026-02-18 | 1 | -1/+1 | |
| | | |||||
| * | ir/dump: sanity check | 2026-02-18 | 1 | -0/+1 | |
| | | |||||
| * | ir/rpo: sanity checks | 2026-02-18 | 1 | -4/+7 | |
| | | |||||
| * | ir: basic inlining pass implementation | 2026-02-18 | 4 | -11/+333 | |
| | | |||||
| * | simpl: fix simplifying known cond branches | 2026-01-11 | 1 | -8/+3 | |
| | | |||||
| * | ir/simpl: stub out some code that wasn't properly tested and broken | 2026-01-09 | 1 | -0/+2 | |
| | | | | | I'll figure it out later, but I better not have a broken trunk | ||||
| * | codegen: eliminate redudant consecutive ret sequences | 2026-01-08 | 1 | -0/+1 | |
| | | |||||
| * | ir: only stub out float <-> u64 cvt on x86 | 2026-01-08 | 1 | -4/+3 | |
| | | | | | hackish.. | ||||
| * | irsimpl: optimize away cond branches after constant propagation | 2026-01-07 | 1 | -21/+69 | |
| | | |||||
| * | basic CSE | 2026-01-04 | 4 | -0/+119 | |
| | | |||||
| * | ir bugfixes | 2026-01-04 | 2 | -4/+14 | |
| | | |||||
| * | rega: fix spill copy of i32 -> i64 | 2026-01-04 | 3 | -6/+6 | |
| | | |||||
| * | backend: separate instrs for integer/float store | 2025-12-31 | 7 | -19/+30 | |
| | | |||||
| * | aarch64 isel syms with offset | 2025-12-31 | 1 | -6/+3 | |
| | | |||||
| * | ir/builder: fix bug optiminzg x+x as x-x -> 0 | 2025-12-26 | 1 | -2/+3 | |
| | | |||||
| * | avoid GOT relocations in unnecessary instances | 2025-12-25 | 3 | -7/+12 | |
| | | | | | | 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 | 3 | -115/+90 | |
| | | | | | | Is much simpler than the growable buffers, seems to be just as efficient if not a little faster when benchmarked. | ||||
| * | abi0: get rid of manual instruse reordering | 2025-12-24 | 1 | -12/+1 | |
| | | | | | Vestigial, wasn't enough and we're sorting uses in mem2reg now. | ||||
| * | lower alloca as a separate pass before isel | 2025-12-23 | 4 | -0/+46 | |
| | | |||||
| * | ir: use BIT macro for regset (1<< is wrong for u64) | 2025-12-23 | 2 | -6/+8 | |
| | | |||||
| * | simpl: handle multiplication by negative po2 too | 2025-12-22 | 1 | -5/+9 | |
| | | |||||
| * | simpl: optimize unsigned & signed division by power of 2 | 2025-12-21 | 3 | -19/+66 | |
| | | |||||
| * | ir: simpl: optimize some constant multiplications | 2025-12-21 | 2 | -18/+61 | |
| | | | | | Reuse irbinop() and irunop() for the constant results cases. | ||||
| * | rega: fix 3ff0bfcb | 2025-12-21 | 1 | -4/+1 | |
| | | |||||
| * | driver: -fsyntax-only | 2025-12-20 | 1 | -1/+1 | |
| | | |||||
| * | rega: fix infinite loop when compiling infinite loop | 2025-12-20 | 1 | -1/+4 | |
| | | |||||
| * | some static assertions for packed type sizes | 2025-12-20 | 1 | -0/+2 | |
| | | |||||
| * | backend: unify pass memory allocation strategies | 2025-12-20 | 7 | -31/+21 | |
| | | | | | | | 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 | 3 | -1/+154 | |
| | | |||||
| * | copyopt: optimize same-arg phis with multiple preds | 2025-12-20 | 1 | -2/+6 | |
| | | |||||
| * | ir/regalloc: struct alloc -> union alloc | 2025-12-20 | 1 | -16/+15 | |
| | | |||||
| * | ir: move some filluses() to ir.c, rename optmem.c -> mem2reg.c | 2025-12-19 | 4 | -30/+29 | |
| | | |||||