LLVM 中的部分 SSA

问题描述 投票:0回答:1

我在 LLVM 中遇到了部分 SSA 的概念,其中 LLVM 标识了两类变量:(1) 顶级变量是那些不能通过 指针,即其地址从未通过地址运算符公开或通过动态内存分配返回的指针; (2) 地址获取变量是那些已经暴露了地址的变量,因此可以通过指针间接引用

此定义逐字来自本文

论文用一个例子进一步解释,我似乎无法理解。

是否有一个更简单的示例或我可以研究的任何其他资源?

任何帮助将不胜感激。

clang llvm llvm-ir llvm-c++-api
1个回答
0
投票

要了解部分 SSA,最好记住 SSA 形式。在部分 SSA 形式中,我们仅表示 SSA 形式中的顶级变量。地址获取的变量永远不会显式表示(因此,名称为部分 SSA)。地址获取变量只能通过指向它的顶级变量来访问。通常,这些访问是通过 LOAD 和 STORE 指令进行的。此外,地址获取变量和顶级变量之间的链接通常是通过 ALLOC 指令建立的。

以上述论文图 1 中给出的例子为例。在该示例中,w、x、y 和 z 是顶级变量,a、b、c 和 d 是地址获取变量。因此,我们注意到w_1、x_1、y_1、z_1、y_2和z_2,它们都是w、x、y和z的SSA形式表示。每当我们有涉及地址获取变量的指令时,我们都会看到基于相应顶级变量的 ALLOC、LOAD 和 STORE。地址变量从未以 SSA 形式明确表示。

© www.soinside.com 2019 - 2024. All rights reserved.