Я делал нечто подобное в прошлом.Вы должны понимать, что битовый код LLVM не является «переносимым» в том смысле, что он не является полностью независимым от машины.Файлы битовых кодов знают такие вещи, как размер указателей и т. Д., Которые зависят от целевого процессора.
Сказав, что в прошлом я компилировал программы и их библиотеки поддержки для битового кода и связывал битовый кодфайлы вместе, прежде чем создавать файл сборки для всей программы.Вы правы в том, что соглашения о вызовах не важны для внутренних вызовов, но для вызовов, совершаемых снаружи (или снаружи), все еще требуется соблюдение ABI.
Возможно, вы сможете разработать свой игрушечный язык таким образомтаким образом, вы можете избежать зависящего от процессора битового кода, но вам нужно быть очень осторожным.
Я заметил, что объединение файлов битового кода заняло довольно много времени, особенно на высоких уровнях оптимизации.Возможно, это ускорилось, я сделал это с LLVM 2 или 3 года назад.
И последнее замечание: в зависимости от целевого процессора вам, вероятно, понадобится эквивалент libgcc.a или compiler-rt.обрабатывать вещи, которые процессору не нравятся с плавающей запятой или 64-битным целым, если у процессора нет инструкций, выполняющих эти операции.