Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: EWARM 5.20 - Опция оптимизации: Type-based alias analysis
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Faradey
IAR C/C++ Compiler for ARM 5.20.3.51069 (5.20.3.51069)

интересная опция оптимизатора - Type-based alias analysis
в проекте под STM32F103VB на Си при выбранном "Allow IAR extensions" ее включение приводит к тому, что код "не работает" вообще.
причем вот что пишут в "IAR C/C++ Development Guide":

Цитата
Type-based alias analysis
When two or more pointers reference the same memory location, these pointers are said
to be aliases for each other. The existence of aliases makes optimization more difficult
because it is not necessarily known at compile time whether a particular value is being
changed.
Type-based alias analysis optimization assumes that all accesses to an object will take
place using its declared type or as a char type. This assumption lets the compiler detect
whether pointers may reference the same memory location or not.
Type-based alias analysis is performed at optimization level High. For ISO/ANSI
standard-conforming C or C++ application code, this optimization can reduce code size
and execution time. However, non-standard-conforming C or C++ code might result in
the compiler producing code that leads to unexpected behavior. Therefore, it is possible
to turn this optimization off.
Note: This option has no effect at optimization levels None, Low, and Medium.

Example
short f(short * p1, long * p2)
{
*p2 = 0;
*p1 = 1;
return *p2;
}
With type-based alias analysis, it is assumed that a write access to the short pointed to
by p1 cannot affect the long value that p2 points to. Thus, it is known at compile time
that this function returns 0. However, in non-standard-conforming C or C++ code these
pointers could overlap each other by being part of the same union. By using explicit
casts, you can also force pointers of different pointer types to point to the same memory
location.


кто что думает по этому поводу?

З.Ы. ворнингов при компиляции, сборке нет.
IgorKossak
С тех пор, как появилась эта опция оптимизации, она у меня постоянно включена. В частности для STM32F103 в проектах с ОС и без, на С и на С++.
А что касается глюков, то я их обычно выискиваю по листингу и в процессе отладки, как и все остальные, я думаю. И это вполне нормальный путь вместо того, чтобы заявлять, что включение той или иной опции оптимизации приводит к неработоспособности программ ВООБЩЕ.
Если хотите, чтобы Вам конкретно помогли, то выложите здесь минимально возможный кусок программы, в котором проявляется неработоспособность.
Непомнящий Евгений
Цитата(Faradey @ Dec 2 2008, 19:40) *
интересная опция оптимизатора - Type-based alias analysis
в проекте под STM32F103VB на Си при выбранном "Allow IAR extensions" ее включение приводит к тому, что код "не работает" вообще.


Ну дык не по стандарту работаете с указателями - вот и получаете проблемы... На самом деле там довольно много ограничений, о чем вас собственно в гайде честно предупреждают.
Faradey
Цитата(Непомнящий Евгений @ Dec 3 2008, 07:19) *
Ну дык не по стандарту работаете с указателями - вот и получаете проблемы... На самом деле там довольно много ограничений, о чем вас собственно в гайде честно предупреждают.


да, меня только смущает выражение "не по стандарту". Весьма спорное утверждение в свете дефолтных установок компилятора в режим "Allow IAR extensions" и автоматическом включении этой опции при выборе максимальной оптимизации.
Вообще интересовало мнение "пострадавших", но повидимому один я так споткнулся.
В любом случае спасибо, будет время разберусь и во всем сознаюсь 01.gif .
Непомнящий Евгений
Цитата(Faradey @ Dec 3 2008, 12:12) *
да, меня только смущает выражение "не по стандарту".

Стандарт накладывает довольно жесткие ограничения на работу с указателями... Например, обращаться к long через указатель на short - UB. Пока эта оптимизация выключена - иар такие вещи прощает. Когда включаете - получаете проблемы.
ARIM
Цитата(Faradey @ Dec 2 2008, 19:40) *
IAR C/C++ Compiler for ARM 5.20.3.51069 (5.20.3.51069)

интересная опция оптимизатора - Type-based alias analysis
в проекте под STM32F103VB на Си при выбранном "Allow IAR extensions" ее включение приводит к тому, что код "не работает" вообще.
причем вот что пишут в "IAR C/C++ Development Guide":
кто что думает по этому поводу?

З.Ы. ворнингов при компиляции, сборке нет.

По-моему, ответ содержится в цитате из описания на компилятор
"However, non-standard-conforming C or C++ code might result in
the compiler producing code that leads to unexpected behavior. Therefore, it is possible
to turn this optimization off."
Т.е. если выбран не ISO/ANSI в опции Language Conformance, то лучше этот вид оптимизации выключить, а то unexpected behavior.

Для EWAVR 4_30 вот что написано
"Type-based alias analysis is performed at optimization level High. For ISO/ANSI
standard-conforming C or C++ application code, this optimization can reduce code size
and execution time. However, non-standard-conforming C or C++ code might result in
the compiler producing code that leads to unexpected behavior. Therefore, it is possible
to turn this optimization off.
Faradey
Цитата(ARIM @ Dec 3 2008, 13:51) *
По-моему, ответ содержится в цитате из описания на компилятор
"However, non-standard-conforming C or C++ code might result in
the compiler producing code that leads to unexpected behavior. Therefore, it is possible
to turn this optimization off."
Т.е. если выбран не ISO/ANSI в опции Language Conformance, то лучше этот вид оптимизации выключить, а то unexpected behavior.

Для EWAVR 4_30 вот что написано
"Type-based alias analysis is performed at optimization level High. For ISO/ANSI
standard-conforming C or C++ application code, this optimization can reduce code size
and execution time. However, non-standard-conforming C or C++ code might result in
the compiler producing code that leads to unexpected behavior. Therefore, it is possible
to turn this optimization off.


собственно я и хотел на это обратить внимание.
bigarmer
Thanks. It's very usefull, I will update my IAR ewarm 5.20.2.
Faradey
хм, может быть "дело было не в бабине"

http://electronix.ru/forum/index.php?showtopic=56674&hl=
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.