> On Tue, Nov 12, 2024 at 04:00:03PM +0100, Jan Hubicka wrote: > > Hi, > > with __builtin_operator_new we now can optimize away unused std::vectors. > > This adds testcases mentioned in the PR. > > > > Regtested x86_64-linux and comitted. > > > > PR tree-optimization/96945 > > > > gcc/testsuite/ChangeLog: > > > > * g++.dg/tree-ssa/pr96945.C: New test. > > > > diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr96945.C > > b/gcc/testsuite/g++.dg/tree-ssa/pr96945.C > > new file mode 100644 > > index 00000000000..4cb234c2f71 > > --- /dev/null > > +++ b/gcc/testsuite/g++.dg/tree-ssa/pr96945.C > > @@ -0,0 +1,60 @@ > > +/* { dg-do compile } */ > > +// { dg-options "-O1 -fdump-tree-optimized -std=c++14" } > > The normal way would be > // { dg-do compile { target c++14 } } > // { dg-options "-O1 -fdump-tree-optimized" } > so that it tests all C++ versions >= 14, not just one particular, > and doesn't mix comment styles. Ah, sorry for that. I copied it and edited from somewhere without much of thinking. In fact I think we should add the other examples from various PRs, since they are testing slightly different cases and this optimization depends on inlining and EH which may be bit fragile.
If there are no complains I will commit the following tomorrow Add more std::vector optimization tests gcc/testsuite/ChangeLog: PR tree-optimization/110819 PR tree-optimization/116868 PR tree-optimization/58483 * g++.dg/tree-ssa/pr96945.C: Cleanup * g++.dg/tree-ssa/pr110819.C: New test. * g++.dg/tree-ssa/pr116868.C: New test. * g++.dg/tree-ssa/pr58483.C: New test. diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr110819.C b/gcc/testsuite/g++.dg/tree-ssa/pr110819.C new file mode 100644 index 00000000000..04a074f1cb2 --- /dev/null +++ b/gcc/testsuite/g++.dg/tree-ssa/pr110819.C @@ -0,0 +1,14 @@ +// { dg-do compile { target c++14 } } +// { dg-options "-O1 -fdump-tree-optimized" } +#include<vector> + +void f(int); + +void use_idx_const_size_reserve() { + std::vector<int> v; + v.reserve(100000); + auto s = v.size(); + for (std::vector<int>::size_type i = 0; i < s; i++) + f(v[i]); +} +// { dg-final { scan-tree-dump-not "delete" "optimized" } } diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr116868.C b/gcc/testsuite/g++.dg/tree-ssa/pr116868.C new file mode 100644 index 00000000000..d89c7a3b09c --- /dev/null +++ b/gcc/testsuite/g++.dg/tree-ssa/pr116868.C @@ -0,0 +1,12 @@ +// { dg-do compile { target c++14 } } +// { dg-options "-O2 -fdump-tree-optimized" } +#include <vector> +int sumVector() { + const std::vector<int> vec = {1}; + int sum = 0; + for (int i = 0; i < vec.size(); i++) { + sum += vec[i]; + } + return sum; +} +// { dg-final { scan-tree-dump-not "delete" "optimized" } } diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr58483.C b/gcc/testsuite/g++.dg/tree-ssa/pr58483.C new file mode 100644 index 00000000000..c99664b5757 --- /dev/null +++ b/gcc/testsuite/g++.dg/tree-ssa/pr58483.C @@ -0,0 +1,15 @@ +// { dg-do compile { target c++14 } } +// { dg-do compile } +// { dg-options "-O1 -fdump-tree-optimized" } +#include<vector> + +void f(int); + +void use_idx_const_size_reserve() { + std::vector<int> v; + v.reserve(100000); + auto s = v.size(); + for (std::vector<int>::size_type i = 0; i < s; i++) + f(v[i]); +} +// { dg-final { scan-tree-dump-not "delete" "optimized" } } diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr96945.C b/gcc/testsuite/g++.dg/tree-ssa/pr96945.C index 4cb234c2f71..63d55672e0c 100644 --- a/gcc/testsuite/g++.dg/tree-ssa/pr96945.C +++ b/gcc/testsuite/g++.dg/tree-ssa/pr96945.C @@ -1,5 +1,5 @@ -/* { dg-do compile } */ -// { dg-options "-O1 -fdump-tree-optimized -std=c++14" } +// { dg-do compile { target c++14 } } +// { dg-options "-O1 -fdump-tree-optimized" } #include <vector> struct c { c() = default;