aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2024-11-17 01:21:04 +0100
committerJan Hubicka <hubicka@ucw.cz>2024-11-17 01:23:53 +0100
commitaac5c57ee167230cea466064951daf06e42197b9 (patch)
tree539c1ee2f32e3c2b75f97ec3acdc9d2194735d90 /gcc
parenta649efea00992ea6eba550e5d575fbafb5b290dd (diff)
downloadgcc-aac5c57ee167230cea466064951daf06e42197b9.zip
gcc-aac5c57ee167230cea466064951daf06e42197b9.tar.gz
gcc-aac5c57ee167230cea466064951daf06e42197b9.tar.bz2
Add __builtion_unreachable to vector::size(), vector::capacity()
This patch makes it clear that vector sizes and capacities are not negative. With recent change to ipa-fnsummary this should not affect inlining and improves codegen of some vector manipulation functions. I tested clang build. Looking for throw_bad calls there are only 3 called considerably often (bad_allloc, bad_array_new_length and function_callv). The patch seems to reduce bad_alloc and bad_array_new_length calls considerably: bad_alloc 380->147 bad_array_new_length 832->128 libstdc++-v3/ChangeLog: PR tree-optimization/109442 * include/bits/stl_vector.h: (vector::size(), vector::capacity()): Add __builtin_unreachable call to announce that size and capacity are non-negative. gcc/testsuite/ChangeLog: PR tree-optimization/109442 * g++.dg/tree-ssa/pr109442.C: New test.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/g++.dg/tree-ssa/pr109442.C2
1 files changed, 1 insertions, 1 deletions
diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr109442.C b/gcc/testsuite/g++.dg/tree-ssa/pr109442.C
index ec40c47..ea5800a 100644
--- a/gcc/testsuite/g++.dg/tree-ssa/pr109442.C
+++ b/gcc/testsuite/g++.dg/tree-ssa/pr109442.C
@@ -1,5 +1,5 @@
// { dg-do compile { target c++11 } }
-// { dg-options "-O1 -fdump-tree-optimized" }
+// { dg-options "-O2 -fdump-tree-optimized" }
#include <vector>
#define T int
T vat1(std::vector<T> v1) {