私は基本的なコンパイラを作成しており、簡単にデバッグできるように生成された llvm コードの近くにコードのソース行を配置したいと考えています。例えば:
proc f(a:Int, b:Int):Int {
return a + b;
}
start {
print f(1,2);
return 0;
}
次のように、何らかの方法でソースに注釈を付ける必要があります。
@numFmt = internal constant [4 x i8] c"%d\0A\00"
declare i32 @printf(i8*, ...) nounwind
define i32 @main() {
entry:
%print.0 = call i32 @f(i32 1, i32 2) ; print f(1,2) maybe using a comment
%tmp.3 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([4 x i8]* @numFmt, i32 0, i32 0), i32 %print.0)
"return 0 - or perhaps using a basic block":
ret i32 0
}
define i32 @f(i32 %a, i32 %b) {
entry:
"return a + b" = <or the result of some dummy operation that doesn't get stripped away"
%return.0 = add i32 %a, %b
ret i32 %return.0
}
これを行うための解決策/方法はありますか? (私はllvm-fsバインディングを使用していますが、IRで動作する方法が欲しいだけです)