预期编号的指令
Instruction expected to be numbered
我对以下 LLVM 代码有疑问:
%0 = load i64* %u
%1 = load i64* %l
%2 = icmp sgt i64 %1, %1
br i1 %2, label %L1, label %L2
L2:
ret void
br label %L1
L1:
%3 = load i64* %l
%4 = sub i64 %3, 1
store i64 %4, i64* %i
当运行 llc
时,我得到以下错误:
error: instruction expected to be numbered '%4'
%3 = load i64* %l
但是我不明白为什么在%2
之后应该是%4
。 %2
和%4
之间没有返回结果的指令。
我需要理解这一点,因为我正在编写一个 LLVM 代码生成器。
那么为什么这里使用%3
会出错呢?
基本块与指令共享相同的编号。因为 ret
是终止符,所以您有一个未命名(且无法访问)的基本块紧随其后,因此您的代码等同于:
...
L2:
ret void
%3:
br label %L1
L1:
...
这就是为什么它期望下一个未命名的东西是 %4
。
我对以下 LLVM 代码有疑问:
%0 = load i64* %u
%1 = load i64* %l
%2 = icmp sgt i64 %1, %1
br i1 %2, label %L1, label %L2
L2:
ret void
br label %L1
L1:
%3 = load i64* %l
%4 = sub i64 %3, 1
store i64 %4, i64* %i
当运行 llc
时,我得到以下错误:
error: instruction expected to be numbered '%4'
%3 = load i64* %l
但是我不明白为什么在%2
之后应该是%4
。 %2
和%4
之间没有返回结果的指令。
我需要理解这一点,因为我正在编写一个 LLVM 代码生成器。
那么为什么这里使用%3
会出错呢?
基本块与指令共享相同的编号。因为 ret
是终止符,所以您有一个未命名(且无法访问)的基本块紧随其后,因此您的代码等同于:
...
L2:
ret void
%3:
br label %L1
L1:
...
这就是为什么它期望下一个未命名的东西是 %4
。