LLVM IR 基本块有意义的名称
LLVM IR basic blocks meaningful names
我正在尝试为 LLVM IR 中的基本块取有意义的名称。也就是说,我希望这个循环 header 的名称不是 6
,而是类似于:loop.header.6
。我很确定以前的 llvm/opt
版本有这个选项,但我似乎无法在 llvm-13
中找到它。实际的源代码可能无关紧要,但为了完整性在下面给出
$ sed -n "18,23p" main.ll
6: ; preds = %27, %1
%7 = load i32, i32* %4, align 4
%8 = load i32, i32* %3, align 4
%9 = icmp slt i32 %7, %8
br i1 %9, label %10, label %30
源代码+编译标志:
$ cat ~/main.cpp
#include <stdio.h>
bool isPrime(int p) {
for (int i=2;i<p;i++)
for (int j=2;j<p;j++)
if (i*j == p)
return 0;
return 1; }
int main(int argc, char **argv) {
printf("%d\n", isPrime(7));
}
$ ./clang -O0 -c -emit-llvm ~/main.cpp -o main.bc
$ ./llvm-dis ./main.bc -o main.ll
值名称仅由前端 (clang
) 在调试模式下编译/启用断言时添加。
请注意,名称在优化后可能会产生误导等
我正在尝试为 LLVM IR 中的基本块取有意义的名称。也就是说,我希望这个循环 header 的名称不是 6
,而是类似于:loop.header.6
。我很确定以前的 llvm/opt
版本有这个选项,但我似乎无法在 llvm-13
中找到它。实际的源代码可能无关紧要,但为了完整性在下面给出
$ sed -n "18,23p" main.ll
6: ; preds = %27, %1
%7 = load i32, i32* %4, align 4
%8 = load i32, i32* %3, align 4
%9 = icmp slt i32 %7, %8
br i1 %9, label %10, label %30
源代码+编译标志:
$ cat ~/main.cpp
#include <stdio.h>
bool isPrime(int p) {
for (int i=2;i<p;i++)
for (int j=2;j<p;j++)
if (i*j == p)
return 0;
return 1; }
int main(int argc, char **argv) {
printf("%d\n", isPrime(7));
}
$ ./clang -O0 -c -emit-llvm ~/main.cpp -o main.bc
$ ./llvm-dis ./main.bc -o main.ll
值名称仅由前端 (clang
) 在调试模式下编译/启用断言时添加。
请注意,名称在优化后可能会产生误导等