Pivot-Studio/pivot-lang

逃逸分析

Closed this issue · 1 comments

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类型,是不需要进行这种操作的

#357 中通过后端优化完成