реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> EWARM 5.20 - Опция оптимизации: Type-based alias analysis, кто "сталкивался" и что думаете
Faradey
сообщение Dec 2 2008, 16:40
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 127
Регистрация: 31-05-06
Из: Belarus, Minsk
Пользователь №: 17 638



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.


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

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


--------------------
Завтра пойму, что нужно было сделать вчера...
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Dec 2 2008, 17:49
Сообщение #2


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



С тех пор, как появилась эта опция оптимизации, она у меня постоянно включена. В частности для STM32F103 в проектах с ОС и без, на С и на С++.
А что касается глюков, то я их обычно выискиваю по листингу и в процессе отладки, как и все остальные, я думаю. И это вполне нормальный путь вместо того, чтобы заявлять, что включение той или иной опции оптимизации приводит к неработоспособности программ ВООБЩЕ.
Если хотите, чтобы Вам конкретно помогли, то выложите здесь минимально возможный кусок программы, в котором проявляется неработоспособность.
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Dec 3 2008, 05:19
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(Faradey @ Dec 2 2008, 19:40) *
интересная опция оптимизатора - Type-based alias analysis
в проекте под STM32F103VB на Си при выбранном "Allow IAR extensions" ее включение приводит к тому, что код "не работает" вообще.


Ну дык не по стандарту работаете с указателями - вот и получаете проблемы... На самом деле там довольно много ограничений, о чем вас собственно в гайде честно предупреждают.
Go to the top of the page
 
+Quote Post
Faradey
сообщение Dec 3 2008, 09:12
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 127
Регистрация: 31-05-06
Из: Belarus, Minsk
Пользователь №: 17 638



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


да, меня только смущает выражение "не по стандарту". Весьма спорное утверждение в свете дефолтных установок компилятора в режим "Allow IAR extensions" и автоматическом включении этой опции при выборе максимальной оптимизации.
Вообще интересовало мнение "пострадавших", но повидимому один я так споткнулся.
В любом случае спасибо, будет время разберусь и во всем сознаюсь 01.gif .


--------------------
Завтра пойму, что нужно было сделать вчера...
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Dec 3 2008, 09:29
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(Faradey @ Dec 3 2008, 12:12) *
да, меня только смущает выражение "не по стандарту".

Стандарт накладывает довольно жесткие ограничения на работу с указателями... Например, обращаться к long через указатель на short - UB. Пока эта оптимизация выключена - иар такие вещи прощает. Когда включаете - получаете проблемы.
Go to the top of the page
 
+Quote Post
ARIM
сообщение Dec 3 2008, 11:51
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 94
Регистрация: 14-04-05
Из: Россия
Пользователь №: 4 130



Цитата(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.
Go to the top of the page
 
+Quote Post
Faradey
сообщение Dec 3 2008, 12:04
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 127
Регистрация: 31-05-06
Из: Belarus, Minsk
Пользователь №: 17 638



Цитата(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.


собственно я и хотел на это обратить внимание.


--------------------
Завтра пойму, что нужно было сделать вчера...
Go to the top of the page
 
+Quote Post
bigarmer
сообщение Dec 7 2008, 14:44
Сообщение #8


Участник
*

Группа: Новичок
Сообщений: 52
Регистрация: 5-12-08
Пользователь №: 42 221



Thanks. It's very usefull, I will update my IAR ewarm 5.20.2.
Go to the top of the page
 
+Quote Post
Faradey
сообщение Dec 15 2008, 08:35
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 127
Регистрация: 31-05-06
Из: Belarus, Minsk
Пользователь №: 17 638



хм, может быть "дело было не в бабине"

http://electronix.ru/forum/index.php?showtopic=56674&hl=


--------------------
Завтра пойму, что нужно было сделать вчера...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 17:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01969 секунд с 7
ELECTRONIX ©2004-2016