У меня есть рекурсивная, но не хвостовая рекурсивная встроенная функция, для которой я бы хотел, чтобы gcc развернул рекурсию. Да, я использую g++ -O3 -funroll-loops
конечно.
inline void recurse_fun(..., unsigned depth = 0, unsigned max_depth = 40) {
if (++depth > max_depth) return;
for (auto i = ..., iend = ...; i != iend; i++) {
if (...) continue;
...
recurse_fun(...,depth,max_depth);
}
}
Я мог бы легко заменить это, обработав объект stack<...>
вручную, который gcc должен правильно развернуть, но он не был бы столь же элегантным или обслуживаемым.
Я действительно должен попытаться профилировать обе версии независимо, но мне любопытно, если кто-нибудь может с уверенностью сказать, что какая-то недавняя версия gcc будет или не будет правильно обрабатывать это.