问题标签 [ssa]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
75 浏览

javascript - 如何从 SSA IR 中的指令中提取操作数和运算符

我正在尝试在 SSA IR 指令与 JavaScript 文件的原始指令之间建立映射。我已经得到了 JavaScript 文件的 IR。但是红外输出让我很困惑。我正在使用 Watson Libraries for Analysis (WALA) 来生成 SSA IR。输出IR如下:

我的测试代码是:

如何将此代码映射到 IR 并识别操作数和运算符?任何帮助将不胜感激。

0 投票
0 回答
44 浏览

abstract-syntax-tree - CFG 中应该包含哪些节点?

我正在为其服务器端编译器未优化的语言(LSL)编写源代码级优化器。优化器在常量折叠等某些领域工作并表现良好,但为了使其更强大,我想构建一个 CFG,以启用/简化跳转优化、死代码删除以及以后从 SSA 中受益。

现在,由于它是源代码级别的,我无法将代码转换为 3AC 之类的东西,否则我可能会创建一个实际上不如原始版本优化的版本。

所以我的问题是:我会在 CFG 中包含哪些内容?合乎逻辑的答案是存储代表整个语句的 AST 节点。我面临的问题是表达式可能会调用用户函数,而这些函数可能会改变全局变量,这会影响 SSA 表单,这就是为什么我想将这些函数作为同一图表的一部分,而不是不同的图表。

0 投票
1 回答
678 浏览

llvm - LLVM 中基于机器代码的控制流图

LLVM 通常为其中间表示 (IR) 语言提供控制流图 (CFG)。您还可以轻松获得基于源代码的高级 CFG。我想获得机器代码级别的 CFG。有没有办法得到这个?

我做了一点挖掘。在 LLVM 的后端代码生成阶段,有一个称为SSA-based Machine Code Optimizations的阶段。这个阶段的信息不多。但是,我猜 LLVM 在某个中间阶段会生成基于 SSA 的机器代码。如果存在这样的阶段,那么我们可以根据该阶段的代码来制作基本块。使用这些基本块,可以在该阶段创建 CFG。lib\CodeGen任何人都可以提供关于我必须在 LLVM 源代码树(可能在)中查找的任何信息的源文件的任何线索吗?或者class那会给我基于 SSA 的机器代码演练和基本块?我将不胜感激任何指针。

0 投票
1 回答
544 浏览

assembly - ASM 代码生成前瞻性和复杂性

我有一个带有 funcDef、funcCall、文字等节点的 AST。我正在研究我的编译器的代码生成器部分,为 x86_64 生成程序集。我的问题是生成 AST 的代码的“正确”(行业标准)方式是什么:是否多次传递,例如计算需要多少局部变量以便使用该值来递减堆栈指针? 此外,复杂的 AST(例如 funcCall 的参数是另一个 funcCall 等)如何解析为 ASM?

将我的 AST 转换为非常简单的 IR(SSA?)是否明智?另外,由于我对代码生成理论非常无知,是否有任何专注于此的好书?

谢谢!

0 投票
0 回答
217 浏览

compiler-construction - 计算行政范式

管理范式是代码的中间表示,适合编译器使用,在逻辑上等同于单一静态赋值,但有一些优点。例如,检查一个程序是否是有效的 SSA 形式是一个关于通过图的可能路径集的存在性问题。然而,检查一个程序是否是一个有效的 ANF 表达式只是本地语法的问题。

从严格的函数式代码生成 ANF 非常容易,但我有兴趣从包含变量更新、循环等的命令式代码生成它。

有将 SSA 转换为 ANF 的简单算法。但是,如果您想快速生成 SSA,那么首先生成 SSA 就变得非常重要。看起来很直观,如果您最终想要的是更直接、更透明的格式,那么直接生成它而不是通过更不透明的格式应该更有效。

是否有已发布的算法可以直接从命令式代码生成 ANF?

0 投票
1 回答
100 浏览

compiler-construction - 边缘分割 SSA 的使用

代码的静态单一分配 (SSA) 表示几乎但不完全规范;有两种风格,vanilla 和edge-split,其中根据需要插入额外的节点,以使每个循环只有一个后边缘。基本原理:添加边缘分割约束使某些优化更容易一些。

我真正想知道的是边缘分割约束是否总体上值得拥有,但这是一个判断要求,所以对于一个具体的事实问题:

以下使用 SSA 的知名编译器是否使用边缘分割约束?

  • 海合会
  • LLVM
  • 蜘蛛猴
  • V8
0 投票
1 回答
145 浏览

c - GCC SSA 格式中变量的含义

我想看看 GCC 使用的 SSA 格式,所以我尝试了以下简单的测试程序:

gcc -fdump-tree-all a.c除其他外,编译并获得a.c.016t.ssa了以下内容:

大部分内容都很清楚,但这是什么argc_5(D)意思?有什么关系int D.2186吗?

0 投票
2 回答
611 浏览

time-series - 使用(多变量)奇异谱分析降维

我在各个渠道给出了时间序列。在时间序列中有两个主要的振荡“隐藏”并分布在所有通道上。我想使用多元奇异谱 (mSSA) 分析来提取这些振荡。

我是 SSA 的新手,在我看来,SSA 并不是真正的降维方法,而是一种“去噪”方法。即,我真的不能真正提取主要振荡,因为在分组、反投影和对角线平均之后,我在所有通道中都得到了信号,但不是真正的作为主要振荡的单个信号(PCA 会提供)?

另一方面,特征向量(尽管由于汉克尔化而及时缩小)似乎正是我正在寻找的振荡。我可以通过简单地将特征向量视为主要振荡来使用 SSA 进行降维吗?

0 投票
2 回答
1079 浏览

compiler-construction - 将 SSA 转换为堆栈机

众所周知,如何将代码从 SSA 表示转换为寄存器机器。(基本上,图形着色寄存器分配是这种转换的核心。)

但是从 SSA 转换为堆栈机的一般方法是什么?(CIL 字节码,在我正在查看的情况下。)我希望它更简单,因为不需要寄存器分配?

0 投票
0 回答
87 浏览

go - 执行 SSA 代码

我在文本文件中有一个 SSA 代码,它是从 golang 生成的。

如何编译此 SSA 代码并执行它?

PS我没有原始的go代码。