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 628643858417 for ; Wed, 12 Apr 2023 14:36:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 628643858417 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1681310208; 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; bh=MdJmBxQ4ZZEdoceQU1SDPu9TWJZt+T5Y/gx8BDzCYW4=; b=Xr5btvGgeMaQKFxO701AukpVieCRxPHFUQoeYeVMiHmIHsjkTUcDFuGkqgcKr7VEgSH5Pp ikDqMrNJs9UVi2Ffbk27j+qc4seVobUqnkDVDNGyVKTIl2iGPW3fWHgZ1i/o36czbGCRXK +uzO7oPW5/a1giDu8kKIvr76qYalEbY= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-302-AI_NXf-iPhuZtJABWRnpKQ-1; Wed, 12 Apr 2023 10:36:46 -0400 X-MC-Unique: AI_NXf-iPhuZtJABWRnpKQ-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id A17BA884EC6; Wed, 12 Apr 2023 14:36:46 +0000 (UTC) Received: from tucnak.zalov.cz (unknown [10.39.192.16]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 6545540CF8F1; Wed, 12 Apr 2023 14:36:46 +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 33CEahjq3886937 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Wed, 12 Apr 2023 16:36:44 +0200 Received: (from jakub@localhost) by tucnak.zalov.cz (8.17.1/8.17.1/Submit) id 33CEagSh3886936; Wed, 12 Apr 2023 16:36:42 +0200 Date: Wed, 12 Apr 2023 16:36:42 +0200 From: Jakub Jelinek To: Richard Biener Cc: gcc-patches@gcc.gnu.org Subject: [PATCH] reassoc: Fix up another ICE with returns_twice call [PR109410] Message-ID: Reply-To: Jakub Jelinek MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.1 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.3 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_H2,SPF_HELO_NONE,SPF_NONE,TXREP 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: Hi! The following testcase ICEs in reassoc, unlike the last case I've fixed there here SSA_NAME_USED_IN_ABNORMAL_PHI is not the case anywhere. build_and_add_sum places new statements after the later appearing definition of an operand but if both operands are default defs or constants, we place statement at the start of the function. If the very first statement of a function is a call to returns_twice function, this doesn't work though, because that call has to be the first thing in its basic block, so the following patch splits the entry successor edge such that the new statements are added into a different block from the returns_twice call. Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? I think we should in stage1 reconsider such placements, I think it unnecessarily enlarges the lifetime of the new lhs if its operand(s) are used more than once in the function. Unless something sinks those again. Would be nice to place it closer to the actual uses (or where they will be placed). 2023-04-12 Jakub Jelinek PR tree-optimization/109410 * tree-ssa-reassoc.cc (build_and_add_sum): Split edge from entry block if first statement of the function is a call to returns_twice function. * gcc.dg/pr109410.c: New test. --- gcc/tree-ssa-reassoc.cc.jj 2023-02-18 12:40:42.739131728 +0100 +++ gcc/tree-ssa-reassoc.cc 2023-04-12 13:23:49.083979843 +0200 @@ -1564,6 +1564,15 @@ build_and_add_sum (tree type, tree op1, && (!op2def || gimple_nop_p (op2def))) { gsi = gsi_after_labels (single_succ (ENTRY_BLOCK_PTR_FOR_FN (cfun))); + if (!gsi_end_p (gsi) + && is_gimple_call (gsi_stmt (gsi)) + && (gimple_call_flags (gsi_stmt (gsi)) & ECF_RETURNS_TWICE)) + { + /* Don't add statements before a returns_twice call at the start + of a function. */ + split_edge (single_succ_edge (ENTRY_BLOCK_PTR_FOR_FN (cfun))); + gsi = gsi_after_labels (single_succ (ENTRY_BLOCK_PTR_FOR_FN (cfun))); + } if (gsi_end_p (gsi)) { gimple_stmt_iterator gsi2 --- gcc/testsuite/gcc.dg/pr109410.c.jj 2023-04-12 13:42:41.759751843 +0200 +++ gcc/testsuite/gcc.dg/pr109410.c 2023-04-12 13:42:27.249959585 +0200 @@ -0,0 +1,19 @@ +/* PR tree-optimization/109410 */ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +__attribute__((returns_twice)) int baz (int, int); + +int +bar (int x) +{ + return x; +} + +int +foo (int x, int y) +{ + baz (x, y); + int a = bar (x); + return y || a == 42 || a > 42; +} Jakub