_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}