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 [216.205.24.124]) by sourceware.org (Postfix) with ESMTP id 7F6BD3896826 for ; Tue, 17 Nov 2020 18:02:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 7F6BD3896826 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-549-bOGSJsKKPZ-tGFLtZxwwrQ-1; Tue, 17 Nov 2020 13:02:10 -0500 X-MC-Unique: bOGSJsKKPZ-tGFLtZxwwrQ-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 9E5026D256; Tue, 17 Nov 2020 18:02:08 +0000 (UTC) Received: from tucnak.zalov.cz (ovpn-113-127.ams2.redhat.com [10.36.113.127]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 328985B4A2; Tue, 17 Nov 2020 18:02:08 +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 0AHI24ek3335205 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Tue, 17 Nov 2020 19:02:05 +0100 Received: (from jakub@localhost) by tucnak.zalov.cz (8.16.1/8.16.1/Submit) id 0AHI23Hp3335204; Tue, 17 Nov 2020 19:02:03 +0100 Date: Tue, 17 Nov 2020 19:02:03 +0100 From: Jakub Jelinek To: Philipp Tomsich Cc: Jeff Law , Philipp Tomsich , GCC Patches , Philipp Tomsich Subject: Re: [PATCH v1 1/2] Simplify shifts wider than the bitwidth of types Message-ID: <20201117180203.GZ3788@tucnak> Reply-To: Jakub Jelinek References: <1605553027-5331-1-git-send-email-philipp.tomsich@vrull.eu> <20201117164612.GW3788@tucnak> MIME-Version: 1.0 In-Reply-To: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 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=-6.0 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_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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-List-Received-Date: Tue, 17 Nov 2020 18:02:15 -0000 On Tue, Nov 17, 2020 at 06:23:51PM +0100, Philipp Tomsich wrote: > The rules for E1 << E2 are: > - if E2 is negative => undefined > - if E1 is unsigned => E1 x 2^E2, reduced module one more than the > maximum representable value > - if E1 is signed and non-negative => E1 x 2^E2, if E1 x 2^E2 is > representable; otherwise, undefined Those are rules about UB -fsanitize=shift-base diagnoses, and that greatly differs between different languages and versions of those languages, and as we don't really record what it comes from, for the GIMPLE IL everything is well defined. What we were talking about before is written earlier in the "If the value of the right operand is negative or is greater than or equal to the width of the promoted left operand, the behavior is undefined." sentence and is what -fsanitize=shift-exponent diagnoses. In the GIMPLE IL such shifts are still UB and in RTL only depending on some target macros (i.e. undefined for some targets, wrapping with some mask or saturating on others). Jakub