From patchwork Wed Feb 14 15:13:51 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Biener X-Patchwork-Id: 200986 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:bc8a:b0:106:860b:bbdd with SMTP id dn10csp1281685dyb; Wed, 14 Feb 2024 07:14:42 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCUUG0LZKeD36yE/z55IJ16rauvsyDmZPF+uN8W+TbkhTee7ePNmfQ0n3BLMoQ4U1xHjqWKMD8U1k3dvfdUyp4juQtCikA== X-Google-Smtp-Source: AGHT+IE0t89ia1m1e8MvgyGBhrqFF6kHsbuaD955hzIHNNdVhSFJT8ZUNGW1vqRcz8mWusD19C4P X-Received: by 2002:a0c:f349:0:b0:68e:e3b7:557d with SMTP id e9-20020a0cf349000000b0068ee3b7557dmr2577854qvm.25.1707923682502; Wed, 14 Feb 2024 07:14:42 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707923682; cv=pass; d=google.com; s=arc-20160816; b=bNkmkuw5zYZZGQ5TDaFgevwAMCjzI4p09iQBSfwKXtRwSp9e0woBsWSG29GV1Xi8/d enjuZ0hjLp7sRcQFD5iyNGSxGt1r8MQiIwfXX0ZHLjKRZqFYNzYieDBtWqIONlkkO59w T1uCZo0BTFImbgpAsoPqVcUY2kNwYwoqlhqBX1MKyHD0ETBpaDXV1DOT+4N5vZiF4aPF MZhMXaimYr0Vn3jnJmsieG1tvLLBYpMDV8v56Nsj5DWN9vS4MDTdtbt4w3vUXhwtRZlR 1q0NPLW3DgZwE04n4GCK3EmHniclHO9x428qN0OdyEYDzyR7kq0xCDld5sCPozKSO3IP pq6g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=message-id:errors-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:mime-version :subject:cc:to:from:date:dkim-signature:dkim-signature :dkim-signature:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=RxS3U/KRlWTAagVxsmX9Rd1AZbQGluXeeqs8blEDqD8=; fh=GCo2XCOaj0lkdLOq1LQBlo+EbxCFU0viwLu8kKdo6J4=; b=SEK7cw6Ubug+F6flwg4CZwLWhIqKjd1sxG7AE3fIncBOgm3hXfWHHnOfhVBj/4azxT 5tcyRLGSWArE6XMSGUqx+1B5aMyMiJVIi198O3P5SLz18fjyADC1MjIkwXZoDEgw4zEs SRV3KYF0R35kk4GQYL6Xwnw0wv3ctV8je2Oifkkm2f4zUYtt4+eahsfqtr8hH4jHZNHF iEQi2aa3bwdUB2rCVPOel0jxDxzF0lxy4IQ25+2XHF55wJkUY/rGqMGytT3R1evJmV64 K3ZMNzMIcDOFnvl4bOAvJEKNJAl69LXGbRzJ8vOehEoHDdVu6+a316qYxdN/xkMvIBOO pipA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@suse.de header.s=susede2_rsa header.b=wCqBPXKd; dkim=neutral (no key) header.i=@suse.de header.s=susede2_ed25519; dkim=pass header.i=@suse.de header.s=susede2_rsa header.b=wCqBPXKd; dkim=neutral (no key) header.i=@suse.de header.s=susede2_ed25519; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=suse.de X-Forwarded-Encrypted: i=2; AJvYcCX2x4gzIfWH3jQIlE9R4bFYB5qyY35zqJB4soCdMtXmRlwBeQ18EzF5/VD9ov/N8gCpRT+/I/AFPfNFX05XMPVbqNPI/w== Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id jp10-20020ad45f8a000000b0068efa58259bsi2763661qvb.157.2024.02.14.07.14.42 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Feb 2024 07:14:42 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@suse.de header.s=susede2_rsa header.b=wCqBPXKd; dkim=neutral (no key) header.i=@suse.de header.s=susede2_ed25519; dkim=pass header.i=@suse.de header.s=susede2_rsa header.b=wCqBPXKd; dkim=neutral (no key) header.i=@suse.de header.s=susede2_ed25519; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=suse.de Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 26E24385E830 for ; Wed, 14 Feb 2024 15:14:42 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130]) by sourceware.org (Postfix) with ESMTPS id 09931385E002 for ; Wed, 14 Feb 2024 15:13:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 09931385E002 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 09931385E002 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=195.135.223.130 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707923634; cv=none; b=WS6BBhBGuBSWLENtoboIwKg+h7rAI0XIVkEVgS1DOaN3yrKAkvSNVoXiFcsj/XtlJ0jdi+CheAdEMKH7GUDMuPyD7TPMnEyy6CvtMg9inCKQc/Om0b8iquqNuGPLQicZ9IPuIcXi0gPmMDQQbU4NEseEIlFi1mRrLdmzIpVAmDE= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707923634; c=relaxed/simple; bh=YLUwwoFdMwmVaHcd26TGA/K/ASYOUPy6Oi/QGnUK7g8=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:Date: From:To:Subject:MIME-Version; b=lMR6GhIQUJV6EAKma+ijchEI+rJJ0QSZe66hC9JHcEfyXqBPnHUG874KLSR0kyMBMqailK8zuw/Su40YoLfkU4GgSuhij8Nq/+3aayM1+YGoBDMZcH+cJlSq2g5RsQYAbbneMq27IZL2A94AbncG6tkRrpJjDQ/ezXPmSLegnVM= 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 90C592202C; Wed, 14 Feb 2024 15:13:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1707923631; h=from:from:reply-to:date:date:to:to:cc:cc:mime-version:mime-version: content-type:content-type; bh=RxS3U/KRlWTAagVxsmX9Rd1AZbQGluXeeqs8blEDqD8=; b=wCqBPXKd/G802+0VC7piXY/2QoBVLhQH369zX+Gf8OEd3tbDrm2a3iYeKgmAk9Pm3tOQxX tn2+0oalhjgNakuic7R7Wse0P4I58CYWqFwbTwjWUoXVrHK3MELLOEF+TgiV8f/S9Mh8zt Knu+aJ8oK4EYsp06am/Eh08Rd05nmbY= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1707923631; h=from:from:reply-to:date:date:to:to:cc:cc:mime-version:mime-version: content-type:content-type; bh=RxS3U/KRlWTAagVxsmX9Rd1AZbQGluXeeqs8blEDqD8=; b=1AhrX6SXBgAL/V9Dr/aY3bD5OIVhDMhg9MC84Cuo+cnAOrHz9QYGzZ+I+7s12Zn1LPnS7l Bzi86NIOVLjdawAQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1707923631; h=from:from:reply-to:date:date:to:to:cc:cc:mime-version:mime-version: content-type:content-type; bh=RxS3U/KRlWTAagVxsmX9Rd1AZbQGluXeeqs8blEDqD8=; b=wCqBPXKd/G802+0VC7piXY/2QoBVLhQH369zX+Gf8OEd3tbDrm2a3iYeKgmAk9Pm3tOQxX tn2+0oalhjgNakuic7R7Wse0P4I58CYWqFwbTwjWUoXVrHK3MELLOEF+TgiV8f/S9Mh8zt Knu+aJ8oK4EYsp06am/Eh08Rd05nmbY= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1707923631; h=from:from:reply-to:date:date:to:to:cc:cc:mime-version:mime-version: content-type:content-type; bh=RxS3U/KRlWTAagVxsmX9Rd1AZbQGluXeeqs8blEDqD8=; b=1AhrX6SXBgAL/V9Dr/aY3bD5OIVhDMhg9MC84Cuo+cnAOrHz9QYGzZ+I+7s12Zn1LPnS7l Bzi86NIOVLjdawAQ== Date: Wed, 14 Feb 2024 16:13:51 +0100 (CET) From: Richard Biener To: gcc-patches@gcc.gnu.org cc: Jakub Jelinek Subject: [PATCH] [libiberty] remove TBAA violation in iterative_hash, improve code-gen MIME-Version: 1.0 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_DN_SOME(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_GOOD(-0.10)[text/plain]; MISSING_MID(2.50)[]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; RCPT_COUNT_TWO(0.00)[2]; 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 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: , Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Message-Id: <20240214151442.26E24385E830@sourceware.org> X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790887783316634247 X-GMAIL-MSGID: 1790887783316634247 The following removes the TBAA violation present in iterative_hash. As we eventually LTO that it's important to fix. This also improves code generation for the >= 12 bytes loop by using | to compose the 4 byte words as at least GCC 7 and up can recognize that pattern and perform a 4 byte load while the variant with a + is not recognized (not on trunk either), I think we have an enhancement bug for this somewhere. Given we reliably merge and the bogus "optimized" path might be only relevant for archs that cannot do misaligned loads efficiently I've chosen to keep a specialization for aligned accesses. Bootstrapped and tested on x86_64-unknown-linux-gnu, OK for trunk? Thanks, Richard. libiberty/ * hashtab.c (iterative_hash): Remove TBAA violating handling of aligned little-endian case in favor of just keeping the aligned case special-cased. Use | for composing a larger word. --- libiberty/hashtab.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/libiberty/hashtab.c b/libiberty/hashtab.c index 48f28078114..e3a07256a30 100644 --- a/libiberty/hashtab.c +++ b/libiberty/hashtab.c @@ -940,26 +940,23 @@ iterative_hash (const void *k_in /* the key */, c = initval; /* the previous hash value */ /*---------------------------------------- handle most of the key */ -#ifndef WORDS_BIGENDIAN - /* On a little-endian machine, if the data is 4-byte aligned we can hash - by word for better speed. This gives nondeterministic results on - big-endian machines. */ - if (sizeof (hashval_t) == 4 && (((size_t)k)&3) == 0) - while (len >= 12) /* aligned */ + /* Provide specialization for the aligned case for targets that cannot + efficiently perform misaligned loads of a merged access. */ + if ((((size_t)k)&3) == 0) + while (len >= 12) { - a += *(hashval_t *)(k+0); - b += *(hashval_t *)(k+4); - c += *(hashval_t *)(k+8); + a += (k[0] | ((hashval_t)k[1]<<8) | ((hashval_t)k[2]<<16) | ((hashval_t)k[3]<<24)); + b += (k[4] | ((hashval_t)k[5]<<8) | ((hashval_t)k[6]<<16) | ((hashval_t)k[7]<<24)); + c += (k[8] | ((hashval_t)k[9]<<8) | ((hashval_t)k[10]<<16)| ((hashval_t)k[11]<<24)); mix(a,b,c); k += 12; len -= 12; } else /* unaligned */ -#endif while (len >= 12) { - a += (k[0] +((hashval_t)k[1]<<8) +((hashval_t)k[2]<<16) +((hashval_t)k[3]<<24)); - b += (k[4] +((hashval_t)k[5]<<8) +((hashval_t)k[6]<<16) +((hashval_t)k[7]<<24)); - c += (k[8] +((hashval_t)k[9]<<8) +((hashval_t)k[10]<<16)+((hashval_t)k[11]<<24)); + a += (k[0] | ((hashval_t)k[1]<<8) | ((hashval_t)k[2]<<16) | ((hashval_t)k[3]<<24)); + b += (k[4] | ((hashval_t)k[5]<<8) | ((hashval_t)k[6]<<16) | ((hashval_t)k[7]<<24)); + c += (k[8] | ((hashval_t)k[9]<<8) | ((hashval_t)k[10]<<16)| ((hashval_t)k[11]<<24)); mix(a,b,c); k += 12; len -= 12; }