我有一个通行证,可以识别代码中的某种优化并将其缩短为我添加到include/llvm/IR/Intrinsics.td
的内部调用。优化完成后,我想稍后将其降低至库调用。
我以llvm.memset
为例,但是我不知道内在函数的降低位置。 CodeGen/IntrinsicLowering.cpp
中有一些代码,但是每当我在其中添加代码的case语句时,就永远不会访问它。看来llvm.memset
在SelectionDAG进程中正在降低。此外,我看来,许多不同的代码段都可以降低llvm.memset
。
Target/*/*FastISel.cpp
通过调用Intrinsic::memset
似乎降低了lowerCallTo
。CodeGen/IntrinsicLowering.cpp
似乎通过调用ReplaceCallWith
来降低它。CodeGen/SelectionDAG/SelectionDAG.cpp
似乎使用getMemset
令人困惑的是,这些文件似乎是编译过程中不同部分的一部分,但对于memset
似乎做同样的事情。当然,我误会了。
实际上谁在降低memset
内在函数?此过程是否适合我的情况?还是有更简单的方法?