- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何将代码从 SSA 表示转换为寄存器机器是众所周知的。 (基本上,图形着色寄存器分配是这种转换的核心。)
但是从 SSA 转换为堆栈机的一般方法是什么? (CIL 字节码,在我正在查看的情况下。)鉴于不需要寄存器分配,我希望它更简单?
最佳答案
SSA 基本上是一组“逻辑”门,每个门都有多个输入,通常有一个输出。
所以基本上你需要将每个门视为一组输入的堆栈推送,然后是一个零操作数运算符,它将堆栈值组合到该门的结果中。例如,a + b * c 作为带有乘法累加运算符的 SSA 对 a,b,c 进行 3 次推送,然后是 MAC_TOS 运算符。
如果一个人有一系列这样的门,你可以获取早先的门的输出,它已经在堆栈上,就像它被压入一样。
所以,SSA 计算看起来像一个 n 元的门树,输出在根处。
您可以按固定顺序遍历树,推送尚未推送的操作数,并在计算完所有操作数后生成门运算符。
所以SSA图(树):
a
\
*
b / \
+
c /
\ /
-
/
d
push a
push b
times
push c
push d
subtract
times
关于compiler-construction - 将 SSA 转换为堆栈机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51340463/
我可以将抽象语法树直接转换为 SSA 形式,还是需要创建一个控制流图,然后从所述 CFG 创建静态单一分配形式? 在控制流图的上下文中:我如何为类似 c 的程序表示这一点?我想我可以为每个函数中的所有
引用How to tokenize String in Lex and Yacc但在这篇文章中我正在寻找整数 token 当我收到输入时 a_2 = _6 + b_3; 在lex文件中我想获取a_2作
我一直在研究使用 SSA 指定的 IR 代码 - 特别是以这种形式生成 LLVM IR。但是,当出现具有非平凡复制语义的类型时,我对这是否有效感到困惑。例如, void f() { std::
我想看看 GCC 使用的 SSA 格式,所以我尝试了以下简单的测试程序: #include int main(int argc, char **argv) { int n
我的问题是关于为什么每个 SSA 形式的程序默认都对应一个弦图。 Wikipedia defines弦图为 a chordal graph is one in which all cycles of
最近,我一直想创建一个小型(教育)功能优化编译器。对于优化部分,我想使用SSA。问题是(据我所知,大多数)函数式编程语言都有不可变变量(默认情况下),因此每个变量只分配一次,就像在 SSA 中一样。需
如何将代码从 SSA 表示转换为寄存器机器是众所周知的。 (基本上,图形着色寄存器分配是这种转换的核心。) 但是从 SSA 转换为堆栈机的一般方法是什么? (CIL 字节码,在我正在查看的情况下。)鉴
我使用 Gillespie SSA 制作了一个随机感染模型(寄生虫)。该模型使用“GillespieSSA”包( https://cran.r-project.org/web/packages/Gil
我编写了以下 C 代码,其中变量 X 被分配了两次: int main() { int x; x = 10; x = 20; retur
有一个通行证breaks a constant GEP expression将一条指令的操作数转换成它自己的指令,这样嵌套的 GEP 表达式就变得明确了,因此在后续的传递中更容易处理。 现在我也遇到了
我一直在研究java上的字幕系统。可以保存正常的 .srt 文件并且字幕显示正常。我希望字幕具有不同的属性,例如 diff 字体/颜色/大小,所有这些属性都未编码在普通 .srt 中,该文件必须保存为
LLVM 的 opt -S -mem2reg通过产生所谓的"pruned" SSA -- 删除了所有死 phi 函数的表单。我想将这些 phi 指令保留在 IR 中,获得“最小”SSA,但我找不到一种
这是我目前能想到的: gcc 相关: SSA for Trees Tree SSA – A New Optimization Framework for GCC Tree SSA A New Opti
所以我有视频文件 mp4,并且在不改变其质量的情况下,我想添加 ass hardsubs。 我用 ffmpeg 做这个: 在 window 上: ffmpeg -i input.mp4 -c:v li
我正在实现一个涉及 core.async go 的函数 block ,当我偶然发现一个奇怪的编译错误时: CompilerException java.lang.IllegalArgumentExce
我对 Python(和网络抓取)还很陌生。让我问你一个问题。 许多网站实际上并没有报告其在 Firefox 或其他浏览器中的特定 URL。例如,Social Security Admin 显示了流行的
我是一名优秀的程序员,十分优秀!