2010-04-23 4 views
9

Я пытаюсь сделать LLVM встроенной функцией из библиотеки.Сделать LLVM встроенной функцией из библиотеки

У меня есть LLVM файлы (битового кода, сгенерированные вручную), что я связан с llvm-link, и у меня есть библиотека (написанный на C) скомпилирован в clang от битового кода и архивируются с llvm-ar. Мне удается связать все вместе и выполнить, но мне не удается получить LLVM, чтобы встроить функцию из библиотеки. Есть ли какие-то подсказки о том, как это сделать?

ответ

8

После того, как вы связали файлы биткода вместе с библиотекой, вы запустите проход «Интернационализировать» связанного битового кода? Интерполяционный проход делает все функции (помимо main()) статическими и сообщает оптимизатору/генератору кода, что функции могут быть надежно встроены без сохранения копии для некоторой (несуществующей) внешней ссылки.

Я вручную связываю файлы своего битового кода и библиотеки битовых кодов, используя код, заимствованный из llvm-ld, и я выполняю интернализацию, но я не уверен, что llvm-link выполняет интернализацию или нет.

+0

Работает как очарование – capitrane

+0

Как я могу начать сеанс интернализации? – osgx

+0

@osgx: посмотрите 'createInternalizePass' (' lib/Transforms/IPO/Internalize.cpp'). –