我正在查看 LLVM 以了解他们如何使用load、store和alloca。在下面的第一张幻灯片中,没有使用它们。在第二个中,有使用alloca.
我对 C 不熟悉,所以必须让自己加快速度才能运行一个示例并自己解决这个问题,但想问是否有人已经知道了。不确定要编写哪种示例 C 代码来确定使用load、store和 的输出alloca在 LLVM 中
问题是,当 LLVM 使用load、store和alloca时。
想知道加载/存储是否也有必要,或者 LLVM 可以不需要它。
\n\n图1 \xe2\x86\x93
\n\n\n\n图2 \xe2\x86\x93
\n\n\nalloca如果不进行优化,clang 将生成 LLVM 代码,其中每个局部变量都有一个,read每次将该变量用作右值都有一个,store每个对该变量的赋值(包括其初始化)都有一个。
read通过优化,clang 将尝试最小化s的数量,并且如果可能的话store通常会alloca完全消除(仅使用寄存器)。
即使经过优化,确保变量存储在内存中的一种方法是获取其地址(因为寄存器没有地址)。
想知道加载/存储是否也有必要,或者 LLVM 可以不需要它。
每当你写入内存位置时,你都需要store/ 。load所以问题就变成了是否可以不用内存,将所有内容存储在寄存器中。由于 LLVM(与真实机器不同)支持无限数量的寄存器,所以这是一个有效的问题。
然而,正如我提到的,寄存器没有地址。因此,任何获取变量地址的代码都需要使用内存。任何对地址执行算术的代码也是如此,例如索引数组的代码。