From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 7E6AB3858C52 for ; Thu, 23 Nov 2023 10:06:06 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7E6AB3858C52 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 7E6AB3858C52 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1700733967; cv=none; b=iNFsHlgXPvSJPCtKZK1ao+HHJNBKWUVSNKTpUZQamHVXTiRuUUoiAVMWZEkteGwzzn7UnzvEEuIT1k9pm6vh6dSMu/KJ8CqQFH99vqJX3oSuPNJL34oEr3oSz72ou3g7fRqh3FBwoANma2m1Z8z7L4kV+t2g1C7S3My/iD8MHqo= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1700733967; c=relaxed/simple; bh=NRbrMKeaws/S6XBDF0j9IB4MZgSIEuEAD0bIpxurUzc=; h=DKIM-Signature:Date:From:To:Subject:Message-ID:MIME-Version; b=CD7E4iKeg5VAa7EuT7520HGILK4wFm/o6cW9IfgM5hHfPkK/ev5xwMQc+OzOOwAT7HsCZTvnHChZON2hlH66IoVWFSz2fuYTk2z7+bfmEffu3tiH5+I2+VVBlTuyvAAU0EYAWTpa7anKujZwVL1hUgIqQFQIwwmUELDO+HvHsoo= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1700733966; h=from:from:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:in-reply-to:in-reply-to: references:references; bh=m6fTyOBspQD8+tOVv1WaK3A5pjylX7yvYPodNEaz2lU=; b=Ka+V8+BxMDURzbh8LzoEvLZMvJPxEHd+awUpOpP0KMh+Z9F+YEJTebxBnzxSRVVk/TZCeY /hgRWtmxfFt8Q3uZJfCBbXSPUYA73xktTWg3ucwFHzu6XWy7VYHk63tEPyGKzOcW/F28/0 nJLGCBZuMWtuLab0hfkrtnei3ooBJRc= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-316-mh65hHmFPZGrS75aKvZgOA-1; Thu, 23 Nov 2023 05:05:52 -0500 X-MC-Unique: mh65hHmFPZGrS75aKvZgOA-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.rdu2.redhat.com [10.11.54.7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 0D0E1101A52D; Thu, 23 Nov 2023 10:05:52 +0000 (UTC) Received: from tucnak.zalov.cz (unknown [10.39.194.53]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C317B1C060B0; Thu, 23 Nov 2023 10:05:51 +0000 (UTC) Received: from tucnak.zalov.cz (localhost [127.0.0.1]) by tucnak.zalov.cz (8.17.1/8.17.1) with ESMTPS id 3ANA5nt2888865 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 23 Nov 2023 11:05:49 +0100 Received: (from jakub@localhost) by tucnak.zalov.cz (8.17.1/8.17.1/Submit) id 3ANA5mj7888864; Thu, 23 Nov 2023 11:05:48 +0100 Date: Thu, 23 Nov 2023 11:05:48 +0100 From: Jakub Jelinek To: Joseph Myers Cc: gcc-patches@gcc.gnu.org, Florian Weimer Subject: Re: [PATCH] c: Add __builtin_stdc_bit_{width,floor,ceil} builtins Message-ID: Reply-To: Jakub Jelinek References: <27683a52-8754-c85b-df8d-abd0a5676f0@codesourcery.com> MIME-Version: 1.0 In-Reply-To: <27683a52-8754-c85b-df8d-abd0a5676f0@codesourcery.com> X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.7 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-Spam-Status: No, score=-3.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On Thu, Nov 23, 2023 at 12:09:05AM +0000, Joseph Myers wrote: > OK with tests added for unsigned _BitInt(1). Specifically, unsigned > _BitInt(1) is a bit of a degenerate case for stdc_bit_ceil (always > returning 1 after evaluating the argument's side effects); I think the > code that builds of constant 2 of that type (a constant only used in dead > code) should still work (and produce a constant 0), and that the > documentation is also still correct in the case where converting 2 to the > type produces 0, but given those degeneracies I think it's worth testing > unsigned _BitInt(1) with these functions to make sure they do behave as > expected. Thanks, here is incremental diff between what was posted and what was committed: --- gcc/testsuite/gcc.dg/builtin-stdc-bit-1.c 2023-11-20 16:25:22.548758830 +0100 +++ gcc/testsuite/gcc.dg/builtin-stdc-bit-1.c 2023-11-23 10:08:50.133761681 +0100 @@ -668,6 +668,87 @@ __builtin_abort (); if (__builtin_stdc_has_single_bit (b++) || b != 14) __builtin_abort (); +#if __BITINT_MAXWIDTH__ >= 64 + if (__builtin_stdc_leading_zeros (0uwb) != 1 + || !expr_has_type (__builtin_stdc_leading_zeros (0uwb), unsigned int) + || __builtin_stdc_leading_zeros (1uwb) != 0 + || !expr_has_type (__builtin_stdc_leading_zeros (1uwb), unsigned int)) + __builtin_abort (); + if (__builtin_stdc_leading_ones (0uwb) != 0 + || !expr_has_type (__builtin_stdc_leading_ones (0uwb), unsigned int) + || __builtin_stdc_leading_ones (1uwb) != 1 + || !expr_has_type (__builtin_stdc_leading_ones (1uwb), unsigned int)) + __builtin_abort (); + if (__builtin_stdc_trailing_zeros (0uwb) != 1 + || !expr_has_type (__builtin_stdc_trailing_zeros (0uwb), unsigned int) + || __builtin_stdc_trailing_zeros (1uwb) != 0 + || !expr_has_type (__builtin_stdc_trailing_zeros (1uwb), unsigned int)) + __builtin_abort (); + if (__builtin_stdc_trailing_ones (0uwb) != 0 + || !expr_has_type (__builtin_stdc_trailing_ones (0uwb), unsigned int) + || __builtin_stdc_trailing_ones (1uwb) != 1 + || !expr_has_type (__builtin_stdc_trailing_ones (1uwb), unsigned int)) + __builtin_abort (); + if (__builtin_stdc_first_leading_zero (0uwb) != 1 + || !expr_has_type (__builtin_stdc_first_leading_zero (0uwb), unsigned int) + || __builtin_stdc_first_leading_zero (1uwb) != 0 + || !expr_has_type (__builtin_stdc_first_leading_zero (1uwb), unsigned int)) + __builtin_abort (); + if (__builtin_stdc_first_leading_one (0uwb) != 0 + || !expr_has_type (__builtin_stdc_first_leading_one (0uwb), unsigned int) + || __builtin_stdc_first_leading_one (1uwb) != 1 + || !expr_has_type (__builtin_stdc_first_leading_one (1uwb), unsigned int)) + __builtin_abort (); + if (__builtin_stdc_first_trailing_zero (0uwb) != 1 + || !expr_has_type (__builtin_stdc_first_trailing_zero (0uwb), unsigned int) + || __builtin_stdc_first_trailing_zero (1uwb) != 0 + || !expr_has_type (__builtin_stdc_first_trailing_zero (1uwb), unsigned int)) + __builtin_abort (); + if (__builtin_stdc_first_trailing_one (0uwb) != 0 + || !expr_has_type (__builtin_stdc_first_trailing_one (0uwb), unsigned int) + || __builtin_stdc_first_trailing_one (1uwb) != 1 + || !expr_has_type (__builtin_stdc_first_trailing_one (1uwb), unsigned int)) + __builtin_abort (); + if (__builtin_stdc_count_zeros (0uwb) != 1 + || !expr_has_type (__builtin_stdc_count_zeros (0uwb), unsigned int) + || __builtin_stdc_count_zeros (1uwb) != 0 + || !expr_has_type (__builtin_stdc_count_zeros (1uwb), unsigned int)) + __builtin_abort (); + if (__builtin_stdc_count_ones (0uwb) != 0 + || !expr_has_type (__builtin_stdc_count_ones (0uwb), unsigned int) + || __builtin_stdc_count_ones (1uwb) != 1 + || !expr_has_type (__builtin_stdc_count_ones (1uwb), unsigned int)) + __builtin_abort (); + if (__builtin_stdc_has_single_bit (0uwb) + || !expr_has_type (__builtin_stdc_has_single_bit (0uwb), _Bool) + || !__builtin_stdc_has_single_bit (1uwb) + || !expr_has_type (__builtin_stdc_has_single_bit (1uwb), _Bool)) + __builtin_abort (); + if (__builtin_stdc_bit_width (0uwb) != 0 + || !expr_has_type (__builtin_stdc_bit_width (0uwb), unsigned int) + || __builtin_stdc_bit_width (1uwb) != 1 + || !expr_has_type (__builtin_stdc_bit_width (1uwb), unsigned int)) + __builtin_abort (); + if (__builtin_stdc_bit_floor (0uwb) != 0 + || !expr_has_type (__builtin_stdc_bit_floor (0uwb), unsigned _BitInt(1)) + || __builtin_stdc_bit_floor (1uwb) != 1 + || !expr_has_type (__builtin_stdc_bit_floor (1uwb), unsigned _BitInt(1))) + __builtin_abort (); + if (__builtin_stdc_bit_ceil (0uwb) != 1 + || !expr_has_type (__builtin_stdc_bit_ceil (0uwb), unsigned _BitInt(1)) + || __builtin_stdc_bit_ceil (1uwb) != 1 + || !expr_has_type (__builtin_stdc_bit_ceil (1uwb), unsigned _BitInt(1))) + __builtin_abort (); + unsigned _BitInt(1) c = 0; + if (__builtin_stdc_bit_floor (c++) != 0 || c != 1) + __builtin_abort (); + if (__builtin_stdc_bit_floor (c++) != 1 || c != 0) + __builtin_abort (); + if (__builtin_stdc_bit_ceil (c++) != 1 || c != 1) + __builtin_abort (); + if (__builtin_stdc_bit_ceil (c++) != 1 || c != 0) + __builtin_abort (); +#endif #if __BITINT_MAXWIDTH__ >= 512 if (__builtin_stdc_leading_zeros ((unsigned _BitInt(512)) 0) != 512 || !expr_has_type (__builtin_stdc_leading_zeros ((unsigned _BitInt(512)) 0), unsigned int) Jakub