From aac5c57ee167230cea466064951daf06e42197b9 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Sun, 17 Nov 2024 01:21:04 +0100 Subject: 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. --- gcc/testsuite/g++.dg/tree-ssa/pr109442.C | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'gcc') 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 #define T int T vat1(std::vector v1) { -- cgit v1.1