Наиболее важные изменения при переходе от 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 (подсказки по улучшению производительности).
Доработки оптимизаций¶
Реализовано удаление мертвых переходов на фазе планирования и распределения регистров
Реализована автоматическая векторизация конверсий типов