[PATCH] D119927: [Clang] [P2025] More exhaustive tests for NRVO
Evgeny Shulgin via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Feb 16 13:39:56 PST 2022
Izaron marked an inline comment as done.
Izaron added inline comments.
================
Comment at: clang/test/CodeGenCXX/nrvo.cpp:165
if (B)
- return y;
- return x;
+ return y; // NRVO is impossible
+ return x; // NRVO is impossible
----------------
Quuxplusone wrote:
> Technically, because `B` is a constant throughout this function, we probably //could// do NRVO here by hoisting the condition as if by
> ```
> X x;
> if (B) { X y; return y; } // NRVO is possible here
> X y; return x; // NRVO is impossible
> ```
> Whether we //should// is another question. :) Also, changing `bool B` to `const bool& B` would defeat my idea.
I have been thinking on "sorting" variables within the scope to get the optimal NRVO condition (right after seeing `test2`), but didn't come up with anything =(
I guess that it's not legal at all, because initializing constructors (unlike copy/move constructors) tend to have meaningful actions (starting a timer, etc.), and many things will break badly if we will shift the declarations as we want.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D119927/new/
https://reviews.llvm.org/D119927
More information about the cfe-commits
mailing list