From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-out1.suse.de (smtp-out1.suse.de [IPv6:2a07:de40:b251:101:10:150:64:1]) by sourceware.org (Postfix) with ESMTPS id E41083858408 for ; Wed, 7 Feb 2024 14:49:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E41083858408 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org E41083858408 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a07:de40:b251:101:10:150:64:1 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707317358; cv=none; b=b7lRH56bfAEXc6uJF93+HKEl5jVBQtVpHrPCHpFam/j770FXQ0jvGk571uZ3ASgH7WCx1pW1pPwCXVSxYQzWfWJopjh2tcghyGVDs2x7P1KQ3drMRIPJwFlO0Q5sPKKgboV0iOC8T1hkDoiMPbTn4qAz8dmQZ8wr5+ME3PuyeS0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707317358; c=relaxed/simple; bh=gIrYdlCkjIZ5JI8haGXC27/1rtz1zcV9FSc70iP23zA=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:Date: From:To:Subject:MIME-Version; b=wItLdyVs4OjOIkA/Vu2tJ31voKOsNckUXUuutF49Aoof0e/oKZ3C4NmfnBJVVHDYqee5quP8zfhraOAXnHZ+HqomfvE58+yD+bQ3VGGQtv42tgk/V0iFp/hJG/nRDTM1SQulRWDFSWAvKaFpv/u9+4obLDslleRdByC43gP+8cc= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from [10.168.4.150] (unknown [10.168.4.150]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id D2B4522326 for ; Wed, 7 Feb 2024 14:49:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1707317355; h=from:from:reply-to:date:date:to:to:cc:mime-version:mime-version: content-type:content-type; bh=CIrUakvRPvN1X2E8bQ93d493D7ejPeRg28rMw53n940=; b=0olDB2gbU+nyTHBf6pOaUxM4ncjSRRqxVgJZKBMRtDMCDUN4vRqcJ8VA8Arrq2zhphte5L UL0ThxDtOd86pkPanc33mayFBAlXzQGMZgLJ4wF2NNRhQzpxuZpyhgzZHTe3QUbkzkKzqY fHMONBVC3sBfgRHISSYiOu+iPwGagj4= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1707317355; h=from:from:reply-to:date:date:to:to:cc:mime-version:mime-version: content-type:content-type; bh=CIrUakvRPvN1X2E8bQ93d493D7ejPeRg28rMw53n940=; b=pY/kVoRnh11u9VvdP3/Fc0FTqtGqJSufExRV6ZvFdV1FZPXSeReRJu6mXrpzEbVntyHB3z 2h0J9iosAJ7CKRCg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1707317354; h=from:from:reply-to:date:date:to:to:cc:mime-version:mime-version: content-type:content-type; bh=CIrUakvRPvN1X2E8bQ93d493D7ejPeRg28rMw53n940=; b=hfE48pSeKFDk59GEQZyzIL80k+liQKt0XUDqPkJ8BHaoBtjya3As6agS0gJFgbbg54cm9l UpE4SEdqo58J8fc32jCAMWt851dBneLzJtCo1G6DWgIqI4r73K6XAmMK5sXzynlr6RMBuK Cg8f2kb69tobFe4w0VH2JMXdBlkVaR8= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1707317354; h=from:from:reply-to:date:date:to:to:cc:mime-version:mime-version: content-type:content-type; bh=CIrUakvRPvN1X2E8bQ93d493D7ejPeRg28rMw53n940=; b=XWe4YGYdqhH9152yMo1rg7u9OgaFJwAMdTQbh7RdnS2JtdB+KVxLBvkvZZQgh71rxyiYK6 dweKoPgDM9auKhDw== Date: Wed, 7 Feb 2024 15:49:14 +0100 (CET) From: Richard Biener To: gcc-patches@gcc.gnu.org Subject: [PATCH] tree-optimization/113796 - if-conversion and ranges MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Authentication-Results: smtp-out1.suse.de; none X-Spamd-Result: default: False [-0.60 / 50.00]; ARC_NA(0.00)[]; FROM_HAS_DN(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_GOOD(-0.10)[text/plain]; TO_DN_NONE(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; MISSING_MID(2.50)[]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; FUZZY_BLOCKED(0.00)[rspamd.com]; RCVD_COUNT_ZERO(0.00)[0]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; BAYES_HAM(-3.00)[100.00%] X-Spam-Level: X-Spam-Score: -0.60 X-Spam-Status: No, score=-10.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,MISSING_MID,SPF_HELO_NONE,SPF_PASS,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: Message-ID: <20240207144914.4hrpDvpOpZbftgYHyAkTLyepMtTRR9lbwDNIlZx5vBQ@z> The following makes sure to wipe range info before folding the COND_EXPRs we insert as part of replacing PHI nodes when combining blocks in the if-conversion pass. Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed. PR tree-optimization/113796 * tree-if-conv.cc (combine_blocks): Wipe range-info before replacing PHIs and inserting predicates. * gcc.dg/torture/pr113796.c: New testcase. --- gcc/testsuite/gcc.dg/torture/pr113796.c | 16 ++++++++++ gcc/tree-if-conv.cc | 41 +++++++++++++++---------- 2 files changed, 41 insertions(+), 16 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/torture/pr113796.c diff --git a/gcc/testsuite/gcc.dg/torture/pr113796.c b/gcc/testsuite/gcc.dg/torture/pr113796.c new file mode 100644 index 00000000000..bdf96d0b687 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr113796.c @@ -0,0 +1,16 @@ +/* { dg-do run } */ +/* { dg-additional-options "-ftree-loop-if-convert -fno-vect-cost-model" } */ + +signed char a[] = {0x80, 0x80,0x80,0x80}; +int b; +signed char c; + +int main() +{ + for (; b < sizeof(a); b += 1) + c = a[b] < 0 ?: a[b] >> 6; + + if (c != 1) + __builtin_abort (); + return 0; +} diff --git a/gcc/tree-if-conv.cc b/gcc/tree-if-conv.cc index 8e79362f96a..db0d0f4a497 100644 --- a/gcc/tree-if-conv.cc +++ b/gcc/tree-if-conv.cc @@ -2909,6 +2909,29 @@ combine_blocks (class loop *loop, bool loop_versioned) edge e; edge_iterator ei; + /* Reset flow-sensitive info before predicating stmts or PHIs we + might fold. */ + bool *predicated = XNEWVEC (bool, orig_loop_num_nodes); + for (i = 0; i < orig_loop_num_nodes; i++) + { + bb = ifc_bbs[i]; + predicated[i] = is_predicated (bb); + if (predicated[i]) + { + for (auto gsi = gsi_start_phis (bb); + !gsi_end_p (gsi); gsi_next (&gsi)) + reset_flow_sensitive_info (gimple_phi_result (*gsi)); + for (auto gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) + { + gimple *stmt = gsi_stmt (gsi); + ssa_op_iter i; + tree op; + FOR_EACH_SSA_TREE_OPERAND (op, stmt, i, SSA_OP_DEF) + reset_flow_sensitive_info (op); + } + } + } + remove_conditions_and_labels (loop); insert_gimplified_predicates (loop); predicate_all_scalar_phis (loop, loop_versioned); @@ -2917,20 +2940,13 @@ combine_blocks (class loop *loop, bool loop_versioned) predicate_statements (loop); /* Merge basic blocks. */ - exit_bb = NULL; - bool *predicated = XNEWVEC (bool, orig_loop_num_nodes); + exit_bb = single_exit (loop)->src; + gcc_assert (exit_bb != loop->latch); for (i = 0; i < orig_loop_num_nodes; i++) { bb = ifc_bbs[i]; - predicated[i] = !is_true_predicate (bb_predicate (bb)); free_bb_predicate (bb); - if (bb_with_exit_edge_p (loop, bb)) - { - gcc_assert (exit_bb == NULL); - exit_bb = bb; - } } - gcc_assert (exit_bb != loop->latch); merge_target_bb = loop->header; @@ -3003,13 +3019,6 @@ combine_blocks (class loop *loop, bool loop_versioned) /* If this is the first load we arrive at update last_vdef so we handle stray PHIs correctly. */ last_vdef = gimple_vuse (stmt); - if (predicated[i]) - { - ssa_op_iter i; - tree op; - FOR_EACH_SSA_TREE_OPERAND (op, stmt, i, SSA_OP_DEF) - reset_flow_sensitive_info (op); - } } /* Update stmt list. */ -- 2.35.3