Ответ 1
LLVM называется LLVM (виртуальная машина низкого уровня) по уважительной причине. Он настолько низкоуровневый, что вы не привязаны к какой-либо определенной семантике для вашего исходного языка.
В LLVM есть несколько полезных вещей, которые упрощают компиляцию некоторых параллельных языков - например, переходы на произвольные блоки: http://llvm.org/docs/LangRef.html#blockaddress p >
И LLVM не подразумевает каких-либо конкретных свойств времени выполнения, не вызывает какой-либо конкретной реализации GC. Вы можете построить все, что захотите, поверх него.