Запретить инлайнинг?

Hello Vladimir.

04 May 06 19:18, Vladimir Vassilevsky wrote to all:

VV> Проект на C++ под BlackFin, собирается VDSP 4.0. C помощью #pragma VV> section быстрые функции кладутся в L1 память, а все прочие - во VV> внешнюю память. Все нормально, если бы не одно "но": если включить VV> автоинлайнинг, то компилер пытается инлайнить быстрые функции. В VV> результате быстрые функции инлайнятся в медленную внешнюю память, а VV> образы их в L1 прибиваются линкером как dead code.

VV> Как запретить компилеру инлайнить данную конкретную функцию?

Убрать спецификатор inline ;)

Из грязных хаков: написать dummy код, который берет адрес этой функции. Тогда она не заинлайнится.

Dmitry

Reply to
Dmitry Lyokhin
Loading thread data ...

Hi All,

Проект на C++ под BlackFin, собирается VDSP 4.0. C помощью #pragma section быстрые функции кладутся в L1 память, а все прочие - во внешнюю память. Все нормально, если бы не одно "но": если включить автоинлайнинг, то компилер пытается инлайнить быстрые функции. В результате быстрые функции инлайнятся в медленную внешнюю память, а образы их в L1 прибиваются линкером как dead code.

Как запретить компилеру инлайнить данную конкретную функцию?

VLV

"Клянусь всем тем, во что когда-либо верили дураки" (с) Вальтер Скотт

Reply to
Vladimir Vassilevsky

Thu May 04 2006 19:54, Dmitry Lyokhin wrote to Vladimir Vassilevsky:

VV>> Проект на C++ под BlackFin, собирается VDSP 4.0. C помощью #pragma VV>> section быстрые функции кладутся в L1 память, а все прочие - во VV>> внешнюю память. Все нормально, если бы не одно "но": если включить VV>> автоинлайнинг, то компилер пытается инлайнить быстрые функции. В VV>> результате быстрые функции инлайнятся в медленную внешнюю память, а VV>> образы их в L1 прибиваются линкером как dead code.

VV>> Как запретить компилеру инлайнить данную конкретную функцию?

DL> Убрать спецификатор inline ;)

Бесполезно. Инлайнинг автоматический. Хочется нечто вроде спецификатора no_inline :)

DL> Из грязных хаков: написать dummy код, который берет адрес этой функции. DL> Тогда она не заинлайнится.

Бесполезно. Вызовы все равно инлайнятся, а специально для dummy кода создается еще один образ функции. Впрочем, понятно, что вопрос решается с помощью разных позорных хаков, но хотелось бы поизящнее.

VLV

"Клянусь всем тем, во что когда-либо верили дураки" (с) Вальтер Скотт

Reply to
Vladimir Vassilevsky

Hello Vladimir.

05 May 06 05:30, Vladimir Vassilevsky wrote to me:

VV>>> Как запретить компилеру инлайнить данную конкретную функцию?

DL>> Убрать спецификатор inline ;)

VV> Бесполезно. Инлайнинг автоматический. Хочется нечто вроде VV> спецификатора no_inline :)

Хм, это как ? код:

--- some.h --- class CMyClass { int Foo(); };

--- some.cpp --- int CMyClass::Foo() { return DoSomething(); }

Вообще-то не должен инлайнить...

VV> Бесполезно. Вызовы все равно инлайнятся, а специально для dummy кода VV> создается еще один образ функции. Впрочем, понятно, что вопрос VV> решается VV> с помощью разных позорных хаков, но хотелось бы поизящнее.

#pragma force_inline

Знаю, а в обратную сторону - нет :)

Dmitry

Reply to
Dmitry Lyokhin

Вызывайте функцию по указателю на нее...

Reply to
Anton Fedorov

Привет anton!

06 May 06 12:55, Anton Fedorov писал Dmitry Lyokhin:

AF> Вызывайте функцию по указателю на нее...

Вполне достаточно просто "спрятать" ее в отдельном файле.

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Завтрак съешь сам, обед оставь себе, а ужин - никому не отдавай!

Reply to
Alex Mogilnikov

Sat May 06 2006 16:14, Alex Mogilnikov wrote to anton:

Да, так можно. Но весь смысл в том, чтобы быстрая функция лежала в быстрой памяти. Гемор при вызове через через указатель теряет смысл быстрой функции.

AM> Вполне достаточно просто "спрятать" ее в отдельном файле.

Недостаточно. У всех нормальных компилеров многофайловая оптимизация.

VLV

"Клянусь всем тем, во что когда-либо верили дураки" (с) Вальтер Скотт

Reply to
Vladimir Vassilevsky

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.