aboutsummaryrefslogtreecommitdiffhomepage
path: root/ir
Commit message (Collapse)AuthorAgeFilesLines
* parallel move; implement reg<->stack swplemon2025-12-101-3/+18
|
* regalloc: optimize a little edge case betterlemon2025-12-101-4/+6
| | | | | | | | | | | | With two-address instructions one needs to make sure the dst doesn't get allocated to the same reg as the right-hand operand: %r = mul %x, %y ; %y cannot be %r Except, if the operands are the same %r = mul %x, %x ; if %x is dead after this instr, it's fine to allocate %r to the same reg
* misc fixeslemon2025-12-101-1/+1
|
* rega: change assert for spilled callee. it's ok if nspill==1lemon2025-12-091-1/+1
|
* abi: fix aggregate passed by regs 2nd reg offsetlemon2025-12-062-24/+28
| | | | | | | | | It was broken for example `struct { i32 a; f64 b; }` (would try to load/store b from byte offset 4, not 8). Introduce r2off, realize in x86-64 it's always 8; even `struct {i32 a; f32 b;}` gets passed in one (integer) register. But not so in (future) ABIs like RISC-V, I believe there `{i32, f32}` would get passed in 1 integer and 1 float register (r2off = 4).
* add command-line predefined macros (-D, -U)lemon2025-12-061-2/+0
|
* ir: float fold div/0lemon2025-12-051-4/+3
|
* regalloc: kill dead defs of physical regslemon2025-12-041-8/+16
|
* c: make tentative definitions worklemon2025-12-021-1/+1
|
* abi/isel: aggregate args in stack wiplemon2025-11-271-9/+31
|
* regalloc: skip dead phislemon2025-11-261-1/+4
|
* ir: simplify some occurrences of single-argument phislemon2025-11-242-8/+17
|
* ir.h: tweak mkintrin() definition to work with tinycclemon2025-11-241-1/+1
|
* ir: implement cvtu64f. and other bug fixeslemon2025-11-231-2/+35
| | | | | compiler is bootstrapping?! however, stage1 and stage2+ executables aren't bit-identical.. small differences in the codegen.. need to look into that
* implement cvtfXu64 by lowering it in builderlemon2025-11-231-9/+46
| | | | this should probably be in a separate pass?
* c: check actual reachability for non-void func may not return valuelemon2025-11-232-0/+22
|
* implement float varargs, and some other fixeslemon2025-11-233-7/+17
|
* make sure indirect function call pointer does not end up in clobber reglemon2025-11-221-2/+2
|
* ir: freeblk: clear predslemon2025-11-221-0/+2
|
* ir/ir.c: fix assert in mkcallarglemon2025-11-221-1/+1
|
* ir/dump: initialize out buffer staticallylemon2025-11-221-3/+1
|
* regalloc: merge overlapping fixed intervals betterlemon2025-11-221-1/+12
|
* irdump: print alloca # byteslemon2025-11-211-0/+3
|
* ir: implement dominator tree computationlemon2025-11-213-0/+40
|
* ir: barebones IR passes checked contractslemon2025-11-217-2/+26
|
* remove umullemon2025-11-213-3/+1
|
* change op names to match 285063eba44lemon2025-11-218-142/+142
|
* rename IR classes to reflect bitsizelemon2025-11-219-46/+46
|
* regalloc: assert nops aren't being usedlemon2025-11-211-0/+1
|
* ir/builder: peephole optimize branch with constant conditionallemon2025-11-211-4/+14
|
* mem2reg: implement marker algorithm from Braun et allemon2025-11-211-8/+40
|
* mem2reg: store pending phis implicitlylemon2025-11-211-12/+8
|
* ir: fix delpred when npred becomes 1lemon2025-11-211-2/+12
|
* ir/dump: print block predecessorslemon2025-11-211-2/+10
|
* cfg: sortrpo delete unreachable blocks with allocas by hoisting them to the ↵lemon2025-11-211-6/+7
| | | | entry block
* isel: lower allocas a different way, such that stk address gets materialized ↵lemon2025-11-201-1/+1
| | | | when necesary
* ir: for easier debugging, keep ctype in dats, print as literal when possiblelemon2025-11-203-21/+53
|
* mem2reg: fix edgecase..lemon2025-11-191-1/+1
|
* debug output to stdoutlemon2025-11-195-75/+79
|
* factor type stuff into type.hlemon2025-11-161-0/+14
|
* ir: 'trap' jump; c: __builtin_trap; lex: __has_builtinlemon2025-11-154-4/+13
|
* abi0: remove debugging leftover sortpo. but do number blks (free)lemon2025-11-141-1/+2
|
* preeliminary va_list supportlemon2025-11-146-25/+68
|
* mem2reg: handle uses in branches in cmpuse()lemon2025-11-121-0/+2
|
* ir: fix addcon equality check..lemon2025-11-121-1/+1
|
* revert b55005e5c08. correct fix was in c.clemon2025-11-121-1/+0
|
* fold: clamp int to 32bits when requiredlemon2025-11-121-0/+1
|
* mem2reg: sort variable uses to match source order..lemon2025-11-121-0/+21
|
* ir: free useslemon2025-11-121-0/+4
|
* irdump: don't print fn ret type in non return brancheslemon2025-11-121-1/+1
|