From patchwork Sat Mar 9 08:22:05 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Jelinek X-Patchwork-Id: 87002 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A901D385F009 for ; Sat, 9 Mar 2024 08:27:52 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id B544D385DC3A for ; Sat, 9 Mar 2024 08:27:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B544D385DC3A 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 B544D385DC3A Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1709972835; cv=none; b=B7S0Jts/LSTajBZubQb5wsAz5r6BTB8q9jTeh8qR4M/YUn5WDHy9JxVHc9izYZ+A7iZFSHFGIvv5E8J8+3nd49j0Ro7UC6qmmuD9j0uTt0+6ExdUM9OJex9OtJPe6D9JiSqMTG+sgucOEAEY/74YIerLJMtCcdEGsS+1IBYZpQU= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1709972835; c=relaxed/simple; bh=i9P8Dd0/Y334OM1SSyxYnUdPkX1n8/j5ECdUUF4uPIg=; h=DKIM-Signature:Date:From:To:Subject:Message-ID:MIME-Version; b=elN29kPUGg4jPtLiHHuPaAPYRXDBDb44InCgMSMYwGh3eTwUxYRJ1OnWpts2t1VO8mvmSoDn5wx+03lB9ZOS8dpo8vw9plRpgkGYj/qk6uZMR7QoZOaeF1RTYpY/QVVg8+1BBvIAUBaxR+Vhi1Vd3E6ItMutRNW4ScpLd0V2wW4= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1709972832; 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=FrjVqS5FuEgLq6a21plyVlTSPc6132xEuZDiPpAgmY8=; b=E0UWPfErFYB2MurCxw3oTddalaiAcGrGxh3+Xa+beI9AcELa/aEuyzO5v9CO6NCDlQS4N2 H0YqBVuAz4cvHqNaxhVSSUEk1kkk1CiCdNYbn7koWnpXHeTtWaJ2Dahko1MK7XyulTmuQB At5a6Gaxr7vHXJZfiQv9ItNe380UJCc= Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-63-A4iRXx6MNMmElXUujfDPww-1; Sat, 09 Mar 2024 03:27:08 -0500 X-MC-Unique: A4iRXx6MNMmElXUujfDPww-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (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 EDF791C05132; Sat, 9 Mar 2024 08:22:07 +0000 (UTC) Received: from tucnak.zalov.cz (unknown [10.45.226.25]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8C23310E51; Sat, 9 Mar 2024 08:22:07 +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 4298M5ZK1519731 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Sat, 9 Mar 2024 09:22:05 +0100 Received: (from jakub@localhost) by tucnak.zalov.cz (8.17.1/8.17.1/Submit) id 4298M5OR1519730; Sat, 9 Mar 2024 09:22:05 +0100 Date: Sat, 9 Mar 2024 09:22:05 +0100 From: Jakub Jelinek To: Richard Biener Cc: gcc-patches@gcc.gnu.org Subject: [PATCH] bitint: Avoid rewriting large/huge _BitInt vars into SSA after bitint lowering [PR114278] Message-ID: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.5 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Disposition: inline X-Spam-Status: No, score=-3.9 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Jakub Jelinek Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Hi! The following testcase ICEs, because update-address-taken subpass of fre5 rewrites _BitInt(128) b; vector(16) unsigned char _3; [local count: 1073741824]: _3 = MEM [(char * {ref-all})p_2(D)]; MEM [(char * {ref-all})&b] = _3; b ={v} {CLOBBER(eos)}; to _BitInt(128) b; vector(16) unsigned char _3; [local count: 1073741824]: _3 = MEM [(char * {ref-all})p_2(D)]; b_5 = VIEW_CONVERT_EXPR<_BitInt(128)>(_3); but we can't have large/huge _BitInt vars in SSA form after the bitint lowering except for function arguments loaded from memory, as expansion isn't able to deal with those, it relies on bitint lowering to lower those operations. The following patch fixes that by not clearing TREE_ADDRESSABLE for large/huge _BitInt vars after bitint lowering, such that we don't rewrite them into SSA form. Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? 2024-03-09 Jakub Jelinek PR tree-optimization/114278 * tree-ssa.cc (maybe_optimize_var): Punt on large/huge _BitInt vars after bitint lowering. * gcc.dg/bitint-99.c: New test. Jakub --- gcc/tree-ssa.cc.jj 2024-01-03 11:51:39.902615009 +0100 +++ gcc/tree-ssa.cc 2024-03-08 14:24:11.844821915 +0100 @@ -1753,7 +1753,11 @@ maybe_optimize_var (tree var, bitmap add /* Global Variables, result decls cannot be changed. */ if (is_global_var (var) || TREE_CODE (var) == RESULT_DECL - || bitmap_bit_p (addresses_taken, DECL_UID (var))) + || bitmap_bit_p (addresses_taken, DECL_UID (var)) + || (TREE_CODE (TREE_TYPE (var)) == BITINT_TYPE + /* Don't change large/huge _BitInt vars after _BitInt lowering. */ + && (cfun->curr_properties & PROP_gimple_lbitint) != 0 + && TYPE_PRECISION (TREE_TYPE (var)) > MAX_FIXED_MODE_SIZE)) return; bool maybe_reg = false; --- gcc/testsuite/gcc.dg/bitint-99.c.jj 2024-03-08 14:26:17.658069942 +0100 +++ gcc/testsuite/gcc.dg/bitint-99.c 2024-03-08 14:25:36.292645965 +0100 @@ -0,0 +1,26 @@ +/* PR tree-optimization/114278 */ +/* { dg-do compile { target bitint } } */ +/* { dg-options "-O2 -fno-tree-dce -fno-tree-dse -fno-tree-ccp" } */ +/* { dg-additional-options "-mavx2" { target i?86-*-* x86_64-*-* } } */ + +void +foo (void *p) +{ + _BitInt(64) b = *(_BitInt(64) *) __builtin_memmove (&b, p, sizeof (_BitInt(64))); +} + +#if __BITINT_MAXWIDTH__ >= 128 +void +bar (void *p) +{ + _BitInt(128) b = *(_BitInt(128) *) __builtin_memmove (&b, p, sizeof (_BitInt(128))); +} +#endif + +#if __BITINT_MAXWIDTH__ >= 256 +void +baz (void *p) +{ + _BitInt(256) b = *(_BitInt(256) *) __builtin_memmove (&b, p, sizeof (_BitInt(256))); +} +#endif