Моно LLVM и LLVM-IR - PullRequest
       9

Моно LLVM и LLVM-IR

14 голосов
/ 15 июня 2011

Я играю с Mono LLVM (http://www.mono -project.com / Mono: Runtime: Documentation: LLVM), и похоже, что они используют LLVM здесь как JIT, а не как генератор кода.Но, согласно документам, они проходят через LLVM-IR перед генерацией собственного кода:

  1. сначала нормальный моно JIT IR генерируется из кода IL
  2. , IR преобразуется в SSAform
  3. IR преобразуется в LLVM IR
  4. LLVM IR компилируется LLVM в собственный код

Итак, мне интересно, есть ли способпоймайте эту 3-ю фазу и используйте ИК, чтобы подать мой бэкэнд LLVM.Это позволило бы мне бесплатно загрузить C # для LLVM-IR.

Спасибо за любую помощь!

1 Ответ

4 голосов
/ 25 декабря 2011

Поддержка LLVM в Mono работает при попытке загрузить libmono-llvm.so из соответствующего $libdir, например. на OSX /usr/bin/mono загрузится /Library/Frameworks/Mono.framework/Libraries/libmono-llvm.dylib. См. Код загрузки LLVM в mono / mini / mini-llvm.h , в частности mono_llvm_load () и try_llvm_load () .

Похоже, если вы назовете свой бэкэнд LLVM mono-llvm, он будет использоваться при запуске моно как mono --llvm. Тем не менее, mono_llvm_load(), по-видимому, требует определенных экспортов из библиотеки mono-llvm, таких как mono_llvm_init и mono_llvm_cleanup, поэтому я уверен, что потребуется некоторая дополнительная работа с вашей серверной частью LLVM, чтобы Mono мог используйте его, и я не уверен, где это выяснить (кроме grep ping для "LLVM" в источниках Mono ...).

Это также означает, что бэкэнд LLVM нельзя использовать повторно из предварительно встроенного моно; то есть вам может потребоваться создать собственный моно, чтобы использовать бэкэнд LLVM, так как монофонический сборочный файл будет обеспечивать бэкэнд mono-llvm, который может быть не подключаемым. (Понятия не имею, насколько подключаемым или нет подключаемым является бэкэнд LLVM.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...