c-LLVM:基本块的顺序重要吗

  • 本文关键字:顺序 基本块 c-LLVM c llvm
  • 更新时间 :
  • 英文 :


我正在编写自己的编程语言,并有以下源代码:

if false {
# do nothing
}
else {
# do nothing
}
return 0

我的编译器当前输出以下LLVM IR:

; ModuleID = 'tmp.sk'
source_filename = "tmp.sk"
define i64 @main() {
entry:
br i1 false, label %if_true, label %if_false
if_true:                                          ; preds = %entry
br label %end
end:                                              ; preds = %if_false, %if_true
ret i64 0
if_false:                                         ; preds = %entry
br label %end
}

注意基本块的顺序:

entry
if_true
end
if_false

但在我的源代码中,逻辑级数已经交换了endif_false。根据我对基本块的了解,它们必须以终止符指令结束,例如retbr。这意味着区块一起出血不应该有任何问题。

我的问题是,是否还有其他我没有解决的问题,或者这是一个非常好的、无白的人类可读LLVM IR吗?

(我正在使用LLVM-C API,如果有任何用处的话。(

基本块的顺序是任意的。更重要的是,编译器可以重新排列它们,以使尽可能多的分支通过。

最新更新