我无法理解SSA图的IR转储中的不同关键字。这些关键字在存在别名时显示。我是从凤凰车间材料的幻灯片中取样并附上相同的。关键词的含义我不清楚:(1)静态,(2)间接和(3)chi算子。 我也有兴趣了解以下IR的含义:
Hi,I am not able to understand the different keywords in IR dump of SSA graph. These keywords are shown up in the presence of aliases. I am taking example from the slides of Phoenix workshop material and attaching the same. Keywords whose meaning is not clear to me are: (1) static, (2) indirect and (3) chi operator. I am also interested in understanding the meaning of following IR:
(1)$ L1:{* StaticTag}< 1>,{* NotAliasedTag}< ; 2>,{* UndefinedTag}< 3> 推荐答案
CHI是部分定义合并点。您可以拥有"必须"的部分定义。其余的是正确的。
我们也使用CHI代替字段/结构
struct MyStruct {int x; int y]
void foo(){
MyStruct s;
sx = 4;
}
IR将
s< 1> = initial
s.x< 2 - ; = ASSIGN 4
s< 3 GT; = CHI s.x< 2>,s< 1>
因为sx是s的部分def,s具有新值,该值是旧值(s< 1>)和新写入的字段(s.x< 2>)的组合。我通常首先解释结构案例然后告诉人们如果你眯着眼睛搞笑,你可以让* p看起来像一个字段存储,你要做的就是将内存划分为桶(虚拟变量),然后只要你知道哪个桶p指向,写入* p有点像写入那个桶的"字段",你把CHI放在那里说"嘿,我摸了一桶",这样如果你有一些东西的使用在桶中,你可以将它连接到chi上的def,因为你至少知道它是最后一次触摸桶。
"StaticTag"表示任何具有非本地生命周期的存储(静态字段,全局变量等)。
"IndirectTag"表示已经"转义"的所有位置,无论运行何种别名分析。通过最简单的分析,IndirectTag可以有效地识别地址采集位置。通过更复杂的分析,对于最终在"IndirectTag"中的地址,您必须获取其地址,然后以分析失去跟踪的方式使用地址。使用我们运行的当前别名分析阶段,其示例是将地址存储在堆中或将其传递给外部函数。
更多推荐
别名的SSA转储格式
发布评论