История изменений
Исправление xaizek, (текущая версия) :
Если я правильно понял о чём идёт речь, то вот пример: в llvm на следующем уровне теряется информация предыдущего, если только явно не сохранена, и, скажем, цикл front-end превращает в поток инструкций с condition + jmp, а потом для целей оптимизации эти инструкции эвристиками распознаются в циклы в back-end (всё так не восстановишь, конечно же). В GCC похоже (судя по заголовкам, что я видел), что те же циклы трансформируются с сохранением ссылок на высокоуровневые конструкции, и back-end обходится без костылей, а смотрит на исходные данные, которые предоставляют ему готовую информацию. В llvm это самое сохранение/передача информации между уровнями тот ещё бич, т.е. они разделили всё для каких-то целей, но постоянно борятся с последствиями этого разделения.
Исходная версия xaizek, :
Если я правильно понял о чём идёт речь, то вот пример: в llvm на следующем уровне теряется информация предыдущего, если только явно не сохранена, и, скажем, цикл front-end превращает в поток инструкций с condition + jmp, а потом для целей оптимизации эвристиками эти инструкции распознаются в циклы в back-end (всё так не восстановишь, конечно же). В GCC похоже (судя по заголовкам, что я видел), что те же циклы трансформируются с сохранением ссылок на высокоуровневые конструкции, и back-end обходится без костылей, а смотрит на исходные данные, которые предоставляют ему готовую информацию. В llvm это самое сохранение/передача информации между уровнями тот ещё бич, т.е. они разделили всё для каких-то целей, но постоянно борятся с последствиями этого разделения.