NB>да видел я.
NB>просто интересно, для LLVM биндинги на нет появились, или вручную формирует, и дальше llc вызывает.
Нет, биндингов на НЕТ я не видел, да и чтоб прочувствовать что можно вытрясти из LLVM лучше их самому написать... тем более что у них частенько интерфейсы меняются — например дебажный, так что это еще позволяет быть в курсе вещей. щас (пару месяцев назад перерефакторили) он слизан с Phoenix SDK — каждая инструкция помечается тегом с метаданными с дебажной инфой ( а раньше вставлялись специальный debug-инструкции для отделения языковых статементов в ЛЛВМ коде). плюс такого подхода — отоптимайженный код можно будет дебажить.
llc вызывать не нужно — llc это CLI интерфейс к кодогенерирующим функциям LLVM'а. слинковался с LLVM — можешь делать что любая LLVMная тулза умеет.
Добавил полную поддержку X86 asm, для извращенцев (ассемблерные блоки разделены на блоки по фичам, блоки выбираются в рантайме). асм вреден, но полезен %) всё грамотно состыковано с остальными языковыми конструкциями, так бы в С++ былоб...
PS. к сведению, LLVM не умеет асм вставлять, только в gcc/AT&T-style да и то через &^$$%^#, т.к. потом эта строка в голом виде вставляется в асмовый листинг. а у меня все похакано и сделано, ы =)
Я им предложил сделать аналог DataInstruction из PhoenixSDK — которая есть блоб бинарных данных, в который асм прошит, + к ней указывается точки релокаций + register kill set, соответственно получаем поддержку для асма, но к сожалению Крис Латтнер с потрохами продался Apple'у и теперь у него другие приоритеты %)
кстати, асмовые блоки
выглядят примерно так (решил тряхнуть стариной и пару простеньких функций накатать под разные процессорные фичи)