别名的SSA转储格式 [英] SSA dump format for alias

查看:105
本文介绍了别名的SSA转储格式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我无法理解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转储格式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆