From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from rock.gnat.com (rock.gnat.com [205.232.38.15]) by sourceware.org (Postfix) with ESMTPS id 27BE53858D3C for ; Tue, 12 Oct 2021 06:36:02 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 27BE53858D3C Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id E2B8C1171D8; Tue, 12 Oct 2021 02:35:26 -0400 (EDT) X-Virus-Scanned: Debian amavisd-new at gnat.com Received: from rock.gnat.com ([127.0.0.1]) by localhost (rock.gnat.com [127.0.0.1]) (amavisd-new, port 10024) with LMTP id a5JtddksKcjd; Tue, 12 Oct 2021 02:35:26 -0400 (EDT) Received: from free.home (tron.gnat.com [IPv6:2620:20:4000:0:46a8:42ff:fe0e:e294]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by rock.gnat.com (Postfix) with ESMTPS id 7E1691171AB; Tue, 12 Oct 2021 02:35:26 -0400 (EDT) Received: from livre (livre.home [172.31.160.2]) by free.home (8.15.2/8.15.2) with ESMTPS id 19C6Z8Ut309606 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Oct 2021 03:35:13 -0300 From: Alexandre Oliva To: Richard Biener Cc: Alexandre Oliva via Gcc-patches Subject: Re: [PATCH] hardened conditionals Organization: Free thinker, does not speak for AdaCore References: <42A19672-C6EF-4C2F-A826-4CB9EE388B95@gmail.com> Errors-To: aoliva@lxoliva.fsfla.org Date: Tue, 12 Oct 2021 03:35:08 -0300 In-Reply-To: <42A19672-C6EF-4C2F-A826-4CB9EE388B95@gmail.com> (Richard Biener's message of "Sat, 09 Oct 2021 08:42:16 +0200") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Scanned-By: MIMEDefang 2.84 X-Spam-Status: No, score=-6.2 required=5.0 tests=BAYES_00, KAM_DMARC_STATUS, SPF_HELO_NONE, SPF_PASS, 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-List-Received-Date: Tue, 12 Oct 2021 06:36:05 -0000 On Oct 9, 2021, Richard Biener wrote: > Why two passes (and two IL traverses?) Different traversals, no reason to force them into a single pass. One only looks at the last stmt of each block, where cond stmts may be, while the other has to look at every stmt. > How do you prevent RTL optimizers (jump threading) from removing the > redundant tests? The trick I'm using to copy of a value without the compiler's knowing it's still the same value is 'asm ("" : "=g" (alt) : "0" (src));' I've pondered introducing __builtin_hidden_copy or somesuch, but it didn't seem worth it. > I'd have expected such hardening to occur very late in the RTL > pipeline. Yeah, that would be another way to do it, but then it would have to be a lot trickier, given all the different ways in which compare-and-branch can be expressed in RTL. -- Alexandre Oliva, happy hacker https://FSFLA.org/blogs/lxo/ Free Software Activist GNU Toolchain Engineer Disinformation flourishes because many people care deeply about injustice but very few check the facts. Ask me about