Как на самом деле снижается внутренний вызов llvm :: memset? - PullRequest
0 голосов
/ 09 июля 2019

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

...