code wiki / (root) / smoke_regalloc_min.nx

smoke_regalloc_min.nx source

↩ module page · 33 lines · 1041 B

1// Minimal regalloc invocation: build a Function with NO values 2// and call regalloc_function. If even this crashes, the bug is 3// in the regalloc setup itself. 4 5import "syscalls.nx" 6import "types.nx" 7import "ir.nx" 8import "regalloc.nx" 9 10func main() -> i64 { 11 let m_raw: *u8 = sys_mmap(256) 12 let m: *Module = m_raw as *Module 13 m.functions = 0 as *Function 14 m.n_functions = 0 15 let f: *Function = ir_function_new(m, "empty" as *u8, 5, ir_type_i64()) 16 let b: *BasicBlock = ir_block_new(f) 17 ir_emit_return(b, ir_const_i64(f, 0)) 18 19 let locs_raw: *u8 = sys_mmap(4096) 20 let locs: *ValueLoc = locs_raw as *ValueLoc 21 let mask_raw: *u8 = sys_mmap(16) 22 let mask: *i64 = mask_raw as *i64 23 *mask = 0 24 let sb_raw: *u8 = sys_mmap(16) 25 let sb: *i64 = sb_raw as *i64 26 *sb = 0 27 let mask_fpr_raw: *u8 = sys_mmap(16) 28 let mask_fpr: *i64 = mask_fpr_raw as *i64 29 *mask_fpr = 0 30 31 regalloc_function(f, locs, mask, mask_fpr, sb) 32 return __syscall(93, 42, 0, 0, 0, 0, 0) 33}