From patchwork Tue Oct 12 07:49:28 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Jelinek X-Patchwork-Id: 46121 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id AA32A3858C3A for ; Tue, 12 Oct 2021 07:50:03 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org AA32A3858C3A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1634025003; bh=8pXWLnHJCsQZgcVmZUJlMIfS4hARLFdcxjivfQUZxJU=; h=Date:To:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=L2uKDl0pm8zXSi8HxY/ejB5qP/aUCK4b44hAnZ084TRuLm75JCjzlWlt0Fdyhbo+J 3rfhJQmn72k5P51bxDAuc2Op7ORG9JCULOmUishcMamqiJRg/hDc5IA6R953jhQ+L9 Ja+v+xPZxgGAQAGW9EdHF3Hb9aEOpoCvzZfeNzxQ= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTP id 359953858D3C for ; Tue, 12 Oct 2021 07:49:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 359953858D3C Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-524-tTl5yz9yNgKak-D9ehRagg-1; Tue, 12 Oct 2021 03:49:33 -0400 X-MC-Unique: tTl5yz9yNgKak-D9ehRagg-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 6CD37835DE1; Tue, 12 Oct 2021 07:49:32 +0000 (UTC) Received: from tucnak.zalov.cz (unknown [10.39.193.109]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 19CE85D9D5; Tue, 12 Oct 2021 07:49:31 +0000 (UTC) Received: from tucnak.zalov.cz (localhost [127.0.0.1]) by tucnak.zalov.cz (8.16.1/8.16.1) with ESMTPS id 19C7nTr21077639 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Tue, 12 Oct 2021 09:49:29 +0200 Received: (from jakub@localhost) by tucnak.zalov.cz (8.16.1/8.16.1/Submit) id 19C7nSYp1077638; Tue, 12 Oct 2021 09:49:28 +0200 Date: Tue, 12 Oct 2021 09:49:28 +0200 To: gcc-patches@gcc.gnu.org Subject: [committed] openmp: Avoid calling clear_type_padding_in_mask in the common case where there can't be any padding Message-ID: <20211012074928.GB304296@tucnak> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Disposition: inline X-Spam-Status: No, score=-5.5 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Jakub Jelinek via Gcc-patches From: Jakub Jelinek Reply-To: Jakub Jelinek Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Hi! We can use the clear_padding_type_may_have_padding_p function, which is conservative for e.g. RECORD_TYPE/UNION_TYPE, but for the floating and complex floating types is accurate. clear_type_padding_in_mask is more expensive because we need to allocate memory, fill it, call the function which itself is more expensive and then analyze the memory, so for the common case of float/double atomics or even long double on most targets we can avoid that. Bootstrapped/regtested on x86_64-linux and i686-linux, committed to trunk. 2021-10-12 Jakub Jelinek gcc/ * gimple-fold.h (clear_padding_type_may_have_padding_p): Declare. * gimple-fold.c (clear_padding_type_may_have_padding_p): No longer static. gcc/c-family/ * c-omp.c (c_finish_omp_atomic): Use clear_padding_type_may_have_padding_p. Jakub --- gcc/gimple-fold.h.jj 2021-04-26 21:49:44.358846211 +0200 +++ gcc/gimple-fold.h 2021-10-11 22:31:03.505270575 +0200 @@ -36,6 +36,7 @@ extern tree maybe_fold_and_comparisons ( enum tree_code, tree, tree); extern tree maybe_fold_or_comparisons (tree, enum tree_code, tree, tree, enum tree_code, tree, tree); +extern bool clear_padding_type_may_have_padding_p (tree); extern void clear_type_padding_in_mask (tree, unsigned char *); extern bool optimize_atomic_compare_exchange_p (gimple *); extern void fold_builtin_atomic_compare_exchange (gimple_stmt_iterator *); --- gcc/gimple-fold.c.jj 2021-09-27 23:34:56.519266040 +0200 +++ gcc/gimple-fold.c 2021-10-11 22:30:40.734595135 +0200 @@ -4632,7 +4632,7 @@ clear_padding_real_needs_padding_p (tree /* Return true if TYPE might contain any padding bits. */ -static bool +bool clear_padding_type_may_have_padding_p (tree type) { switch (TREE_CODE (type)) --- gcc/c-family/c-omp.c.jj 2021-10-07 23:03:44.070935299 +0200 +++ gcc/c-family/c-omp.c 2021-10-11 22:32:06.586371445 +0200 @@ -381,7 +381,9 @@ c_finish_omp_atomic (location_t loc, enu bool clear_padding = false; HOST_WIDE_INT non_padding_start = 0; HOST_WIDE_INT non_padding_end = 0; - if (BITS_PER_UNIT == 8 && CHAR_BIT == 8) + if (BITS_PER_UNIT == 8 + && CHAR_BIT == 8 + && clear_padding_type_may_have_padding_p (cmptype)) { HOST_WIDE_INT sz = int_size_in_bytes (cmptype), i; gcc_assert (sz > 0);