GCC утверждает, что внедрил функцию - но неC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 GCC утверждает, что внедрил функцию - но не

Сообщение Anonymous »

Я использовал Godbolt, чтобы - несколько не хватает - сравнить некоторые оптимизации между MSVC и GCC, но я попал в неожиданную пробку: GCC утверждает, что в этом примере внедрили все вызовы STD ::

Код: Выделить всё

[...]
missed: not inlinable: auto funcB(int_fast16_t, int_fast16_t)/20 -> auto funcA(int_fast16_t, int_fast16_t)/19, call is unlikely and code size would grow
Unit growth for small function inlining: 0->0 (0%)
Inlined 3 calls, eliminated 0 functions
[...]
auto funcA(std::int_fast16_t a, std::int_fast16_t b)
{
Considering inline candidate ldiv_t std::div(long int, long int)/17.
Inlining ldiv_t std::div(long int, long int)/17 into auto funcA(int_fast16_t, int_fast16_t)/19.
auto div{std::div(a, b)};
return div.quot + !!div.rem;
}

auto funcB(std::int_fast16_t a, std::int_fast16_t b)
{
Considering inline candidate ldiv_t std::div(long int, long int)/17.
Inlining ldiv_t std::div(long int, long int)/17 into auto funcB(int_fast16_t, int_fast16_t)/20.
auto div{std::div(a, b)};
return div.quot + (div.rem != 0);
}

auto funcC(std::int_fast16_t a, std::int_fast16_t b)
{
Considering inline candidate ldiv_t std::div(long int, long int)/17.
Inlining ldiv_t std::div(long int, long int)/17 into auto funcC(int_fast16_t, int_fast16_t)/21.
auto div{std::div(a, b)};
auto repetitions{div.quot};
if (div.rem != 0)
++repetitions;
return repetitions;
}
Как вы можете видеть, все три сообщенных вставка должны быть std :: div вызовы. И все же: < /p>

Код: Выделить всё

"funcA(long, long)":
push    rax
call    "ldiv"
cmp     rdx, 1
pop     rdx
sbb     rax, -1
ret
"funcB(long, long)":
jmp     "funcA(long, long)"
"funcC(long, long)":
push    rax
call    "ldiv"
cmp     rdx, 1
pop     rdx
sbb     rax, -1
ret
< /code>
 Что, если что -то, я делаю здесь не так? Как я могу заставить два взгляда быть последовательными? DOT: 
[list]
[*] вставленное код в файл test.cpp 
[*] Окруженные определения с внешними "c" Чтобы получить разборчивые имена
[*] gccmmm = intel -fno -verbose-asmasm --s -s-fdiAgnostco -color = gccmm = intel -fno -verbose-asmasm --s -h -fopt -info -all = all.opt -Std = c ++ 2a -os -finline -functions test.cpp
[/list]
=> также утверждает, что встроенный в линии все три std :: div> gr/gc. работать?

Подробнее здесь: https://stackoverflow.com/questions/796 ... it-has-not
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»