On Sunday, 19 November 2023 22:53:37 CET Jan Hubicka wrote: > Sadly it is really hard to work out this > from IPA passes, since we basically care whether the iterator points to > the same place as the end pointer, which are both passed by reference. > This is inter-procedural value numbering that is quite out of reach.
I've done a fair share of branching on __builtin_constant_p in std::experimental::simd to improve code-gen. It's powerful! But maybe we also need the other side of the story to tell the optimizer: "I know you can't const-prop everything; but this variable / expression, even if you need to put in a lot of effort, the performance difference will be worth it." For std::vector, the remaining capacity could be such a value. The functions f() and g() are equivalent (their code-gen isn't https:// compiler-explorer.com/z/r44ejK1qz): #include <vector> auto f() { std::vector<int> x; x.reserve(10); for (int i = 0; i < 10; ++i) x.push_back(0); return x; } auto g() { return std::vector<int>(10, 0); } -- ────────────────────────────────────────────────────────────────────────── Dr. Matthias Kretz https://mattkretz.github.io GSI Helmholtz Center for Heavy Ion Research https://gsi.de std::simd ──────────────────────────────────────────────────────────────────────────