> 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;

Reply via email to