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