2013-03-21 2 views
4

Я пишу ModulePass и вызываю его с помощью opt -load. Я бы потребовал, чтобы alloca был переведен на регистрацию при прохождении моего прохода, используя переключатель -mem2reg для выбора.Укажите зависимость моего прохода LLVM на проходе mem2reg

Существует link, что указывает на то, что проход PromoteMemoryToRegsiter является прохождением трансформации и, как таковой, не должен требоваться моим проходом. Это заявление с 2010 года. Сохраняется ли это?

Один из постов я нашел предложил что-то вроде

AU.addRequiredID(PromoteMemoryToRegister::MemoryToRegisterID); 

но противоречили поста я связан выше.

Так что мой вопрос в том, как я могу выразить эту зависимость для моего прохода, если это возможно? Как выразить, в общем, такие зазоры? И в чем разница между прохождением трансформирования и, ну, другим проходом?

ответ

5

В чем разница между передачей трансфера и другим проходом?

Проход трансформации - это пропуск, который может аннулировать результаты других проходов.

Как я могу выразить эту зависимость для моего прохода?

Прежде всего, рекомендую прочитать the pass-dependency section of the official "how to write a pass" guide. В любом случае правильный способ добавления зависимостей между проходами преобразования состоит в том, чтобы добавить один из них в другой менеджер вашего пропуска (see the guide section on the pass manager), или, если вы просто вызываете opt, затем добавьте все пропуски, которые вы хотите, в том порядке, в котором вы хотите они происходят, например:

opt -load mypass.so -mem2reg -mypass 
+0

Мы собираемся туда и обратно между использованием 'opt' и писать свой собственный экземпляр, который использует' PassManager', пока не уверен. Если порядок так легко достичь, то это пока достаточно хорошо :) – Jens

Смежные вопросы