gpt4 book ai didi

c++ - LLVM - 用于删除死代码的 active 分析

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:44:46 25 4
gpt4 key购买 nike

我正在尝试实现 active 分析以删除死指令。我知道 isInstructionTriviallyDead() 存在,但是,我想了解如何使用 def-use(或 use-def)链删除代码。

我目前的做法是遍历一个 block 中的所有指令(使用 inst_iterator),并针对每条指令循环遍历其所有用途。最终,如果一条指令没有用,那么我认为它已经死了,因此可以使用 eraseFromParent()

删除它

这看起来像:

for (inst_iterator I = inst_begin(F), E = inst_end(F); I != E; ++I) { 
bool deadInst = true;
Instruction *inst = &*I;


for (User* pUser : inst->users()) {
// If we enter this loop, we have at least one use, so instruction isn't dead
deadInst = false;
}

// deadInst is true if we didn't enter the loop, so has no uses
if (deadInst) {
inst->eraseFromParent();
}
}

问题是,返回指令没有与之关联的用途(而且我确信还有其他没有用途的定义)。但是,不应删除返回指令,因为它会导致语义错误的代码。

我通过 active 分析删除指令的一般方法是否可行?我该怎么做才能确保返回等说明不会被删除?

非常感谢任何指点:)

最佳答案

同时检查指令是否为终止符指令(inst->isTerminator())

关于c++ - LLVM - 用于删除死代码的 active 分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41130079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com