gpt4 book ai didi

c++ - 在 LLVM 中的两个 block 之间插入一个 block

转载 作者:搜寻专家 更新时间:2023-10-31 01:52:01 27 4
gpt4 key购买 nike

我想在 LLVM 的两个基本 block 之间插入一个 block 。因此,例如,如果一个基本 block A 跳转到基本 block B,我想在它们之间插入一个基本 block C,以便 A 跳转到 C,C 跳转到 B。我该怎么做?我确实有一个基本想法,我需要更改基本 block A 的终止指令,以便将目标 B 替换为 C,但是我如何继续在两者之间添加新的基本 block C?

最佳答案

是的,您需要更改(或替换)基本 block A 的终止指令 - 例如,如果它是一个分支,您可以使用 BranchInst::setSuccessor()。然后您创建基本 block C 并确保其终止指令跳转到 B,这将使其介于两者之间。

您需要做的就是更改终结符的目标 - 您不需要重新排列内存中的 block 顺序或类似的东西。

但是,您必须知道有两个特殊指令需要您担心 - phi 节点和着陆垫。

  • Phi 节点仅指区 block 的直接前身。这意味着如果您在 A 和 B 之间插入 C,则必须通过删除它们或使它们引用 C 而不是 A 来修复 B 中的所有 phi 节点。

  • 如果 B 是一个 landingpad block (包含一个 landingpad 指令),那么从 invoke 指令的展开目标直接跳转到它是唯一合法的。如果从 A 到 B 的跳转是通过展开目标,则不能在中间添加基本 block ,除非您将 C 本身变成着陆平台并从 B 移除着陆平台。

关于c++ - 在 LLVM 中的两个 block 之间插入一个 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13275577/

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