У меня есть проход, который распознает определенную оптимизацию в коде и может сократить ее до внутреннего вызова, который я добавил к 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
?Этот процесс необходим для моего случая или есть более простой способ?