bookmark
execute
docker run -it --rm -v /home/julyfun/Documents/GitHub/julyfun/compiler/:/root/compiler maxxing/compiler-dev bashcargo run -- -koopa hello.c -o hello.koopa
测试数据:
- docker /opt/bin/testcases
Lv0
Lv1
- sysy: C-like lang for education
Lv1.4
Koopa Ir 内存形式没文档. [○・`Д´・ ○]
1// WRONG2let mut main = FunctionData::new(...);3let zero = main.new_value().integer(0); // globals 还没初始化, globals.upgrade() 会 panic4let main = program.new_func(main); // 太晚了5
6// RIGHT7let main_data = FunctionData::new(...);8let main_func = program.new_func(main_data); // 先添加,初始化 globals9let main = program.func_mut(main_func); // 获取可变引用10let zero = main.new_value().integer(0); // 现在 globals 已经设置好了Result:
1root@4c93081a761b:~/compiler# cat hello.koopa2fun @main(): i32 {3%entry:4 ret 325}6
7
8 Finished `release` profile [optimized] target(s) in 5.61s9running test "0_main" ... PASSED10running test "1_comments" ... PASSED11running test "2_int_dec" ... PASSED12running test "3_int_oct" ... PASSED13running test "4_int_hex" ... PASSED14running test "5_compact" ... PASSED15running test "6_whitespaces" ... PASSED1 collapsed line
16PASSED (7/7)顺便就配了一大堆 NVIM.
Lv2
注意 Value 类型是一个指针. dfg.value(*self); 可以获取实际 ValueData. 然后可以 match data.kind()