Почему нет разницы, когда я изменяю уровень оптимизации в llvmlite?

Я пытаюсь использовать проходы оптимизации llvmlite для моей собственной программы. Я определил следующую функцию для моего кода как функцию прохода:

def create_pass_manager_builder(opt=3, loop_vectorize=False, slp_vectorize=False):
    pmb = llvm.create_pass_manager_builder()
    pmb.opt_level = opt
    pmb.loop_vectorize = loop_vectorize
    pmb.populate = populate
    pmb.add_dead_code_elimination_pass = add_dead_code_elimination_pass
    pmb.slp_vectorize = slp_vectorize
    pmb.inlining_threshold = _inlining_threshold(opt)
    return pmb

и я пытаюсь запустить его, используя следующее:

module_ref = llvm1.parse_assembly(str(module))
pmb = llvm.create_pass_manager_builder()
pmb.opt_level = 3
pm = llvm.create_module_pass_manager()
pmb.populate(pm)
pm.run(module_ref)

Имея это, у меня есть некоторая оптимизация для моего кода. Однако, когда я изменяю уровень оптимизации с 3 на 2 или 0, для оптимизации нет разницы. Как я могу изменить уровень оптимизации и увидеть разницу?

1 ответ

Оптимизации не используют уровень оптимизации самостоятельно. Это зависит от вас, как вы строите менеджер проходов или, в этом случае, от того, как это делает функция заполнения. Немного покопавшись, я обнаружил, что в вашем случае, когда вы просто используете менеджер проходов модулей, ваша функция заполнения запустит эту функцию http://llvm.org/doxygen/PassManagerBuilder_8cpp_source.html есть некоторые ссылки на optLevel, и вы можете проверить если оптимизации в зависимости от этого действительно применимы для вашего кода. Если код, который вы оптимизируете, не проходит через эти оптимизации, вы не увидите никакой разницы.

Другая проблема заключается в том, что я не совсем уверен, вызываете ли вы правильную функцию create_pass_manager_builder, которая на самом деле имеет некоторое определение по умолчанию в llvmlite с фиксированным уровнем opt 2. Я думаю, это должно быть

pmb = create_pass_manager_builder()

скорее, чем

pmb = llvm.create_pass_manager_builder()
Другие вопросы по тегам