|
|
  |
EWARM 5.20 - Опция оптимизации: Type-based alias analysis, кто "сталкивался" и что думаете |
|
|
|
Dec 2 2008, 16:40
|
Частый гость
 
Группа: Свой
Сообщений: 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. кто что думает по этому поводу? З.Ы. ворнингов при компиляции, сборке нет.
--------------------
Завтра пойму, что нужно было сделать вчера...
|
|
|
|
|
Dec 2 2008, 17:49
|

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

|
С тех пор, как появилась эта опция оптимизации, она у меня постоянно включена. В частности для STM32F103 в проектах с ОС и без, на С и на С++. А что касается глюков, то я их обычно выискиваю по листингу и в процессе отладки, как и все остальные, я думаю. И это вполне нормальный путь вместо того, чтобы заявлять, что включение той или иной опции оптимизации приводит к неработоспособности программ ВООБЩЕ. Если хотите, чтобы Вам конкретно помогли, то выложите здесь минимально возможный кусок программы, в котором проявляется неработоспособность.
|
|
|
|
|
Dec 3 2008, 09:12
|
Частый гость
 
Группа: Свой
Сообщений: 127
Регистрация: 31-05-06
Из: Belarus, Minsk
Пользователь №: 17 638

|
Цитата(Непомнящий Евгений @ Dec 3 2008, 07:19)  Ну дык не по стандарту работаете с указателями - вот и получаете проблемы... На самом деле там довольно много ограничений, о чем вас собственно в гайде честно предупреждают. да, меня только смущает выражение "не по стандарту". Весьма спорное утверждение в свете дефолтных установок компилятора в режим "Allow IAR extensions" и автоматическом включении этой опции при выборе максимальной оптимизации. Вообще интересовало мнение "пострадавших", но повидимому один я так споткнулся. В любом случае спасибо, будет время разберусь и во всем сознаюсь  .
--------------------
Завтра пойму, что нужно было сделать вчера...
|
|
|
|
|
Dec 3 2008, 11:51
|
Частый гость
 
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Dec 3 2008, 12:04
|
Частый гость
 
Группа: Свой
Сообщений: 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. собственно я и хотел на это обратить внимание.
--------------------
Завтра пойму, что нужно было сделать вчера...
|
|
|
|
|
Dec 7 2008, 14:44
|
Участник

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

|
Thanks. It's very usefull, I will update my IAR ewarm 5.20.2.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|