在LLVM中清空BasicBlock

时间:2013-04-21 15:59:11

标签: llvm

我有* .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
}

1 个答案:

答案 0 :(得分:2)

是的,摆脱%9是安全的,但你需要这么做:

  • %9的所有分支都需要替换为%10
  • 的分支
  • 所有引用%9的phi指令都需要修改以引用其所有前辈。这实际上是一个空基本块的合理原因 - 为后续的phi合并多个选项。
  • 请记住,这些都是真正无名的基本块;如果您对文本IR本身(.ll文件)进行修改,则删除%9实际上会%10%9。如果您从LLVM本身进行修改(尽管如此),这并不重要。