| Commit message (Collapse) | Author | Age | Files | Lines | |
|---|---|---|---|---|---|
| * | 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 | |
| | | |||||
| * | ir: move cls2load to interface | 2025-12-18 | 3 | -7/+7 | |
| | | | | | | There's plenty of code duplication like this around I'm looking to reduce. | ||||
| * | regalloc+emit: get rid of xsave/xrestore hack | 2025-12-18 | 2 | -51/+63 | |
| | | | | | | | | Was used for situation where we needed to spill more than 1 temporary and have to use a register that is already used. Instead of push/pop, we can just allocate and set aside specific stack slots for this purpose. Also, reworked linearscan() interval sets to separate FPR/GPR intervals. | ||||
| * | rega: implement stack<->stack swap for parallel moves | 2025-12-18 | 1 | -29/+34 | |
| | | |||||
| * | x86_64: for vararg calls, write to EAX in isel | 2025-12-18 | 1 | -8/+25 | |
| | | | | | Also, in regalloc ensure fixed intervals are sorted | ||||
| * | x86-64/emit: implement single-exit-point ret with jump threading | 2025-12-16 | 2 | -1/+3 | |
| | | |||||
| * | bitset: better implementation of bsiter() and stuff | 2025-12-16 | 2 | -2/+2 | |
| | | | | | Also changed the type to size_t for portability | ||||
| * | mem2reg: fix obvious inefficiency | 2025-12-16 | 1 | -16/+10 | |
| | | | | | | | | deltrivialphis() was iterating over every variably instead of just looking at the variable being examined. And I'd been wondering why mem2reg was such a bottleneck for a testcase like sqlite3 amalgamation.. it's easy to miss the forest for the trees. | ||||