我有* .ll文件,由clang ++&创建LLVM-DIS。我有一个简单的问题关于标签:9 - 它是空的,所以它没用吗?如果我将 br标签%9 替换为 br标签%10 ,是否可以删除而没有任何负面影响? (Clang 3.1,Windows 7)
define void @_Z2f2v() nounwind {
%a = alloca i32, align 4
%b = alloca i32, align 4
store i32 2, i32* %a, align 4
%1 = load i32* %a, align 4
%2 = icmp sgt i32 %1, 0
br i1 %2, label %3, label %4
; <label>:3 ; preds = %0
store i32 555, i32* %b, align 4
br label %10
; <label>:4 ; preds = %0
%5 = load i32* %a, align 4
%6 = icmp eq i32 %5, 111
br i1 %6, label %7, label %8
; <label>:7 ; preds = %4
store i32 999, i32* %b, align 4
store i32 888, i32* %a, align 4
br label %9
; <label>:8 ; preds = %4
store i32 777, i32* %b, align 4
br label %9
; <label>:9 ; preds = %8, %7
br label %10
; <label>:10 ; preds = %9, %3
ret void
}
答案 0 :(得分:2)
是的,摆脱%9
是安全的,但你需要这么做:
%9
的所有分支都需要替换为%10
%9
的phi指令都需要修改以引用其所有前辈。这实际上是一个空基本块的合理原因 - 为后续的phi合并多个选项。%9
实际上会%10
新%9
。如果您从LLVM本身进行修改(尽管如此),这并不重要。