Наиболее важные изменения при переходе от lcc-1.26 к lcc-1.27 (changelog)

Изменения, затрагивающие совместимость

  • По аналогии с gfortran-10 изменилась реакция компилятора на несовпадение типа аргумента операции вызова типу фактического параметра. Теперь вместо предупреждения выдаётся ошибка. Для совместимости со старыми программами по опции -fallow-argument-mismatch повторяется старое поведение, т.е. выдача ошибки вместо предупреждения

  • Следующие устаревшие атрибуты более не поддерживаются (в скобках указаны атрибуты, на которые их следует заменить):

    • __attribute__((no_associative_math)) [ __attribute__((optimize("-fno-associative-math"))) ]

    • __attribute__((no_fp_spec)) [ __attribute__((optimize("-fno-spec-fp"))) ]

  • Следующие устаревшие опции более не поддерживаются (в скобках указаны опции, на которые их следует заменить):

    • -fcontrol-spec (-fno-semi-spec-ld)

    • -fno-control-spec (-fno-spec-ld)

    • -fno-control-spec-globals (-fsemi-spec-ld-glob)

    • -fno-control-spec-stack (-fsemi-spec-ld-stack)

    • -fno-control-spec-greg (-fsemi-spec-ld-greg)

    • -fno-ld-spec (-fno-semi-spec-ld -fno-spec-ld)

    • -fno-fp-spec (-fno-spec-fp)

    • -fdisable-spec-ctp (-fno-spec-ctp)

    • -fomp-for-procs=<proc_list>

    • -fno-ipo-region

    • -fipo-min-region-size=<n>

    • -fipo-max-region-size=<n>

  • Изменилась реакция на синтаксические ошибки в некоторых директивах #pragma: теперь вместо предупреждений выдаются ошибки

Общие улучшения

  • Переход на совместимость с gfortran-10.3.0. В lcc-1.26 была совместимость с gfortran-5.5.0

  • Переход на edg-6.3. В lcc-1.26 использовался edg-6.2

  • В режиме языка Fortran изменился стандарт по умолчанию. По умолчанию используется режим -std=gnu, как и в lcc-1.26. Но теперь это означает “язык Fortran 2018 с gnu-расширениями”, в lcc-1.26 это означало “язык Fortran 95 с gnu-расширениями”

  • Доработка поддержки OpenMP:

    • Добавлена поддержка конструкций: teams, distribute, target (в режиме игнорирования)

    • Добавлена поддержка clause aligned в конструкции omp simd

    • Добавлена поддержка 64-битных границ распараллеленных циклов

    • Добавлена поддержка OpenMP в режиме -mptr128 (начиная с lcc-1.27.07)

    • Добавлена поддержка опции -fopenmp-simd (начиная с lcc-1.27.07)

    • Добавлена поддержка выражений в clause’ах if и num_threads для C/C++ (начиная с lcc-1.27.04)

  • Улучшен синтаксический разбор для цикловых директив #pragma, требующих константные значения в качестве параметров (пока кроме #pragma omp). Теперь в качестве константного значения можно использовать const/constexpr-переменные и константные параметры template’ов

  • Добавлена поддержка __attribute__((optimize)) для следующих опций:

    • -fomit-frame-pointer, -fno-omit-frame-pointer (в виде игнорирования)

    • -funroll-loops, -fno-unroll-loops (в виде игнорирования)

    • -fgsr, -fno-gsr

    • -fdce-fp, -fno-dce-fp

    • -fint-divide-opt, -fno-int-divide-opt

  • Добавлена поддержка __attribute__((assume_aligned)) - позволяет указать выравнивание указателя, возвращаемого функцией, и избавить компилятор от необходимости строить динамические проверки выравнивания указателей при автоматической векторизации.

  • Следующие опции теперь могут принимать неманглированные имена процедур:

    • -fprofile-skip-proc=

    • -frestrict-disable=

    • -fno-tls-list=

  • Добавлена опция -frestrict-locals для трактовки локальных указателей как с модификатором restrict

  • Добавлена опция -frestrict-safe для включения более консервативного анализа зависимостей для restrict-указателей

  • Добавлена опция -Wmaybe-use-out-of-scope для выдачи предупреждений о возможном использовании адреса автоматической переменной за пределами её времени жизни

  • Добавлена опция -Wuninitialized-extra для выдачи предупреждений об использовании гарантированно неинициализированных полей автоматических переменных типа структура, класс

  • Добавлена опция -Wmaybe-uninitialized-extra для выдачи предупреждений об использовании возможно неинициализированных полей автоматических переменных типа структура, класс

  • Доработана выдача отчёта о применении оптимизаций (опция -fopt-report[=N]). Реализованы уровни отчёта 4 (указание причин, по которым важные оптимизации не смогли отработать) и 5 (подсказки по улучшению производительности).

Доработки оптимизаций

  • Реализовано удаление мертвых переходов на фазе планирования и распределения регистров

  • Реализована автоматическая векторизация конверсий типов