LLVM:基本块的顺序重要吗?

LLVM: Does the order of basic blocks matter?

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

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,如果它有用的话。)

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