逃逸分析
Closed this issue · 1 comments
Chronostasys commented
https://medium.com/a-journey-with-go/go-introduction-to-the-escape-analysis-f7610174e890
应该注意,要兼容immix gc,所以普通的可能含有指针的栈变量也要变为gcroot,具体来说
在我们的程序里,所有可能需要作为gcroot的变量都要多一层指针,也就是如果:
let a:i64 = 1;
在llvm中对应:
%a = alloca i64
%root_a = alloca i64*
store %a, %root_a
call void @llvm.gcroot(%root_a, @TYPE_ATOMIC)
上方只是例子,实际上如果是atomic类型,是不需要进行这种操作的
Chronostasys commented
在 #357 中通过后端优化完成