【问题标题】:LLVM, Call by referenceLLVM,通过引用调用
【发布时间】:2011-10-07 17:18:52
【问题描述】:

我正在为一种语言编写编译器,用户可以在其中选择按值调用或引用调用

最后阶段是生成 llvm 程序集。我读到数组/向量通过引用传递,但我不知道如何通过引用传递整数。

我想过创建一个指针,然后传递指针,比如:

foo(ref var1) { var1 = var1 + 1 }
main { a=1; foo(a); }

被翻译成

foo(int* var1) { (*var1) = (*var1) + 1 }
main {a=1; foo(&a ); }

但我在 llvm 中找不到如何操作。

关于指针或如何通过引用调用参数的任何想法都很棒(我希望这不是一个 RTFM 问题:/)

【问题讨论】:

    标签: compiler-construction call pass-by-reference llvm


    【解决方案1】:

    尝试通过http://llvm.org/demo/ 运行以下代码,并将优化级别设置为无:

    void foo(int* var1) { (*var1) = (*var1) + 1; }
    int main() {int a=1; foo(&a ); }
    

    答案本质上只是你需要通过 alloca 指令分配内存。

    【讨论】:

    • 确保禁用优化,否则在main 中对foo 的调用将被优化(从未使用a)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多