Jump to content

    

GCC 5 оптимизация

Хотел бы поинтересоваться у людей - использует ли кто-нибудь GCC 5 при полной оптимизации в проектах ?

В gcc 5 (последний от launchpad) полно багов.

Вот ссылка на баг-репорт.

Есть ли смысл пробывать 4ю версию (или, может, другую 5ю ?).

Переехал недавно с IAR - просто в шоке.

Share this post


Link to post
Share on other sites
arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors) 5.4.1 20160609 (release) [ARM/embedded-5-branch revision 237715]

Собирал ряд проектов для Cortex-M3/M4 и ARM926EJ. Всюду оптимизация -O2, багов нет.

Share this post


Link to post
Share on other sites

Использую последнюю ланчпадовскую сборку и с -Os и c -Ofast, cortex M3, M7, A9 (с TDM7 давно тестировал).

Везде проект ведёт себя предсказуемо...

 

arm-none-eabi-gcc -c -mcpu=cortex-m7 -mthumb -mfloat-abi=hard -mfpu=fpv5-sp-d16 -fno-math-errno -funroll-loops -fgraphite -ffunction-sections -fdata-sections -ffat-lto-objects -Ofast -flto -gdwarf-2 -fomit-frame-pointer -Wall -Wstrict-prototypes -

DNDEBUG=1 -DCPUSTYLE_STM32F7XX=1 -DSTM32F746xx=1 -MD -MP -MF ./dep/bandfilters.o.d -I../../CMSIS-SP-00300-r4p5-00rel0/CMSIS/Include -I../ ../bandfilters.c -o bandfilters.o

arm-none-eabi-gcc -c -mcpu=cortex-a9 -march=armv7-a -mfloat-abi=hard -mfpu=vfpv3-d16 -fno-math-errno -funroll-loops -fgraphite -ffunction-sections -fdata-sections -ffat-lto-objects -Ofast -flto -gdwarf-2 -fomit-frame-pointer -Wall -Wstrict-prototype

s -DNDEBUG=1 -DCPUSTYLE_R7S721=1 -DCPUSTYLE_R7S721020=1 -MD -MP -MF ./dep/bandfilters.o.d -I../ -I../rza1x_inc ../bandfilters.c -o bandfilters.o

Например так вызывается.

Edited by Genadi Zawidowski

Share this post


Link to post
Share on other sites
Собирал ряд проектов для Cortex-M3/M4 и ARM926EJ. Всюду оптимизация -O2, багов нет.

Не могли бы Вы протестить 'gcc_bug2.tar' (с баг-репорта) у себя ? Собственно, это я баг-репорты запостил.

Share this post


Link to post
Share on other sites
Не могли бы Вы протестить 'gcc_bug2.tar' (с баг-репорта) у себя ? Собственно, это я баг-репорты запостил.

Уже :) Таки да, воспроизводятся оба.

Share this post


Link to post
Share on other sites
Уже :) Таки да, воспроизводятся оба.

Мне на этой неделе продукцию отгружать. С виду все работает (опустился до -O1), но коленки дрожат. Если ли смысл в срочном порядке переходить на 4.9 ?

Share this post


Link to post
Share on other sites

5й GCC такой профит мощный даёт, что не можете на 4.9 откатиться? Просто интересно. Сам сижу на GCC 4.9

Share this post


Link to post
Share on other sites

В 4.9 есть регрессии по размеру. В 5-ке не проверял, возможно вылечили.

Кроме того в 5-ке есть поддержка ARMv8-M, хотя не очень понятно зачем это может быть нужно сейчас.

Share this post


Link to post
Share on other sites

Я использую 4.8 (в основном потому, что 4.9 немного раздувает размер кода, там и библиотека местами раздулась). Жду, когда смелые и безбашенные вроде вас найдут все глюки в новых версиях :biggrin:

Share this post


Link to post
Share on other sites

Оказался сам дурак (давненько не было проблем с оптимизацией).

Смотрите ответы.

Придется весь сторонний код как-то тестить и проверять и самому быть гораздо аккуратнее (оптимизация очень жесткой оказалась).

Share this post


Link to post
Share on other sites

Качество кода lwip во всей красе, UB на UB и UB погоняет.

ЗЫ А варнинги это тоже пропустили?

Share this post


Link to post
Share on other sites
Качество кода lwip во всей красе, UB на UB и UB погоняет.

ЗЫ А варнинги это тоже пропустили?

Я бы не стал вот так огульно. Этот баг был исправлен 3 мая 2012 года, то есть после выхода версии 1.4.0, но перед выходом 1.4.1. Кроме того, в обсуждении было сказано, что этот баг может вылезти только в том случае, если лёгкий выход за границу массива вдруг попадёт в защищённую область памяти и вызовет срабатывание защиты. Кто же мог предположить, что компилятор, увидев такое, воспримет это как индульгенцию генерировать чудо-юдо код? Я бы сказал, что это минус авторам gcc - в такой ситуации неплохо было бы хотя бы предупреждение выдать.

Кроме того, это говорит о пользе обновления до последнего релиза. В конце концов, есть надежда, что будет исправлено больше старых багов, чем добавлено новых :laughing:

Share this post


Link to post
Share on other sites

UB ж и есть индульгенция, по стандарту, так что gcc'шники полностью в своём праве. Впрочем раз исправили, значит отчасти и правда огульно.

Share this post


Link to post
Share on other sites
UB ж и есть индульгенция, по стандарту, так что gcc'шники полностью в своём праве.

Если не выдали при этом предупреждение - это свинство. За такое в приличном обществе в харю трескают. А так да.

Допускаю, что алгоритмы оптимизации могут быть такими, что там непросто прицепить предупреждение. Но надо хотя бы попытаться :laughing:

Share this post


Link to post
Share on other sites

Опишите подробней плиз по-русски о чем речь (я так понимаю, какие то баги по части DHCP в lwip)

И что есть UB?

 

Сам пользую lwip 1.4.1 и GCC 5 с максимальной оптимизацией и как раз наблюдаю странное поведение ПО.

Edited by k000858

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this