gpt4 book ai didi

c - LLVM 中何时使用 load、store 和 alloca

转载 作者:行者123 更新时间:2023-12-03 20:30:04 24 4
gpt4 key购买 nike

我正在查看 LLVM 以了解他们如何使用 load , store , 和 alloca .在下面的第一张幻灯片中,没有使用它们。在第二个中,使用 alloca .

我对 C 不熟悉,所以我必须加快速度才能运行一个例子并自己解决这个问题,但想问问是否有人已经知道了。不确定为了确定使用 load 的输出而编写的示例 C 代码的种类, store , 和 alloca在 LLVM 中。

问题是,当 LLVM 使用 load , store , 和 alloca .

想知道是否还需要加载/存储,或者 LLVM 可以不用它。

图 1 ↓

enter image description here

图2↓

enter image description here

最佳答案

如果没有优化,clang 会在只有一个 alloca 的地方生成 LLVM 代码。对于每个局部变量,一个 read每次将该变量用作 r 值和一个 store对于对该变量的每次赋值(包括其初始化)。

通过优化,clang 会尽量减少 read 的数量。 s 和 store并且经常会消除 alloca如果可能,完全(仅使用寄存器)。

确保变量存储在内存中的一种方法,即使进行了优化,也是获取它的地址(因为寄存器没有地址)。

Wondering if load/store are necessary as well, or LLVM can do without it.



您需要 store/ load每当您写入内存位置时。所以问题就变成了你是否可以在没有内存的情况下将所有内容存储在寄存器中。由于 LLVM(与真实机器不同)支持无限数量的寄存器,因此这是一个有效的问题。

然而,正如我所提到的,寄存器没有地址。所以任何获取变量地址的代码都需要使用内存。任何对地址执行算术运算的代码也是如此,例如索引数组的代码。

关于c - LLVM 中何时使用 load、store 和 alloca,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50537703/

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