LLVM:如何将一些指令/内部转换为几个链式指令?

时间:2017-11-29 13:38:05

标签: c++ compiler-construction llvm llvm-ir

基本上,假设我有3条说明:load $srcstore $destmodify

我想添加一个内在/指令foo $x,就像

一样
load $x
modify
store $x

加载和存储只修改一个无法直接访问的特殊寄存器。 我面临的问题是,出于某种原因,输出多个指令的表格中的Pattern<...>无法编译,Pat<...>因为指令不在; t直接使用彼此的结果(即特殊寄存器参数是隐含的),所以我不能(或者不知道如何)从它们创建单节点dag模式。

那么我该如何解决这个问题呢?我想过变成一个伪指令并将其降低到多个指令,但我不确定编译器是否能够优化两个连续的foo $x进入

load $x
modify
modify
store $x
那样。

1 个答案:

答案 0 :(得分:0)

通过在MyTargetDAGtoDAG的 case START_LOADING: state = { status: 'LOADING', result: [], }; break; 方法中添加特殊的内在处理,我设法做了我想要的事情。我已经用链式指令节点替换了给定节点。但这解决了代码生成的问题,我还没有找到优化问题的解决方案。