提问人:user22870953 提问时间:11/7/2023 最后编辑:user22870953 更新时间:11/8/2023 访问量:56
LLVM:在入口块顶部添加条件块的挑战
LLVM: Challenges in adding condition block at top of entry block
问:
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
我认为这是因为我的函数正在失去一些优化,这些优化是在入口块上完成的,由于我的仪器,其内容被移动到新块。
能否分享一些关于我们如何解决此案的建议?
答: 暂无答案
评论