LLVM:在入口块顶部添加条件块的挑战

LLVM: Challenges in adding condition block at top of entry block

提问人:user22870953 提问时间:11/7/2023 最后编辑:user22870953 更新时间:11/8/2023 访问量:56

问:

LLVM:在函数(入口块)顶部添加条件块,导致丢失优化,例如在入口块处完成的堆栈优化

我试图通过编译器函数传递将条件块添加到所有 API。

因此,我观察到当初始化代码移出入口块时,堆栈优化被遗漏了。

有没有办法在新块的入口块上恢复编译器完成的优化?或者我们可以以某种方式组合入口并继续阻止吗?

请分享您对此的看法?

在函数顶部添加条件块之前

**entry:**
  initialization call instructions

在函数顶部添加条件块后

**entry**:
 %1 = call i32 @func1()
 %2 = icmp ne i32 %1, 0, !dbg
  br i1 %2, label %if.then.block, label continue

**continue:**
 ; initialization call instructions
ret void
**if.then.block**
   ; Insert instructions for the "if.then.block"
ret void

新增:更具体地说,假设我们有一个大小为 1000 字节的堆栈变量 X,它被设置在函数的 5 个不同位置。

在检测之前,堆栈大小始终显示为 1000 的加法

检测后,堆栈大小将添加为 5 * 1000,即 5000

我认为这是因为我的函数正在失去一些优化,这些优化是在入口块上完成的,由于我的仪器,其内容被移动到新块。

能否分享一些关于我们如何解决此案的建议?

llvm llvm-ir

评论


答: 暂无答案