函数中的 LLVM 寄存器使用
LLVM Register use in function
在下面的代码中,函数有 2 个参数,我假设它们存储在 %0
和 %1
.
中
Jet函数以%3
.
开头
%2
有什么用?
define void @swap(i32*, i32*) #0 {
%3 = alloca i32*, align 8
%4 = alloca i32*, align 8
%5 = alloca i32*, align 8
store i32* %0, i32** %3, align 8
store i32* %1, i32** %4, align 8
%6 = load i32*, i32** %3, align 8
store i32* %6, i32** %5, align 8
%7 = load i32*, i32** %4, align 8
store i32* %7, i32** %3, align 8
%8 = load i32*, i32** %5, align 8
store i32* %8, i32** %4, align 8
ret void
}
上面的 LLVM 代码是用 clang 从这个 c 代码生成的:
void swap(int* i, int* j){
int* temp = i;
i = j;
j = temp;
}
%2
是入口基本块的名称。非条目 BB 的名称很明确,例如 <label>:123
.
在下面的代码中,函数有 2 个参数,我假设它们存储在 %0
和 %1
.
中
Jet函数以%3
.
开头
%2
有什么用?
define void @swap(i32*, i32*) #0 {
%3 = alloca i32*, align 8
%4 = alloca i32*, align 8
%5 = alloca i32*, align 8
store i32* %0, i32** %3, align 8
store i32* %1, i32** %4, align 8
%6 = load i32*, i32** %3, align 8
store i32* %6, i32** %5, align 8
%7 = load i32*, i32** %4, align 8
store i32* %7, i32** %3, align 8
%8 = load i32*, i32** %5, align 8
store i32* %8, i32** %4, align 8
ret void
}
上面的 LLVM 代码是用 clang 从这个 c 代码生成的:
void swap(int* i, int* j){
int* temp = i;
i = j;
j = temp;
}
%2
是入口基本块的名称。非条目 BB 的名称很明确,例如 <label>:123
.