Контекст существует, чтобы позволить одной программе использовать две библиотеки (скажем, графическую библиотеку и библиотеку 3D-аудио), каждая из которых использует LLVM под колпаком, чтобы их LLVM не мешали друг другу. Правило состоит в том, что вы никогда не можете перемещать объекты LLVM между двумя контекстами. Все модули, типы и константы, созданные с одним контекстом, остаются в этом контексте навсегда. (Верификатор проверит, что все IR в модуле принадлежат одному и тому же контексту, на всякий случай.)
Это невмешательство также может быть полезно для обеспечения безопасности потока, когда вы хотите, чтобы два потока выполняли с LLVM одновременно. Вы не можете объединить контексты позже, но вы можете сгенерировать текст ассемблерного кода и объединить его.
Для удобства также существует глобальный объект, но только программа main () должна использовать его, чтобы у нас не было двух экземпляры LLVM снова вмешиваются.