1

I have *.ll file, created by clang++ & llvm-dis. I have one simple question about label:9 - it is empty, so is it useless? Can it be deleted without any negative effects, if I replace br label %9 to br label %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
}
4

1 回答 1

3

是的,摆脱 是安全的%9,但您需要谨慎操作:

  • 所有分支都%9需要替换为分支%10
  • 所有引用的 phi 指令都%9需要修复以引用其所有前辈。这实际上是一个空基本块的正当理由 - 将多个选项合并在一起以获得后续的 phi。
  • 请记住,这些都是无名的基本块;如果您对文本 IR 本身(.ll 文件)进行修改,则删除%9实际上会%10生成新的%9. 但是,如果您从 LLVM 本身进行修改(正如您应该做的那样),那没关系。
于 2013-04-21T16:35:06.407 回答