gpt4 book ai didi

compiler-construction - llvm IR代码中标签的表达

转载 作者:行者123 更新时间:2023-12-04 07:26:45 26 4
gpt4 key购买 nike

有时我发现llvm IR中的标签标识符以逗号';'开头,例如; <label> 6但是,正如我所知道的,逗号用于评论。那么llvm如何检索注释中的标签信息?我想念什么吗?
接下来是一个简单的测试。
C源文件:

#include <stdio.h>

int main()
{
int a;
scanf("%d", &a);
if ( a > 3)
a *= 2;
return 0;
}

http://llvm.org/demo/index.cgi生成的llvm IR代码(与clang -c -emit-llvm main.c相同)如下:
; ModuleID = '/tmp/webcompile/_13654_0.bc'

@.str = private unnamed_addr constant [3 x i8] c"%d\00", align 1

define i32 @main() nounwind uwtable {
%a = alloca i32, align 4
%1 = call i32 (i8*, ...)* @__isoc99_scanf(i8* getelementptr inbounds ([3 x i8]* @.str, i64 0, i64 0), i32* %a) nounwind
%2 = load i32* %a, align 4, !tbaa !0
%3 = icmp sgt i32 %2, 3
br i1 %3, label %4, label %6

; <label>:4 ; preds = %0
%5 = shl nsw i32 %2, 1
store i32 %5, i32* %a, align 4, !tbaa !0
br label %6

; <label>:6 ; preds = %4, %0
ret i32 0
}

最佳答案

在LLVM IR中,块不需要显式标签。指令与导致%1,%2,%3的方式相同。 LLVM按递增顺序将数字分配给未命名的指令和块。 br i1 %3...终止第一个块,最后使用的数字标签为3,因此下一个块被标记为4。该块以下一个br指令结束,最后使用的数字为5,因此下一个和最后一个块被标记为6。首先,块和指令共享相同的 namespace 似乎很奇怪,但是请记住,块也是值。

关于compiler-construction - llvm IR代码中标签的表达,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9772508/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com