gpt4 book ai didi

clang - 使用clang生成llvm ir时如何保存变量名?

转载 作者:行者123 更新时间:2023-12-01 06:58:59 24 4
gpt4 key购买 nike

我通过使用 'clang -S -emit-llvm test.c' 生成 ir。

int main(int argc, char **argv)
{
int* a=0;
a=(int *)malloc(sizeof(int));
printf("hello world\n");
return 0;
}

这是IR:
define i32 @main(i32, i8**) #0 {
%3 = alloca i32, align 4
%4 = alloca i32, align 4
%5 = alloca i8**, align 8
%6 = alloca i32*, align 8
store i32 0, i32* %3, align 4
store i32 %0, i32* %4, align 4
store i8** %1, i8*** %5, align 8
store i32* null, i32** %6, align 8
%7 = call noalias i8* @malloc(i64 4) #3
%8 = bitcast i8* %7 to i32*
store i32* %8, i32** %6, align 8
%9 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i32 0, i32 0))
ret i32 0
}

我怎样才能让变量名保持不变,就像一个静止的 %a ,而不是 %3?

最佳答案

实际上删除变量名称是一项功能,需要使用 -discard-value-names 激活。 .发布版本中的 Clang 自行完成此操作( Debug模式下的自编译 clang 不是)。

你可以绕过它

clang <your-command-line> -###

然后复制输出并删除 -discard-value-names .

较新的 clang 版本(自 7 起)将标志暴露给普通命令行:
clang -fno-discard-value-names <your-command-line>

Source

关于clang - 使用clang生成llvm ir时如何保存变量名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50432967/

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