问题标签 [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.
llvm - LLVM IR phi 节点只有一个可能的前任
当只有一个可能的前任时,使用 phi 节点有什么好处?例如,当我运行时opt -loop-<some specific pass> some-cool-file.ll -S
,如果我还没有添加一个可能的前任,输出将经常包含一个只有一个可能的前任的 phi 节点。
例子:
如果只有一个可能的前任,上述内容不应该与
不要误会我的意思,我是 phi 节点的忠实粉丝,但我只是好奇在只有一个可能的前任时添加 phi 节点时除了提高可读性和警告之外是否还有其他好处。
compiler-construction - 以 SSA 形式获得 LLVM-IR
我目前正在构建一个静态代码分析器,我想使用 Clang,llvm。当将 ac 代码作为输入时,我想要的输出是 SSA 形式的 LLVM-IR(作为文本文件)。我找到了这个页面(How to make clang compile to llvm IR)页面,所以我有一个 LLVM-IR,并且在 LLVM 参考页面中,它说“LLVM 是一个基于静态单一分配 (SSA) 的表示,...... 。”。所以我认为它已经是 SSA 形式了,但是当我查看输出时,它有这样的东西。
这代表了下面的 if 语句。
但据我所知,如果它有一个 SSA 形式,它不应该分配两次相同的寄存器.. 对吗?您认为这不是 SSA 形式吗?还是我错过了什么?
无论如何,假设这不是我正在寻找的 SSA 形式,我搜索并发现我应该使用 mem2reg 优化。但是,我认为上面的代码已经是寄存器形式,但无论如何,就像我在下面两个命令中所做的那样,
clang-3.6 -emit-llvm -o foo.bc -c foo.cl opt -mem2reg -dce foo.bc
第二个命令给了我一个分段错误。所以我有点卡在这里所以有人可以告诉我我做错了什么或如何生成SSA-Form IR吗?
pointers - 为使用指针的函数生成 SSA
我正在尝试使用本文中描述的算法将命令式编程语言转换为管理范式 (ANF):http ://www.sciencedirect.com/science/article/pii/S1571066105825964
在论文中,Zadarnovsky 等人。描述一种将 SSA 程序转换为 ANF 形式的算法,然后继续介绍我目前不感兴趣的优化算法。
我的问题是:如何将指针变量转换为 SSA 形式?
compiler-construction - 我可以将 AST 翻译成 SSA,还是需要先翻译成 CFG 然后再翻译成 SSA?
我可以将抽象语法树直接转换为 SSA 表单,还是需要创建一个控制流图,然后从所述 CFG 创建静态单一分配表单?
在控制流图的上下文中:我如何为类似 c 的程序表示这一点?我想我可以为每个函数中的所有基本块存储一个 CFG 图,但是当我调用一个函数时,这可能会使事情复杂化。我能想到的另一种方法是整个程序的 CFG,即所有源文件,但是我将如何存储有关函数的信息?我可以在基本块(即父节点)中存储指向函数的指针吗?
如果我从 CFG 生成 SSA,我是否需要担心有一个代表语句控制流的 CFG?我想我只需要表示基本的块控制流。
r - 使用 SSA 在 R 中自动预测时间序列
我想使用 R-Studio(RSSA 包)中的奇异谱分析对一堆时间序列进行自动预测。主要问题是我无法确定为每个时间序列选择哪个窗口长度更好。
我尝试对每个时间序列的最后 15 个值进行预测:迭代地(在 N/6 到 N/2 的区间内,其中 N - 时间序列长度)我选择了一个窗口长度,然后我尝试预测值,然后我测量了预测误差(之后我得到了大约 300 个窗口长度值和相应的误差)。然后我选择了一个预测误差最小的窗口长度。这给了我很好的预测结果。
但这个想法是对“未知”值进行预测。所以,我试着这样做:
我切断了时间序列的最后 15 个值。然后我选择了删除 15 个值后剩余的 TS 部分的最佳窗口长度(通过我前面描述的过程)。然后我尝试使用该窗口长度来预测我首先切割的那 15 个值(就像它们是未知的一样)。我得到了可怕的结果。
你们中有人知道我应该尝试什么吗?我被困住了。
graph - SSA 形式的寄存器分配基准
我想在弦图上进行图形着色。我需要一些和弦图和它们的结果来比较我的作品和主题。谁能帮我?例如
这是 CPU2000 基准测试套件的一部分。它是各个基准测试的源代码,以及用于运行基准测试的工具的预编译二进制文件和未提供二进制文件的平台的工具源代码。我只想要它的图表,其中一个主题对我来说就足够了。
谢谢
compiler-construction - 单一静态赋值表单中的全局变量
我正在开发一个将 SSA 用于包含全局变量的语言的编译器。我想知道我应该如何实现全局变量的使用和定义,例如我应该如何转换下面的代码?
非 SSA 表格:
在 SSA 形式中,有些地方我不确定要使用的下标:
我曾考虑过添加 phi 函数,但这似乎并不能解决这些 phi 函数所指下标的问题。
非常感谢,本
clang - 如何生成 LLVM SSA 格式
我编写了以下 C 代码,其中变量 X 被分配了两次:
使用以下命令编译并生成 IR 表示
红外生成
如果我对 SSA 格式的理解是正确的,我们应该在本例中将 x1 和 x2 视为生成的两个 LLVM IR 变量并分别分配两个值 10 和 20。是否有一些我们应该编译以获得 SSA IR 表示的特定选项,或者我对 IR 表示的理解不正确?请指教。
编辑:正如在一个答案中所建议的,使用 -mem2reg 优化传递给了我以下输出
生成的结果 IR
看起来整个 x 分配都使用 mem2reg 优化进行了优化。还有其他方法可以生成和保留不同的 x 值吗?
compiler-construction - 在封闭范围内更新变量的 SSA 表示
当编译器使用 SSA 形式表示代码时,对局部变量的更新成为新变量。但是,当变量在封闭范围内时,这并不总是有效,例如(使用 JavaScript 语法进行说明,这种情况可能发生在许多语言中):
表示这一点的常用方法是什么?
optimization - LLVM opt mem2reg 没有效果
我目前正在使用 LLVM,并正在尝试编写一些优化器来熟悉 opt 和 clang。我写了一个 test.c 文件如下:
我编译了源代码并生成了 2 个 .ll 文件,一个未优化,一个使用 mem2reg 优化器传递:
两个 .ll 文件都给了我以下输出:
所以看来我的 mem2reg 通行证不起作用!会有什么问题?