LLVM:如何将一些指令/内在的指令转换为几个链式说明

LLVM: How to convert some instruction/intrinsic into several chained instructions?

本文关键字:指令 说明 几个 转换 LLVM      更新时间:2023-10-16

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

我想添加一个固有/指令foo $x

load $x
modify
store $x

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

那么我该如何解决?我考虑过将伪指令转变为多个说明,但我不确定编译器是否能够将两个连续的foo $x优化到

load $x
modify
modify
store $x

那样。

我通过在mytargetDagtodag的Select方法中添加特殊的内在处理来完成我想要的事情。我已经用链式说明节点替换给定的节点。但这解决了代码生成的问题,我还没有找到解决优化问题的解决方案。