У меня есть IRVL-файл llvm, который содержит такие инструкции, как fadd и fmul.Эти инструкции при расчете стоимости с проходом модели затрат
opt -analyze -targetlibinfo -cost-model myIRFile.ll
Я также создал свой собственный проход и запустил этот проход в своем коде.Но когда я делаю это, я получаю разные результаты, несмотря на то, что он работает в той же системе.В основном только 1 и 0, но никогда не 2, когда я запускаю его с опциями.См. Также прикрепленный скриншот, верхняя часть - вариант opt, а нижняя - мой собственный пропуск.
В основном я воспроизвел этот пропуск, как описано ниже. CostModel.cpp , и это прекрасно работает, за исключением того, что результаты отличаются.Там нет никаких ошибок, но, как вы можете видеть на изображении, инструкции fadd и fmul по праву имеют стоимость 2. К сожалению, в моем собственном проекте это просто получаетсябыть 1.
Я также попытался реализовать весь анализ затрат, вызвав все инструкции, как описано в TargetTransformInfoWrapperPass.Он также отлично компилируется, но дает те же результаты.
Еще одна опция, которую я пробовал, была размещена здесь на stackoverflow: Получите циклы процессора LLVM IR с помощью CostModel .Мне пришлось внести незначительные корректировки, но результаты для fmul и fadd одинаковы - только для одной и той же инструкции.
По-видимому, передача модели стоимости через opt делает что-то еще, о чем я не знаю, ноЯ ничего не могу найти по этому поводу.
Когда вы прочитали весь этот пост и знакомы с LLVM и имеете какое-либо представление о том, что может быть причиной или может указывать мне в другом направлении, я был бы очень благодарен, потому что эта проблема сводила меня с ума уже несколько недель.