GIMPLE был двоичным внутренним форматом, который трудно полностью выгрузить и перезагрузить обратно. По сравнению с LLVM, LLVM IR был спроектирован , чтобы его можно было выгружать и загружать в обычный файл (текстовый и двоичный формат таких файлов полностью конвертируемы друг в друга). Вы можете запустить Clang для запуска LLVMIR, затем запустить программу opt
с некоторыми оптимизациями, затем с другими, и между фазами будут файлы битового кода IR LLVM. И тогда вы можете запустить генерацию кода из ИК-битового кода в собственный код (даже теоретически для не той же платформы, см. Проект PNaCl).
Есть несколько проектов сброса / перезагрузки внутреннего представления GCC. Я знаю, что такой проект был создан для интеграции gcc с коммерческим инструментом компилятора. Автор не может просто связать коммерческий код с gcc, потому что gcc - это VIRAL (он заразит любой связанный код антикоммерческим GPL). Итак, автор написал GPL-дампер / загрузчик GIMPLE в некотором внешнем (xml) формате; проприетарный инструмент смог прочитать и перевести этот XML в другой XML того же формата, а затем он был перезагружен обратно с помощью инструмента GPL.
В более новом gcc у вас есть возможность написать плагин, который является ВИРУСНЫМ (23.2.1) в терминах GPL. Плагин будет работать с представлением программы в памяти, и не будет проблем с выгрузкой / перезагрузкой GIMPLE через внешний файл.
Есть некоторые плагины, которые могут быть настроены / могут использовать предоставленную пользователем программу, например, MELT (Lisp) и GCC Python (Python). Некоторый список плагинов gcc есть