【问题标题】:LLVM IR jump to a basicblock within another functionLLVM IR 跳转到另一个函数中的基本块
【发布时间】:2017-05-30 19:33:00
【问题描述】:

我已经用我的 pass 生成了一个 IR,在这个 IR 的一个函数内部,我想跳回到调用函数的基本块,调用函数内部的 ext_callee 函数是这样调用的:

%4 = call i1 @ext_callee(i32 32, i32 %3, i32 -4, i8* blockaddress(@tobecalled, %5), i8* blockaddress(@tobecalled, %7)).

最后两个参数是我想在这个 ext_callee 函数中跳转到的基本块地址。 我尝试使用带有 blockaddress 参数之一的indirectbr 指令,但是当我运行 IR 时,它会提示段错误。我搜索了 LLVM 文档,但没有找到如何跳转到另一个函数的基本块。有人有线索吗?非常感谢!

【问题讨论】:

    标签: llvm llvm-ir


    【解决方案1】:

    你不能这样做。

    http://llvm.org/docs/LangRef.html#i-indirectbr:

    控制转移到地址参数中指定的块。所有可能的目标块必须列在标签列表中,否则该指令具有未定义的行为。这意味着跳转到其他函数中定义的标签也有未定义的行为。

    【讨论】:

    • 谢谢,起初我认为函数范围规则可能在 IR 中被破坏。那就有点棘手了。 :(
    • 考虑例如函数提取。那么它会如何运作呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    相关资源
    最近更新 更多