code wiki / (root) / _offc_regalloc_min.nx

_offc_regalloc_min.nx source

↩ module page · 43 lines · 1174 B

1// Minimal repro for the regalloc_test SIGSEGV. Identical to 2// regalloc_test.nx but stripped to the minimum that reproduces. 3 4import "nx_syscalls.nx" 5import "nx_types.nx" 6import "nx_ir.nx" 7import "nx_regalloc.nx" 8 9func main() -> i64 { 10 let m_raw: *u8 = sys_mmap(256) 11 let m: *Module = m_raw as *Module 12 m.name = "ra_test" as *u8 13 m.functions = 0 as *Function 14 m.n_functions = 0 15 16 let f: *Function = ir_function_new(m, "main" as *u8, 4, ir_type_i64()) 17 let b: *BasicBlock = ir_block_new(f) 18 19 let c10: i64 = ir_const_i64(f, 10) 20 let c20: i64 = ir_const_i64(f, 20) 21 let sum: i64 = ir_emit_binop(b, OP_ADD, c10, c20, ir_type_i64()) 22 ir_emit_return(b, sum) 23 24 let locs_raw: *u8 = sys_mmap(f.n_values * 16 + 16) 25 let locs: *ValueLoc = locs_raw as *ValueLoc 26 27 let mask_raw: *u8 = sys_mmap(16) 28 let mask: *i64 = mask_raw as *i64 29 *mask = 0 30 31 let sb_raw: *u8 = sys_mmap(16) 32 let sb: *i64 = sb_raw as *i64 33 *sb = 0 34 35 let mask_fpr_raw: *u8 = sys_mmap(16) 36 let mask_fpr: *i64 = mask_fpr_raw as *i64 37 *mask_fpr = 0 38 39 regalloc_function(f, locs, mask, mask_fpr, sb) 40 41 sys_write(1, "done\n" as *u8, 5) 42 return 0 43}