From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2122) id ADCDD3858037; Tue, 16 Nov 2021 22:36:01 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org ADCDD3858037 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Jason Merrill To: gcc-cvs@gcc.gnu.org Subject: [gcc r12-5325] c-family: don't cache large vecs X-Act-Checkin: gcc X-Git-Author: Jason Merrill X-Git-Refname: refs/heads/master X-Git-Oldrev: 6dc90c4dbb6f9589dea9c670c3468496bb207de5 X-Git-Newrev: 395848255cfa88f6f0f33a9b14c79e584a05d6fc Message-Id: <20211116223601.ADCDD3858037@sourceware.org> Date: Tue, 16 Nov 2021 22:36:01 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 16 Nov 2021 22:36:01 -0000 https://gcc.gnu.org/g:395848255cfa88f6f0f33a9b14c79e584a05d6fc commit r12-5325-g395848255cfa88f6f0f33a9b14c79e584a05d6fc Author: Jason Merrill Date: Wed Nov 10 16:23:12 2021 -0500 c-family: don't cache large vecs Patrick observed recently that an element of the vector cache could be arbitrarily large. Let's only cache relatively small vecs. gcc/c-family/ChangeLog: * c-common.c (release_tree_vector): Only cache vecs smaller than 16 elements. Diff: --- gcc/c-family/c-common.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index 436df45df68..90e8ec87b6b 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -8213,8 +8213,16 @@ release_tree_vector (vec *vec) { if (vec != NULL) { - vec->truncate (0); - vec_safe_push (tree_vector_cache, vec); + if (vec->allocated () >= 16) + /* Don't cache vecs that have expanded more than once. On a p64 + target, vecs double in alloc size with each power of 2 elements, e.g + at 16 elements the alloc increases from 128 to 256 bytes. */ + vec_free (vec); + else + { + vec->truncate (0); + vec_safe_push (tree_vector_cache, vec); + } } }