From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635389266; cv=none;
	d=zohomail.com; s=zohoarc;
	b=do6D3OSIPR7lIcQC3rhRz45DnUxwUX3JCPb4DE1L8C1ov7Jwxj0p2xFJX537vYV34aE74Rkplj7aJHZ535M99s90Jm9JTVPO8GvfBgN57PFhleaoIqgBVYcAwNRy6RZogodZ6qN4/V3aYM1Yof+biG3Gc5DFJyAY2rpO6cca94I=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635389266;
 h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=k69n+NAqhKditk9j302sj9FGt8K/9s94vNSW9sZvtmU=;
	b=cVPg3BZBqk+FrRPAFGEMtsqDAj1Xf3Q5zEsD786/5mcfzN8hN3Z84yN4elaAQfg2y1Q2ocDl3I6rDNPQDVpvnvb7a498ULCpS/y9bmb/WObhdrH48dD/gcW8AFVIbWMchsrMZG/rtmkRd2+DWh3yy6S8TqZSD+Zk2K2x191XEPA=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635389266157382.9014863358278;
 Wed, 27 Oct 2021 19:47:46 -0700 (PDT)
Received: from localhost ([::1]:53976 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvSD-0003PV-2l
	for importer@patchew.org; Wed, 27 Oct 2021 22:47:45 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:58724)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMI-0004TG-4W
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:38 -0400
Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]:53916)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMF-00033t-43
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:37 -0400
Received: by mail-pj1-x1031.google.com with SMTP id v10so2975996pjr.3
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:34 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.32
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:32 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=k69n+NAqhKditk9j302sj9FGt8K/9s94vNSW9sZvtmU=;
 b=JVIvicQbAqzM3lWW/Pek7RFQG99R1McjPN4kWfPFBQ6BSO1EjoGlVpk4pWa8/ri/2P
 3kVtMXR0wei+xTOyr3u7uvcSDPYPIXCcHCdZKQJ256Fuzk3i6qX/8/hCpOfvSNjUih0b
 35IUIWkPKc8dgBCkzdkvgcLjn8Q+AK3+FplqbIuauUpbGskGUMji79W+tciqR05pwNOX
 V89B2I1uWQIS6jYdpb93rCTyVJ1okDuatyPWvq3gJ66d7fJbufYIESlQhaUoYULkBD6w
 8CueUVNeZj7cU5t3SMKspYSho51lARurQyoXGeYispjJTNjWWNVjNNwy8g9ZK7Mgot/C
 8vYw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=k69n+NAqhKditk9j302sj9FGt8K/9s94vNSW9sZvtmU=;
 b=K+NLZC6nt/t+gTJZewEKAxg/4aE94irzGFn7niPHJwMOW3hW/SC1DBQRdETWFNtr66
 cwM18LlFTljHJWyQ2YM+l7d/QATBLEuyQHlz42w9lSuTDjdOR1SPEVN+nNByh9aCf1Z0
 mloVttA2M65YFlNu0yXMuArXeuHnHXikzUZAl0qxV8oNZ3JO/Ai4PZRmh7HSXoykEITO
 DzQ09w9d+ZFoay75TW3JQ+ksHwXoJ74TQTxZQsptvesSX/NFNDWd/dBJDnVPZMGT77Xb
 aBRnotXv1dP2R43/+RKmfTALcNrVLgB5cDeARZrHH3rp4yuS5vdnxKM0E8pqNBP8Oiel
 OIRw==
X-Gm-Message-State: AOAM530leg94s8WUVEXEb3TvJTJqNuqeBA34A89hrPFDYtSvECv5L5Wc
 YpY2aKcWv8Cdx+qyLhUdAOuIrM1rRm7oKg==
X-Google-Smtp-Source: 
 ABdhPJyoSJNsuOvCmRVSVYkwYSefuoIQExaGpenAzVK6WUz+mxb2eFNCOLomxRCV9+lYD/dL8aOHRw==
X-Received: by 2002:a17:90a:de0b:: with SMTP id
 m11mr9799954pjv.39.1635388893107;
 Wed, 27 Oct 2021 19:41:33 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 01/56] qemu/int128: Add int128_{not,xor}
Date: Wed, 27 Oct 2021 19:40:36 -0700
Message-Id: <20211028024131.1492790-2-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::1031;
 envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1031.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9trot?=
 <frederic.petrot@univ-grenoble-alpes.fr>,
 Fabien Portas <fabien.portas@grenoble-inp.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635389268046100001

From: Fr=C3=A9d=C3=A9ric P=C3=A9trot <frederic.petrot@univ-grenoble-alpes.f=
r>

Addition of not and xor on 128-bit integers.

Signed-off-by: Fr=C3=A9d=C3=A9ric P=C3=A9trot <frederic.petrot@univ-grenobl=
e-alpes.fr>
Co-authored-by: Fabien Portas <fabien.portas@grenoble-inp.org>
Message-Id: <20211025122818.168890-3-frederic.petrot@univ-grenoble-alpes.fr>
[rth: Split out logical operations.]
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 include/qemu/int128.h | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/include/qemu/int128.h b/include/qemu/int128.h
index 2ac0746426..b6d517aea4 100644
--- a/include/qemu/int128.h
+++ b/include/qemu/int128.h
@@ -58,6 +58,11 @@ static inline Int128 int128_exts64(int64_t a)
     return a;
 }
=20
+static inline Int128 int128_not(Int128 a)
+{
+    return ~a;
+}
+
 static inline Int128 int128_and(Int128 a, Int128 b)
 {
     return a & b;
@@ -68,6 +73,11 @@ static inline Int128 int128_or(Int128 a, Int128 b)
     return a | b;
 }
=20
+static inline Int128 int128_xor(Int128 a, Int128 b)
+{
+    return a ^ b;
+}
+
 static inline Int128 int128_rshift(Int128 a, int n)
 {
     return a >> n;
@@ -235,6 +245,11 @@ static inline Int128 int128_exts64(int64_t a)
     return int128_make128(a, (a < 0) ? -1 : 0);
 }
=20
+static inline Int128 int128_not(Int128 a)
+{
+    return int128_make128(~a.lo, ~a.hi);
+}
+
 static inline Int128 int128_and(Int128 a, Int128 b)
 {
     return int128_make128(a.lo & b.lo, a.hi & b.hi);
@@ -245,6 +260,11 @@ static inline Int128 int128_or(Int128 a, Int128 b)
     return int128_make128(a.lo | b.lo, a.hi | b.hi);
 }
=20
+static inline Int128 int128_xor(Int128 a, Int128 b)
+{
+    return int128_make128(a.lo ^ b.lo, a.hi ^ b.hi);
+}
+
 static inline Int128 int128_rshift(Int128 a, int n)
 {
     int64_t h;
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635389630; cv=none;
	d=zohomail.com; s=zohoarc;
	b=WNiGlC1GnITnoXByOw6bbdhWCH5Kyp8ZuUGLKbIUxtasWaM0AnsJ3eqssUXnohhl3VOxsHTFMvQ+vBx0YWgPCZspKOKbLkJIqrk3H7Sa1uCTOD2YZ20E3Lv7zMu0+cJT8gfmmACNJpaNKjnN6V18ykkbfgnnz+PL0N30j9658Kw=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635389630;
 h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=gpScl65wVWh40rtgvF//HQkNAyWxKHoUtY2gI/pE7T4=;
	b=goUnIMHM/en3HQg+/CaCay88BbSY8iqrk33AXi3LZOOUrY6d0btDu3tuTnfjfWG/9Sg78Vho0CPz4uM+FMBg2bYvEP3B0y9myvFZob/GpPH5AdziJK/kVTVWOLf4khve5myBatFvEE1+dgQ2+6l5vydBxtqk7hy2PgJQPvQWAE8=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635389630756915.9179952352499;
 Wed, 27 Oct 2021 19:53:50 -0700 (PDT)
Received: from localhost ([::1]:41730 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvY5-00063Q-Oj
	for importer@patchew.org; Wed, 27 Oct 2021 22:53:49 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:58702)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMH-0004Sv-9q
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:37 -0400
Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]:43000)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMF-00033y-1F
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:36 -0400
Received: by mail-pj1-x1029.google.com with SMTP id
 nn3-20020a17090b38c300b001a03bb6c4ebso3552087pjb.1
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:34 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.33
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:33 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=gpScl65wVWh40rtgvF//HQkNAyWxKHoUtY2gI/pE7T4=;
 b=jKt9UAp5jJKwyC+XyIKtHKSl+uvz04QcUTUfY3RmAF6mBgdX9hzZhqERcgZGFkFLzo
 Cz1+EC1xi7dl9vLUuo4EeN/TuUpxHAqFyHZe0BncDTmk188Kl+kyGMMa3lTd2VQPQv+t
 jhyYfV3WgDr+Y2uUgjcEEGmKyoK2OGY2Eno2drSpOJMMSYquLo7NzhDnxkEnDWxfUnFc
 z07ST0VNorSC+/vFZN+Aoz0XxDVkE/XEhE+jIQnV3cMMAruZSbtBGZGZ40YMyAxOG1m4
 w5SX4qWMzGxqJCdZm87B+qP7DlJ/CQoqi6jagoSAsgpEq0p7Sgi79zzGkhxwbMUp7bDH
 rM8Q==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=gpScl65wVWh40rtgvF//HQkNAyWxKHoUtY2gI/pE7T4=;
 b=YZiqA+kKluaTSFiyY8Pkl3taWH6ksm+7hhIdggucxGLBIlpOvzHFdyindjcahVbJ5t
 W/sFogw+G90Rkakxpk6dQpntcfZvqO9uqGPdVF4j3oXSupxRv0Of95a2USv3orknvYsV
 byewYZsNvy2Em1FaWGq6UHO2+5kPENm7HrNCi5VYyi/KhqXEu6PNehnkgdGNbBgK0EqW
 Y966IsYu1FMvHK5wffvDSzIstn9KobSDE0FCK8UrWa5OcQASfNS1f55gg82P6i2Zuw+R
 cgk1cr2/+9EDppA9HLFoR2G3BI/LdaHKdHOIjTuH+/qycH6142wXFDkO4qH7k1pE721V
 +nHg==
X-Gm-Message-State: AOAM532ZTIVHlvp2Ahg+Dh8qUrvxJJddIjVYktgVceLP2+Y8dojD6WXc
 DgHLO3bVP1On5UslTN2K0gwlugATF0pA+Q==
X-Google-Smtp-Source: 
 ABdhPJwIifmtFInemt40vdOj3YerOYborr0syNLo02NJd++IeW9ZHAgCvFYVQYqUTwgaQo7Zux8Qvw==
X-Received: by 2002:a17:90a:fe8a:: with SMTP id
 co10mr1550016pjb.183.1635388893784;
 Wed, 27 Oct 2021 19:41:33 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 02/56] host-utils: move checks out of divu128/divs128
Date: Wed, 27 Oct 2021 19:40:37 -0700
Message-Id: <20211028024131.1492790-3-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::1029;
 envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1029.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635389631173100001
Content-Type: text/plain; charset="utf-8"

From: Luis Pires <luis.pires@eldorado.org.br>

In preparation for changing the divu128/divs128 implementations
to allow for quotients larger than 64 bits, move the div-by-zero
and overflow checks to the callers.

Signed-off-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20211025191154.350831-2-luis.pires@eldorado.org.br>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 include/hw/clock.h        |  5 +++--
 include/qemu/host-utils.h | 34 ++++++++++++---------------------
 target/ppc/int_helper.c   | 14 +++++++++-----
 util/host-utils.c         | 40 ++++++++++++++++++---------------------
 4 files changed, 42 insertions(+), 51 deletions(-)

diff --git a/include/hw/clock.h b/include/hw/clock.h
index 11f67fb970..7443e6c4ab 100644
--- a/include/hw/clock.h
+++ b/include/hw/clock.h
@@ -324,8 +324,9 @@ static inline uint64_t clock_ns_to_ticks(const Clock *c=
lk, uint64_t ns)
         return 0;
     }
     /*
-     * Ignore divu128() return value as we've caught div-by-zero and don't
-     * need different behaviour for overflow.
+     * BUG: when CONFIG_INT128 is not defined, the current implementation =
of
+     * divu128 does not return a valid truncated quotient, so the result w=
ill
+     * be wrong.
      */
     divu128(&lo, &hi, clk->period);
     return lo;
diff --git a/include/qemu/host-utils.h b/include/qemu/host-utils.h
index ca9f3f021b..e82e6239af 100644
--- a/include/qemu/host-utils.h
+++ b/include/qemu/host-utils.h
@@ -52,36 +52,26 @@ static inline uint64_t muldiv64(uint64_t a, uint32_t b,=
 uint32_t c)
     return (__int128_t)a * b / c;
 }
=20
-static inline int divu128(uint64_t *plow, uint64_t *phigh, uint64_t diviso=
r)
+static inline void divu128(uint64_t *plow, uint64_t *phigh, uint64_t divis=
or)
 {
-    if (divisor =3D=3D 0) {
-        return 1;
-    } else {
-        __uint128_t dividend =3D ((__uint128_t)*phigh << 64) | *plow;
-        __uint128_t result =3D dividend / divisor;
-        *plow =3D result;
-        *phigh =3D dividend % divisor;
-        return result > UINT64_MAX;
-    }
+    __uint128_t dividend =3D ((__uint128_t)*phigh << 64) | *plow;
+    __uint128_t result =3D dividend / divisor;
+    *plow =3D result;
+    *phigh =3D dividend % divisor;
 }
=20
-static inline int divs128(int64_t *plow, int64_t *phigh, int64_t divisor)
+static inline void divs128(int64_t *plow, int64_t *phigh, int64_t divisor)
 {
-    if (divisor =3D=3D 0) {
-        return 1;
-    } else {
-        __int128_t dividend =3D ((__int128_t)*phigh << 64) | (uint64_t)*pl=
ow;
-        __int128_t result =3D dividend / divisor;
-        *plow =3D result;
-        *phigh =3D dividend % divisor;
-        return result !=3D *plow;
-    }
+    __int128_t dividend =3D ((__int128_t)*phigh << 64) | (uint64_t)*plow;
+    __int128_t result =3D dividend / divisor;
+    *plow =3D result;
+    *phigh =3D dividend % divisor;
 }
 #else
 void muls64(uint64_t *plow, uint64_t *phigh, int64_t a, int64_t b);
 void mulu64(uint64_t *plow, uint64_t *phigh, uint64_t a, uint64_t b);
-int divu128(uint64_t *plow, uint64_t *phigh, uint64_t divisor);
-int divs128(int64_t *plow, int64_t *phigh, int64_t divisor);
+void divu128(uint64_t *plow, uint64_t *phigh, uint64_t divisor);
+void divs128(int64_t *plow, int64_t *phigh, int64_t divisor);
=20
 static inline uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c)
 {
diff --git a/target/ppc/int_helper.c b/target/ppc/int_helper.c
index f5dac3aa87..510faf24cf 100644
--- a/target/ppc/int_helper.c
+++ b/target/ppc/int_helper.c
@@ -104,10 +104,11 @@ uint64_t helper_divdeu(CPUPPCState *env, uint64_t ra,=
 uint64_t rb, uint32_t oe)
     uint64_t rt =3D 0;
     int overflow =3D 0;
=20
-    overflow =3D divu128(&rt, &ra, rb);
-
-    if (unlikely(overflow)) {
+    if (unlikely(rb =3D=3D 0 || ra >=3D rb)) {
+        overflow =3D 1;
         rt =3D 0; /* Undefined */
+    } else {
+        divu128(&rt, &ra, rb);
     }
=20
     if (oe) {
@@ -122,10 +123,13 @@ uint64_t helper_divde(CPUPPCState *env, uint64_t rau,=
 uint64_t rbu, uint32_t oe)
     int64_t rt =3D 0;
     int64_t ra =3D (int64_t)rau;
     int64_t rb =3D (int64_t)rbu;
-    int overflow =3D divs128(&rt, &ra, rb);
+    int overflow =3D 0;
=20
-    if (unlikely(overflow)) {
+    if (unlikely(rb =3D=3D 0 || uabs64(ra) >=3D uabs64(rb))) {
+        overflow =3D 1;
         rt =3D 0; /* Undefined */
+    } else {
+        divs128(&rt, &ra, rb);
     }
=20
     if (oe) {
diff --git a/util/host-utils.c b/util/host-utils.c
index a789a11b46..701a371843 100644
--- a/util/host-utils.c
+++ b/util/host-utils.c
@@ -86,24 +86,23 @@ void muls64 (uint64_t *plow, uint64_t *phigh, int64_t a=
, int64_t b)
     *phigh =3D rh;
 }
=20
-/* Unsigned 128x64 division.  Returns 1 if overflow (divide by zero or */
-/* quotient exceeds 64 bits).  Otherwise returns quotient via plow and */
-/* remainder via phigh. */
-int divu128(uint64_t *plow, uint64_t *phigh, uint64_t divisor)
+/*
+ * Unsigned 128-by-64 division. Returns quotient via plow and
+ * remainder via phigh.
+ * The result must fit in 64 bits (plow) - otherwise, the result
+ * is undefined.
+ * This function will cause a division by zero if passed a zero divisor.
+ */
+void divu128(uint64_t *plow, uint64_t *phigh, uint64_t divisor)
 {
     uint64_t dhi =3D *phigh;
     uint64_t dlo =3D *plow;
     unsigned i;
     uint64_t carry =3D 0;
=20
-    if (divisor =3D=3D 0) {
-        return 1;
-    } else if (dhi =3D=3D 0) {
+    if (divisor =3D=3D 0 || dhi =3D=3D 0) {
         *plow  =3D dlo / divisor;
         *phigh =3D dlo % divisor;
-        return 0;
-    } else if (dhi >=3D divisor) {
-        return 1;
     } else {
=20
         for (i =3D 0; i < 64; i++) {
@@ -120,15 +119,20 @@ int divu128(uint64_t *plow, uint64_t *phigh, uint64_t=
 divisor)
=20
         *plow =3D dlo;
         *phigh =3D dhi;
-        return 0;
     }
 }
=20
-int divs128(int64_t *plow, int64_t *phigh, int64_t divisor)
+/*
+ * Signed 128-by-64 division. Returns quotient via plow and
+ * remainder via phigh.
+ * The result must fit in 64 bits (plow) - otherwise, the result
+ * is undefined.
+ * This function will cause a division by zero if passed a zero divisor.
+ */
+void divs128(int64_t *plow, int64_t *phigh, int64_t divisor)
 {
     int sgn_dvdnd =3D *phigh < 0;
     int sgn_divsr =3D divisor < 0;
-    int overflow =3D 0;
=20
     if (sgn_dvdnd) {
         *plow =3D ~(*plow);
@@ -145,19 +149,11 @@ int divs128(int64_t *plow, int64_t *phigh, int64_t di=
visor)
         divisor =3D 0 - divisor;
     }
=20
-    overflow =3D divu128((uint64_t *)plow, (uint64_t *)phigh, (uint64_t)di=
visor);
+    divu128((uint64_t *)plow, (uint64_t *)phigh, (uint64_t)divisor);
=20
     if (sgn_dvdnd  ^ sgn_divsr) {
         *plow =3D 0 - *plow;
     }
-
-    if (!overflow) {
-        if ((*plow < 0) ^ (sgn_dvdnd ^ sgn_divsr)) {
-            overflow =3D 1;
-        }
-    }
-
-    return overflow;
 }
 #endif
=20
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635389098; cv=none;
	d=zohomail.com; s=zohoarc;
	b=Ad/0UWBof3spVF6zkCXHneVY2rHtSvtNp8+jEQhMrAIPHNOyg8WIwP0nOvv50m2uNLL6A/DZupP0FkOa+9/hZ4tuh4Bxt3ixQu+wEskyGi13e9R8eTiWZk9YzfJbwWe7ctou7TKWnfiHcXXi8/z2FPbaLRR+ueL/3ZP0vjmwkHU=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635389098;
 h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=581JqmpWQBdHSj0pgpxnhrMT8eBaZ+DSAsdPqLGFN8s=;
	b=mH+gHRnky2O/8w89eXG+cVxoQpx14+ERHZ9qRFtgonzWhdcyhgUmkbr4TVN0WX6pb9HmF8FXi90k8W7chZqYfUctlGrsoTacxoVt2kVt9jkqKkMSNxOGlFJ47k3q0euniD4WqRt+NG90rfnZOMXaGIlgiTzULoXPOFLU+bX8p7w=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635389098582636.8698297930658;
 Wed, 27 Oct 2021 19:44:58 -0700 (PDT)
Received: from localhost ([::1]:49390 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvPV-0000Aj-CX
	for importer@patchew.org; Wed, 27 Oct 2021 22:44:57 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:58748)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMJ-0004Ua-7s
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:39 -0400
Received: from mail-pg1-x52d.google.com ([2607:f8b0:4864:20::52d]:43979)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMG-000344-1i
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:38 -0400
Received: by mail-pg1-x52d.google.com with SMTP id r2so4895758pgl.10
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:35 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.33
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:34 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=581JqmpWQBdHSj0pgpxnhrMT8eBaZ+DSAsdPqLGFN8s=;
 b=H9oJp1BXJ1Oy0+QxRnlMQl42WMLs8AAMSEvZ8SWnl8nfZ2nN5svn9OVS7x64mqCx0Q
 WuylbNgc7vdE98VEs4zRUUOj4FF/fkHhv/eoddv85R9JZ2ucO6kyzYB174uBlD5VAE9d
 gzh8tXKPd6b6QVA+/3V2kxPqF2AESLYP9F0GPHdXgBiKaQvbUIvjWZOESri571gs5OQ9
 L8u8ccNP9YW5eP5RypX0f5pKW/g6BFK0cBC8p+35pnv0/J/iItwNL6LgFRCkfDRwROcG
 vlR1NGwOi2c9fR2EF2nHn0kNlpsh4KqCYGlSGm02lNmXEBpaXgZkSY7mZLUiGxqFXIqs
 +yVA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=581JqmpWQBdHSj0pgpxnhrMT8eBaZ+DSAsdPqLGFN8s=;
 b=sD3yvPaKTGa5qdgWt8lVPlsRsy97Sp+/BvLaaqRxH9s+bU8VMbHNCoXtwC/lx6ZTBQ
 PVuS8WA0AEj0q73mHzyM2wQiHYnwUSvZlCs+3K8X2Bi/3Q0DCWq/yW2D9sae8+2hV5rJ
 yD/Ii32ZlOvQgG1WnI7CPHIemwFHFdWXHhbFeyOHp0YT8Bt+ZvLWQYQxXZml2GWi64zq
 DgTE2hR0XP9g8QM4nDFkB6uxz4E0zZ4qsUXHnuCfuDsSI54kTudAkFOUe3+VqjVItXo6
 fRoJIVWaaVztU50oosj3NWHEv5Q9IUn8euti7kN0EeUvLUepzCA13MbeoZQDHoPXelJ2
 Bvyw==
X-Gm-Message-State: AOAM533v9Yefd2/s9bHXVOrv0AV1gTfMcS2fxqUF6Nu+voIE88li2wEN
 Jwo8uQE0cbzJnEUP9mJHcRxhz0CGNixUww==
X-Google-Smtp-Source: 
 ABdhPJxB4md1j0Eejj4tvU+sMkvwiroCKHJoLYr+LW0+OgqaDOmAIl4sKsQlojcB86K8a0shMAqmOA==
X-Received: by 2002:a63:7a53:: with SMTP id j19mr1158554pgn.275.1635388894346;
 Wed, 27 Oct 2021 19:41:34 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 03/56] host-utils: move udiv_qrnnd() to host-utils
Date: Wed, 27 Oct 2021 19:40:38 -0700
Message-Id: <20211028024131.1492790-4-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::52d;
 envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52d.google.com
X-Spam_score_int: -1
X-Spam_score: -0.2
X-Spam_bar: /
X-Spam_report: (-0.2 / 5.0 requ) DKIM_SIGNED=0.1, DKIM_VALID=-0.1,
 DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001,
 SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635389100031100001
Content-Type: text/plain; charset="utf-8"

From: Luis Pires <luis.pires@eldorado.org.br>

Move udiv_qrnnd() from include/fpu/softfloat-macros.h to host-utils,
so it can be reused by divu128().

Signed-off-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20211025191154.350831-3-luis.pires@eldorado.org.br>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 include/fpu/softfloat-macros.h | 82 ----------------------------------
 include/qemu/host-utils.h      | 81 +++++++++++++++++++++++++++++++++
 2 files changed, 81 insertions(+), 82 deletions(-)

diff --git a/include/fpu/softfloat-macros.h b/include/fpu/softfloat-macros.h
index 81c3fe8256..f35cdbfa63 100644
--- a/include/fpu/softfloat-macros.h
+++ b/include/fpu/softfloat-macros.h
@@ -8,7 +8,6 @@
  * so some portions are provided under:
  *  the SoftFloat-2a license
  *  the BSD license
- *  GPL-v2-or-later
  *
  * Any future contributions to this file after December 1st 2014 will be
  * taken to be licensed under the Softfloat-2a license unless specifically
@@ -75,10 +74,6 @@ this code that are retained.
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
=20
-/* Portions of this work are licensed under the terms of the GNU GPL,
- * version 2 or later. See the COPYING file in the top-level directory.
- */
-
 #ifndef FPU_SOFTFLOAT_MACROS_H
 #define FPU_SOFTFLOAT_MACROS_H
=20
@@ -585,83 +580,6 @@ static inline uint64_t estimateDiv128To64(uint64_t a0,=
 uint64_t a1, uint64_t b)
=20
 }
=20
-/* From the GNU Multi Precision Library - longlong.h __udiv_qrnnd
- * (https://gmplib.org/repo/gmp/file/tip/longlong.h)
- *
- * Licensed under the GPLv2/LGPLv3
- */
-static inline uint64_t udiv_qrnnd(uint64_t *r, uint64_t n1,
-                                  uint64_t n0, uint64_t d)
-{
-#if defined(__x86_64__)
-    uint64_t q;
-    asm("divq %4" : "=3Da"(q), "=3Dd"(*r) : "0"(n0), "1"(n1), "rm"(d));
-    return q;
-#elif defined(__s390x__) && !defined(__clang__)
-    /* Need to use a TImode type to get an even register pair for DLGR.  */
-    unsigned __int128 n =3D (unsigned __int128)n1 << 64 | n0;
-    asm("dlgr %0, %1" : "+r"(n) : "r"(d));
-    *r =3D n >> 64;
-    return n;
-#elif defined(_ARCH_PPC64) && defined(_ARCH_PWR7)
-    /* From Power ISA 2.06, programming note for divdeu.  */
-    uint64_t q1, q2, Q, r1, r2, R;
-    asm("divdeu %0,%2,%4; divdu %1,%3,%4"
-        : "=3D&r"(q1), "=3Dr"(q2)
-        : "r"(n1), "r"(n0), "r"(d));
-    r1 =3D -(q1 * d);         /* low part of (n1<<64) - (q1 * d) */
-    r2 =3D n0 - (q2 * d);
-    Q =3D q1 + q2;
-    R =3D r1 + r2;
-    if (R >=3D d || R < r2) { /* overflow implies R > d */
-        Q +=3D 1;
-        R -=3D d;
-    }
-    *r =3D R;
-    return Q;
-#else
-    uint64_t d0, d1, q0, q1, r1, r0, m;
-
-    d0 =3D (uint32_t)d;
-    d1 =3D d >> 32;
-
-    r1 =3D n1 % d1;
-    q1 =3D n1 / d1;
-    m =3D q1 * d0;
-    r1 =3D (r1 << 32) | (n0 >> 32);
-    if (r1 < m) {
-        q1 -=3D 1;
-        r1 +=3D d;
-        if (r1 >=3D d) {
-            if (r1 < m) {
-                q1 -=3D 1;
-                r1 +=3D d;
-            }
-        }
-    }
-    r1 -=3D m;
-
-    r0 =3D r1 % d1;
-    q0 =3D r1 / d1;
-    m =3D q0 * d0;
-    r0 =3D (r0 << 32) | (uint32_t)n0;
-    if (r0 < m) {
-        q0 -=3D 1;
-        r0 +=3D d;
-        if (r0 >=3D d) {
-            if (r0 < m) {
-                q0 -=3D 1;
-                r0 +=3D d;
-            }
-        }
-    }
-    r0 -=3D m;
-
-    *r =3D r0;
-    return (q1 << 32) | q0;
-#endif
-}
-
 /*------------------------------------------------------------------------=
----
 | Returns an approximation to the square root of the 32-bit significand gi=
ven
 | by `a'.  Considered as an integer, `a' must be at least 2^31.  If bit 0 =
of
diff --git a/include/qemu/host-utils.h b/include/qemu/host-utils.h
index e82e6239af..08a17e16e5 100644
--- a/include/qemu/host-utils.h
+++ b/include/qemu/host-utils.h
@@ -23,6 +23,10 @@
  * THE SOFTWARE.
  */
=20
+/* Portions of this work are licensed under the terms of the GNU GPL,
+ * version 2 or later. See the COPYING file in the top-level directory.
+ */
+
 #ifndef HOST_UTILS_H
 #define HOST_UTILS_H
=20
@@ -726,4 +730,81 @@ void urshift(uint64_t *plow, uint64_t *phigh, int32_t =
shift);
  */
 void ulshift(uint64_t *plow, uint64_t *phigh, int32_t shift, bool *overflo=
w);
=20
+/* From the GNU Multi Precision Library - longlong.h __udiv_qrnnd
+ * (https://gmplib.org/repo/gmp/file/tip/longlong.h)
+ *
+ * Licensed under the GPLv2/LGPLv3
+ */
+static inline uint64_t udiv_qrnnd(uint64_t *r, uint64_t n1,
+                                  uint64_t n0, uint64_t d)
+{
+#if defined(__x86_64__)
+    uint64_t q;
+    asm("divq %4" : "=3Da"(q), "=3Dd"(*r) : "0"(n0), "1"(n1), "rm"(d));
+    return q;
+#elif defined(__s390x__) && !defined(__clang__)
+    /* Need to use a TImode type to get an even register pair for DLGR.  */
+    unsigned __int128 n =3D (unsigned __int128)n1 << 64 | n0;
+    asm("dlgr %0, %1" : "+r"(n) : "r"(d));
+    *r =3D n >> 64;
+    return n;
+#elif defined(_ARCH_PPC64) && defined(_ARCH_PWR7)
+    /* From Power ISA 2.06, programming note for divdeu.  */
+    uint64_t q1, q2, Q, r1, r2, R;
+    asm("divdeu %0,%2,%4; divdu %1,%3,%4"
+        : "=3D&r"(q1), "=3Dr"(q2)
+        : "r"(n1), "r"(n0), "r"(d));
+    r1 =3D -(q1 * d);         /* low part of (n1<<64) - (q1 * d) */
+    r2 =3D n0 - (q2 * d);
+    Q =3D q1 + q2;
+    R =3D r1 + r2;
+    if (R >=3D d || R < r2) { /* overflow implies R > d */
+        Q +=3D 1;
+        R -=3D d;
+    }
+    *r =3D R;
+    return Q;
+#else
+    uint64_t d0, d1, q0, q1, r1, r0, m;
+
+    d0 =3D (uint32_t)d;
+    d1 =3D d >> 32;
+
+    r1 =3D n1 % d1;
+    q1 =3D n1 / d1;
+    m =3D q1 * d0;
+    r1 =3D (r1 << 32) | (n0 >> 32);
+    if (r1 < m) {
+        q1 -=3D 1;
+        r1 +=3D d;
+        if (r1 >=3D d) {
+            if (r1 < m) {
+                q1 -=3D 1;
+                r1 +=3D d;
+            }
+        }
+    }
+    r1 -=3D m;
+
+    r0 =3D r1 % d1;
+    q0 =3D r1 / d1;
+    m =3D q0 * d0;
+    r0 =3D (r0 << 32) | (uint32_t)n0;
+    if (r0 < m) {
+        q0 -=3D 1;
+        r0 +=3D d;
+        if (r0 >=3D d) {
+            if (r0 < m) {
+                q0 -=3D 1;
+                r0 +=3D d;
+            }
+        }
+    }
+    r0 -=3D m;
+
+    *r =3D r0;
+    return (q1 << 32) | q0;
+#endif
+}
+
 #endif
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635389839; cv=none;
	d=zohomail.com; s=zohoarc;
	b=YvK3zINyoaRnTeHepTN/5VOs1POrFTB4z/v8RtE5FejHVyBtRjPyo4L1Fm51KfhFZsQ2fWmDRumJ3WjA3rFR8oFLRAf7AJbkp1VIX3KMmnw1VFu18+H/Li8jcf3ubuFVMiAAJsckwyuQH0R+Qn8q0d9fquW2xVaLe2kmW9YkULs=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635389839;
 h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=yA37LSgyZgUZ7Jnk9oYQugiaR4/N0x8exHl3zm53CZM=;
	b=OoAgOYT2UqpvXWQHdLtqRRvpJySYWRbEa0VBLSyCHIC11DAmkCRd3+gYiuR0nFqgHtJgO8DxwQnwuWtvaCDQCSPeRJkTnCCYMF8hhboeOdN7H7H4d/uvtQe0PWy79fzw8BalQV1WtApt6cYEmDcHNvcvmYXSkVy5ubAsg6OdJZo=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 163538983923632.5972137927356;
 Wed, 27 Oct 2021 19:57:19 -0700 (PDT)
Received: from localhost ([::1]:50094 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvbS-0003Mv-5c
	for importer@patchew.org; Wed, 27 Oct 2021 22:57:18 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:58744)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMJ-0004UC-1Y
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:39 -0400
Received: from mail-pg1-x52a.google.com ([2607:f8b0:4864:20::52a]:39669)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMG-000348-Fr
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:38 -0400
Received: by mail-pg1-x52a.google.com with SMTP id g184so4924936pgc.6
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:36 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.34
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:34 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=yA37LSgyZgUZ7Jnk9oYQugiaR4/N0x8exHl3zm53CZM=;
 b=t68ZXjXYViMx9IKddwE0NsljKsCtVUi+ZlEEypoFg3UgicurlcEVHa+Mp1MHkUYb28
 nqY4yqdLIeAFaUWK2WkcLSboyllUxtRdEqOyhOxCcTpLdNAvbBRBp9WpxkgO5dil6c/K
 SFvZtxlJu72KC3olRfXzEd9/w8tsdSfNjRdk5muDnwbtGCYJ/l4ZHjISUwUUqu9KOSap
 WeAITIU+53wMey5LCzdeL6p4qjQzbh/xx3g99wcA2IAfTWUitcwb5Q/cMpeWKcse1f5V
 yBB2gr9HukmClGS0MrMxD7Vb8w7iWWfynzvQ3ylewBvDH0iEYxnuEF4b/yQi7JaOe4/p
 TLUg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=yA37LSgyZgUZ7Jnk9oYQugiaR4/N0x8exHl3zm53CZM=;
 b=Q7B+C3LoqIG5A9yGQtW7dyZXHxSxucwoykbVn3vMNXcnL/mAs84cUtTLjVrOcZFpOx
 Q+PCkhf7hx+JTK7wkbVNvxuB8dHQgLB0ArHckPP8R8BXQXNuYj+Mw+WGP2prNvfVHp6W
 7gSY3NnW5baYRogmvqPQknh7qvoEu7t1YuHMvWt/oc6Ag+CUEkRZAiTnptRWQ7GNLtYk
 lqYf77uSkBOEkIpTnGGcUC4Ho5qEnRbM4nJkgvyAZ3iPI4LFYGuRH0483siYzwPV1znM
 ROqwpKRjMuJ2Xug3q0nnzLGuvq6YUMLLP+p+WSB5J9agjAkVeOFNdymo+Kx9vZzQ//0e
 35sw==
X-Gm-Message-State: AOAM531+HO5jAnVjGmaRnKIASEqZL58KRjmP36Vcn6ewR42H6y6usxdQ
 9ZVxjdEG2CZOICU6qx0A+Klkts7sNNTCDw==
X-Google-Smtp-Source: 
 ABdhPJzzse17aJ7OakpDZU+bQ2xoklLSb8G5OjepM/7tF6H29VzbtXducD8j8hDxkTNXyc00A3ge4A==
X-Received: by 2002:a62:80cb:0:b0:47c:1d1c:b763 with SMTP id
 j194-20020a6280cb000000b0047c1d1cb763mr1507171pfd.62.1635388895002;
 Wed, 27 Oct 2021 19:41:35 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 04/56] host-utils: add 128-bit quotient support to
 divu128/divs128
Date: Wed, 27 Oct 2021 19:40:39 -0700
Message-Id: <20211028024131.1492790-5-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::52a;
 envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52a.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635389839834100001
Content-Type: text/plain; charset="utf-8"

From: Luis Pires <luis.pires@eldorado.org.br>

These will be used to implement new decimal floating point
instructions from Power ISA 3.1.

The remainder is now returned directly by divu128/divs128,
freeing up phigh to receive the high 64 bits of the quotient.

Signed-off-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20211025191154.350831-4-luis.pires@eldorado.org.br>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 include/hw/clock.h        |   6 +-
 include/qemu/host-utils.h |  20 ++++--
 target/ppc/int_helper.c   |   9 +--
 util/host-utils.c         | 133 +++++++++++++++++++++++++-------------
 4 files changed, 108 insertions(+), 60 deletions(-)

diff --git a/include/hw/clock.h b/include/hw/clock.h
index 7443e6c4ab..5c927cee7f 100644
--- a/include/hw/clock.h
+++ b/include/hw/clock.h
@@ -323,11 +323,7 @@ static inline uint64_t clock_ns_to_ticks(const Clock *=
clk, uint64_t ns)
     if (clk->period =3D=3D 0) {
         return 0;
     }
-    /*
-     * BUG: when CONFIG_INT128 is not defined, the current implementation =
of
-     * divu128 does not return a valid truncated quotient, so the result w=
ill
-     * be wrong.
-     */
+
     divu128(&lo, &hi, clk->period);
     return lo;
 }
diff --git a/include/qemu/host-utils.h b/include/qemu/host-utils.h
index 08a17e16e5..a3a7ced78d 100644
--- a/include/qemu/host-utils.h
+++ b/include/qemu/host-utils.h
@@ -56,26 +56,32 @@ static inline uint64_t muldiv64(uint64_t a, uint32_t b,=
 uint32_t c)
     return (__int128_t)a * b / c;
 }
=20
-static inline void divu128(uint64_t *plow, uint64_t *phigh, uint64_t divis=
or)
+static inline uint64_t divu128(uint64_t *plow, uint64_t *phigh,
+                               uint64_t divisor)
 {
     __uint128_t dividend =3D ((__uint128_t)*phigh << 64) | *plow;
     __uint128_t result =3D dividend / divisor;
+
     *plow =3D result;
-    *phigh =3D dividend % divisor;
+    *phigh =3D result >> 64;
+    return dividend % divisor;
 }
=20
-static inline void divs128(int64_t *plow, int64_t *phigh, int64_t divisor)
+static inline int64_t divs128(uint64_t *plow, int64_t *phigh,
+                              int64_t divisor)
 {
-    __int128_t dividend =3D ((__int128_t)*phigh << 64) | (uint64_t)*plow;
+    __int128_t dividend =3D ((__int128_t)*phigh << 64) | *plow;
     __int128_t result =3D dividend / divisor;
+
     *plow =3D result;
-    *phigh =3D dividend % divisor;
+    *phigh =3D result >> 64;
+    return dividend % divisor;
 }
 #else
 void muls64(uint64_t *plow, uint64_t *phigh, int64_t a, int64_t b);
 void mulu64(uint64_t *plow, uint64_t *phigh, uint64_t a, uint64_t b);
-void divu128(uint64_t *plow, uint64_t *phigh, uint64_t divisor);
-void divs128(int64_t *plow, int64_t *phigh, int64_t divisor);
+uint64_t divu128(uint64_t *plow, uint64_t *phigh, uint64_t divisor);
+int64_t divs128(uint64_t *plow, int64_t *phigh, int64_t divisor);
=20
 static inline uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c)
 {
diff --git a/target/ppc/int_helper.c b/target/ppc/int_helper.c
index 510faf24cf..eeb7781a9e 100644
--- a/target/ppc/int_helper.c
+++ b/target/ppc/int_helper.c
@@ -120,7 +120,7 @@ uint64_t helper_divdeu(CPUPPCState *env, uint64_t ra, u=
int64_t rb, uint32_t oe)
=20
 uint64_t helper_divde(CPUPPCState *env, uint64_t rau, uint64_t rbu, uint32=
_t oe)
 {
-    int64_t rt =3D 0;
+    uint64_t rt =3D 0;
     int64_t ra =3D (int64_t)rau;
     int64_t rb =3D (int64_t)rbu;
     int overflow =3D 0;
@@ -2506,6 +2506,7 @@ uint32_t helper_bcdcfsq(ppc_avr_t *r, ppc_avr_t *b, u=
int32_t ps)
     int cr;
     uint64_t lo_value;
     uint64_t hi_value;
+    uint64_t rem;
     ppc_avr_t ret =3D { .u64 =3D { 0, 0 } };
=20
     if (b->VsrSD(0) < 0) {
@@ -2541,10 +2542,10 @@ uint32_t helper_bcdcfsq(ppc_avr_t *r, ppc_avr_t *b,=
 uint32_t ps)
          * In that case, we leave r unchanged.
          */
     } else {
-        divu128(&lo_value, &hi_value, 1000000000000000ULL);
+        rem =3D divu128(&lo_value, &hi_value, 1000000000000000ULL);
=20
-        for (i =3D 1; i < 16; hi_value /=3D 10, i++) {
-            bcd_put_digit(&ret, hi_value % 10, i);
+        for (i =3D 1; i < 16; rem /=3D 10, i++) {
+            bcd_put_digit(&ret, rem % 10, i);
         }
=20
         for (; i < 32; lo_value /=3D 10, i++) {
diff --git a/util/host-utils.c b/util/host-utils.c
index 701a371843..bcc772b8ec 100644
--- a/util/host-utils.c
+++ b/util/host-utils.c
@@ -87,72 +87,117 @@ void muls64 (uint64_t *plow, uint64_t *phigh, int64_t =
a, int64_t b)
 }
=20
 /*
- * Unsigned 128-by-64 division. Returns quotient via plow and
- * remainder via phigh.
- * The result must fit in 64 bits (plow) - otherwise, the result
- * is undefined.
- * This function will cause a division by zero if passed a zero divisor.
+ * Unsigned 128-by-64 division.
+ * Returns the remainder.
+ * Returns quotient via plow and phigh.
+ * Also returns the remainder via the function return value.
  */
-void divu128(uint64_t *plow, uint64_t *phigh, uint64_t divisor)
+uint64_t divu128(uint64_t *plow, uint64_t *phigh, uint64_t divisor)
 {
     uint64_t dhi =3D *phigh;
     uint64_t dlo =3D *plow;
-    unsigned i;
-    uint64_t carry =3D 0;
+    uint64_t rem, dhighest;
+    int sh;
=20
     if (divisor =3D=3D 0 || dhi =3D=3D 0) {
         *plow  =3D dlo / divisor;
-        *phigh =3D dlo % divisor;
+        *phigh =3D 0;
+        return dlo % divisor;
     } else {
+        sh =3D clz64(divisor);
=20
-        for (i =3D 0; i < 64; i++) {
-            carry =3D dhi >> 63;
-            dhi =3D (dhi << 1) | (dlo >> 63);
-            if (carry || (dhi >=3D divisor)) {
-                dhi -=3D divisor;
-                carry =3D 1;
-            } else {
-                carry =3D 0;
+        if (dhi < divisor) {
+            if (sh !=3D 0) {
+                /* normalize the divisor, shifting the dividend accordingl=
y */
+                divisor <<=3D sh;
+                dhi =3D (dhi << sh) | (dlo >> (64 - sh));
+                dlo <<=3D sh;
             }
-            dlo =3D (dlo << 1) | carry;
+
+            *phigh =3D 0;
+            *plow =3D udiv_qrnnd(&rem, dhi, dlo, divisor);
+        } else {
+            if (sh !=3D 0) {
+                /* normalize the divisor, shifting the dividend accordingl=
y */
+                divisor <<=3D sh;
+                dhighest =3D dhi >> (64 - sh);
+                dhi =3D (dhi << sh) | (dlo >> (64 - sh));
+                dlo <<=3D sh;
+
+                *phigh =3D udiv_qrnnd(&dhi, dhighest, dhi, divisor);
+            } else {
+                /**
+                 * dhi >=3D divisor
+                 * Since the MSB of divisor is set (sh =3D=3D 0),
+                 * (dhi - divisor) < divisor
+                 *
+                 * Thus, the high part of the quotient is 1, and we can
+                 * calculate the low part with a single call to udiv_qrnnd
+                 * after subtracting divisor from dhi
+                 */
+                dhi -=3D divisor;
+                *phigh =3D 1;
+            }
+
+            *plow =3D udiv_qrnnd(&rem, dhi, dlo, divisor);
         }
=20
-        *plow =3D dlo;
-        *phigh =3D dhi;
+        /*
+         * since the dividend/divisor might have been normalized,
+         * the remainder might also have to be shifted back
+         */
+        return rem >> sh;
     }
 }
=20
 /*
- * Signed 128-by-64 division. Returns quotient via plow and
- * remainder via phigh.
- * The result must fit in 64 bits (plow) - otherwise, the result
- * is undefined.
- * This function will cause a division by zero if passed a zero divisor.
+ * Signed 128-by-64 division.
+ * Returns quotient via plow and phigh.
+ * Also returns the remainder via the function return value.
  */
-void divs128(int64_t *plow, int64_t *phigh, int64_t divisor)
+int64_t divs128(uint64_t *plow, int64_t *phigh, int64_t divisor)
 {
-    int sgn_dvdnd =3D *phigh < 0;
-    int sgn_divsr =3D divisor < 0;
+    bool neg_quotient =3D false, neg_remainder =3D false;
+    uint64_t unsig_hi =3D *phigh, unsig_lo =3D *plow;
+    uint64_t rem;
=20
-    if (sgn_dvdnd) {
-        *plow =3D ~(*plow);
-        *phigh =3D ~(*phigh);
-        if (*plow =3D=3D (int64_t)-1) {
+    if (*phigh < 0) {
+        neg_quotient =3D !neg_quotient;
+        neg_remainder =3D !neg_remainder;
+
+        if (unsig_lo =3D=3D 0) {
+            unsig_hi =3D -unsig_hi;
+        } else {
+            unsig_hi =3D ~unsig_hi;
+            unsig_lo =3D -unsig_lo;
+        }
+    }
+
+    if (divisor < 0) {
+        neg_quotient =3D !neg_quotient;
+
+        divisor =3D -divisor;
+    }
+
+    rem =3D divu128(&unsig_lo, &unsig_hi, (uint64_t)divisor);
+
+    if (neg_quotient) {
+        if (unsig_lo =3D=3D 0) {
+            *phigh =3D -unsig_hi;
             *plow =3D 0;
-            (*phigh)++;
-         } else {
-            (*plow)++;
-         }
+        } else {
+            *phigh =3D ~unsig_hi;
+            *plow =3D -unsig_lo;
+        }
+    } else {
+        *phigh =3D unsig_hi;
+        *plow =3D unsig_lo;
     }
=20
-    if (sgn_divsr) {
-        divisor =3D 0 - divisor;
-    }
-
-    divu128((uint64_t *)plow, (uint64_t *)phigh, (uint64_t)divisor);
-
-    if (sgn_dvdnd  ^ sgn_divsr) {
-        *plow =3D 0 - *plow;
+    if (neg_remainder) {
+        return -rem;
+    } else {
+        return rem;
     }
 }
 #endif
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635389423; cv=none;
	d=zohomail.com; s=zohoarc;
	b=PzSleABRJKYwdr+A1GHDZRR6FT8fo06Q3rgkddey4/eRvmVY/HVmxbX7fpiDDK4QPjAuqgUjLXk4HmrlUmN16kryoN+PHk59QYX2B2g6DGY+2GqthAwcZ1o9/yUF6NRfqtIMIt4KUndko+3m/76p8BVXOxpcrQXPzuMSjyXmBV8=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635389423;
 h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=fbM8vP6oZVfBjMkR+F02D0JXw0BXydMmw3R+Qwyc8Wk=;
	b=TBjRtNC0IisyGQiwQX6McyYxCVbJuZE2T7ielgq1quvb5/i3PoeIQAucYeuU7EmRFHM0NLs/q6kO2SZUEuIq2h/XjJJXUOItmEGcep7Zuo9/l9w3OKbDnnkn/6CFAW2Pz+OJ8PAU3C+kdvJWTYkq06Si3+EP8atXLShCvi2r0pY=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 163538942350034.04787892704792;
 Wed, 27 Oct 2021 19:50:23 -0700 (PDT)
Received: from localhost ([::1]:60862 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvUk-00084C-2n
	for importer@patchew.org; Wed, 27 Oct 2021 22:50:22 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:58766)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMK-0004Vd-1r
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:40 -0400
Received: from mail-pg1-x52b.google.com ([2607:f8b0:4864:20::52b]:37626)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMH-00034G-5X
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:39 -0400
Received: by mail-pg1-x52b.google.com with SMTP id s136so4936018pgs.4
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:36 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.35
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:35 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=fbM8vP6oZVfBjMkR+F02D0JXw0BXydMmw3R+Qwyc8Wk=;
 b=GkILqhl3eSxd2h1Y/PMlkEZijSa+PYt304GTHAXVnOE/qfLprpbvfZYanC//mlCB9Z
 8vGf9zczcuJH7W0YuQVJcU8SXOBxJK8SE6z6WxVPHFWmaLhq+5p0yQSTNyLA+QiJwnQ2
 x3Gd+ok6tUd3MO29Gvjg1NUaPvMpNVtSNx2QoA0I1/FCJb93+2D8aaaOCg6haH62hAZz
 iDrlSPlJlIdqleYh1c5DnhnfxacJiI5+j2t53CUPITkwt0en6HxcqCjIkQQ0P/bPbqXG
 EhEq8CZFUfNwQGP6CxtMGo1Gj/J9XCGgCUBQuerUXfCpqcTcA0c8pgrK2USOOnzk/VLl
 WuqA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=fbM8vP6oZVfBjMkR+F02D0JXw0BXydMmw3R+Qwyc8Wk=;
 b=QQwN5zvRqq5R0FAJVWdNifp1/YZ4wYtjiBELGow+1v9OZ2ecHK5jL8CUxCLetB6lzd
 XhDgR1ZsN+2uBCvXBbtvWoTdLTFDcypc3Y/94m4cD+Z5m47AqrLcF/h+ZfkGz4Kf/loh
 v5S3Am/tQLEOQ+QpqF7VOjWCQcDCWeYM6Ufj2eG3JfGs5uEHxEkrOASEbTgxhtmuMbOJ
 EwIQiFyyZZICoi0+oMOGqaVsfhX5o+0Ew3ct/8ok+MLqP/wTAbvXRtJT0FImKAjHiGhU
 9dlDRUhoKsnBTg92N9CcN81CpRwAww2QITSOi/nudcyi4TjhpuWvd3pTvssbZ4psLIXr
 doHQ==
X-Gm-Message-State: AOAM531QJ6Nn1ztFoHoGWaICATm7AseuA4OgMGxH6t852OyE3g1BEx/b
 1U6DohE6VEs5Jscde27ilDnSpHtqaqsU7g==
X-Google-Smtp-Source: 
 ABdhPJyWC/55uVIpUU5twf+5T0arnlIMrolw862ooruPqBXBMKNalGCcpvaLDkKRBNBBCubMQxKCag==
X-Received: by 2002:a05:6a00:24d3:b0:47c:e914:3a29 with SMTP id
 d19-20020a056a0024d300b0047ce9143a29mr1519672pfv.64.1635388895834;
 Wed, 27 Oct 2021 19:41:35 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 05/56] host-utils: add unit tests for divu128/divs128
Date: Wed, 27 Oct 2021 19:40:40 -0700
Message-Id: <20211028024131.1492790-6-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::52b;
 envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52b.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635389424935100001
Content-Type: text/plain; charset="utf-8"

From: Luis Pires <luis.pires@eldorado.org.br>

Signed-off-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20211025191154.350831-5-luis.pires@eldorado.org.br>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tests/unit/test-div128.c | 197 +++++++++++++++++++++++++++++++++++++++
 tests/unit/meson.build   |   1 +
 2 files changed, 198 insertions(+)
 create mode 100644 tests/unit/test-div128.c

diff --git a/tests/unit/test-div128.c b/tests/unit/test-div128.c
new file mode 100644
index 0000000000..0bc25fe4a8
--- /dev/null
+++ b/tests/unit/test-div128.c
@@ -0,0 +1,197 @@
+/*
+ * Test 128-bit division functions
+ *
+ * Copyright (c) 2021 Instituto de Pesquisas Eldorado (eldorado.org.br)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see <http://www.gnu.org/licens=
es/>.
+ */
+
+#include "qemu/osdep.h"
+#include "qemu/host-utils.h"
+
+typedef struct {
+    uint64_t high;
+    uint64_t low;
+    uint64_t rhigh;
+    uint64_t rlow;
+    uint64_t divisor;
+    uint64_t remainder;
+} test_data_unsigned;
+
+typedef struct {
+    int64_t high;
+    uint64_t low;
+    int64_t rhigh;
+    uint64_t rlow;
+    int64_t divisor;
+    int64_t remainder;
+} test_data_signed;
+
+static const test_data_unsigned test_table_unsigned[] =3D {
+    /* Dividend fits in 64 bits */
+    { 0x0000000000000000ULL, 0x0000000000000000ULL,
+      0x0000000000000000ULL, 0x0000000000000000ULL,
+      0x0000000000000001ULL, 0x0000000000000000ULL},
+    { 0x0000000000000000ULL, 0x0000000000000001ULL,
+      0x0000000000000000ULL, 0x0000000000000001ULL,
+      0x0000000000000001ULL, 0x0000000000000000ULL},
+    { 0x0000000000000000ULL, 0x0000000000000003ULL,
+      0x0000000000000000ULL, 0x0000000000000001ULL,
+      0x0000000000000002ULL, 0x0000000000000001ULL},
+    { 0x0000000000000000ULL, 0x8000000000000000ULL,
+      0x0000000000000000ULL, 0x8000000000000000ULL,
+      0x0000000000000001ULL, 0x0000000000000000ULL},
+    { 0x0000000000000000ULL, 0xa000000000000000ULL,
+      0x0000000000000000ULL, 0x0000000000000002ULL,
+      0x4000000000000000ULL, 0x2000000000000000ULL},
+    { 0x0000000000000000ULL, 0x8000000000000000ULL,
+      0x0000000000000000ULL, 0x0000000000000001ULL,
+      0x8000000000000000ULL, 0x0000000000000000ULL},
+
+    /* Dividend > 64 bits, with MSB 0 */
+    { 0x123456789abcdefeULL, 0xefedcba987654321ULL,
+      0x123456789abcdefeULL, 0xefedcba987654321ULL,
+      0x0000000000000001ULL, 0x0000000000000000ULL},
+    { 0x123456789abcdefeULL, 0xefedcba987654321ULL,
+      0x0000000000000001ULL, 0x000000000000000dULL,
+      0x123456789abcdefeULL, 0x03456789abcdf03bULL},
+    { 0x123456789abcdefeULL, 0xefedcba987654321ULL,
+      0x0123456789abcdefULL, 0xeefedcba98765432ULL,
+      0x0000000000000010ULL, 0x0000000000000001ULL},
+
+    /* Dividend > 64 bits, with MSB 1 */
+    { 0xfeeddccbbaa99887ULL, 0x766554433221100fULL,
+      0xfeeddccbbaa99887ULL, 0x766554433221100fULL,
+      0x0000000000000001ULL, 0x0000000000000000ULL},
+    { 0xfeeddccbbaa99887ULL, 0x766554433221100fULL,
+      0x0000000000000001ULL, 0x0000000000000000ULL,
+      0xfeeddccbbaa99887ULL, 0x766554433221100fULL},
+    { 0xfeeddccbbaa99887ULL, 0x766554433221100fULL,
+      0x0feeddccbbaa9988ULL, 0x7766554433221100ULL,
+      0x0000000000000010ULL, 0x000000000000000fULL},
+    { 0xfeeddccbbaa99887ULL, 0x766554433221100fULL,
+      0x000000000000000eULL, 0x00f0f0f0f0f0f35aULL,
+      0x123456789abcdefeULL, 0x0f8922bc55ef90c3ULL},
+
+    /**
+     * Divisor =3D=3D 64 bits, with MSB 1
+     * and high 64 bits of dividend >=3D divisor
+     * (for testing normalization)
+     */
+    { 0xfeeddccbbaa99887ULL, 0x766554433221100fULL,
+      0x0000000000000001ULL, 0x0000000000000000ULL,
+      0xfeeddccbbaa99887ULL, 0x766554433221100fULL},
+    { 0xfeeddccbbaa99887ULL, 0x766554433221100fULL,
+      0x0000000000000001ULL, 0xfddbb9977553310aULL,
+      0x8000000000000001ULL, 0x78899aabbccddf05ULL},
+
+    /* Dividend > 64 bits, divisor almost as big */
+    { 0x0000000000000001ULL, 0x23456789abcdef01ULL,
+      0x0000000000000000ULL, 0x000000000000000fULL,
+      0x123456789abcdefeULL, 0x123456789abcde1fULL},
+};
+
+static const test_data_signed test_table_signed[] =3D {
+    /* Positive dividend, positive/negative divisors */
+    { 0x0000000000000000LL, 0x0000000000bc614eULL,
+      0x0000000000000000LL, 0x0000000000bc614eULL,
+      0x0000000000000001LL, 0x0000000000000000LL},
+    { 0x0000000000000000LL, 0x0000000000bc614eULL,
+      0xffffffffffffffffLL, 0xffffffffff439eb2ULL,
+      0xffffffffffffffffLL, 0x0000000000000000LL},
+    { 0x0000000000000000LL, 0x0000000000bc614eULL,
+      0x0000000000000000LL, 0x00000000005e30a7ULL,
+      0x0000000000000002LL, 0x0000000000000000LL},
+    { 0x0000000000000000LL, 0x0000000000bc614eULL,
+      0xffffffffffffffffLL, 0xffffffffffa1cf59ULL,
+      0xfffffffffffffffeLL, 0x0000000000000000LL},
+    { 0x0000000000000000LL, 0x0000000000bc614eULL,
+      0x0000000000000000LL, 0x0000000000178c29ULL,
+      0x0000000000000008LL, 0x0000000000000006LL},
+    { 0x0000000000000000LL, 0x0000000000bc614eULL,
+      0xffffffffffffffffLL, 0xffffffffffe873d7ULL,
+      0xfffffffffffffff8LL, 0x0000000000000006LL},
+    { 0x0000000000000000LL, 0x0000000000bc614eULL,
+      0x0000000000000000LL, 0x000000000000550dULL,
+      0x0000000000000237LL, 0x0000000000000183LL},
+    { 0x0000000000000000LL, 0x0000000000bc614eULL,
+      0xffffffffffffffffLL, 0xffffffffffffaaf3ULL,
+      0xfffffffffffffdc9LL, 0x0000000000000183LL},
+
+    /* Negative dividend, positive/negative divisors */
+    { 0xffffffffffffffffLL, 0xffffffffff439eb2ULL,
+      0xffffffffffffffffLL, 0xffffffffff439eb2ULL,
+      0x0000000000000001LL, 0x0000000000000000LL},
+    { 0xffffffffffffffffLL, 0xffffffffff439eb2ULL,
+      0x0000000000000000LL, 0x0000000000bc614eULL,
+      0xffffffffffffffffLL, 0x0000000000000000LL},
+    { 0xffffffffffffffffLL, 0xffffffffff439eb2ULL,
+      0xffffffffffffffffLL, 0xffffffffffa1cf59ULL,
+      0x0000000000000002LL, 0x0000000000000000LL},
+    { 0xffffffffffffffffLL, 0xffffffffff439eb2ULL,
+      0x0000000000000000LL, 0x00000000005e30a7ULL,
+      0xfffffffffffffffeLL, 0x0000000000000000LL},
+    { 0xffffffffffffffffLL, 0xffffffffff439eb2ULL,
+      0xffffffffffffffffLL, 0xffffffffffe873d7ULL,
+      0x0000000000000008LL, 0xfffffffffffffffaLL},
+    { 0xffffffffffffffffLL, 0xffffffffff439eb2ULL,
+      0x0000000000000000LL, 0x0000000000178c29ULL,
+      0xfffffffffffffff8LL, 0xfffffffffffffffaLL},
+    { 0xffffffffffffffffLL, 0xffffffffff439eb2ULL,
+      0xffffffffffffffffLL, 0xffffffffffffaaf3ULL,
+      0x0000000000000237LL, 0xfffffffffffffe7dLL},
+    { 0xffffffffffffffffLL, 0xffffffffff439eb2ULL,
+      0x0000000000000000LL, 0x000000000000550dULL,
+      0xfffffffffffffdc9LL, 0xfffffffffffffe7dLL},
+};
+
+static void test_divu128(void)
+{
+    int i;
+    uint64_t rem;
+    test_data_unsigned tmp;
+
+    for (i =3D 0; i < ARRAY_SIZE(test_table_unsigned); ++i) {
+        tmp =3D test_table_unsigned[i];
+
+        rem =3D divu128(&tmp.low, &tmp.high, tmp.divisor);
+        g_assert_cmpuint(tmp.low, =3D=3D, tmp.rlow);
+        g_assert_cmpuint(tmp.high, =3D=3D, tmp.rhigh);
+        g_assert_cmpuint(rem, =3D=3D, tmp.remainder);
+    }
+}
+
+static void test_divs128(void)
+{
+    int i;
+    int64_t rem;
+    test_data_signed tmp;
+
+    for (i =3D 0; i < ARRAY_SIZE(test_table_signed); ++i) {
+        tmp =3D test_table_signed[i];
+
+        rem =3D divs128(&tmp.low, &tmp.high, tmp.divisor);
+        g_assert_cmpuint(tmp.low, =3D=3D, tmp.rlow);
+        g_assert_cmpuint(tmp.high, =3D=3D, tmp.rhigh);
+        g_assert_cmpuint(rem, =3D=3D, tmp.remainder);
+    }
+}
+
+int main(int argc, char **argv)
+{
+    g_test_init(&argc, &argv, NULL);
+    g_test_add_func("/host-utils/test_divu128", test_divu128);
+    g_test_add_func("/host-utils/test_divs128", test_divs128);
+    return g_test_run();
+}
diff --git a/tests/unit/meson.build b/tests/unit/meson.build
index 7c297d7e5c..5ac2d9e943 100644
--- a/tests/unit/meson.build
+++ b/tests/unit/meson.build
@@ -23,6 +23,7 @@ tests =3D {
   # all code tested by test-x86-cpuid is inside topology.h
   'test-x86-cpuid': [],
   'test-cutils': [],
+  'test-div128': [],
   'test-shift128': [],
   'test-mul64': [],
   # all code tested by test-int128 is inside int128.h
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=fail;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=fail(p=none dis=none)  header.from=linaro.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635390076595687.5711366874469;
 Wed, 27 Oct 2021 20:01:16 -0700 (PDT)
Received: from localhost ([::1]:58464 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvfH-0000lr-IG
	for importer@patchew.org; Wed, 27 Oct 2021 23:01:15 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:58776)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMK-0004W4-JP
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:40 -0400
Received: from mail-pg1-x529.google.com ([2607:f8b0:4864:20::529]:36597)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMI-00034V-1G
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:40 -0400
Received: by mail-pg1-x529.google.com with SMTP id 75so4950615pga.3
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:37 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.35
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:36 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=bT4qv4vEHBY6BlW0dUJLyD6oXjbPcXHkc7wIjavuU8I=;
 b=r1SeThVPofmbej1sOvE/NI9LnFByH7n0uo0fYXAa+vHKrguQVLBt7Ce+Q5c+wOiuec
 VGy0BvLPIYZSXDrHys8DoJeAgCANmRTYBWkZde+ggsOOEgesfw1el4PRY/0x5p9EJC3j
 4+zNuFlIZznk+WFjnDJatZXQ+Q99U8EcGhYnoAUjpNlHEEBlCUQZ2JMrDg+P98y+Kn8V
 RSSZPdWoj/B2MbGzU+t9R9IrOrx843/2oy/ijsuk/CRx1T3djqtFIHlIVqs325t7J7Gv
 UdFRWA27ErhJrXd/czvFC+EapP3GvZIMg5fF4Yf2mI6Tu+oxvSIMc3KJxTc/VnIqvDPY
 GcGA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=bT4qv4vEHBY6BlW0dUJLyD6oXjbPcXHkc7wIjavuU8I=;
 b=a4lQR5RECGe8yLpn3uo65QAj8gR8VsaIn/YKz0vc3cxnshcoo4GD37c2jHq/WqXXA+
 2WAEphpkp6alcFL7saGlUlL1AckXsRUvVqrYTbZjXtApuGVcgzfbw2dsXaNYPrFZWz3I
 lAL8eAzKUlBpDw9hAaBqlDuWPdU1F1j2HT8nYcsAaaXykXLB8eTcwvmSy7RpVP6WZU7k
 inZhYTzIsKshEf9or6MxxJzg4enaHlUYYNMKv6q1QsII/Im9mCMc5TH0JJEPhRwpI95e
 mLDFUUmU022xv07ucVQ+GM60wb/sEssnDYxeP3IvJnupDH/fCLac3T2BlZNTZRb3Q6sm
 SfmQ==
X-Gm-Message-State: AOAM533auZhTwapcdq7vqI/Na1Er8JC6yda0rgZ8D79GOl8+hokgNm5o
 FSIfzWoXqZqqvNugTY+xFGNh+1nvbyP2vA==
X-Google-Smtp-Source: 
 ABdhPJw4MjFDSyQrI/ceTeKWR9sRALVDtou3bJT+QEEl7dqiyeH0uDrKXD91v2aVZ7/7e6W8i15IPQ==
X-Received: by 2002:a05:6a00:178a:b0:47c:3117:7f15 with SMTP id
 s10-20020a056a00178a00b0047c31177f15mr1461867pfg.81.1635388896478;
 Wed, 27 Oct 2021 19:41:36 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 06/56] tcg/optimize: Rename "mask" to "z_mask"
Date: Wed, 27 Oct 2021 19:40:41 -0700
Message-Id: <20211028024131.1492790-7-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::529;
 envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x529.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Alex=20Benn=C3=A9e?= <alex.bennee@linaro.org>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: fail (Header signature does not verify)
X-ZM-MESSAGEID: 1635390078701100001

Prepare for tracking different masks by renaming this one.

Reviewed-by: Alex Benn=C3=A9e <alex.bennee@linaro.org>
Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 142 +++++++++++++++++++++++++------------------------
 1 file changed, 72 insertions(+), 70 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index c239c3bd07..148e360fc6 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -41,7 +41,7 @@ typedef struct TempOptInfo {
     TCGTemp *prev_copy;
     TCGTemp *next_copy;
     uint64_t val;
-    uint64_t mask;
+    uint64_t z_mask;  /* mask bit is 0 if and only if value bit is 0 */
 } TempOptInfo;
=20
 static inline TempOptInfo *ts_info(TCGTemp *ts)
@@ -81,7 +81,7 @@ static void reset_ts(TCGTemp *ts)
     ti->next_copy =3D ts;
     ti->prev_copy =3D ts;
     ti->is_const =3D false;
-    ti->mask =3D -1;
+    ti->z_mask =3D -1;
 }
=20
 static void reset_temp(TCGArg arg)
@@ -111,14 +111,14 @@ static void init_ts_info(TCGTempSet *temps_used, TCGT=
emp *ts)
     if (ts->kind =3D=3D TEMP_CONST) {
         ti->is_const =3D true;
         ti->val =3D ts->val;
-        ti->mask =3D ts->val;
+        ti->z_mask =3D ts->val;
         if (TCG_TARGET_REG_BITS > 32 && ts->type =3D=3D TCG_TYPE_I32) {
             /* High bits of a 32-bit quantity are garbage.  */
-            ti->mask |=3D ~0xffffffffull;
+            ti->z_mask |=3D ~0xffffffffull;
         }
     } else {
         ti->is_const =3D false;
-        ti->mask =3D -1;
+        ti->z_mask =3D -1;
     }
 }
=20
@@ -186,7 +186,7 @@ static void tcg_opt_gen_mov(TCGContext *s, TCGOp *op, T=
CGArg dst, TCGArg src)
     const TCGOpDef *def;
     TempOptInfo *di;
     TempOptInfo *si;
-    uint64_t mask;
+    uint64_t z_mask;
     TCGOpcode new_op;
=20
     if (ts_are_copies(dst_ts, src_ts)) {
@@ -210,12 +210,12 @@ static void tcg_opt_gen_mov(TCGContext *s, TCGOp *op,=
 TCGArg dst, TCGArg src)
     op->args[0] =3D dst;
     op->args[1] =3D src;
=20
-    mask =3D si->mask;
+    z_mask =3D si->z_mask;
     if (TCG_TARGET_REG_BITS > 32 && new_op =3D=3D INDEX_op_mov_i32) {
         /* High bits of the destination are now garbage.  */
-        mask |=3D ~0xffffffffull;
+        z_mask |=3D ~0xffffffffull;
     }
-    di->mask =3D mask;
+    di->z_mask =3D z_mask;
=20
     if (src_ts->type =3D=3D dst_ts->type) {
         TempOptInfo *ni =3D ts_info(si->next_copy);
@@ -621,7 +621,7 @@ void tcg_optimize(TCGContext *s)
     }
=20
     QTAILQ_FOREACH_SAFE(op, &s->ops, link, op_next) {
-        uint64_t mask, partmask, affected, tmp;
+        uint64_t z_mask, partmask, affected, tmp;
         int nb_oargs, nb_iargs;
         TCGOpcode opc =3D op->opc;
         const TCGOpDef *def =3D &tcg_op_defs[opc];
@@ -855,170 +855,172 @@ void tcg_optimize(TCGContext *s)
=20
         /* Simplify using known-zero bits. Currently only ops with a single
            output argument is supported. */
-        mask =3D -1;
+        z_mask =3D -1;
         affected =3D -1;
         switch (opc) {
         CASE_OP_32_64(ext8s):
-            if ((arg_info(op->args[1])->mask & 0x80) !=3D 0) {
+            if ((arg_info(op->args[1])->z_mask & 0x80) !=3D 0) {
                 break;
             }
             QEMU_FALLTHROUGH;
         CASE_OP_32_64(ext8u):
-            mask =3D 0xff;
+            z_mask =3D 0xff;
             goto and_const;
         CASE_OP_32_64(ext16s):
-            if ((arg_info(op->args[1])->mask & 0x8000) !=3D 0) {
+            if ((arg_info(op->args[1])->z_mask & 0x8000) !=3D 0) {
                 break;
             }
             QEMU_FALLTHROUGH;
         CASE_OP_32_64(ext16u):
-            mask =3D 0xffff;
+            z_mask =3D 0xffff;
             goto and_const;
         case INDEX_op_ext32s_i64:
-            if ((arg_info(op->args[1])->mask & 0x80000000) !=3D 0) {
+            if ((arg_info(op->args[1])->z_mask & 0x80000000) !=3D 0) {
                 break;
             }
             QEMU_FALLTHROUGH;
         case INDEX_op_ext32u_i64:
-            mask =3D 0xffffffffU;
+            z_mask =3D 0xffffffffU;
             goto and_const;
=20
         CASE_OP_32_64(and):
-            mask =3D arg_info(op->args[2])->mask;
+            z_mask =3D arg_info(op->args[2])->z_mask;
             if (arg_is_const(op->args[2])) {
         and_const:
-                affected =3D arg_info(op->args[1])->mask & ~mask;
+                affected =3D arg_info(op->args[1])->z_mask & ~z_mask;
             }
-            mask =3D arg_info(op->args[1])->mask & mask;
+            z_mask =3D arg_info(op->args[1])->z_mask & z_mask;
             break;
=20
         case INDEX_op_ext_i32_i64:
-            if ((arg_info(op->args[1])->mask & 0x80000000) !=3D 0) {
+            if ((arg_info(op->args[1])->z_mask & 0x80000000) !=3D 0) {
                 break;
             }
             QEMU_FALLTHROUGH;
         case INDEX_op_extu_i32_i64:
             /* We do not compute affected as it is a size changing op.  */
-            mask =3D (uint32_t)arg_info(op->args[1])->mask;
+            z_mask =3D (uint32_t)arg_info(op->args[1])->z_mask;
             break;
=20
         CASE_OP_32_64(andc):
             /* Known-zeros does not imply known-ones.  Therefore unless
                op->args[2] is constant, we can't infer anything from it.  =
*/
             if (arg_is_const(op->args[2])) {
-                mask =3D ~arg_info(op->args[2])->mask;
+                z_mask =3D ~arg_info(op->args[2])->z_mask;
                 goto and_const;
             }
             /* But we certainly know nothing outside args[1] may be set. */
-            mask =3D arg_info(op->args[1])->mask;
+            z_mask =3D arg_info(op->args[1])->z_mask;
             break;
=20
         case INDEX_op_sar_i32:
             if (arg_is_const(op->args[2])) {
                 tmp =3D arg_info(op->args[2])->val & 31;
-                mask =3D (int32_t)arg_info(op->args[1])->mask >> tmp;
+                z_mask =3D (int32_t)arg_info(op->args[1])->z_mask >> tmp;
             }
             break;
         case INDEX_op_sar_i64:
             if (arg_is_const(op->args[2])) {
                 tmp =3D arg_info(op->args[2])->val & 63;
-                mask =3D (int64_t)arg_info(op->args[1])->mask >> tmp;
+                z_mask =3D (int64_t)arg_info(op->args[1])->z_mask >> tmp;
             }
             break;
=20
         case INDEX_op_shr_i32:
             if (arg_is_const(op->args[2])) {
                 tmp =3D arg_info(op->args[2])->val & 31;
-                mask =3D (uint32_t)arg_info(op->args[1])->mask >> tmp;
+                z_mask =3D (uint32_t)arg_info(op->args[1])->z_mask >> tmp;
             }
             break;
         case INDEX_op_shr_i64:
             if (arg_is_const(op->args[2])) {
                 tmp =3D arg_info(op->args[2])->val & 63;
-                mask =3D (uint64_t)arg_info(op->args[1])->mask >> tmp;
+                z_mask =3D (uint64_t)arg_info(op->args[1])->z_mask >> tmp;
             }
             break;
=20
         case INDEX_op_extrl_i64_i32:
-            mask =3D (uint32_t)arg_info(op->args[1])->mask;
+            z_mask =3D (uint32_t)arg_info(op->args[1])->z_mask;
             break;
         case INDEX_op_extrh_i64_i32:
-            mask =3D (uint64_t)arg_info(op->args[1])->mask >> 32;
+            z_mask =3D (uint64_t)arg_info(op->args[1])->z_mask >> 32;
             break;
=20
         CASE_OP_32_64(shl):
             if (arg_is_const(op->args[2])) {
                 tmp =3D arg_info(op->args[2])->val & (TCG_TARGET_REG_BITS =
- 1);
-                mask =3D arg_info(op->args[1])->mask << tmp;
+                z_mask =3D arg_info(op->args[1])->z_mask << tmp;
             }
             break;
=20
         CASE_OP_32_64(neg):
             /* Set to 1 all bits to the left of the rightmost.  */
-            mask =3D -(arg_info(op->args[1])->mask
-                     & -arg_info(op->args[1])->mask);
+            z_mask =3D -(arg_info(op->args[1])->z_mask
+                       & -arg_info(op->args[1])->z_mask);
             break;
=20
         CASE_OP_32_64(deposit):
-            mask =3D deposit64(arg_info(op->args[1])->mask,
-                             op->args[3], op->args[4],
-                             arg_info(op->args[2])->mask);
+            z_mask =3D deposit64(arg_info(op->args[1])->z_mask,
+                               op->args[3], op->args[4],
+                               arg_info(op->args[2])->z_mask);
             break;
=20
         CASE_OP_32_64(extract):
-            mask =3D extract64(arg_info(op->args[1])->mask,
-                             op->args[2], op->args[3]);
+            z_mask =3D extract64(arg_info(op->args[1])->z_mask,
+                               op->args[2], op->args[3]);
             if (op->args[2] =3D=3D 0) {
-                affected =3D arg_info(op->args[1])->mask & ~mask;
+                affected =3D arg_info(op->args[1])->z_mask & ~z_mask;
             }
             break;
         CASE_OP_32_64(sextract):
-            mask =3D sextract64(arg_info(op->args[1])->mask,
-                              op->args[2], op->args[3]);
-            if (op->args[2] =3D=3D 0 && (tcg_target_long)mask >=3D 0) {
-                affected =3D arg_info(op->args[1])->mask & ~mask;
+            z_mask =3D sextract64(arg_info(op->args[1])->z_mask,
+                                op->args[2], op->args[3]);
+            if (op->args[2] =3D=3D 0 && (tcg_target_long)z_mask >=3D 0) {
+                affected =3D arg_info(op->args[1])->z_mask & ~z_mask;
             }
             break;
=20
         CASE_OP_32_64(or):
         CASE_OP_32_64(xor):
-            mask =3D arg_info(op->args[1])->mask | arg_info(op->args[2])->=
mask;
+            z_mask =3D arg_info(op->args[1])->z_mask
+                   | arg_info(op->args[2])->z_mask;
             break;
=20
         case INDEX_op_clz_i32:
         case INDEX_op_ctz_i32:
-            mask =3D arg_info(op->args[2])->mask | 31;
+            z_mask =3D arg_info(op->args[2])->z_mask | 31;
             break;
=20
         case INDEX_op_clz_i64:
         case INDEX_op_ctz_i64:
-            mask =3D arg_info(op->args[2])->mask | 63;
+            z_mask =3D arg_info(op->args[2])->z_mask | 63;
             break;
=20
         case INDEX_op_ctpop_i32:
-            mask =3D 32 | 31;
+            z_mask =3D 32 | 31;
             break;
         case INDEX_op_ctpop_i64:
-            mask =3D 64 | 63;
+            z_mask =3D 64 | 63;
             break;
=20
         CASE_OP_32_64(setcond):
         case INDEX_op_setcond2_i32:
-            mask =3D 1;
+            z_mask =3D 1;
             break;
=20
         CASE_OP_32_64(movcond):
-            mask =3D arg_info(op->args[3])->mask | arg_info(op->args[4])->=
mask;
+            z_mask =3D arg_info(op->args[3])->z_mask
+                   | arg_info(op->args[4])->z_mask;
             break;
=20
         CASE_OP_32_64(ld8u):
-            mask =3D 0xff;
+            z_mask =3D 0xff;
             break;
         CASE_OP_32_64(ld16u):
-            mask =3D 0xffff;
+            z_mask =3D 0xffff;
             break;
         case INDEX_op_ld32u_i64:
-            mask =3D 0xffffffffu;
+            z_mask =3D 0xffffffffu;
             break;
=20
         CASE_OP_32_64(qemu_ld):
@@ -1026,43 +1028,43 @@ void tcg_optimize(TCGContext *s)
                 MemOpIdx oi =3D op->args[nb_oargs + nb_iargs];
                 MemOp mop =3D get_memop(oi);
                 if (!(mop & MO_SIGN)) {
-                    mask =3D (2ULL << ((8 << (mop & MO_SIZE)) - 1)) - 1;
+                    z_mask =3D (2ULL << ((8 << (mop & MO_SIZE)) - 1)) - 1;
                 }
             }
             break;
=20
         CASE_OP_32_64(bswap16):
-            mask =3D arg_info(op->args[1])->mask;
-            if (mask <=3D 0xffff) {
+            z_mask =3D arg_info(op->args[1])->z_mask;
+            if (z_mask <=3D 0xffff) {
                 op->args[2] |=3D TCG_BSWAP_IZ;
             }
-            mask =3D bswap16(mask);
+            z_mask =3D bswap16(z_mask);
             switch (op->args[2] & (TCG_BSWAP_OZ | TCG_BSWAP_OS)) {
             case TCG_BSWAP_OZ:
                 break;
             case TCG_BSWAP_OS:
-                mask =3D (int16_t)mask;
+                z_mask =3D (int16_t)z_mask;
                 break;
             default: /* undefined high bits */
-                mask |=3D MAKE_64BIT_MASK(16, 48);
+                z_mask |=3D MAKE_64BIT_MASK(16, 48);
                 break;
             }
             break;
=20
         case INDEX_op_bswap32_i64:
-            mask =3D arg_info(op->args[1])->mask;
-            if (mask <=3D 0xffffffffu) {
+            z_mask =3D arg_info(op->args[1])->z_mask;
+            if (z_mask <=3D 0xffffffffu) {
                 op->args[2] |=3D TCG_BSWAP_IZ;
             }
-            mask =3D bswap32(mask);
+            z_mask =3D bswap32(z_mask);
             switch (op->args[2] & (TCG_BSWAP_OZ | TCG_BSWAP_OS)) {
             case TCG_BSWAP_OZ:
                 break;
             case TCG_BSWAP_OS:
-                mask =3D (int32_t)mask;
+                z_mask =3D (int32_t)z_mask;
                 break;
             default: /* undefined high bits */
-                mask |=3D MAKE_64BIT_MASK(32, 32);
+                z_mask |=3D MAKE_64BIT_MASK(32, 32);
                 break;
             }
             break;
@@ -1074,9 +1076,9 @@ void tcg_optimize(TCGContext *s)
         /* 32-bit ops generate 32-bit results.  For the result is zero test
            below, we can ignore high bits, but for further optimizations we
            need to record that the high bits contain garbage.  */
-        partmask =3D mask;
+        partmask =3D z_mask;
         if (!(def->flags & TCG_OPF_64BIT)) {
-            mask |=3D ~(tcg_target_ulong)0xffffffffu;
+            z_mask |=3D ~(tcg_target_ulong)0xffffffffu;
             partmask &=3D 0xffffffffu;
             affected &=3D 0xffffffffu;
         }
@@ -1472,7 +1474,7 @@ void tcg_optimize(TCGContext *s)
                    vs the high word of the input.  */
             do_setcond_high:
                 reset_temp(op->args[0]);
-                arg_info(op->args[0])->mask =3D 1;
+                arg_info(op->args[0])->z_mask =3D 1;
                 op->opc =3D INDEX_op_setcond_i32;
                 op->args[1] =3D op->args[2];
                 op->args[2] =3D op->args[4];
@@ -1498,7 +1500,7 @@ void tcg_optimize(TCGContext *s)
                 }
             do_setcond_low:
                 reset_temp(op->args[0]);
-                arg_info(op->args[0])->mask =3D 1;
+                arg_info(op->args[0])->z_mask =3D 1;
                 op->opc =3D INDEX_op_setcond_i32;
                 op->args[2] =3D op->args[3];
                 op->args[3] =3D op->args[5];
@@ -1543,7 +1545,7 @@ void tcg_optimize(TCGContext *s)
             /* Default case: we know nothing about operation (or were unab=
le
                to compute the operation result) so no propagation is done.
                We trash everything if the operation is the end of a basic
-               block, otherwise we only trash the output args.  "mask" is
+               block, otherwise we only trash the output args.  "z_mask" is
                the non-zero bits mask for the first output arg.  */
             if (def->flags & TCG_OPF_BB_END) {
                 memset(&temps_used, 0, sizeof(temps_used));
@@ -1554,7 +1556,7 @@ void tcg_optimize(TCGContext *s)
                     /* Save the corresponding known-zero bits mask for the
                        first output argument (only one supported so far). =
*/
                     if (i =3D=3D 0) {
-                        arg_info(op->args[i])->mask =3D mask;
+                        arg_info(op->args[i])->z_mask =3D z_mask;
                     }
                 }
             }
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=fail;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=fail(p=none dis=none)  header.from=linaro.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635389597334577.6337553904989;
 Wed, 27 Oct 2021 19:53:17 -0700 (PDT)
Received: from localhost ([::1]:40248 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvXX-00054y-O1
	for importer@patchew.org; Wed, 27 Oct 2021 22:53:15 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:58804)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvML-0004XS-Ap
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:41 -0400
Received: from mail-pf1-x434.google.com ([2607:f8b0:4864:20::434]:45947)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMI-00034r-Gl
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:41 -0400
Received: by mail-pf1-x434.google.com with SMTP id f11so4536859pfc.12
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:38 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.36
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:36 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=CCiW16Z93Q8GP5qo8+lTmLd72PtlWCvmdkPVOaTAXzA=;
 b=OdAGg41NbDyIKNm2fIDaQpCIB1QG5cw39zdr2kljuVK2pEZR9p65OxMznvT23Btdvo
 0toGwfY5HnlSxucl1mlVjetmvMTX8Yz4XsPT9SGoaEsoihqOL3J5Ge3ryucErREY7IS1
 O4cTM4htf0GLSDZnT1eBKcwX9h+OvQRdJD1amJx1i01v9/YOpjn8D9rDWXyN2B/zRA6o
 vjhm1aEz2HY/absNp11NaEfb5KGeaI7auJhGCpjferJGNXP/NgCwQToR056uXgOQNJ1h
 UogaJsVjQtFRsRKpR2Zpdy6COZ7kAradcAxrXC79uQOIW9O9JkxuUB0hNCFhm4gu1KPp
 oe3A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=CCiW16Z93Q8GP5qo8+lTmLd72PtlWCvmdkPVOaTAXzA=;
 b=DDXTLw0LMo+gMeBUP3mStOFkTbTyNECn1GWN65Oo/W8XWYielGmII1xqYTJy2SLzGT
 +Q+nw1ZZs6EHbNOBH2F4BAzuaKO829dLyO/m58NTa5NWZRLxwzlOp4iCca89nJ2sdrQ/
 cXYYdzbxf2gRUMdZuaYNN/8ejd+AggOOjzVFrAlEmVBlDRcWF1e2DBkAQFx4mDlJ/X9l
 ZAzhmyVav6SuIAIOvNWxFhWYV6zFIujWLWH8RuzINVqEV9JmEJav52mev0y59GMP05+Y
 Pz7E4f0uExe6V6ddBuIMYfZZa0ZnelKB8/IXL1gAabit2rz4kaFw4JQ9sz1rPnK5BiEG
 dYjg==
X-Gm-Message-State: AOAM533OhesU4TIWq97pzk33KyS/dpkD8/h3NnxIPyUIc80Bjsnl+5iF
 ScfF4+6Fa6JXy1QzkwlmFytAzMaS0qfJqQ==
X-Google-Smtp-Source: 
 ABdhPJzwbtVwKDVLmyFLwxrLN3y0wT4JzASC5jn0Sq4qJArx8QiajzjsnfQycKp5s2tkkY0jmRUf3A==
X-Received: by 2002:a05:6a00:1142:b0:47c:2e92:87a0 with SMTP id
 b2-20020a056a00114200b0047c2e9287a0mr1469467pfm.59.1635388897198;
 Wed, 27 Oct 2021 19:41:37 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 07/56] tcg/optimize: Split out OptContext
Date: Wed, 27 Oct 2021 19:40:42 -0700
Message-Id: <20211028024131.1492790-8-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::434;
 envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x434.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Alex=20Benn=C3=A9e?= <alex.bennee@linaro.org>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: fail (Header signature does not verify)
X-ZM-MESSAGEID: 1635389598127100001

Provide what will become a larger context for splitting
the very large tcg_optimize function.

Reviewed-by: Alex Benn=C3=A9e <alex.bennee@linaro.org>
Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 77 ++++++++++++++++++++++++++------------------------
 1 file changed, 40 insertions(+), 37 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 148e360fc6..b76991215e 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -44,6 +44,10 @@ typedef struct TempOptInfo {
     uint64_t z_mask;  /* mask bit is 0 if and only if value bit is 0 */
 } TempOptInfo;
=20
+typedef struct OptContext {
+    TCGTempSet temps_used;
+} OptContext;
+
 static inline TempOptInfo *ts_info(TCGTemp *ts)
 {
     return ts->state_ptr;
@@ -90,15 +94,15 @@ static void reset_temp(TCGArg arg)
 }
=20
 /* Initialize and activate a temporary.  */
-static void init_ts_info(TCGTempSet *temps_used, TCGTemp *ts)
+static void init_ts_info(OptContext *ctx, TCGTemp *ts)
 {
     size_t idx =3D temp_idx(ts);
     TempOptInfo *ti;
=20
-    if (test_bit(idx, temps_used->l)) {
+    if (test_bit(idx, ctx->temps_used.l)) {
         return;
     }
-    set_bit(idx, temps_used->l);
+    set_bit(idx, ctx->temps_used.l);
=20
     ti =3D ts->state_ptr;
     if (ti =3D=3D NULL) {
@@ -122,9 +126,9 @@ static void init_ts_info(TCGTempSet *temps_used, TCGTem=
p *ts)
     }
 }
=20
-static void init_arg_info(TCGTempSet *temps_used, TCGArg arg)
+static void init_arg_info(OptContext *ctx, TCGArg arg)
 {
-    init_ts_info(temps_used, arg_temp(arg));
+    init_ts_info(ctx, arg_temp(arg));
 }
=20
 static TCGTemp *find_better_copy(TCGContext *s, TCGTemp *ts)
@@ -229,7 +233,7 @@ static void tcg_opt_gen_mov(TCGContext *s, TCGOp *op, T=
CGArg dst, TCGArg src)
     }
 }
=20
-static void tcg_opt_gen_movi(TCGContext *s, TCGTempSet *temps_used,
+static void tcg_opt_gen_movi(TCGContext *s, OptContext *ctx,
                              TCGOp *op, TCGArg dst, uint64_t val)
 {
     const TCGOpDef *def =3D &tcg_op_defs[op->opc];
@@ -246,7 +250,7 @@ static void tcg_opt_gen_movi(TCGContext *s, TCGTempSet =
*temps_used,
=20
     /* Convert movi to mov with constant temp. */
     tv =3D tcg_constant_internal(type, val);
-    init_ts_info(temps_used, tv);
+    init_ts_info(ctx, tv);
     tcg_opt_gen_mov(s, op, dst, temp_arg(tv));
 }
=20
@@ -605,7 +609,7 @@ void tcg_optimize(TCGContext *s)
 {
     int nb_temps, nb_globals, i;
     TCGOp *op, *op_next, *prev_mb =3D NULL;
-    TCGTempSet temps_used;
+    OptContext ctx =3D {};
=20
     /* Array VALS has an element for each temp.
        If this temp holds a constant then its value is kept in VALS' eleme=
nt.
@@ -615,7 +619,6 @@ void tcg_optimize(TCGContext *s)
     nb_temps =3D s->nb_temps;
     nb_globals =3D s->nb_globals;
=20
-    memset(&temps_used, 0, sizeof(temps_used));
     for (i =3D 0; i < nb_temps; ++i) {
         s->temps[i].state_ptr =3D NULL;
     }
@@ -634,14 +637,14 @@ void tcg_optimize(TCGContext *s)
             for (i =3D 0; i < nb_oargs + nb_iargs; i++) {
                 TCGTemp *ts =3D arg_temp(op->args[i]);
                 if (ts) {
-                    init_ts_info(&temps_used, ts);
+                    init_ts_info(&ctx, ts);
                 }
             }
         } else {
             nb_oargs =3D def->nb_oargs;
             nb_iargs =3D def->nb_iargs;
             for (i =3D 0; i < nb_oargs + nb_iargs; i++) {
-                init_arg_info(&temps_used, op->args[i]);
+                init_arg_info(&ctx, op->args[i]);
             }
         }
=20
@@ -720,7 +723,7 @@ void tcg_optimize(TCGContext *s)
         CASE_OP_32_64(rotr):
             if (arg_is_const(op->args[1])
                 && arg_info(op->args[1])->val =3D=3D 0) {
-                tcg_opt_gen_movi(s, &temps_used, op, op->args[0], 0);
+                tcg_opt_gen_movi(s, &ctx, op, op->args[0], 0);
                 continue;
             }
             break;
@@ -1085,7 +1088,7 @@ void tcg_optimize(TCGContext *s)
=20
         if (partmask =3D=3D 0) {
             tcg_debug_assert(nb_oargs =3D=3D 1);
-            tcg_opt_gen_movi(s, &temps_used, op, op->args[0], 0);
+            tcg_opt_gen_movi(s, &ctx, op, op->args[0], 0);
             continue;
         }
         if (affected =3D=3D 0) {
@@ -1102,7 +1105,7 @@ void tcg_optimize(TCGContext *s)
         CASE_OP_32_64(mulsh):
             if (arg_is_const(op->args[2])
                 && arg_info(op->args[2])->val =3D=3D 0) {
-                tcg_opt_gen_movi(s, &temps_used, op, op->args[0], 0);
+                tcg_opt_gen_movi(s, &ctx, op, op->args[0], 0);
                 continue;
             }
             break;
@@ -1129,7 +1132,7 @@ void tcg_optimize(TCGContext *s)
         CASE_OP_32_64_VEC(sub):
         CASE_OP_32_64_VEC(xor):
             if (args_are_copies(op->args[1], op->args[2])) {
-                tcg_opt_gen_movi(s, &temps_used, op, op->args[0], 0);
+                tcg_opt_gen_movi(s, &ctx, op, op->args[0], 0);
                 continue;
             }
             break;
@@ -1149,7 +1152,7 @@ void tcg_optimize(TCGContext *s)
             if (arg_is_const(op->args[1])) {
                 tmp =3D arg_info(op->args[1])->val;
                 tmp =3D dup_const(TCGOP_VECE(op), tmp);
-                tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp);
+                tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
                 break;
             }
             goto do_default;
@@ -1157,7 +1160,7 @@ void tcg_optimize(TCGContext *s)
         case INDEX_op_dup2_vec:
             assert(TCG_TARGET_REG_BITS =3D=3D 32);
             if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) {
-                tcg_opt_gen_movi(s, &temps_used, op, op->args[0],
+                tcg_opt_gen_movi(s, &ctx, op, op->args[0],
                                  deposit64(arg_info(op->args[1])->val, 32,=
 32,
                                            arg_info(op->args[2])->val));
                 break;
@@ -1183,7 +1186,7 @@ void tcg_optimize(TCGContext *s)
         case INDEX_op_extrh_i64_i32:
             if (arg_is_const(op->args[1])) {
                 tmp =3D do_constant_folding(opc, arg_info(op->args[1])->va=
l, 0);
-                tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp);
+                tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
                 break;
             }
             goto do_default;
@@ -1194,7 +1197,7 @@ void tcg_optimize(TCGContext *s)
             if (arg_is_const(op->args[1])) {
                 tmp =3D do_constant_folding(opc, arg_info(op->args[1])->va=
l,
                                           op->args[2]);
-                tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp);
+                tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
                 break;
             }
             goto do_default;
@@ -1224,7 +1227,7 @@ void tcg_optimize(TCGContext *s)
             if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) {
                 tmp =3D do_constant_folding(opc, arg_info(op->args[1])->va=
l,
                                           arg_info(op->args[2])->val);
-                tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp);
+                tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
                 break;
             }
             goto do_default;
@@ -1235,7 +1238,7 @@ void tcg_optimize(TCGContext *s)
                 TCGArg v =3D arg_info(op->args[1])->val;
                 if (v !=3D 0) {
                     tmp =3D do_constant_folding(opc, v, 0);
-                    tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp);
+                    tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
                 } else {
                     tcg_opt_gen_mov(s, op, op->args[0], op->args[2]);
                 }
@@ -1248,7 +1251,7 @@ void tcg_optimize(TCGContext *s)
                 tmp =3D deposit64(arg_info(op->args[1])->val,
                                 op->args[3], op->args[4],
                                 arg_info(op->args[2])->val);
-                tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp);
+                tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
                 break;
             }
             goto do_default;
@@ -1257,7 +1260,7 @@ void tcg_optimize(TCGContext *s)
             if (arg_is_const(op->args[1])) {
                 tmp =3D extract64(arg_info(op->args[1])->val,
                                 op->args[2], op->args[3]);
-                tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp);
+                tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
                 break;
             }
             goto do_default;
@@ -1266,7 +1269,7 @@ void tcg_optimize(TCGContext *s)
             if (arg_is_const(op->args[1])) {
                 tmp =3D sextract64(arg_info(op->args[1])->val,
                                  op->args[2], op->args[3]);
-                tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp);
+                tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
                 break;
             }
             goto do_default;
@@ -1283,7 +1286,7 @@ void tcg_optimize(TCGContext *s)
                     tmp =3D (int32_t)(((uint32_t)v1 >> shr) |
                                     ((uint32_t)v2 << (32 - shr)));
                 }
-                tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp);
+                tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
                 break;
             }
             goto do_default;
@@ -1292,7 +1295,7 @@ void tcg_optimize(TCGContext *s)
             tmp =3D do_constant_folding_cond(opc, op->args[1],
                                            op->args[2], op->args[3]);
             if (tmp !=3D 2) {
-                tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp);
+                tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
                 break;
             }
             goto do_default;
@@ -1302,7 +1305,7 @@ void tcg_optimize(TCGContext *s)
                                            op->args[1], op->args[2]);
             if (tmp !=3D 2) {
                 if (tmp) {
-                    memset(&temps_used, 0, sizeof(temps_used));
+                    memset(&ctx.temps_used, 0, sizeof(ctx.temps_used));
                     op->opc =3D INDEX_op_br;
                     op->args[0] =3D op->args[3];
                 } else {
@@ -1358,8 +1361,8 @@ void tcg_optimize(TCGContext *s)
=20
                 rl =3D op->args[0];
                 rh =3D op->args[1];
-                tcg_opt_gen_movi(s, &temps_used, op, rl, (int32_t)a);
-                tcg_opt_gen_movi(s, &temps_used, op2, rh, (int32_t)(a >> 3=
2));
+                tcg_opt_gen_movi(s, &ctx, op, rl, (int32_t)a);
+                tcg_opt_gen_movi(s, &ctx, op2, rh, (int32_t)(a >> 32));
                 break;
             }
             goto do_default;
@@ -1374,8 +1377,8 @@ void tcg_optimize(TCGContext *s)
=20
                 rl =3D op->args[0];
                 rh =3D op->args[1];
-                tcg_opt_gen_movi(s, &temps_used, op, rl, (int32_t)r);
-                tcg_opt_gen_movi(s, &temps_used, op2, rh, (int32_t)(r >> 3=
2));
+                tcg_opt_gen_movi(s, &ctx, op, rl, (int32_t)r);
+                tcg_opt_gen_movi(s, &ctx, op2, rh, (int32_t)(r >> 32));
                 break;
             }
             goto do_default;
@@ -1386,7 +1389,7 @@ void tcg_optimize(TCGContext *s)
             if (tmp !=3D 2) {
                 if (tmp) {
             do_brcond_true:
-                    memset(&temps_used, 0, sizeof(temps_used));
+                    memset(&ctx.temps_used, 0, sizeof(ctx.temps_used));
                     op->opc =3D INDEX_op_br;
                     op->args[0] =3D op->args[5];
                 } else {
@@ -1402,7 +1405,7 @@ void tcg_optimize(TCGContext *s)
                 /* Simplify LT/GE comparisons vs zero to a single compare
                    vs the high word of the input.  */
             do_brcond_high:
-                memset(&temps_used, 0, sizeof(temps_used));
+                memset(&ctx.temps_used, 0, sizeof(ctx.temps_used));
                 op->opc =3D INDEX_op_brcond_i32;
                 op->args[0] =3D op->args[1];
                 op->args[1] =3D op->args[3];
@@ -1428,7 +1431,7 @@ void tcg_optimize(TCGContext *s)
                     goto do_default;
                 }
             do_brcond_low:
-                memset(&temps_used, 0, sizeof(temps_used));
+                memset(&ctx.temps_used, 0, sizeof(ctx.temps_used));
                 op->opc =3D INDEX_op_brcond_i32;
                 op->args[1] =3D op->args[2];
                 op->args[2] =3D op->args[4];
@@ -1463,7 +1466,7 @@ void tcg_optimize(TCGContext *s)
                                             op->args[5]);
             if (tmp !=3D 2) {
             do_setcond_const:
-                tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp);
+                tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
             } else if ((op->args[5] =3D=3D TCG_COND_LT
                         || op->args[5] =3D=3D TCG_COND_GE)
                        && arg_is_const(op->args[3])
@@ -1533,7 +1536,7 @@ void tcg_optimize(TCGContext *s)
             if (!(tcg_call_flags(op)
                   & (TCG_CALL_NO_READ_GLOBALS | TCG_CALL_NO_WRITE_GLOBALS)=
)) {
                 for (i =3D 0; i < nb_globals; i++) {
-                    if (test_bit(i, temps_used.l)) {
+                    if (test_bit(i, ctx.temps_used.l)) {
                         reset_ts(&s->temps[i]);
                     }
                 }
@@ -1548,7 +1551,7 @@ void tcg_optimize(TCGContext *s)
                block, otherwise we only trash the output args.  "z_mask" is
                the non-zero bits mask for the first output arg.  */
             if (def->flags & TCG_OPF_BB_END) {
-                memset(&temps_used, 0, sizeof(temps_used));
+                memset(&ctx.temps_used, 0, sizeof(ctx.temps_used));
             } else {
         do_reset_output:
                 for (i =3D 0; i < nb_oargs; i++) {
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=fail;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=fail(p=none dis=none)  header.from=linaro.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635389667796784.642724112395;
 Wed, 27 Oct 2021 19:54:27 -0700 (PDT)
Received: from localhost ([::1]:43174 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvYf-00071s-1h
	for importer@patchew.org; Wed, 27 Oct 2021 22:54:26 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:58996)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMU-0004mi-B2
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:50 -0400
Received: from mail-pf1-x435.google.com ([2607:f8b0:4864:20::435]:41628)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMJ-000352-Aj
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:50 -0400
Received: by mail-pf1-x435.google.com with SMTP id y7so4561439pfg.8
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:38 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.37
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:37 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=X2dX8XufD4c6BIfBzmh+p1LKROS4+CqBx2GlunzFftM=;
 b=VAQPii+QskNAiXpEsSBbbT1ISbXNH/XP9yaLRkCVtSaww7k5WCkg3TzoPR6c9wmw+o
 9tF5Oc4ayEbSqPN+uPugMXMozfm1EWt+wg81n8UfhIR58lYOYnJLm3F/7hkdmUHETJGP
 hmOAzpkCwcKdp83uTpo8z+yIf4cA6a4oW7SrlKn3J7Ezi6F1rG1hjg56lRUNdrrB0j5h
 skRhXGDLKym9UNgnpibFDEGIPupkJDIBIBBYFvc2kgWFdzAbbYl/P8XJ1Chx4fseQivx
 UEqj67yhEBQ2CbMxDEGdn0T4FoR0Fmm6O760qhpqHysfLP2Alq0K5/a0SDAdGuoFt7G5
 Fl1g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=X2dX8XufD4c6BIfBzmh+p1LKROS4+CqBx2GlunzFftM=;
 b=Wbg7bsi/VOqWaPw+3c16Cxr2ogzAcGl9B20ce52D+jnMlYfSqxC3BANVIbCVjr05Kk
 REEdwchTONpTDJEBZNxL01eH8nk9umEWWoA1w8VyuKe98Q/ntPXEB9qFcaBK3VF85rVM
 6PZ+pwtnm02BAr/2V9uTjM6GwpGfRrMzFoVcJ23w5iyZBv4/sZJ/8dE+DejM+EAcEV7N
 4y6VumL5vozxrg/rpYdm+n/OnrF4DHkxSDh3t7yhXTjSGRiEsghZFUsyG1oQWjJ6hQKM
 chxl2dt4rRqmkBwfaJ/q6qmKogIn8UvPm3osHHqHtHPPxwe6JxxvI/NNJyPKXmFmnXU/
 QnMA==
X-Gm-Message-State: AOAM533izHmV92sKEO+kplc3m/xZikPE7z0KkzxQcgO47q22ZRoAvLeR
 2AXzEJQjxpTEnfn66licVyEOzl7i0mTIEw==
X-Google-Smtp-Source: 
 ABdhPJzCp3Mz2J8FWRwR3poH43xvZO6pcYs7hpURVJSJ6/IFJFNF3blbIUdwTdr5Bf4DlOrUTbgbaA==
X-Received: by 2002:a05:6a00:1413:b0:47d:2415:a021 with SMTP id
 l19-20020a056a00141300b0047d2415a021mr1476606pfu.43.1635388897852;
 Wed, 27 Oct 2021 19:41:37 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 08/56] tcg/optimize: Remove do_default label
Date: Wed, 27 Oct 2021 19:40:43 -0700
Message-Id: <20211028024131.1492790-9-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::435;
 envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x435.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Alex=20Benn=C3=A9e?= <alex.bennee@linaro.org>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: fail (Header signature does not verify)
X-ZM-MESSAGEID: 1635389668888100001

Break the final cleanup clause out of the main switch
statement.  When fully folding an opcode to mov/movi,
use "continue" to process the next opcode, else break
to fall into the final cleanup.

Reviewed-by: Alex Benn=C3=A9e <alex.bennee@linaro.org>
Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 190 ++++++++++++++++++++++++-------------------------
 1 file changed, 94 insertions(+), 96 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index b76991215e..a37efff4d0 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -1146,16 +1146,16 @@ void tcg_optimize(TCGContext *s)
         switch (opc) {
         CASE_OP_32_64_VEC(mov):
             tcg_opt_gen_mov(s, op, op->args[0], op->args[1]);
-            break;
+            continue;
=20
         case INDEX_op_dup_vec:
             if (arg_is_const(op->args[1])) {
                 tmp =3D arg_info(op->args[1])->val;
                 tmp =3D dup_const(TCGOP_VECE(op), tmp);
                 tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
-                break;
+                continue;
             }
-            goto do_default;
+            break;
=20
         case INDEX_op_dup2_vec:
             assert(TCG_TARGET_REG_BITS =3D=3D 32);
@@ -1163,13 +1163,13 @@ void tcg_optimize(TCGContext *s)
                 tcg_opt_gen_movi(s, &ctx, op, op->args[0],
                                  deposit64(arg_info(op->args[1])->val, 32,=
 32,
                                            arg_info(op->args[2])->val));
-                break;
+                continue;
             } else if (args_are_copies(op->args[1], op->args[2])) {
                 op->opc =3D INDEX_op_dup_vec;
                 TCGOP_VECE(op) =3D MO_32;
                 nb_iargs =3D 1;
             }
-            goto do_default;
+            break;
=20
         CASE_OP_32_64(not):
         CASE_OP_32_64(neg):
@@ -1187,9 +1187,9 @@ void tcg_optimize(TCGContext *s)
             if (arg_is_const(op->args[1])) {
                 tmp =3D do_constant_folding(opc, arg_info(op->args[1])->va=
l, 0);
                 tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
-                break;
+                continue;
             }
-            goto do_default;
+            break;
=20
         CASE_OP_32_64(bswap16):
         CASE_OP_32_64(bswap32):
@@ -1198,9 +1198,9 @@ void tcg_optimize(TCGContext *s)
                 tmp =3D do_constant_folding(opc, arg_info(op->args[1])->va=
l,
                                           op->args[2]);
                 tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
-                break;
+                continue;
             }
-            goto do_default;
+            break;
=20
         CASE_OP_32_64(add):
         CASE_OP_32_64(sub):
@@ -1228,9 +1228,9 @@ void tcg_optimize(TCGContext *s)
                 tmp =3D do_constant_folding(opc, arg_info(op->args[1])->va=
l,
                                           arg_info(op->args[2])->val);
                 tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
-                break;
+                continue;
             }
-            goto do_default;
+            break;
=20
         CASE_OP_32_64(clz):
         CASE_OP_32_64(ctz):
@@ -1242,9 +1242,9 @@ void tcg_optimize(TCGContext *s)
                 } else {
                     tcg_opt_gen_mov(s, op, op->args[0], op->args[2]);
                 }
-                break;
+                continue;
             }
-            goto do_default;
+            break;
=20
         CASE_OP_32_64(deposit):
             if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) {
@@ -1252,27 +1252,27 @@ void tcg_optimize(TCGContext *s)
                                 op->args[3], op->args[4],
                                 arg_info(op->args[2])->val);
                 tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
-                break;
+                continue;
             }
-            goto do_default;
+            break;
=20
         CASE_OP_32_64(extract):
             if (arg_is_const(op->args[1])) {
                 tmp =3D extract64(arg_info(op->args[1])->val,
                                 op->args[2], op->args[3]);
                 tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
-                break;
+                continue;
             }
-            goto do_default;
+            break;
=20
         CASE_OP_32_64(sextract):
             if (arg_is_const(op->args[1])) {
                 tmp =3D sextract64(arg_info(op->args[1])->val,
                                  op->args[2], op->args[3]);
                 tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
-                break;
+                continue;
             }
-            goto do_default;
+            break;
=20
         CASE_OP_32_64(extract2):
             if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) {
@@ -1287,40 +1287,40 @@ void tcg_optimize(TCGContext *s)
                                     ((uint32_t)v2 << (32 - shr)));
                 }
                 tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
-                break;
+                continue;
             }
-            goto do_default;
+            break;
=20
         CASE_OP_32_64(setcond):
             tmp =3D do_constant_folding_cond(opc, op->args[1],
                                            op->args[2], op->args[3]);
             if (tmp !=3D 2) {
                 tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
-                break;
+                continue;
             }
-            goto do_default;
+            break;
=20
         CASE_OP_32_64(brcond):
             tmp =3D do_constant_folding_cond(opc, op->args[0],
                                            op->args[1], op->args[2]);
-            if (tmp !=3D 2) {
-                if (tmp) {
-                    memset(&ctx.temps_used, 0, sizeof(ctx.temps_used));
-                    op->opc =3D INDEX_op_br;
-                    op->args[0] =3D op->args[3];
-                } else {
-                    tcg_op_remove(s, op);
-                }
+            switch (tmp) {
+            case 0:
+                tcg_op_remove(s, op);
+                continue;
+            case 1:
+                memset(&ctx.temps_used, 0, sizeof(ctx.temps_used));
+                op->opc =3D opc =3D INDEX_op_br;
+                op->args[0] =3D op->args[3];
                 break;
             }
-            goto do_default;
+            break;
=20
         CASE_OP_32_64(movcond):
             tmp =3D do_constant_folding_cond(opc, op->args[1],
                                            op->args[2], op->args[5]);
             if (tmp !=3D 2) {
                 tcg_opt_gen_mov(s, op, op->args[0], op->args[4-tmp]);
-                break;
+                continue;
             }
             if (arg_is_const(op->args[3]) && arg_is_const(op->args[4])) {
                 uint64_t tv =3D arg_info(op->args[3])->val;
@@ -1330,7 +1330,7 @@ void tcg_optimize(TCGContext *s)
                 if (fv =3D=3D 1 && tv =3D=3D 0) {
                     cond =3D tcg_invert_cond(cond);
                 } else if (!(tv =3D=3D 1 && fv =3D=3D 0)) {
-                    goto do_default;
+                    break;
                 }
                 op->args[3] =3D cond;
                 op->opc =3D opc =3D (opc =3D=3D INDEX_op_movcond_i32
@@ -1338,7 +1338,7 @@ void tcg_optimize(TCGContext *s)
                                  : INDEX_op_setcond_i64);
                 nb_iargs =3D 2;
             }
-            goto do_default;
+            break;
=20
         case INDEX_op_add2_i32:
         case INDEX_op_sub2_i32:
@@ -1363,9 +1363,9 @@ void tcg_optimize(TCGContext *s)
                 rh =3D op->args[1];
                 tcg_opt_gen_movi(s, &ctx, op, rl, (int32_t)a);
                 tcg_opt_gen_movi(s, &ctx, op2, rh, (int32_t)(a >> 32));
-                break;
+                continue;
             }
-            goto do_default;
+            break;
=20
         case INDEX_op_mulu2_i32:
             if (arg_is_const(op->args[2]) && arg_is_const(op->args[3])) {
@@ -1379,39 +1379,40 @@ void tcg_optimize(TCGContext *s)
                 rh =3D op->args[1];
                 tcg_opt_gen_movi(s, &ctx, op, rl, (int32_t)r);
                 tcg_opt_gen_movi(s, &ctx, op2, rh, (int32_t)(r >> 32));
-                break;
+                continue;
             }
-            goto do_default;
+            break;
=20
         case INDEX_op_brcond2_i32:
             tmp =3D do_constant_folding_cond2(&op->args[0], &op->args[2],
                                             op->args[4]);
-            if (tmp !=3D 2) {
-                if (tmp) {
-            do_brcond_true:
-                    memset(&ctx.temps_used, 0, sizeof(ctx.temps_used));
-                    op->opc =3D INDEX_op_br;
-                    op->args[0] =3D op->args[5];
-                } else {
+            if (tmp =3D=3D 0) {
             do_brcond_false:
-                    tcg_op_remove(s, op);
-                }
-            } else if ((op->args[4] =3D=3D TCG_COND_LT
-                        || op->args[4] =3D=3D TCG_COND_GE)
-                       && arg_is_const(op->args[2])
-                       && arg_info(op->args[2])->val =3D=3D 0
-                       && arg_is_const(op->args[3])
-                       && arg_info(op->args[3])->val =3D=3D 0) {
+                tcg_op_remove(s, op);
+                continue;
+            }
+            if (tmp =3D=3D 1) {
+            do_brcond_true:
+                op->opc =3D opc =3D INDEX_op_br;
+                op->args[0] =3D op->args[5];
+                break;
+            }
+            if ((op->args[4] =3D=3D TCG_COND_LT || op->args[4] =3D=3D TCG_=
COND_GE)
+                 && arg_is_const(op->args[2])
+                 && arg_info(op->args[2])->val =3D=3D 0
+                 && arg_is_const(op->args[3])
+                 && arg_info(op->args[3])->val =3D=3D 0) {
                 /* Simplify LT/GE comparisons vs zero to a single compare
                    vs the high word of the input.  */
             do_brcond_high:
-                memset(&ctx.temps_used, 0, sizeof(ctx.temps_used));
-                op->opc =3D INDEX_op_brcond_i32;
+                op->opc =3D opc =3D INDEX_op_brcond_i32;
                 op->args[0] =3D op->args[1];
                 op->args[1] =3D op->args[3];
                 op->args[2] =3D op->args[4];
                 op->args[3] =3D op->args[5];
-            } else if (op->args[4] =3D=3D TCG_COND_EQ) {
+                break;
+            }
+            if (op->args[4] =3D=3D TCG_COND_EQ) {
                 /* Simplify EQ comparisons where one of the pairs
                    can be simplified.  */
                 tmp =3D do_constant_folding_cond(INDEX_op_brcond_i32,
@@ -1428,7 +1429,7 @@ void tcg_optimize(TCGContext *s)
                 if (tmp =3D=3D 0) {
                     goto do_brcond_false;
                 } else if (tmp !=3D 1) {
-                    goto do_default;
+                    break;
                 }
             do_brcond_low:
                 memset(&ctx.temps_used, 0, sizeof(ctx.temps_used));
@@ -1436,7 +1437,9 @@ void tcg_optimize(TCGContext *s)
                 op->args[1] =3D op->args[2];
                 op->args[2] =3D op->args[4];
                 op->args[3] =3D op->args[5];
-            } else if (op->args[4] =3D=3D TCG_COND_NE) {
+                break;
+            }
+            if (op->args[4] =3D=3D TCG_COND_NE) {
                 /* Simplify NE comparisons where one of the pairs
                    can be simplified.  */
                 tmp =3D do_constant_folding_cond(INDEX_op_brcond_i32,
@@ -1455,9 +1458,6 @@ void tcg_optimize(TCGContext *s)
                 } else if (tmp =3D=3D 1) {
                     goto do_brcond_true;
                 }
-                goto do_default;
-            } else {
-                goto do_default;
             }
             break;
=20
@@ -1467,12 +1467,13 @@ void tcg_optimize(TCGContext *s)
             if (tmp !=3D 2) {
             do_setcond_const:
                 tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
-            } else if ((op->args[5] =3D=3D TCG_COND_LT
-                        || op->args[5] =3D=3D TCG_COND_GE)
-                       && arg_is_const(op->args[3])
-                       && arg_info(op->args[3])->val =3D=3D 0
-                       && arg_is_const(op->args[4])
-                       && arg_info(op->args[4])->val =3D=3D 0) {
+                continue;
+            }
+            if ((op->args[5] =3D=3D TCG_COND_LT || op->args[5] =3D=3D TCG_=
COND_GE)
+                 && arg_is_const(op->args[3])
+                 && arg_info(op->args[3])->val =3D=3D 0
+                 && arg_is_const(op->args[4])
+                 && arg_info(op->args[4])->val =3D=3D 0) {
                 /* Simplify LT/GE comparisons vs zero to a single compare
                    vs the high word of the input.  */
             do_setcond_high:
@@ -1482,7 +1483,9 @@ void tcg_optimize(TCGContext *s)
                 op->args[1] =3D op->args[2];
                 op->args[2] =3D op->args[4];
                 op->args[3] =3D op->args[5];
-            } else if (op->args[5] =3D=3D TCG_COND_EQ) {
+                break;
+            }
+            if (op->args[5] =3D=3D TCG_COND_EQ) {
                 /* Simplify EQ comparisons where one of the pairs
                    can be simplified.  */
                 tmp =3D do_constant_folding_cond(INDEX_op_setcond_i32,
@@ -1499,7 +1502,7 @@ void tcg_optimize(TCGContext *s)
                 if (tmp =3D=3D 0) {
                     goto do_setcond_high;
                 } else if (tmp !=3D 1) {
-                    goto do_default;
+                    break;
                 }
             do_setcond_low:
                 reset_temp(op->args[0]);
@@ -1507,7 +1510,9 @@ void tcg_optimize(TCGContext *s)
                 op->opc =3D INDEX_op_setcond_i32;
                 op->args[2] =3D op->args[3];
                 op->args[3] =3D op->args[5];
-            } else if (op->args[5] =3D=3D TCG_COND_NE) {
+                break;
+            }
+            if (op->args[5] =3D=3D TCG_COND_NE) {
                 /* Simplify NE comparisons where one of the pairs
                    can be simplified.  */
                 tmp =3D do_constant_folding_cond(INDEX_op_setcond_i32,
@@ -1526,14 +1531,21 @@ void tcg_optimize(TCGContext *s)
                 } else if (tmp =3D=3D 1) {
                     goto do_setcond_const;
                 }
-                goto do_default;
-            } else {
-                goto do_default;
             }
             break;
=20
-        case INDEX_op_call:
-            if (!(tcg_call_flags(op)
+        default:
+            break;
+        }
+
+        /* Some of the folding above can change opc. */
+        opc =3D op->opc;
+        def =3D &tcg_op_defs[opc];
+        if (def->flags & TCG_OPF_BB_END) {
+            memset(&ctx.temps_used, 0, sizeof(ctx.temps_used));
+        } else {
+            if (opc =3D=3D INDEX_op_call &&
+                !(tcg_call_flags(op)
                   & (TCG_CALL_NO_READ_GLOBALS | TCG_CALL_NO_WRITE_GLOBALS)=
)) {
                 for (i =3D 0; i < nb_globals; i++) {
                     if (test_bit(i, ctx.temps_used.l)) {
@@ -1541,29 +1553,15 @@ void tcg_optimize(TCGContext *s)
                     }
                 }
             }
-            goto do_reset_output;
=20
-        default:
-        do_default:
-            /* Default case: we know nothing about operation (or were unab=
le
-               to compute the operation result) so no propagation is done.
-               We trash everything if the operation is the end of a basic
-               block, otherwise we only trash the output args.  "z_mask" is
-               the non-zero bits mask for the first output arg.  */
-            if (def->flags & TCG_OPF_BB_END) {
-                memset(&ctx.temps_used, 0, sizeof(ctx.temps_used));
-            } else {
-        do_reset_output:
-                for (i =3D 0; i < nb_oargs; i++) {
-                    reset_temp(op->args[i]);
-                    /* Save the corresponding known-zero bits mask for the
-                       first output argument (only one supported so far). =
*/
-                    if (i =3D=3D 0) {
-                        arg_info(op->args[i])->z_mask =3D z_mask;
-                    }
+            for (i =3D 0; i < nb_oargs; i++) {
+                reset_temp(op->args[i]);
+                /* Save the corresponding known-zero bits mask for the
+                   first output argument (only one supported so far). */
+                if (i =3D=3D 0) {
+                    arg_info(op->args[i])->z_mask =3D z_mask;
                 }
             }
-            break;
         }
=20
         /* Eliminate duplicate and redundant fence instructions.  */
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=fail;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=fail(p=none dis=none)  header.from=linaro.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635389050574299.73625923459724;
 Wed, 27 Oct 2021 19:44:10 -0700 (PDT)
Received: from localhost ([::1]:47302 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvOj-0007DK-7i
	for importer@patchew.org; Wed, 27 Oct 2021 22:44:09 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:58822)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMM-0004Ys-7s
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:42 -0400
Received: from mail-pf1-x42e.google.com ([2607:f8b0:4864:20::42e]:38777)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMJ-00035E-Rs
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:41 -0400
Received: by mail-pf1-x42e.google.com with SMTP id k26so4581424pfi.5
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:39 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.38
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:38 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=5/xA01W4KeTA9PL1ecjuRsphIv0Hw/RH1bb0Ef8kKFU=;
 b=uJdjpNnFiBvtZpSwNlX+GD7YYRuUIyuz3jwd4oQngb/IEd6UhZdbFv1Yp+uCTmlK4R
 pNFWWUgfCA75uTBXcmDdnz/XhloB8BedoX0HYJC/I3vfrO91DuXhHQ8a3nnlDza7Rxil
 KlQAE57c7s2MNOR9NsF1TXCX+6ZHF359FDTKO56u0oW1vYHqDEPJjboXvOMD1LBedzRw
 t6p/bULWlTV9IeboePrm/nMverbSYiRLSoHbwB/YqdKzChpCZOPIQznqUSBzgJhZbHEj
 z3BYoOLjV+a/jSiEr51+KbIIVt/V384+Bp9N0eDcUYv4pumL0N7udle1m6+UxzxG6i+2
 q6iw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=5/xA01W4KeTA9PL1ecjuRsphIv0Hw/RH1bb0Ef8kKFU=;
 b=8HPyhkUvjcdOtowc3e5b0qlgAfpzjr9qY89CfxRD2X8aAaeGz6B6A90t+3qbVr+pwf
 Yf2yxFCMMc99SQ0HzvfajAYTa1bzjGAO9ATroLtuqzYoHJswe+9ErdASAXpvyFc0xsVI
 A6ct0ti8dqzPg4W+gY+5k+Kpz8xOgWi5NB4yl3P4HZQoGxekDeWF4jvDkovx3Rt6cV/Z
 knFM0n5kMR+wMlwfVYZDn4JdcRWg+f8B+bUBfqLyjCIHjnVYyT0shEpPYeGWT4/GZkPt
 Ovjqg9zAZpwQCFh2OK5huSZVQ+M4TJ13qb052HNNlaryXVOpG3biysHEBIqJM5Iv4I+n
 jpVQ==
X-Gm-Message-State: AOAM530LmP+i/Oz8gdjVzdoemHiwhCCet+U6EqzZyRGo9WA8+SWTH6fk
 n7Qo+zGvhL+bTLZTa4vvE0WFyM8PHgWJEQ==
X-Google-Smtp-Source: 
 ABdhPJzUvanROht0cDDkZIWbKdeGA49nQ/XVa39tTKmSbYyHM+XSTejQOrifABCiGIhKL8LPS5Wdwg==
X-Received: by 2002:a62:194d:0:b0:47b:e3ee:6d43 with SMTP id
 74-20020a62194d000000b0047be3ee6d43mr1399734pfz.82.1635388898502;
 Wed, 27 Oct 2021 19:41:38 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 09/56] tcg/optimize: Change tcg_opt_gen_{mov,movi} interface
Date: Wed, 27 Oct 2021 19:40:44 -0700
Message-Id: <20211028024131.1492790-10-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::42e;
 envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42e.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Alex=20Benn=C3=A9e?= <alex.bennee@linaro.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: fail (Header signature does not verify)
X-ZM-MESSAGEID: 1635389051886100001

Adjust the interface to take the OptContext parameter instead
of TCGContext or both.

Reviewed-by: Alex Benn=C3=A9e <alex.bennee@linaro.org>
Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 67 +++++++++++++++++++++++++-------------------------
 1 file changed, 34 insertions(+), 33 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index a37efff4d0..627a5b39f6 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -45,6 +45,7 @@ typedef struct TempOptInfo {
 } TempOptInfo;
=20
 typedef struct OptContext {
+    TCGContext *tcg;
     TCGTempSet temps_used;
 } OptContext;
=20
@@ -183,7 +184,7 @@ static bool args_are_copies(TCGArg arg1, TCGArg arg2)
     return ts_are_copies(arg_temp(arg1), arg_temp(arg2));
 }
=20
-static void tcg_opt_gen_mov(TCGContext *s, TCGOp *op, TCGArg dst, TCGArg s=
rc)
+static void tcg_opt_gen_mov(OptContext *ctx, TCGOp *op, TCGArg dst, TCGArg=
 src)
 {
     TCGTemp *dst_ts =3D arg_temp(dst);
     TCGTemp *src_ts =3D arg_temp(src);
@@ -194,7 +195,7 @@ static void tcg_opt_gen_mov(TCGContext *s, TCGOp *op, T=
CGArg dst, TCGArg src)
     TCGOpcode new_op;
=20
     if (ts_are_copies(dst_ts, src_ts)) {
-        tcg_op_remove(s, op);
+        tcg_op_remove(ctx->tcg, op);
         return;
     }
=20
@@ -233,8 +234,8 @@ static void tcg_opt_gen_mov(TCGContext *s, TCGOp *op, T=
CGArg dst, TCGArg src)
     }
 }
=20
-static void tcg_opt_gen_movi(TCGContext *s, OptContext *ctx,
-                             TCGOp *op, TCGArg dst, uint64_t val)
+static void tcg_opt_gen_movi(OptContext *ctx, TCGOp *op,
+                             TCGArg dst, uint64_t val)
 {
     const TCGOpDef *def =3D &tcg_op_defs[op->opc];
     TCGType type;
@@ -251,7 +252,7 @@ static void tcg_opt_gen_movi(TCGContext *s, OptContext =
*ctx,
     /* Convert movi to mov with constant temp. */
     tv =3D tcg_constant_internal(type, val);
     init_ts_info(ctx, tv);
-    tcg_opt_gen_mov(s, op, dst, temp_arg(tv));
+    tcg_opt_gen_mov(ctx, op, dst, temp_arg(tv));
 }
=20
 static uint64_t do_constant_folding_2(TCGOpcode op, uint64_t x, uint64_t y)
@@ -609,7 +610,7 @@ void tcg_optimize(TCGContext *s)
 {
     int nb_temps, nb_globals, i;
     TCGOp *op, *op_next, *prev_mb =3D NULL;
-    OptContext ctx =3D {};
+    OptContext ctx =3D { .tcg =3D s };
=20
     /* Array VALS has an element for each temp.
        If this temp holds a constant then its value is kept in VALS' eleme=
nt.
@@ -723,7 +724,7 @@ void tcg_optimize(TCGContext *s)
         CASE_OP_32_64(rotr):
             if (arg_is_const(op->args[1])
                 && arg_info(op->args[1])->val =3D=3D 0) {
-                tcg_opt_gen_movi(s, &ctx, op, op->args[0], 0);
+                tcg_opt_gen_movi(&ctx, op, op->args[0], 0);
                 continue;
             }
             break;
@@ -838,7 +839,7 @@ void tcg_optimize(TCGContext *s)
             if (!arg_is_const(op->args[1])
                 && arg_is_const(op->args[2])
                 && arg_info(op->args[2])->val =3D=3D 0) {
-                tcg_opt_gen_mov(s, op, op->args[0], op->args[1]);
+                tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[1]);
                 continue;
             }
             break;
@@ -848,7 +849,7 @@ void tcg_optimize(TCGContext *s)
             if (!arg_is_const(op->args[1])
                 && arg_is_const(op->args[2])
                 && arg_info(op->args[2])->val =3D=3D -1) {
-                tcg_opt_gen_mov(s, op, op->args[0], op->args[1]);
+                tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[1]);
                 continue;
             }
             break;
@@ -1088,12 +1089,12 @@ void tcg_optimize(TCGContext *s)
=20
         if (partmask =3D=3D 0) {
             tcg_debug_assert(nb_oargs =3D=3D 1);
-            tcg_opt_gen_movi(s, &ctx, op, op->args[0], 0);
+            tcg_opt_gen_movi(&ctx, op, op->args[0], 0);
             continue;
         }
         if (affected =3D=3D 0) {
             tcg_debug_assert(nb_oargs =3D=3D 1);
-            tcg_opt_gen_mov(s, op, op->args[0], op->args[1]);
+            tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[1]);
             continue;
         }
=20
@@ -1105,7 +1106,7 @@ void tcg_optimize(TCGContext *s)
         CASE_OP_32_64(mulsh):
             if (arg_is_const(op->args[2])
                 && arg_info(op->args[2])->val =3D=3D 0) {
-                tcg_opt_gen_movi(s, &ctx, op, op->args[0], 0);
+                tcg_opt_gen_movi(&ctx, op, op->args[0], 0);
                 continue;
             }
             break;
@@ -1118,7 +1119,7 @@ void tcg_optimize(TCGContext *s)
         CASE_OP_32_64_VEC(or):
         CASE_OP_32_64_VEC(and):
             if (args_are_copies(op->args[1], op->args[2])) {
-                tcg_opt_gen_mov(s, op, op->args[0], op->args[1]);
+                tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[1]);
                 continue;
             }
             break;
@@ -1132,7 +1133,7 @@ void tcg_optimize(TCGContext *s)
         CASE_OP_32_64_VEC(sub):
         CASE_OP_32_64_VEC(xor):
             if (args_are_copies(op->args[1], op->args[2])) {
-                tcg_opt_gen_movi(s, &ctx, op, op->args[0], 0);
+                tcg_opt_gen_movi(&ctx, op, op->args[0], 0);
                 continue;
             }
             break;
@@ -1145,14 +1146,14 @@ void tcg_optimize(TCGContext *s)
            allocator where needed and possible.  Also detect copies. */
         switch (opc) {
         CASE_OP_32_64_VEC(mov):
-            tcg_opt_gen_mov(s, op, op->args[0], op->args[1]);
+            tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[1]);
             continue;
=20
         case INDEX_op_dup_vec:
             if (arg_is_const(op->args[1])) {
                 tmp =3D arg_info(op->args[1])->val;
                 tmp =3D dup_const(TCGOP_VECE(op), tmp);
-                tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
+                tcg_opt_gen_movi(&ctx, op, op->args[0], tmp);
                 continue;
             }
             break;
@@ -1160,7 +1161,7 @@ void tcg_optimize(TCGContext *s)
         case INDEX_op_dup2_vec:
             assert(TCG_TARGET_REG_BITS =3D=3D 32);
             if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) {
-                tcg_opt_gen_movi(s, &ctx, op, op->args[0],
+                tcg_opt_gen_movi(&ctx, op, op->args[0],
                                  deposit64(arg_info(op->args[1])->val, 32,=
 32,
                                            arg_info(op->args[2])->val));
                 continue;
@@ -1186,7 +1187,7 @@ void tcg_optimize(TCGContext *s)
         case INDEX_op_extrh_i64_i32:
             if (arg_is_const(op->args[1])) {
                 tmp =3D do_constant_folding(opc, arg_info(op->args[1])->va=
l, 0);
-                tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
+                tcg_opt_gen_movi(&ctx, op, op->args[0], tmp);
                 continue;
             }
             break;
@@ -1197,7 +1198,7 @@ void tcg_optimize(TCGContext *s)
             if (arg_is_const(op->args[1])) {
                 tmp =3D do_constant_folding(opc, arg_info(op->args[1])->va=
l,
                                           op->args[2]);
-                tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
+                tcg_opt_gen_movi(&ctx, op, op->args[0], tmp);
                 continue;
             }
             break;
@@ -1227,7 +1228,7 @@ void tcg_optimize(TCGContext *s)
             if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) {
                 tmp =3D do_constant_folding(opc, arg_info(op->args[1])->va=
l,
                                           arg_info(op->args[2])->val);
-                tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
+                tcg_opt_gen_movi(&ctx, op, op->args[0], tmp);
                 continue;
             }
             break;
@@ -1238,9 +1239,9 @@ void tcg_optimize(TCGContext *s)
                 TCGArg v =3D arg_info(op->args[1])->val;
                 if (v !=3D 0) {
                     tmp =3D do_constant_folding(opc, v, 0);
-                    tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
+                    tcg_opt_gen_movi(&ctx, op, op->args[0], tmp);
                 } else {
-                    tcg_opt_gen_mov(s, op, op->args[0], op->args[2]);
+                    tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[2]);
                 }
                 continue;
             }
@@ -1251,7 +1252,7 @@ void tcg_optimize(TCGContext *s)
                 tmp =3D deposit64(arg_info(op->args[1])->val,
                                 op->args[3], op->args[4],
                                 arg_info(op->args[2])->val);
-                tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
+                tcg_opt_gen_movi(&ctx, op, op->args[0], tmp);
                 continue;
             }
             break;
@@ -1260,7 +1261,7 @@ void tcg_optimize(TCGContext *s)
             if (arg_is_const(op->args[1])) {
                 tmp =3D extract64(arg_info(op->args[1])->val,
                                 op->args[2], op->args[3]);
-                tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
+                tcg_opt_gen_movi(&ctx, op, op->args[0], tmp);
                 continue;
             }
             break;
@@ -1269,7 +1270,7 @@ void tcg_optimize(TCGContext *s)
             if (arg_is_const(op->args[1])) {
                 tmp =3D sextract64(arg_info(op->args[1])->val,
                                  op->args[2], op->args[3]);
-                tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
+                tcg_opt_gen_movi(&ctx, op, op->args[0], tmp);
                 continue;
             }
             break;
@@ -1286,7 +1287,7 @@ void tcg_optimize(TCGContext *s)
                     tmp =3D (int32_t)(((uint32_t)v1 >> shr) |
                                     ((uint32_t)v2 << (32 - shr)));
                 }
-                tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
+                tcg_opt_gen_movi(&ctx, op, op->args[0], tmp);
                 continue;
             }
             break;
@@ -1295,7 +1296,7 @@ void tcg_optimize(TCGContext *s)
             tmp =3D do_constant_folding_cond(opc, op->args[1],
                                            op->args[2], op->args[3]);
             if (tmp !=3D 2) {
-                tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
+                tcg_opt_gen_movi(&ctx, op, op->args[0], tmp);
                 continue;
             }
             break;
@@ -1319,7 +1320,7 @@ void tcg_optimize(TCGContext *s)
             tmp =3D do_constant_folding_cond(opc, op->args[1],
                                            op->args[2], op->args[5]);
             if (tmp !=3D 2) {
-                tcg_opt_gen_mov(s, op, op->args[0], op->args[4-tmp]);
+                tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[4-tmp]);
                 continue;
             }
             if (arg_is_const(op->args[3]) && arg_is_const(op->args[4])) {
@@ -1361,8 +1362,8 @@ void tcg_optimize(TCGContext *s)
=20
                 rl =3D op->args[0];
                 rh =3D op->args[1];
-                tcg_opt_gen_movi(s, &ctx, op, rl, (int32_t)a);
-                tcg_opt_gen_movi(s, &ctx, op2, rh, (int32_t)(a >> 32));
+                tcg_opt_gen_movi(&ctx, op, rl, (int32_t)a);
+                tcg_opt_gen_movi(&ctx, op2, rh, (int32_t)(a >> 32));
                 continue;
             }
             break;
@@ -1377,8 +1378,8 @@ void tcg_optimize(TCGContext *s)
=20
                 rl =3D op->args[0];
                 rh =3D op->args[1];
-                tcg_opt_gen_movi(s, &ctx, op, rl, (int32_t)r);
-                tcg_opt_gen_movi(s, &ctx, op2, rh, (int32_t)(r >> 32));
+                tcg_opt_gen_movi(&ctx, op, rl, (int32_t)r);
+                tcg_opt_gen_movi(&ctx, op2, rh, (int32_t)(r >> 32));
                 continue;
             }
             break;
@@ -1466,7 +1467,7 @@ void tcg_optimize(TCGContext *s)
                                             op->args[5]);
             if (tmp !=3D 2) {
             do_setcond_const:
-                tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp);
+                tcg_opt_gen_movi(&ctx, op, op->args[0], tmp);
                 continue;
             }
             if ((op->args[5] =3D=3D TCG_COND_LT || op->args[5] =3D=3D TCG_=
COND_GE)
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=fail;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=fail(p=none dis=none)  header.from=linaro.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635389813170257.01269567996655;
 Wed, 27 Oct 2021 19:56:53 -0700 (PDT)
Received: from localhost ([::1]:48588 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvb2-0002Lc-0k
	for importer@patchew.org; Wed, 27 Oct 2021 22:56:52 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:58826)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMM-0004ZD-KV
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:42 -0400
Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]:45940)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMK-00035a-Lu
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:42 -0400
Received: by mail-pf1-x42c.google.com with SMTP id f11so4536914pfc.12
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:40 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.38
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:39 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=FtIqRUcfOkY+GJe8JI9dBf6G7CRUHHnpPIR2B14bLgE=;
 b=qFJdqN4LOaouE3wtL9zmlsHnuxxeKaE4Inrmb5VHlX0Fepd4qWfO0eyEwrA5eQr+CP
 Ve85c3P4fNHewi4BRB32Yk/s8F3yt3qp2awtY84/0KfxglDLn0Lgcz2vMQOgbCftfvGv
 qKXsTGpMgOZj1/qNOTPgiLxYyIklnccKPO6XXNA9zoAxiQ/LuO5oXLiwcQJcgSs3FdbY
 D42iQxAyJzISJwC5GPb+zWLeoElDfJwB+KMGuC/ES98BBwbdI80700PFkL+pyVyvaQnr
 4x9c4AEvecj5ViCVgefcAjxeRuyPitiFuiQPxYIPeIBPBpmB0rzlRdkIX5zNhqLL4FLz
 KJoA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=FtIqRUcfOkY+GJe8JI9dBf6G7CRUHHnpPIR2B14bLgE=;
 b=MS7lTrbh7/mZiZNLYa24QShOeowozvRB7vnaUB7mCFFZwSNYfCjiAWbf/0QtqBgU0J
 jy9L8fepZOVK6X5+4jCn4CoRTWaksjTzU7CpxTush21CLOWmwUUOf2R43XAX546zLlCm
 L1cs383HY03qr18jem80NgEc1sihxROQAIuaMotL//4sh6IZLI2AyJhpWtcsPw6gHLLB
 Wx3n53lgd/mWxdUgBt1zI7ihr/oLNC1HihU6s9EjI5FjMVarvQWloIG0lzzL2soHfFYc
 IIwvgeozXBXDbMY6OzC1W8D8Anap3+6dh9hiCIKvV+iQSQQKwKxh59+eqSkxm6/l1kuc
 f0cw==
X-Gm-Message-State: AOAM5335SY+a1FLlW6v9/UUGCeou0s0w16yAUeHso6tFyVuzKC5Hp0A7
 Bs4gPr1M4BHbsAk/iBny8ozWr+ukvEuhQQ==
X-Google-Smtp-Source: 
 ABdhPJxoFTh6vNo0ORlt15iI5K8nx6i2UDJ4APpj1F17Z2ZUk+CB5nrde9cifEOZBLzuw0Bcgxu3BA==
X-Received: by 2002:a05:6a00:1348:b0:47c:e8f1:69a3 with SMTP id
 k8-20020a056a00134800b0047ce8f169a3mr1519446pfu.86.1635388899329;
 Wed, 27 Oct 2021 19:41:39 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 10/56] tcg/optimize: Move prev_mb into OptContext
Date: Wed, 27 Oct 2021 19:40:45 -0700
Message-Id: <20211028024131.1492790-11-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::42c;
 envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42c.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Alex=20Benn=C3=A9e?= <alex.bennee@linaro.org>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: fail (Header signature does not verify)
X-ZM-MESSAGEID: 1635389815185100001

This will expose the variable to subroutines that
will be broken out of tcg_optimize.

Reviewed-by: Alex Benn=C3=A9e <alex.bennee@linaro.org>
Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 627a5b39f6..b875d76354 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -46,6 +46,7 @@ typedef struct TempOptInfo {
=20
 typedef struct OptContext {
     TCGContext *tcg;
+    TCGOp *prev_mb;
     TCGTempSet temps_used;
 } OptContext;
=20
@@ -609,7 +610,7 @@ static bool swap_commutative2(TCGArg *p1, TCGArg *p2)
 void tcg_optimize(TCGContext *s)
 {
     int nb_temps, nb_globals, i;
-    TCGOp *op, *op_next, *prev_mb =3D NULL;
+    TCGOp *op, *op_next;
     OptContext ctx =3D { .tcg =3D s };
=20
     /* Array VALS has an element for each temp.
@@ -1566,7 +1567,7 @@ void tcg_optimize(TCGContext *s)
         }
=20
         /* Eliminate duplicate and redundant fence instructions.  */
-        if (prev_mb) {
+        if (ctx.prev_mb) {
             switch (opc) {
             case INDEX_op_mb:
                 /* Merge two barriers of the same type into one,
@@ -1580,7 +1581,7 @@ void tcg_optimize(TCGContext *s)
                  * barrier.  This is stricter than specified but for
                  * the purposes of TCG is better than not optimizing.
                  */
-                prev_mb->args[0] |=3D op->args[0];
+                ctx.prev_mb->args[0] |=3D op->args[0];
                 tcg_op_remove(s, op);
                 break;
=20
@@ -1597,11 +1598,11 @@ void tcg_optimize(TCGContext *s)
             case INDEX_op_qemu_st_i64:
             case INDEX_op_call:
                 /* Opcodes that touch guest memory stop the optimization. =
 */
-                prev_mb =3D NULL;
+                ctx.prev_mb =3D NULL;
                 break;
             }
         } else if (opc =3D=3D INDEX_op_mb) {
-            prev_mb =3D op;
+            ctx.prev_mb =3D op;
         }
     }
 }
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=fail;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=fail(p=none dis=none)  header.from=linaro.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635390245556706.9513638508823;
 Wed, 27 Oct 2021 20:04:05 -0700 (PDT)
Received: from localhost ([::1]:38688 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvi0-0006Xw-HS
	for importer@patchew.org; Wed, 27 Oct 2021 23:04:04 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:58838)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMN-0004ai-2w
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:43 -0400
Received: from mail-pg1-x52e.google.com ([2607:f8b0:4864:20::52e]:38548)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvML-00038T-4N
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:42 -0400
Received: by mail-pg1-x52e.google.com with SMTP id e65so4930456pgc.5
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:40 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.39
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:39 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=WL784dDelb2n11jVqBh0M/kFnuIJJZnBgr5d6GB5NwI=;
 b=L9EtfrIyr1CKBSXTQYr2PTvrFe+czLPyrI8cdX6TDpn8TssBJY0WYn1IkpO/x0uRYf
 aZcgQmaX1O3epS4+3NOb5jjAH2RA97JrIoPuBgUPCwfbZD2O1f1gsr6hJVKHQGZNuRT8
 wb4P8xq63T/qnDLSMU3/eI3ae4PVku+AQWlHKII43jf2BWNcDXGuhtuHot16a9Yo9YMI
 XPnKiWXxeJRCwNtxXWcA8ITG2XYXDL5NHPVbVn0r1oLVK/GOk+NE9fYqk0aIHO2sxnzl
 eJulfeTVbyk8zwEdYi4Z/XqVDYiGuTodof+CKlSAmid+qdf2F6qcrO9o46Ex+gVf5X9A
 3F4g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=WL784dDelb2n11jVqBh0M/kFnuIJJZnBgr5d6GB5NwI=;
 b=O6GtII7dN2EF4+ZR54ZprcoQq+6D5y98tysO/DnOwJR806SRK2mtfn4cdgXEBl7TWx
 70rnN+3B0j/ClYT2TEPvSwkW+X+jB4omC3Lcj4CAKGxGlGhI90fYCQnLTnJwljDvEsDv
 jN0kU0+CBqDI7CNMfO3kqyTITmnYZDIDTmvjTNoMaDfjnkbbWCBVFUox+eZQ2YSLtkxM
 xG93D9Ib0edVWoBzUXJRGe5XSEROp3UahkHt78qp6acnfrCzcBWCvJQZ0PmuoyJmpxKI
 6DejDcCQWIf14jBBzq5CMdyCja9qlFx7Okjw0NaLO8cob2mKVJwusRRtOgqkj00j7hWB
 tbDQ==
X-Gm-Message-State: AOAM531W4iXmR2HTmSmuGW7eVGaqdRKy//zc9SNqBVrTu/bgyYuuklx+
 dAL67cwHeRJdJBvJLhJtLgIWufPfPlYlRg==
X-Google-Smtp-Source: 
 ABdhPJwabmbJy9NjrTnkg5aEL6VHOzDi3XWPRMRzrFrw8I5LUmD/CIQ9VQqi2ePNxJ1qexNGXQD78A==
X-Received: by 2002:a63:d2:: with SMTP id 201mr1188729pga.400.1635388899905;
 Wed, 27 Oct 2021 19:41:39 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 11/56] tcg/optimize: Split out init_arguments
Date: Wed, 27 Oct 2021 19:40:46 -0700
Message-Id: <20211028024131.1492790-12-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::52e;
 envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52e.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Alex=20Benn=C3=A9e?= <alex.bennee@linaro.org>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: fail (Header signature does not verify)
X-ZM-MESSAGEID: 1635390246693100001

There was no real reason for calls to have separate code here.
Unify init for calls vs non-calls using the call path, which
handles TCG_CALL_DUMMY_ARG.

Reviewed-by: Alex Benn=C3=A9e <alex.bennee@linaro.org>
Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 25 +++++++++++--------------
 1 file changed, 11 insertions(+), 14 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index b875d76354..019c5aaf81 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -128,11 +128,6 @@ static void init_ts_info(OptContext *ctx, TCGTemp *ts)
     }
 }
=20
-static void init_arg_info(OptContext *ctx, TCGArg arg)
-{
-    init_ts_info(ctx, arg_temp(arg));
-}
-
 static TCGTemp *find_better_copy(TCGContext *s, TCGTemp *ts)
 {
     TCGTemp *i, *g, *l;
@@ -606,6 +601,16 @@ static bool swap_commutative2(TCGArg *p1, TCGArg *p2)
     return false;
 }
=20
+static void init_arguments(OptContext *ctx, TCGOp *op, int nb_args)
+{
+    for (int i =3D 0; i < nb_args; i++) {
+        TCGTemp *ts =3D arg_temp(op->args[i]);
+        if (ts) {
+            init_ts_info(ctx, ts);
+        }
+    }
+}
+
 /* Propagate constants and copies, fold constant expressions. */
 void tcg_optimize(TCGContext *s)
 {
@@ -636,19 +641,11 @@ void tcg_optimize(TCGContext *s)
         if (opc =3D=3D INDEX_op_call) {
             nb_oargs =3D TCGOP_CALLO(op);
             nb_iargs =3D TCGOP_CALLI(op);
-            for (i =3D 0; i < nb_oargs + nb_iargs; i++) {
-                TCGTemp *ts =3D arg_temp(op->args[i]);
-                if (ts) {
-                    init_ts_info(&ctx, ts);
-                }
-            }
         } else {
             nb_oargs =3D def->nb_oargs;
             nb_iargs =3D def->nb_iargs;
-            for (i =3D 0; i < nb_oargs + nb_iargs; i++) {
-                init_arg_info(&ctx, op->args[i]);
-            }
         }
+        init_arguments(&ctx, op, nb_oargs + nb_iargs);
=20
         /* Do copy propagation */
         for (i =3D nb_oargs; i < nb_oargs + nb_iargs; i++) {
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=fail;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=fail(p=none dis=none)  header.from=linaro.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635390038544112.53080107438984;
 Wed, 27 Oct 2021 20:00:38 -0700 (PDT)
Received: from localhost ([::1]:56866 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvee-00086E-Eu
	for importer@patchew.org; Wed, 27 Oct 2021 23:00:36 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:58858)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMO-0004ch-1x
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:44 -0400
Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]:52898)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvML-0003Bo-SX
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:43 -0400
Received: by mail-pj1-x102d.google.com with SMTP id oa4so3581549pjb.2
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:41 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.40
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:40 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=apxi4gdi/2+dlekZiDFnJhG83/VEpB6pYIdUYdxg0AQ=;
 b=YtyCY2IpfsVy4T9Bz2+0NHWyydATr7/lpeQdxak7Y48imrH/UArxdAs/V8NeM+tky4
 D7uV76FKpQfR5JkaPnLAK6vKdjvl9B7LWcDRv253TL7Zq/5AHzZX/L3QukSfquaZctom
 qEoK/MAnLXpYvpQbELxQdC7KhW3nvdEF2Jxah3D04ErCoyBMHR+Gjt1cJP7CeuprlSVn
 J51raVwz55MXGKWmMkei2d6oHJBR6jVpdu1+6fiJKZU/uoObZKTFtuojqr8FUMGgP1dm
 F2BQ2Hzu98iv6OxhvraSMi5JFd4wAc2PUSl1URaWQM2EryGV9RraOLc5lZ0DL3kJkb5i
 w99w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=apxi4gdi/2+dlekZiDFnJhG83/VEpB6pYIdUYdxg0AQ=;
 b=3h/l69/1RKjgb+lpOaucL6ioMsRoh7BWw4EdTzMipoJJCZKDtPlb8WG8umQRctH/1M
 w6qYp/h5VI7BuHiTvPuXiE+f6Ur6R162JWCzMiOe3kBkCkVnJom6dhRTheX1MHOR+Zgo
 AXpNeKQeTpoN75tRiEZsyA1ALf5O/taGHGBL8F1s4/C8uShEQapHcpgznMNyTEQEy99D
 F6tALwt+Jx7yWnOi3/Jl3aI23NGOSpf2up13ewGUysDRNqVesoGbsWdAmReEcVLILV6I
 cuK/KOrPT61G/OyoJEKlpfte3LM/xLYXapni7wpNQBkUdSXXbhNWvAvzKBjYkYk0ukWS
 GcKA==
X-Gm-Message-State: AOAM533AyHIRZnQ9uEuhyijgaNKgIIHSUT5WPGRgMKx+7wXInFtNhXEa
 73TVrz85cowhtSOzEF+V5F6nD7x5cCU1bw==
X-Google-Smtp-Source: 
 ABdhPJwJTbCqECFeEDaeyMjewwipmFZfbGUga8U9Sivau5hd7DM9DJLADSUQ3hwlwDs0dUQpTv5/GA==
X-Received: by 2002:a17:90b:1bd1:: with SMTP id
 oa17mr1565939pjb.26.1635388900528;
 Wed, 27 Oct 2021 19:41:40 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 12/56] tcg/optimize: Split out copy_propagate
Date: Wed, 27 Oct 2021 19:40:47 -0700
Message-Id: <20211028024131.1492790-13-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::102d;
 envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102d.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Alex=20Benn=C3=A9e?= <alex.bennee@linaro.org>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: fail (Header signature does not verify)
X-ZM-MESSAGEID: 1635390040272100001

Continue splitting tcg_optimize.

Reviewed-by: Alex Benn=C3=A9e <alex.bennee@linaro.org>
Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 22 ++++++++++++++--------
 1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 019c5aaf81..fad6f5de1f 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -611,6 +611,19 @@ static void init_arguments(OptContext *ctx, TCGOp *op,=
 int nb_args)
     }
 }
=20
+static void copy_propagate(OptContext *ctx, TCGOp *op,
+                           int nb_oargs, int nb_iargs)
+{
+    TCGContext *s =3D ctx->tcg;
+
+    for (int i =3D nb_oargs; i < nb_oargs + nb_iargs; i++) {
+        TCGTemp *ts =3D arg_temp(op->args[i]);
+        if (ts && ts_is_copy(ts)) {
+            op->args[i] =3D temp_arg(find_better_copy(s, ts));
+        }
+    }
+}
+
 /* Propagate constants and copies, fold constant expressions. */
 void tcg_optimize(TCGContext *s)
 {
@@ -646,14 +659,7 @@ void tcg_optimize(TCGContext *s)
             nb_iargs =3D def->nb_iargs;
         }
         init_arguments(&ctx, op, nb_oargs + nb_iargs);
-
-        /* Do copy propagation */
-        for (i =3D nb_oargs; i < nb_oargs + nb_iargs; i++) {
-            TCGTemp *ts =3D arg_temp(op->args[i]);
-            if (ts && ts_is_copy(ts)) {
-                op->args[i] =3D temp_arg(find_better_copy(s, ts));
-            }
-        }
+        copy_propagate(&ctx, op, nb_oargs, nb_iargs);
=20
         /* For commutative operations make constant second argument */
         switch (opc) {
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=fail;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=fail(p=none dis=none)  header.from=linaro.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635389339988505.3133789523571;
 Wed, 27 Oct 2021 19:48:59 -0700 (PDT)
Received: from localhost ([::1]:56528 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvTP-00058t-1b
	for importer@patchew.org; Wed, 27 Oct 2021 22:48:59 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:58870)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMO-0004eL-NW
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:44 -0400
Received: from mail-pj1-x102f.google.com ([2607:f8b0:4864:20::102f]:50913)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMM-0003G0-Iq
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:44 -0400
Received: by mail-pj1-x102f.google.com with SMTP id gn3so3607213pjb.0
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:42 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.40
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:40 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=qA2L+rswn0bgEtnoIqL3DIT4FMCOfg4+ksSKsYoClOk=;
 b=G36gHCrhcij02mz2OAxiReMmvyXNIQeHx+es/a+jRyGLd90P912XlMbu8Z45BGhkWI
 AP9OaOyL6GhAcoyfzt3Xk1W3xqwlkSbj/Bqi2M1451FBa2v0q6M9R5diruy96cDV/LVT
 sjIbt+KBJlXSIBV1SvMNFT2VuCobJKo8JWEdBavyzdo53oO6pH3Bk3eyap6qaniQAPwe
 s4sU7yRV7CyYDL7q2cxvmclxu05gVvejvG+Hc15UMcBC21DWBM9RW1Rs6bNuQZFQ0LA2
 khPTnG9DUpwq/rT4JAW29LlpL8wOLaQ5nEUEtsspu0CalAJo/zBBK3m2lWhVbaBJ7h0x
 0SZA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=qA2L+rswn0bgEtnoIqL3DIT4FMCOfg4+ksSKsYoClOk=;
 b=PGk2FHOnmz+Qjpzu7hot336FHiTrKk/HubSZni66ZRugelEZkImNSDuELxv1ChYNjy
 p9WHonRpd8nAmt157z/aHzJHQn6w19EPDr6+6ibc4xXtrlFLe5lBKBz0bBYONcpqYY26
 IuoHoWm2/G6z8rudch6mIVJUYnZPXrqGGSZRALea9Q5ePGnBdYQAuVcf9xzqVgK7wEwQ
 aqGHDkuzHYdNEd7phUlE6/jxWZsTyYU+OGMcnkiBQu2SH/8qZVgD6naEA8o7TEB3o+WY
 lAHnPW/uzJR0JMcg+JblG+UIKA1GJKfnsyBV6xXyCdk2p2QHEMhUKUWqNABUn0Acz6it
 Fwig==
X-Gm-Message-State: AOAM530sJELemSnmoIGNntO4ZeoVs/IazNcItm5B2YH6m6+zpaOmyL7V
 xpbdayuhUQbrVPwD5h5m+dnMB2/svTp2WA==
X-Google-Smtp-Source: 
 ABdhPJzigT7Tp/FtIzYp5pWYYnVr+1I6bU4HYVEyeUArD2bRDFkSb/ZjHf86F/b1/unGdPjcd5oRQw==
X-Received: by 2002:a17:903:22c9:b0:13e:ed56:70e2 with SMTP id
 y9-20020a17090322c900b0013eed5670e2mr1231003plg.19.1635388901112;
 Wed, 27 Oct 2021 19:41:41 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 13/56] tcg/optimize: Split out fold_call
Date: Wed, 27 Oct 2021 19:40:48 -0700
Message-Id: <20211028024131.1492790-14-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::102f;
 envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102f.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Alex=20Benn=C3=A9e?= <alex.bennee@linaro.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: fail (Header signature does not verify)
X-ZM-MESSAGEID: 1635389341234100001

Calls are special in that they have a variable number
of arguments, and need to be able to clobber globals.

Reviewed-by: Alex Benn=C3=A9e <alex.bennee@linaro.org>
Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 63 ++++++++++++++++++++++++++++++++------------------
 1 file changed, 41 insertions(+), 22 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index fad6f5de1f..74b9aa025a 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -624,10 +624,42 @@ static void copy_propagate(OptContext *ctx, TCGOp *op,
     }
 }
=20
+static bool fold_call(OptContext *ctx, TCGOp *op)
+{
+    TCGContext *s =3D ctx->tcg;
+    int nb_oargs =3D TCGOP_CALLO(op);
+    int nb_iargs =3D TCGOP_CALLI(op);
+    int flags, i;
+
+    init_arguments(ctx, op, nb_oargs + nb_iargs);
+    copy_propagate(ctx, op, nb_oargs, nb_iargs);
+
+    /* If the function reads or writes globals, reset temp data. */
+    flags =3D tcg_call_flags(op);
+    if (!(flags & (TCG_CALL_NO_READ_GLOBALS | TCG_CALL_NO_WRITE_GLOBALS)))=
 {
+        int nb_globals =3D s->nb_globals;
+
+        for (i =3D 0; i < nb_globals; i++) {
+            if (test_bit(i, ctx->temps_used.l)) {
+                reset_ts(&ctx->tcg->temps[i]);
+            }
+        }
+    }
+
+    /* Reset temp data for outputs. */
+    for (i =3D 0; i < nb_oargs; i++) {
+        reset_temp(op->args[i]);
+    }
+
+    /* Stop optimizing MB across calls. */
+    ctx->prev_mb =3D NULL;
+    return true;
+}
+
 /* Propagate constants and copies, fold constant expressions. */
 void tcg_optimize(TCGContext *s)
 {
-    int nb_temps, nb_globals, i;
+    int nb_temps, i;
     TCGOp *op, *op_next;
     OptContext ctx =3D { .tcg =3D s };
=20
@@ -637,8 +669,6 @@ void tcg_optimize(TCGContext *s)
        available through the doubly linked circular list. */
=20
     nb_temps =3D s->nb_temps;
-    nb_globals =3D s->nb_globals;
-
     for (i =3D 0; i < nb_temps; ++i) {
         s->temps[i].state_ptr =3D NULL;
     }
@@ -647,17 +677,17 @@ void tcg_optimize(TCGContext *s)
         uint64_t z_mask, partmask, affected, tmp;
         int nb_oargs, nb_iargs;
         TCGOpcode opc =3D op->opc;
-        const TCGOpDef *def =3D &tcg_op_defs[opc];
+        const TCGOpDef *def;
=20
-        /* Count the arguments, and initialize the temps that are
-           going to be used */
+        /* Calls are special. */
         if (opc =3D=3D INDEX_op_call) {
-            nb_oargs =3D TCGOP_CALLO(op);
-            nb_iargs =3D TCGOP_CALLI(op);
-        } else {
-            nb_oargs =3D def->nb_oargs;
-            nb_iargs =3D def->nb_iargs;
+            fold_call(&ctx, op);
+            continue;
         }
+
+        def =3D &tcg_op_defs[opc];
+        nb_oargs =3D def->nb_oargs;
+        nb_iargs =3D def->nb_iargs;
         init_arguments(&ctx, op, nb_oargs + nb_iargs);
         copy_propagate(&ctx, op, nb_oargs, nb_iargs);
=20
@@ -1549,16 +1579,6 @@ void tcg_optimize(TCGContext *s)
         if (def->flags & TCG_OPF_BB_END) {
             memset(&ctx.temps_used, 0, sizeof(ctx.temps_used));
         } else {
-            if (opc =3D=3D INDEX_op_call &&
-                !(tcg_call_flags(op)
-                  & (TCG_CALL_NO_READ_GLOBALS | TCG_CALL_NO_WRITE_GLOBALS)=
)) {
-                for (i =3D 0; i < nb_globals; i++) {
-                    if (test_bit(i, ctx.temps_used.l)) {
-                        reset_ts(&s->temps[i]);
-                    }
-                }
-            }
-
             for (i =3D 0; i < nb_oargs; i++) {
                 reset_temp(op->args[i]);
                 /* Save the corresponding known-zero bits mask for the
@@ -1599,7 +1619,6 @@ void tcg_optimize(TCGContext *s)
             case INDEX_op_qemu_st_i32:
             case INDEX_op_qemu_st8_i32:
             case INDEX_op_qemu_st_i64:
-            case INDEX_op_call:
                 /* Opcodes that touch guest memory stop the optimization. =
 */
                 ctx.prev_mb =3D NULL;
                 break;
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=fail;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=fail(p=none dis=none)  header.from=linaro.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635389497758233.36148526018667;
 Wed, 27 Oct 2021 19:51:37 -0700 (PDT)
Received: from localhost ([::1]:35004 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvVv-0001J6-Ni
	for importer@patchew.org; Wed, 27 Oct 2021 22:51:36 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:58888)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMP-0004fm-F2
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:45 -0400
Received: from mail-pg1-x536.google.com ([2607:f8b0:4864:20::536]:34476)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMN-0003LS-88
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:45 -0400
Received: by mail-pg1-x536.google.com with SMTP id h193so4963918pgc.1
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:42 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.41
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:41 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=NYLWr1uKuQzUUVrza4V+n6K/acOPuYl97jiAhjg0Z5M=;
 b=XAKpgYmAhJM49SJkH+R2/7MEFaywotDEMqopjJHKXFq88/Y3pCmj+N1k03gjC+Ci5x
 P+QPbMz8UtZ9N2njBWLipoxvRJv4lOVzZAx0nnpdVEa42uWXuyA26bebrFf6hv8pjwP3
 rOYxvmH6RbyUFNrduV1eBF7zhFjFVBtWFNgZiQ+w8A3gw7673+T/UPepZthqSVKloSlP
 jjT2NR6LpDW2LKdsPVmnv21gxEJ/J3kGLSnoersE4eK5KsXGQPMasThq/UfHzF4J4NDN
 MBiSgNChYrMaC1QrdM/Fm72ASrVPr6UtMohY81zuixA/F5pYWol2DgbDm54uLgrF1v9L
 Pu+Q==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=NYLWr1uKuQzUUVrza4V+n6K/acOPuYl97jiAhjg0Z5M=;
 b=2X/ShTHKaYFszRjlQS9h4MHhDJsxkVTAJlsEy5y1c8AXpdgm7YDSiUONX5/65lT4qQ
 x9l+/XvVOFhq8L8NnNVZFPSz9r0VW/yneEJdhAkLcWKST70Bu6k2zcO/IQAeMQ7PjrCB
 sDgACQvC/19RQJ5Po1rIf7w7kG9xc3RSr7MyM0L14GBwP1PejNImVT7rltwebX9fJH61
 RcFp6xohJFZJHpAC5nmmpDdM35cm64bPxljLCaUf7ESggp/I7WU3WQoYm/C3YFRw/IAZ
 vXE0USHlvNI1aFs0xjprfY7oRJz0xLIznNsZzV9luTXQ+oU3Y8nMuJyUZN3utlBxU2Ow
 go8w==
X-Gm-Message-State: AOAM5314z5ZNT+lHQrjZ4pvhCOMYdrfv0lIxVsygYQsQPmLTlBS5D4gG
 XhFrnFisW+rfQxoOTA0ULWB/LKxMcZl9Cg==
X-Google-Smtp-Source: 
 ABdhPJzQqbCWm1PLiMc0mL8A0GfJIkhYpRj2X632i4zQqH8UYikT2yNzT0x7xd9tOduxHGbDMacV0w==
X-Received: by 2002:a65:6658:: with SMTP id z24mr1229451pgv.266.1635388901934;
 Wed, 27 Oct 2021 19:41:41 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 14/56] tcg/optimize: Drop nb_oargs, nb_iargs locals
Date: Wed, 27 Oct 2021 19:40:49 -0700
Message-Id: <20211028024131.1492790-15-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::536;
 envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x536.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Alex=20Benn=C3=A9e?= <alex.bennee@linaro.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: fail (Header signature does not verify)
X-ZM-MESSAGEID: 1635389499663100001

Rather than try to keep these up-to-date across folding,
re-read nb_oargs at the end, after re-reading the opcode.

A couple of asserts need dropping, but that will take care
of itself as we split the function further.

Reviewed-by: Alex Benn=C3=A9e <alex.bennee@linaro.org>
Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 14 ++++----------
 1 file changed, 4 insertions(+), 10 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 74b9aa025a..77cdffaaef 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -675,7 +675,6 @@ void tcg_optimize(TCGContext *s)
=20
     QTAILQ_FOREACH_SAFE(op, &s->ops, link, op_next) {
         uint64_t z_mask, partmask, affected, tmp;
-        int nb_oargs, nb_iargs;
         TCGOpcode opc =3D op->opc;
         const TCGOpDef *def;
=20
@@ -686,10 +685,8 @@ void tcg_optimize(TCGContext *s)
         }
=20
         def =3D &tcg_op_defs[opc];
-        nb_oargs =3D def->nb_oargs;
-        nb_iargs =3D def->nb_iargs;
-        init_arguments(&ctx, op, nb_oargs + nb_iargs);
-        copy_propagate(&ctx, op, nb_oargs, nb_iargs);
+        init_arguments(&ctx, op, def->nb_oargs + def->nb_iargs);
+        copy_propagate(&ctx, op, def->nb_oargs, def->nb_iargs);
=20
         /* For commutative operations make constant second argument */
         switch (opc) {
@@ -1063,7 +1060,7 @@ void tcg_optimize(TCGContext *s)
=20
         CASE_OP_32_64(qemu_ld):
             {
-                MemOpIdx oi =3D op->args[nb_oargs + nb_iargs];
+                MemOpIdx oi =3D op->args[def->nb_oargs + def->nb_iargs];
                 MemOp mop =3D get_memop(oi);
                 if (!(mop & MO_SIGN)) {
                     z_mask =3D (2ULL << ((8 << (mop & MO_SIZE)) - 1)) - 1;
@@ -1122,12 +1119,10 @@ void tcg_optimize(TCGContext *s)
         }
=20
         if (partmask =3D=3D 0) {
-            tcg_debug_assert(nb_oargs =3D=3D 1);
             tcg_opt_gen_movi(&ctx, op, op->args[0], 0);
             continue;
         }
         if (affected =3D=3D 0) {
-            tcg_debug_assert(nb_oargs =3D=3D 1);
             tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[1]);
             continue;
         }
@@ -1202,7 +1197,6 @@ void tcg_optimize(TCGContext *s)
             } else if (args_are_copies(op->args[1], op->args[2])) {
                 op->opc =3D INDEX_op_dup_vec;
                 TCGOP_VECE(op) =3D MO_32;
-                nb_iargs =3D 1;
             }
             break;
=20
@@ -1371,7 +1365,6 @@ void tcg_optimize(TCGContext *s)
                 op->opc =3D opc =3D (opc =3D=3D INDEX_op_movcond_i32
                                  ? INDEX_op_setcond_i32
                                  : INDEX_op_setcond_i64);
-                nb_iargs =3D 2;
             }
             break;
=20
@@ -1579,6 +1572,7 @@ void tcg_optimize(TCGContext *s)
         if (def->flags & TCG_OPF_BB_END) {
             memset(&ctx.temps_used, 0, sizeof(ctx.temps_used));
         } else {
+            int nb_oargs =3D def->nb_oargs;
             for (i =3D 0; i < nb_oargs; i++) {
                 reset_temp(op->args[i]);
                 /* Save the corresponding known-zero bits mask for the
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635390556; cv=none;
	d=zohomail.com; s=zohoarc;
	b=jvsp1Q3U0XOyRykoU4CToJ3NTbZh8zthlLRQlLRyk2q/P7wI5lUKR2sCAmc/+zcaxHh/w8RZSU7Xizrci3Lijcm5TuIrcAuR6L7kPh/Hn07AByBUw8A+GaOGcWtPRDsSGpwK5Ry3TY9uacByI1GenxaUSh6G60Qh3hzQm62VGfg=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635390556;
 h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=zc1IgJRz5A0yD9nF3ZiBVbKqRZed+SZjiAB2N3QmjLE=;
	b=Hj99JOFbZisCllwlOCPukpJWc2FxdRNX4y7dGO45egdl33WJE8n/X3OSVi0JyV5LoiXmYJKx7XRKPYKnWPi9rvSkOdUMpLt9jq5ayTRZotLsut7+Vy5JtI2c34W8aIuDphvaNF44f67DKnlYFX78KsfV1k+lrwlgiJn/GWjplms=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635390556140351.1148930722029;
 Wed, 27 Oct 2021 20:09:16 -0700 (PDT)
Received: from localhost ([::1]:50340 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvn0-0005xf-US
	for importer@patchew.org; Wed, 27 Oct 2021 23:09:14 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:58924)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMQ-0004iY-Jz
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:47 -0400
Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]:53912)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMN-0003NV-Vb
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:46 -0400
Received: by mail-pj1-x102c.google.com with SMTP id v10so2976209pjr.3
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:43 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.42
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:42 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=zc1IgJRz5A0yD9nF3ZiBVbKqRZed+SZjiAB2N3QmjLE=;
 b=WZMB7bw26S8/sgADRNvTZfwnXqDof/EVQ+zUFDnPJFyRLrYoEgxSRtQFPUFi7LGUM6
 gZGbNlP+qpiIN/Mbot2h26k0jl25OoiEKzY54i7Gq0HqYPbK+ydvQp6+tBvu5pggoZch
 l3ZvJfMebZ6ghxLYmJvBvjP9ENi8z4F2lIOkxT+X+sFHzDTrRcHAV48PoIL158qeeBFc
 2neQVNdke4eWQ+dyoa5IurcTh8cloXPYe1sMsuvtAsm1JL9WfB9DHX+xgPAXUp/o8JWk
 SFj7Gr1hf3WPSBt6Yt09OogvRPl2JEeXQKisit9uUrSrCBhghKvsuYc9rETDGjN1h2F2
 mBiw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=zc1IgJRz5A0yD9nF3ZiBVbKqRZed+SZjiAB2N3QmjLE=;
 b=o4YO6z7wla/Po4fpDpPDFaDnqEwI6QXp+cHnHxS1Bjte+72Oz+MtfyG4nL0ikMYrx4
 /661xaqtw225PnTUD/3Dv7sA88ZWOTtiIiGuh2EV7LnLhB9wuj9VZvM3i/nA+UErmgYF
 BEWGPFYjBCTsnnLGKTky8KtXAzGzbDnlmJvi/CIRZFIXgOw5g5qDQHdPZGH8HSLVNuU9
 yh/QxcGgdb/2ZMgXCN/3txZoNBQJSauTKqEYScSy4W2tzshZfni9h6wb8pgZJiMciBl2
 ryOmNad2Yxy0MRp21cwilDdpF+hcNQyjXbMxEO6i4Cy//TWW6qbDjxQNN8SDFuj4CdC1
 TIHg==
X-Gm-Message-State: AOAM532od1hrOaqtXH7ilwzA8mqW8we3Vkdfl7IWStifQ8WS8BqUAsAD
 YJ5P0LZNvt0EcXYKPf2w7piF7v9kaeJxxg==
X-Google-Smtp-Source: 
 ABdhPJyoJnJ5dI8wKLzV/B30xL517rgs79rNAP1wVJCL+2NkDYHeapvCZBe4X2yo7UdrsSndZLbL+A==
X-Received: by 2002:a17:902:ee8b:b0:141:5547:7e97 with SMTP id
 a11-20020a170902ee8b00b0014155477e97mr1420774pld.84.1635388902609;
 Wed, 27 Oct 2021 19:41:42 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 15/56] tcg/optimize: Change fail return for
 do_constant_folding_cond*
Date: Wed, 27 Oct 2021 19:40:50 -0700
Message-Id: <20211028024131.1492790-16-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::102c;
 envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102c.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635390558265100001

Return -1 instead of 2 for failure, so that we can
use comparisons against 0 for all cases.

Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 145 +++++++++++++++++++++++++------------------------
 1 file changed, 74 insertions(+), 71 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 77cdffaaef..19c01687b4 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -502,10 +502,12 @@ static bool do_constant_folding_cond_eq(TCGCond c)
     }
 }
=20
-/* Return 2 if the condition can't be simplified, and the result
-   of the condition (0 or 1) if it can */
-static TCGArg do_constant_folding_cond(TCGOpcode op, TCGArg x,
-                                       TCGArg y, TCGCond c)
+/*
+ * Return -1 if the condition can't be simplified,
+ * and the result of the condition (0 or 1) if it can.
+ */
+static int do_constant_folding_cond(TCGOpcode op, TCGArg x,
+                                    TCGArg y, TCGCond c)
 {
     uint64_t xv =3D arg_info(x)->val;
     uint64_t yv =3D arg_info(y)->val;
@@ -527,15 +529,17 @@ static TCGArg do_constant_folding_cond(TCGOpcode op, =
TCGArg x,
         case TCG_COND_GEU:
             return 1;
         default:
-            return 2;
+            return -1;
         }
     }
-    return 2;
+    return -1;
 }
=20
-/* Return 2 if the condition can't be simplified, and the result
-   of the condition (0 or 1) if it can */
-static TCGArg do_constant_folding_cond2(TCGArg *p1, TCGArg *p2, TCGCond c)
+/*
+ * Return -1 if the condition can't be simplified,
+ * and the result of the condition (0 or 1) if it can.
+ */
+static int do_constant_folding_cond2(TCGArg *p1, TCGArg *p2, TCGCond c)
 {
     TCGArg al =3D p1[0], ah =3D p1[1];
     TCGArg bl =3D p2[0], bh =3D p2[1];
@@ -565,7 +569,7 @@ static TCGArg do_constant_folding_cond2(TCGArg *p1, TCG=
Arg *p2, TCGCond c)
     if (args_are_copies(al, bl) && args_are_copies(ah, bh)) {
         return do_constant_folding_cond_eq(c);
     }
-    return 2;
+    return -1;
 }
=20
 static bool swap_commutative(TCGArg dest, TCGArg *p1, TCGArg *p2)
@@ -1321,22 +1325,21 @@ void tcg_optimize(TCGContext *s)
             break;
=20
         CASE_OP_32_64(setcond):
-            tmp =3D do_constant_folding_cond(opc, op->args[1],
-                                           op->args[2], op->args[3]);
-            if (tmp !=3D 2) {
-                tcg_opt_gen_movi(&ctx, op, op->args[0], tmp);
+            i =3D do_constant_folding_cond(opc, op->args[1],
+                                         op->args[2], op->args[3]);
+            if (i >=3D 0) {
+                tcg_opt_gen_movi(&ctx, op, op->args[0], i);
                 continue;
             }
             break;
=20
         CASE_OP_32_64(brcond):
-            tmp =3D do_constant_folding_cond(opc, op->args[0],
-                                           op->args[1], op->args[2]);
-            switch (tmp) {
-            case 0:
+            i =3D do_constant_folding_cond(opc, op->args[0],
+                                         op->args[1], op->args[2]);
+            if (i =3D=3D 0) {
                 tcg_op_remove(s, op);
                 continue;
-            case 1:
+            } else if (i > 0) {
                 memset(&ctx.temps_used, 0, sizeof(ctx.temps_used));
                 op->opc =3D opc =3D INDEX_op_br;
                 op->args[0] =3D op->args[3];
@@ -1345,10 +1348,10 @@ void tcg_optimize(TCGContext *s)
             break;
=20
         CASE_OP_32_64(movcond):
-            tmp =3D do_constant_folding_cond(opc, op->args[1],
-                                           op->args[2], op->args[5]);
-            if (tmp !=3D 2) {
-                tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[4-tmp]);
+            i =3D do_constant_folding_cond(opc, op->args[1],
+                                         op->args[2], op->args[5]);
+            if (i >=3D 0) {
+                tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[4 - i]);
                 continue;
             }
             if (arg_is_const(op->args[3]) && arg_is_const(op->args[4])) {
@@ -1412,14 +1415,14 @@ void tcg_optimize(TCGContext *s)
             break;
=20
         case INDEX_op_brcond2_i32:
-            tmp =3D do_constant_folding_cond2(&op->args[0], &op->args[2],
-                                            op->args[4]);
-            if (tmp =3D=3D 0) {
+            i =3D do_constant_folding_cond2(&op->args[0], &op->args[2],
+                                          op->args[4]);
+            if (i =3D=3D 0) {
             do_brcond_false:
                 tcg_op_remove(s, op);
                 continue;
             }
-            if (tmp =3D=3D 1) {
+            if (i > 0) {
             do_brcond_true:
                 op->opc =3D opc =3D INDEX_op_br;
                 op->args[0] =3D op->args[5];
@@ -1443,20 +1446,20 @@ void tcg_optimize(TCGContext *s)
             if (op->args[4] =3D=3D TCG_COND_EQ) {
                 /* Simplify EQ comparisons where one of the pairs
                    can be simplified.  */
-                tmp =3D do_constant_folding_cond(INDEX_op_brcond_i32,
-                                               op->args[0], op->args[2],
-                                               TCG_COND_EQ);
-                if (tmp =3D=3D 0) {
+                i =3D do_constant_folding_cond(INDEX_op_brcond_i32,
+                                             op->args[0], op->args[2],
+                                             TCG_COND_EQ);
+                if (i =3D=3D 0) {
                     goto do_brcond_false;
-                } else if (tmp =3D=3D 1) {
+                } else if (i > 0) {
                     goto do_brcond_high;
                 }
-                tmp =3D do_constant_folding_cond(INDEX_op_brcond_i32,
-                                               op->args[1], op->args[3],
-                                               TCG_COND_EQ);
-                if (tmp =3D=3D 0) {
+                i =3D do_constant_folding_cond(INDEX_op_brcond_i32,
+                                             op->args[1], op->args[3],
+                                             TCG_COND_EQ);
+                if (i =3D=3D 0) {
                     goto do_brcond_false;
-                } else if (tmp !=3D 1) {
+                } else if (i < 0) {
                     break;
                 }
             do_brcond_low:
@@ -1470,31 +1473,31 @@ void tcg_optimize(TCGContext *s)
             if (op->args[4] =3D=3D TCG_COND_NE) {
                 /* Simplify NE comparisons where one of the pairs
                    can be simplified.  */
-                tmp =3D do_constant_folding_cond(INDEX_op_brcond_i32,
-                                               op->args[0], op->args[2],
-                                               TCG_COND_NE);
-                if (tmp =3D=3D 0) {
+                i =3D do_constant_folding_cond(INDEX_op_brcond_i32,
+                                             op->args[0], op->args[2],
+                                             TCG_COND_NE);
+                if (i =3D=3D 0) {
                     goto do_brcond_high;
-                } else if (tmp =3D=3D 1) {
+                } else if (i > 0) {
                     goto do_brcond_true;
                 }
-                tmp =3D do_constant_folding_cond(INDEX_op_brcond_i32,
-                                               op->args[1], op->args[3],
-                                               TCG_COND_NE);
-                if (tmp =3D=3D 0) {
+                i =3D do_constant_folding_cond(INDEX_op_brcond_i32,
+                                             op->args[1], op->args[3],
+                                             TCG_COND_NE);
+                if (i =3D=3D 0) {
                     goto do_brcond_low;
-                } else if (tmp =3D=3D 1) {
+                } else if (i > 0) {
                     goto do_brcond_true;
                 }
             }
             break;
=20
         case INDEX_op_setcond2_i32:
-            tmp =3D do_constant_folding_cond2(&op->args[1], &op->args[3],
-                                            op->args[5]);
-            if (tmp !=3D 2) {
+            i =3D do_constant_folding_cond2(&op->args[1], &op->args[3],
+                                          op->args[5]);
+            if (i >=3D 0) {
             do_setcond_const:
-                tcg_opt_gen_movi(&ctx, op, op->args[0], tmp);
+                tcg_opt_gen_movi(&ctx, op, op->args[0], i);
                 continue;
             }
             if ((op->args[5] =3D=3D TCG_COND_LT || op->args[5] =3D=3D TCG_=
COND_GE)
@@ -1516,20 +1519,20 @@ void tcg_optimize(TCGContext *s)
             if (op->args[5] =3D=3D TCG_COND_EQ) {
                 /* Simplify EQ comparisons where one of the pairs
                    can be simplified.  */
-                tmp =3D do_constant_folding_cond(INDEX_op_setcond_i32,
-                                               op->args[1], op->args[3],
-                                               TCG_COND_EQ);
-                if (tmp =3D=3D 0) {
+                i =3D do_constant_folding_cond(INDEX_op_setcond_i32,
+                                             op->args[1], op->args[3],
+                                             TCG_COND_EQ);
+                if (i =3D=3D 0) {
                     goto do_setcond_const;
-                } else if (tmp =3D=3D 1) {
+                } else if (i > 0) {
                     goto do_setcond_high;
                 }
-                tmp =3D do_constant_folding_cond(INDEX_op_setcond_i32,
-                                               op->args[2], op->args[4],
-                                               TCG_COND_EQ);
-                if (tmp =3D=3D 0) {
+                i =3D do_constant_folding_cond(INDEX_op_setcond_i32,
+                                             op->args[2], op->args[4],
+                                             TCG_COND_EQ);
+                if (i =3D=3D 0) {
                     goto do_setcond_high;
-                } else if (tmp !=3D 1) {
+                } else if (i < 0) {
                     break;
                 }
             do_setcond_low:
@@ -1543,20 +1546,20 @@ void tcg_optimize(TCGContext *s)
             if (op->args[5] =3D=3D TCG_COND_NE) {
                 /* Simplify NE comparisons where one of the pairs
                    can be simplified.  */
-                tmp =3D do_constant_folding_cond(INDEX_op_setcond_i32,
-                                               op->args[1], op->args[3],
-                                               TCG_COND_NE);
-                if (tmp =3D=3D 0) {
+                i =3D do_constant_folding_cond(INDEX_op_setcond_i32,
+                                             op->args[1], op->args[3],
+                                             TCG_COND_NE);
+                if (i =3D=3D 0) {
                     goto do_setcond_high;
-                } else if (tmp =3D=3D 1) {
+                } else if (i > 0) {
                     goto do_setcond_const;
                 }
-                tmp =3D do_constant_folding_cond(INDEX_op_setcond_i32,
-                                               op->args[2], op->args[4],
-                                               TCG_COND_NE);
-                if (tmp =3D=3D 0) {
+                i =3D do_constant_folding_cond(INDEX_op_setcond_i32,
+                                             op->args[2], op->args[4],
+                                             TCG_COND_NE);
+                if (i =3D=3D 0) {
                     goto do_setcond_low;
-                } else if (tmp =3D=3D 1) {
+                } else if (i > 0) {
                     goto do_setcond_const;
                 }
             }
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=fail;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=fail(p=none dis=none)  header.from=linaro.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635389275822154.34050803818513;
 Wed, 27 Oct 2021 19:47:55 -0700 (PDT)
Received: from localhost ([::1]:54424 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvSM-0003hN-Mi
	for importer@patchew.org; Wed, 27 Oct 2021 22:47:54 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:58916)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMQ-0004hn-7q
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:46 -0400
Received: from mail-pf1-x42e.google.com ([2607:f8b0:4864:20::42e]:37377)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMO-0003Nd-K2
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:45 -0400
Received: by mail-pf1-x42e.google.com with SMTP id v193so4570720pfc.4
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:44 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.42
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:43 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=/my2BfUMduF0YwUj5N5teVZc/oRLeZHGt5Sceph4cvk=;
 b=vksTni8rYO7pb+k+XCbnATHFfIq0coJkuxt2XsfamAJgFT+xKoIukPBQEjWJ033VsZ
 fF/yP6PsIw6AGsAEGi/FZ2xZZD50hFUI+jjaf7UTUn2biRo1R+94dA87IGkVgllSNuk2
 d9vYp+n6eYbAUghH95W0Zg/Nmyk2J1Efo3KYeX32DnqSb49SUzIA8mOMMeJKB8+RdHyx
 XdisTEsBPEwzrnz7aPcICHr9o2MZ+YAIocNYHy/23K4hgEotyM3Xe66yqh03gUvo1dhn
 3V1mjcJV32RLD2JyDwvHINs2N3DtsPL8hWHZ4jOHbbNoijLo6LYIfKFVNmOBNFJjHgVc
 Sqjg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=/my2BfUMduF0YwUj5N5teVZc/oRLeZHGt5Sceph4cvk=;
 b=2P4VMFDZFekQ2Jfq6nwl6YqrctI7x5JehBEpXQW/Xgh0guEzZQ5oIXslgiQOm9UQKC
 WmHIremkNwoLeNCJZgh3KHucCFei7xindNgGZ7YF/L1qKAkyyaa6DNq6nRaSfXXdTTFi
 ZTMktpmp/ar9HBBF3RT8uJClBe+9b0L5RilrYpP7WGWx036lszIRMFjDV7YUUfRuF8Ak
 scyVTejVL4AxnkQsZYibvS5s+abEEJYnzM/Va9TuUm9vzOE65XzrAG6LiV7eFtJ4iVmY
 nP/3V1sI82UpzsnTeHVxTdcdVn1kg8eOJr+eEwIZ7EiJRY5SLxb+cV8cDfdG7Zj9N0D3
 ZFFQ==
X-Gm-Message-State: AOAM5336wx4NG0UTjBiVjMtYfPu21JMGMTHH7D4RF02kvhDgtnfrMq6k
 5UElAylPKsJvgnEM0mHF7TG1cOhT3Bn69g==
X-Google-Smtp-Source: 
 ABdhPJynv0OuL1gG0EZsQApLYVtegwbI4fDTPu9FPSa7Bv/RpsB9taEfBLgx2KkXbYJi0aI4CXf6cA==
X-Received: by 2002:a63:b402:: with SMTP id s2mr1189329pgf.324.1635388903368;
 Wed, 27 Oct 2021 19:41:43 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 16/56] tcg/optimize: Return true from tcg_opt_gen_{mov,movi}
Date: Wed, 27 Oct 2021 19:40:51 -0700
Message-Id: <20211028024131.1492790-17-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::42e;
 envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42e.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Alex=20Benn=C3=A9e?= <alex.bennee@linaro.org>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: fail (Header signature does not verify)
X-ZM-MESSAGEID: 1635389276284100001

This will allow callers to tail call to these functions
and return true indicating processing complete.

Reviewed-by: Alex Benn=C3=A9e <alex.bennee@linaro.org>
Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 19c01687b4..066e635f73 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -180,7 +180,7 @@ static bool args_are_copies(TCGArg arg1, TCGArg arg2)
     return ts_are_copies(arg_temp(arg1), arg_temp(arg2));
 }
=20
-static void tcg_opt_gen_mov(OptContext *ctx, TCGOp *op, TCGArg dst, TCGArg=
 src)
+static bool tcg_opt_gen_mov(OptContext *ctx, TCGOp *op, TCGArg dst, TCGArg=
 src)
 {
     TCGTemp *dst_ts =3D arg_temp(dst);
     TCGTemp *src_ts =3D arg_temp(src);
@@ -192,7 +192,7 @@ static void tcg_opt_gen_mov(OptContext *ctx, TCGOp *op,=
 TCGArg dst, TCGArg src)
=20
     if (ts_are_copies(dst_ts, src_ts)) {
         tcg_op_remove(ctx->tcg, op);
-        return;
+        return true;
     }
=20
     reset_ts(dst_ts);
@@ -228,9 +228,10 @@ static void tcg_opt_gen_mov(OptContext *ctx, TCGOp *op=
, TCGArg dst, TCGArg src)
         di->is_const =3D si->is_const;
         di->val =3D si->val;
     }
+    return true;
 }
=20
-static void tcg_opt_gen_movi(OptContext *ctx, TCGOp *op,
+static bool tcg_opt_gen_movi(OptContext *ctx, TCGOp *op,
                              TCGArg dst, uint64_t val)
 {
     const TCGOpDef *def =3D &tcg_op_defs[op->opc];
@@ -248,7 +249,7 @@ static void tcg_opt_gen_movi(OptContext *ctx, TCGOp *op,
     /* Convert movi to mov with constant temp. */
     tv =3D tcg_constant_internal(type, val);
     init_ts_info(ctx, tv);
-    tcg_opt_gen_mov(ctx, op, dst, temp_arg(tv));
+    return tcg_opt_gen_mov(ctx, op, dst, temp_arg(tv));
 }
=20
 static uint64_t do_constant_folding_2(TCGOpcode op, uint64_t x, uint64_t y)
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=fail;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=fail(p=none dis=none)  header.from=linaro.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635390774547598.0853572951347;
 Wed, 27 Oct 2021 20:12:54 -0700 (PDT)
Received: from localhost ([::1]:58864 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvqX-0003IM-HD
	for importer@patchew.org; Wed, 27 Oct 2021 23:12:53 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:58938)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMR-0004iu-5l
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:47 -0400
Received: from mail-pl1-x632.google.com ([2607:f8b0:4864:20::632]:45714)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMP-0003O0-7Q
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:46 -0400
Received: by mail-pl1-x632.google.com with SMTP id f8so3359740plo.12
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:44 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.43
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:43 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=sb5338wSOtydZnMtxZpM23PXTg/PYHbWm33mLw5BH3A=;
 b=rXEQ4MBDQ19Kcu0ZFpeSNNT4gR//tSRHpCkjoHVjc1qR26IMQrFQg6nUeiGqZXxLMR
 p+ZozdsvDlQT1H3QJAcvqD5rcV6g9UqnnR4YhjEZ1D5QgPBikTQSpCuQ8ZxPvUPOYSi8
 /SdewU5R9jivZP1pZ4ftU2i014xMmV1ndKsdw5limDC4H+ZHzjh0FyJSclqcA6GNAtKH
 umhVbNeayjwS5HV6ZmPF66cSSDt44UGOz4jAh8h7HnNv8ACem4ZxjK/fxVZHt3273dhD
 SPV6OePlY9q2gybaRpjUTjJRP9jz+ioYDzOM/nwSOAHcKduDFrN3gccwF/3Y2j0amzbe
 eCjA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=sb5338wSOtydZnMtxZpM23PXTg/PYHbWm33mLw5BH3A=;
 b=usPUjBWIEcWiGo4S7Xfv8rDgnfXj1TGJZCwzPU1fghiMn4MXNOpxajj+u5nY54ZbXs
 uTPl4BOi5h0+kssf1tGdWfnBLckjCqBxm5Kp3m1Fg0sAS4ISArUkQGXXWgRrFobC/Tl/
 pak4kU05NQskorp9eAzrTeWMYe14oc0wsJSmIM57z0sr1x4VvdbBV6u0BPberfJJPf/D
 nzt7ue00Ao+OvE1GUz+KJjtdsrOhPEafeavshVO0MLXAy3vv2YsxjrQ41jWNAxxLeVhm
 vwcu9txjMV8F+x8tkDUTBYIc4PKKsddAdD8YKyth6mUqNuP+pjshRh2BCcjBFV03cLct
 WA+Q==
X-Gm-Message-State: AOAM531z7qF+VNgIMfPzZZ268sMVBNSILOCpxIRiSd6S8rX4EFPtofhm
 3VY54jWFRep2EmyALLg8CJaCJ7J+6hOZKw==
X-Google-Smtp-Source: 
 ABdhPJxC6IWF+HFwYyHRQgLf4ldT2TMM/buq35fXAy8GQrkREbbmQnMKMXqWAyaW9p4w3EN9Ap8t4w==
X-Received: by 2002:a17:90b:1952:: with SMTP id
 nk18mr2494368pjb.135.1635388903969;
 Wed, 27 Oct 2021 19:41:43 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 17/56] tcg/optimize: Split out finish_folding
Date: Wed, 27 Oct 2021 19:40:52 -0700
Message-Id: <20211028024131.1492790-18-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::632;
 envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x632.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Alex=20Benn=C3=A9e?= <alex.bennee@linaro.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: fail (Header signature does not verify)
X-ZM-MESSAGEID: 1635390775333100001

Copy z_mask into OptContext, for writeback to the
first output within the new function.

Reviewed-by: Alex Benn=C3=A9e <alex.bennee@linaro.org>
Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 49 +++++++++++++++++++++++++++++++++----------------
 1 file changed, 33 insertions(+), 16 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 066e635f73..368457f4a2 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -48,6 +48,9 @@ typedef struct OptContext {
     TCGContext *tcg;
     TCGOp *prev_mb;
     TCGTempSet temps_used;
+
+    /* In flight values from optimization. */
+    uint64_t z_mask;
 } OptContext;
=20
 static inline TempOptInfo *ts_info(TCGTemp *ts)
@@ -629,6 +632,34 @@ static void copy_propagate(OptContext *ctx, TCGOp *op,
     }
 }
=20
+static void finish_folding(OptContext *ctx, TCGOp *op)
+{
+    const TCGOpDef *def =3D &tcg_op_defs[op->opc];
+    int i, nb_oargs;
+
+    /*
+     * For an opcode that ends a BB, reset all temp data.
+     * We do no cross-BB optimization.
+     */
+    if (def->flags & TCG_OPF_BB_END) {
+        memset(&ctx->temps_used, 0, sizeof(ctx->temps_used));
+        ctx->prev_mb =3D NULL;
+        return;
+    }
+
+    nb_oargs =3D def->nb_oargs;
+    for (i =3D 0; i < nb_oargs; i++) {
+        reset_temp(op->args[i]);
+        /*
+         * Save the corresponding known-zero bits mask for the
+         * first output argument (only one supported so far).
+         */
+        if (i =3D=3D 0) {
+            arg_info(op->args[i])->z_mask =3D ctx->z_mask;
+        }
+    }
+}
+
 static bool fold_call(OptContext *ctx, TCGOp *op)
 {
     TCGContext *s =3D ctx->tcg;
@@ -1122,6 +1153,7 @@ void tcg_optimize(TCGContext *s)
             partmask &=3D 0xffffffffu;
             affected &=3D 0xffffffffu;
         }
+        ctx.z_mask =3D z_mask;
=20
         if (partmask =3D=3D 0) {
             tcg_opt_gen_movi(&ctx, op, op->args[0], 0);
@@ -1570,22 +1602,7 @@ void tcg_optimize(TCGContext *s)
             break;
         }
=20
-        /* Some of the folding above can change opc. */
-        opc =3D op->opc;
-        def =3D &tcg_op_defs[opc];
-        if (def->flags & TCG_OPF_BB_END) {
-            memset(&ctx.temps_used, 0, sizeof(ctx.temps_used));
-        } else {
-            int nb_oargs =3D def->nb_oargs;
-            for (i =3D 0; i < nb_oargs; i++) {
-                reset_temp(op->args[i]);
-                /* Save the corresponding known-zero bits mask for the
-                   first output argument (only one supported so far). */
-                if (i =3D=3D 0) {
-                    arg_info(op->args[i])->z_mask =3D z_mask;
-                }
-            }
-        }
+        finish_folding(&ctx, op);
=20
         /* Eliminate duplicate and redundant fence instructions.  */
         if (ctx.prev_mb) {
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=fail;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=fail(p=none dis=none)  header.from=linaro.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635389427954134.32940251951572;
 Wed, 27 Oct 2021 19:50:27 -0700 (PDT)
Received: from localhost ([::1]:32956 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvUo-0008KS-S9
	for importer@patchew.org; Wed, 27 Oct 2021 22:50:26 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:58948)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMR-0004lN-WD
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:48 -0400
Received: from mail-pg1-x52b.google.com ([2607:f8b0:4864:20::52b]:37627)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMP-0003Oi-S4
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:47 -0400
Received: by mail-pg1-x52b.google.com with SMTP id s136so4936316pgs.4
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:45 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.44
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:44 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=aQUcMu1Ri+jkcKMkTmUqdfPvjg+0V++WEX2k8DhqwDc=;
 b=v6XN2R0ZyRMTid1aMa67jPw2F6MlBjgshi2e/M2SBQVO6lgmNjk/bnlsP0t4uKpJcl
 kHq24UNX3QaQI8fvSV/waxaW171U5YlSYXMZ12GWrRe5scrbEvXvMHcEIy4DbUikK/uX
 HJc79MYOwZSmc1TJ1QWMBzUcR7kCOlp7Bssg69ZbB5rw/ML8OGGrgPEruimnCp68r4zO
 Em4lulIl/d/1HA5/PHMQI2vG2LlQ5cabqspEHmM52SvhAqYllSpSZUz2IXzWbZ/SgKzm
 0ghWiwko/r5ZF+7IzWOw09Ox/IUFxwhXuCeyiBSIFSzeo38UJhjI1uvVbBqyntFrOs22
 agjw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=aQUcMu1Ri+jkcKMkTmUqdfPvjg+0V++WEX2k8DhqwDc=;
 b=CETepA+mRxOAXKc2zO/dCdXrFGotOoVQh01V97wDswmEhGtkV8G+gvv75ooPWO7j98
 YrKgC2sOLFPOdWEHJm5WfA/rtGO020DqoLqmnYQPTWm5jWbuHFNAA35fV1V2klEo2qA4
 UZzXQ+Eu48PD0NrU0e7aHMuGzV0x98HE3p9tUX13PfbzYBGo0Q8XJz8XLDYdc004UcMf
 uMl+Er4wae92XeEVF8Tpsizm064IA3L5gGbtBEwqb60CNNQXbm9Couj4tPeaXSCuWtpV
 PC4K8PuXlf/20cE4GvOzrFP4nbgkK5P6LTtXEt/NKsUm9MBwwNEMYn+Fyz1/dAJ0ZgLD
 dMQg==
X-Gm-Message-State: AOAM533LBZHah+iDVJUqxYuSUoZ5bXVugzarqciE14dZiaZ73SzXUoHb
 XO0KNw9bzoCSll3Lfv0eXH7xVsxMPSE7yA==
X-Google-Smtp-Source: 
 ABdhPJwm6l0MPg3DNnK27gl2QrnFbbZtZw56GUNRUwI9rVQniXbG0Ad3DxVc5gZk9jwa8rm78LHczQ==
X-Received: by 2002:a63:6f44:: with SMTP id k65mr1196108pgc.440.1635388904632;
 Wed, 27 Oct 2021 19:41:44 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 18/56] tcg/optimize: Use a boolean to avoid a mass of continues
Date: Wed, 27 Oct 2021 19:40:53 -0700
Message-Id: <20211028024131.1492790-19-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::52b;
 envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52b.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Alex=20Benn=C3=A9e?= <alex.bennee@linaro.org>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: fail (Header signature does not verify)
X-ZM-MESSAGEID: 1635389429120100001

Reviewed-by: Alex Benn=C3=A9e <alex.bennee@linaro.org>
Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 368457f4a2..699476e2f1 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -713,6 +713,7 @@ void tcg_optimize(TCGContext *s)
         uint64_t z_mask, partmask, affected, tmp;
         TCGOpcode opc =3D op->opc;
         const TCGOpDef *def;
+        bool done =3D false;
=20
         /* Calls are special. */
         if (opc =3D=3D INDEX_op_call) {
@@ -1212,8 +1213,8 @@ void tcg_optimize(TCGContext *s)
            allocator where needed and possible.  Also detect copies. */
         switch (opc) {
         CASE_OP_32_64_VEC(mov):
-            tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[1]);
-            continue;
+            done =3D tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[1]);
+            break;
=20
         case INDEX_op_dup_vec:
             if (arg_is_const(op->args[1])) {
@@ -1602,7 +1603,9 @@ void tcg_optimize(TCGContext *s)
             break;
         }
=20
-        finish_folding(&ctx, op);
+        if (!done) {
+            finish_folding(&ctx, op);
+        }
=20
         /* Eliminate duplicate and redundant fence instructions.  */
         if (ctx.prev_mb) {
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635390866; cv=none;
	d=zohomail.com; s=zohoarc;
	b=l4/j4xICHhsh8njiVDDhLib6TMReg3zBiJUM0E+CmDCdZ2AumI+JskLcY1cav8QWFSy093Y+dkAo2/H0Af4QHgR3gq4VoH8HWWho3h6GTa1w6Yn3w2hCfKTA2Msg7LaOHabike0MQu5R1Alq3BG00cZlz5mcjT5NQfNbeTu0S8Q=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635390866;
 h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=nnJy1DPqTKH9tszR9agXW3yGGHUuzxkGQ+Lpc0L3P3o=;
	b=UNexGISbSelm2wVX7ElrmmT9VYZBhCFbBG5BdFb/9xKJuSr+ipuDtT+0F6v0lSVxU4L6G9qmEEoM/FyqdEgdXrJSVaCwXFEt8hVFrpkBtGzX9MMjapD130xYKW+Ic4FVeqcCd1TzgPc4OypR8tiqTA470RhGriWF6Omd/deEllc=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 163539086630030.916960404313045;
 Wed, 27 Oct 2021 20:14:26 -0700 (PDT)
Received: from localhost ([::1]:39176 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvs1-0000UU-1d
	for importer@patchew.org; Wed, 27 Oct 2021 23:14:25 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:58982)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMT-0004mf-Rm
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:51 -0400
Received: from mail-pg1-x52c.google.com ([2607:f8b0:4864:20::52c]:46742)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMQ-0003P6-Gk
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:49 -0400
Received: by mail-pg1-x52c.google.com with SMTP id m21so4887620pgu.13
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:46 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.44
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:44 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=nnJy1DPqTKH9tszR9agXW3yGGHUuzxkGQ+Lpc0L3P3o=;
 b=Ymy5Nw6jkrsatq+ege3iJlxwRNEPr7WsfGC5WbyzEARpqOl1wPht9iMxDozCelq6Au
 ykt4wXG1y322yLGbxgrInxZQGfmCqRdNGooQZtgPMYB7Eb09a7ncClLtQSGh18oaHzOR
 Sxt3p1P3DqTGw1K1Cjwjz7tMP76c8JERHB9QC5QvdlnN75D6freGF3nhYW/ecr7g3txQ
 VBr57pVu1HSiDv2ZIVARsPsblhaHo38z4Ps5DPEdv4+eeCpRra3oW3GQgk+MKjTeupf6
 VuIxuepG6SfgSKpm7VaR0gwqKX+w0td8O10tvzKpxSjNpl03tMjlAu49952FjbqD6+KQ
 JjZw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=nnJy1DPqTKH9tszR9agXW3yGGHUuzxkGQ+Lpc0L3P3o=;
 b=Vq+Z1Kj/QPzZFHIDS0eduKmHxQeBUBGMuPtVj4uJA7sIz2Zw5Gmn9wts/cYEJ/Lgi9
 8rQfGJ9sMdHehB++HHftnYUNhxf4IpNvWLDguKN6RmBkDr/87GcQE9T1zhKn6OR1ODPZ
 sSq8KREwNeXQCJzhSHrf1vj5fWMj6HO9jsnsPY4xoMky5ubQieEJyTo70Lu0uEbCOtpk
 ztFBpQhepseIkV5D1Arlg7r1Lse6JH5XOvmFwzfLhiCkoTrg41oh69PtsKDvpEX3fkFv
 p7GLoJPtcb1fYLjg7iREQnW3zPySiqwAUUBgCSfUQqKhfvZxrmKjBAX7ydGcWXuTwF2j
 svpQ==
X-Gm-Message-State: AOAM5338EEUI2nJ6LD5i/4KNuoXPDDS6GgEEjRnf8Y7h1CN5fLOqYqoH
 ldFtjYh5mwQ2CNz7M7QELCd3W8iiilcb6Q==
X-Google-Smtp-Source: 
 ABdhPJyoRrJZJqioL0JAvr6iufjMXmyuifs+nlGDAIlkHYz4MSTUC0OvXpwrfHH10CisJCR8ZkPGIg==
X-Received: by 2002:a63:7010:: with SMTP id l16mr1221333pgc.32.1635388905212;
 Wed, 27 Oct 2021 19:41:45 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 19/56] tcg/optimize: Split out fold_mb, fold_qemu_{ld,st}
Date: Wed, 27 Oct 2021 19:40:54 -0700
Message-Id: <20211028024131.1492790-20-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::52c;
 envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52c.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635390868113100001

This puts the separate mb optimization into the same framework
as the others.  While fold_qemu_{ld,st} are currently identical,
that won't last as more code gets moved.

Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 89 +++++++++++++++++++++++++++++---------------------
 1 file changed, 51 insertions(+), 38 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 699476e2f1..159a5a9ee5 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -692,6 +692,44 @@ static bool fold_call(OptContext *ctx, TCGOp *op)
     return true;
 }
=20
+static bool fold_mb(OptContext *ctx, TCGOp *op)
+{
+    /* Eliminate duplicate and redundant fence instructions.  */
+    if (ctx->prev_mb) {
+        /*
+         * Merge two barriers of the same type into one,
+         * or a weaker barrier into a stronger one,
+         * or two weaker barriers into a stronger one.
+         *   mb X; mb Y =3D> mb X|Y
+         *   mb; strl =3D> mb; st
+         *   ldaq; mb =3D> ld; mb
+         *   ldaq; strl =3D> ld; mb; st
+         * Other combinations are also merged into a strong
+         * barrier.  This is stricter than specified but for
+         * the purposes of TCG is better than not optimizing.
+         */
+        ctx->prev_mb->args[0] |=3D op->args[0];
+        tcg_op_remove(ctx->tcg, op);
+    } else {
+        ctx->prev_mb =3D op;
+    }
+    return true;
+}
+
+static bool fold_qemu_ld(OptContext *ctx, TCGOp *op)
+{
+    /* Opcodes that touch guest memory stop the mb optimization.  */
+    ctx->prev_mb =3D NULL;
+    return false;
+}
+
+static bool fold_qemu_st(OptContext *ctx, TCGOp *op)
+{
+    /* Opcodes that touch guest memory stop the mb optimization.  */
+    ctx->prev_mb =3D NULL;
+    return false;
+}
+
 /* Propagate constants and copies, fold constant expressions. */
 void tcg_optimize(TCGContext *s)
 {
@@ -1599,6 +1637,19 @@ void tcg_optimize(TCGContext *s)
             }
             break;
=20
+        case INDEX_op_mb:
+            done =3D fold_mb(&ctx, op);
+            break;
+        case INDEX_op_qemu_ld_i32:
+        case INDEX_op_qemu_ld_i64:
+            done =3D fold_qemu_ld(&ctx, op);
+            break;
+        case INDEX_op_qemu_st_i32:
+        case INDEX_op_qemu_st8_i32:
+        case INDEX_op_qemu_st_i64:
+            done =3D fold_qemu_st(&ctx, op);
+            break;
+
         default:
             break;
         }
@@ -1606,43 +1657,5 @@ void tcg_optimize(TCGContext *s)
         if (!done) {
             finish_folding(&ctx, op);
         }
-
-        /* Eliminate duplicate and redundant fence instructions.  */
-        if (ctx.prev_mb) {
-            switch (opc) {
-            case INDEX_op_mb:
-                /* Merge two barriers of the same type into one,
-                 * or a weaker barrier into a stronger one,
-                 * or two weaker barriers into a stronger one.
-                 *   mb X; mb Y =3D> mb X|Y
-                 *   mb; strl =3D> mb; st
-                 *   ldaq; mb =3D> ld; mb
-                 *   ldaq; strl =3D> ld; mb; st
-                 * Other combinations are also merged into a strong
-                 * barrier.  This is stricter than specified but for
-                 * the purposes of TCG is better than not optimizing.
-                 */
-                ctx.prev_mb->args[0] |=3D op->args[0];
-                tcg_op_remove(s, op);
-                break;
-
-            default:
-                /* Opcodes that end the block stop the optimization.  */
-                if ((def->flags & TCG_OPF_BB_END) =3D=3D 0) {
-                    break;
-                }
-                /* fallthru */
-            case INDEX_op_qemu_ld_i32:
-            case INDEX_op_qemu_ld_i64:
-            case INDEX_op_qemu_st_i32:
-            case INDEX_op_qemu_st8_i32:
-            case INDEX_op_qemu_st_i64:
-                /* Opcodes that touch guest memory stop the optimization. =
 */
-                ctx.prev_mb =3D NULL;
-                break;
-            }
-        } else if (opc =3D=3D INDEX_op_mb) {
-            ctx.prev_mb =3D op;
-        }
     }
 }
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=fail;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=fail(p=none dis=none)  header.from=linaro.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635389875911864.1496812219103;
 Wed, 27 Oct 2021 19:57:55 -0700 (PDT)
Received: from localhost ([::1]:51584 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvc2-0004U2-MG
	for importer@patchew.org; Wed, 27 Oct 2021 22:57:54 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:58984)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMT-0004mg-S1
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:51 -0400
Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]:34812)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMR-0003PX-4Q
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:49 -0400
Received: by mail-pf1-x433.google.com with SMTP id 127so4599995pfu.1
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:46 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.45
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:45 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=2aCMzzpED1pnAsbhFWuSe8VI84HPP2h5WLYR7vcie50=;
 b=N6KpV/N53TpV2uSzpgOhidVqONFYCPZTuBbarN9inSx1YHHf/elfSeYdFFryFAkuCE
 rl6dxZoxB1ZVTOWcYlBhDkErv3SbT7NoPsfUTFWVjNqYLV9wUIj2CEEKOn3xQdF7W35i
 UQHupNbTohtYjkqT13Yxj+TqKoNsqjBSPUZQ9xK6wYrTiSfD7Kom57kenDjFygg+8+sD
 1AR13oyr3h0SgdhzqtHvQ5QQTu5mqQGUkZzXnZB5FbU0oRI7/JdUBzJ2PMLXAsl5YEyL
 p/feOtvRUsGviZJYdv6ppAmNNlsWE8gCq2tkHY+Oybm3BWDJh/FfkkeHVYEuRhfk6Bnz
 rzBg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=2aCMzzpED1pnAsbhFWuSe8VI84HPP2h5WLYR7vcie50=;
 b=cxwXjydlBmmGuYATzvqZ10cCEIWMxdQq/q8zGK5WZ89mPI8Dywr3NVfzcE9yrxvBI9
 N7WUHnFETMzMykWnuoTtwotubFIs//zjy+krjUKfqihiMKGNGFmlvJdj4uiJWWYF2IjT
 vmlc5oanwuR21hdMKAmZpHFBLKsOWt4Ius8nOMWLx95aE34iMoG9pmwqpii2YOvcpcYy
 +3Xnv7NYOt2F4n1vL0rLaiENFdzAutG9YaDgQSGZix/yiEIuLH36UL9ax7pBPOS75xOx
 D+GlkPNxQChezZt645U0KC0b4o0SA6VHYUcaSTJ+Q1+cOSOLluJh/mt8DJEqas2sMppB
 cZTg==
X-Gm-Message-State: AOAM531SAbdTxM2H94zpqgW8RbJvXkL/U3XT7KWWrP4OyXUXySk8ZY9p
 mOKuyslNU/yClwT269L0lTNuCCy6JoBWmQ==
X-Google-Smtp-Source: 
 ABdhPJyylmR2T6/WUiWVgtKgawqeiCyVW+eJi4DwFzZTxVCnOa425l97w8+rb+nWByUX+n5jTVNI7w==
X-Received: by 2002:a63:6d4a:: with SMTP id i71mr1212106pgc.192.1635388905823;
 Wed, 27 Oct 2021 19:41:45 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 20/56] tcg/optimize: Split out fold_const{1,2}
Date: Wed, 27 Oct 2021 19:40:55 -0700
Message-Id: <20211028024131.1492790-21-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::433;
 envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x433.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Alex=20Benn=C3=A9e?= <alex.bennee@linaro.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: fail (Header signature does not verify)
X-ZM-MESSAGEID: 1635389877259100001

Split out a whole bunch of placeholder functions, which are
currently identical.  That won't last as more code gets moved.

Use CASE_32_64_VEC for some logical operators that previously
missed the addition of vectors.

Reviewed-by: Alex Benn=C3=A9e <alex.bennee@linaro.org>
Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 271 +++++++++++++++++++++++++++++++++++++++----------
 1 file changed, 219 insertions(+), 52 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 159a5a9ee5..5c3f8e8fcd 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -660,6 +660,60 @@ static void finish_folding(OptContext *ctx, TCGOp *op)
     }
 }
=20
+/*
+ * The fold_* functions return true when processing is complete,
+ * usually by folding the operation to a constant or to a copy,
+ * and calling tcg_opt_gen_{mov,movi}.  They may do other things,
+ * like collect information about the value produced, for use in
+ * optimizing a subsequent operation.
+ *
+ * These first fold_* functions are all helpers, used by other
+ * folders for more specific operations.
+ */
+
+static bool fold_const1(OptContext *ctx, TCGOp *op)
+{
+    if (arg_is_const(op->args[1])) {
+        uint64_t t;
+
+        t =3D arg_info(op->args[1])->val;
+        t =3D do_constant_folding(op->opc, t, 0);
+        return tcg_opt_gen_movi(ctx, op, op->args[0], t);
+    }
+    return false;
+}
+
+static bool fold_const2(OptContext *ctx, TCGOp *op)
+{
+    if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) {
+        uint64_t t1 =3D arg_info(op->args[1])->val;
+        uint64_t t2 =3D arg_info(op->args[2])->val;
+
+        t1 =3D do_constant_folding(op->opc, t1, t2);
+        return tcg_opt_gen_movi(ctx, op, op->args[0], t1);
+    }
+    return false;
+}
+
+/*
+ * These outermost fold_<op> functions are sorted alphabetically.
+ */
+
+static bool fold_add(OptContext *ctx, TCGOp *op)
+{
+    return fold_const2(ctx, op);
+}
+
+static bool fold_and(OptContext *ctx, TCGOp *op)
+{
+    return fold_const2(ctx, op);
+}
+
+static bool fold_andc(OptContext *ctx, TCGOp *op)
+{
+    return fold_const2(ctx, op);
+}
+
 static bool fold_call(OptContext *ctx, TCGOp *op)
 {
     TCGContext *s =3D ctx->tcg;
@@ -692,6 +746,31 @@ static bool fold_call(OptContext *ctx, TCGOp *op)
     return true;
 }
=20
+static bool fold_ctpop(OptContext *ctx, TCGOp *op)
+{
+    return fold_const1(ctx, op);
+}
+
+static bool fold_divide(OptContext *ctx, TCGOp *op)
+{
+    return fold_const2(ctx, op);
+}
+
+static bool fold_eqv(OptContext *ctx, TCGOp *op)
+{
+    return fold_const2(ctx, op);
+}
+
+static bool fold_exts(OptContext *ctx, TCGOp *op)
+{
+    return fold_const1(ctx, op);
+}
+
+static bool fold_extu(OptContext *ctx, TCGOp *op)
+{
+    return fold_const1(ctx, op);
+}
+
 static bool fold_mb(OptContext *ctx, TCGOp *op)
 {
     /* Eliminate duplicate and redundant fence instructions.  */
@@ -716,6 +795,46 @@ static bool fold_mb(OptContext *ctx, TCGOp *op)
     return true;
 }
=20
+static bool fold_mul(OptContext *ctx, TCGOp *op)
+{
+    return fold_const2(ctx, op);
+}
+
+static bool fold_mul_highpart(OptContext *ctx, TCGOp *op)
+{
+    return fold_const2(ctx, op);
+}
+
+static bool fold_nand(OptContext *ctx, TCGOp *op)
+{
+    return fold_const2(ctx, op);
+}
+
+static bool fold_neg(OptContext *ctx, TCGOp *op)
+{
+    return fold_const1(ctx, op);
+}
+
+static bool fold_nor(OptContext *ctx, TCGOp *op)
+{
+    return fold_const2(ctx, op);
+}
+
+static bool fold_not(OptContext *ctx, TCGOp *op)
+{
+    return fold_const1(ctx, op);
+}
+
+static bool fold_or(OptContext *ctx, TCGOp *op)
+{
+    return fold_const2(ctx, op);
+}
+
+static bool fold_orc(OptContext *ctx, TCGOp *op)
+{
+    return fold_const2(ctx, op);
+}
+
 static bool fold_qemu_ld(OptContext *ctx, TCGOp *op)
 {
     /* Opcodes that touch guest memory stop the mb optimization.  */
@@ -730,6 +849,26 @@ static bool fold_qemu_st(OptContext *ctx, TCGOp *op)
     return false;
 }
=20
+static bool fold_remainder(OptContext *ctx, TCGOp *op)
+{
+    return fold_const2(ctx, op);
+}
+
+static bool fold_shift(OptContext *ctx, TCGOp *op)
+{
+    return fold_const2(ctx, op);
+}
+
+static bool fold_sub(OptContext *ctx, TCGOp *op)
+{
+    return fold_const2(ctx, op);
+}
+
+static bool fold_xor(OptContext *ctx, TCGOp *op)
+{
+    return fold_const2(ctx, op);
+}
+
 /* Propagate constants and copies, fold constant expressions. */
 void tcg_optimize(TCGContext *s)
 {
@@ -1276,26 +1415,6 @@ void tcg_optimize(TCGContext *s)
             }
             break;
=20
-        CASE_OP_32_64(not):
-        CASE_OP_32_64(neg):
-        CASE_OP_32_64(ext8s):
-        CASE_OP_32_64(ext8u):
-        CASE_OP_32_64(ext16s):
-        CASE_OP_32_64(ext16u):
-        CASE_OP_32_64(ctpop):
-        case INDEX_op_ext32s_i64:
-        case INDEX_op_ext32u_i64:
-        case INDEX_op_ext_i32_i64:
-        case INDEX_op_extu_i32_i64:
-        case INDEX_op_extrl_i64_i32:
-        case INDEX_op_extrh_i64_i32:
-            if (arg_is_const(op->args[1])) {
-                tmp =3D do_constant_folding(opc, arg_info(op->args[1])->va=
l, 0);
-                tcg_opt_gen_movi(&ctx, op, op->args[0], tmp);
-                continue;
-            }
-            break;
-
         CASE_OP_32_64(bswap16):
         CASE_OP_32_64(bswap32):
         case INDEX_op_bswap64_i64:
@@ -1307,36 +1426,6 @@ void tcg_optimize(TCGContext *s)
             }
             break;
=20
-        CASE_OP_32_64(add):
-        CASE_OP_32_64(sub):
-        CASE_OP_32_64(mul):
-        CASE_OP_32_64(or):
-        CASE_OP_32_64(and):
-        CASE_OP_32_64(xor):
-        CASE_OP_32_64(shl):
-        CASE_OP_32_64(shr):
-        CASE_OP_32_64(sar):
-        CASE_OP_32_64(rotl):
-        CASE_OP_32_64(rotr):
-        CASE_OP_32_64(andc):
-        CASE_OP_32_64(orc):
-        CASE_OP_32_64(eqv):
-        CASE_OP_32_64(nand):
-        CASE_OP_32_64(nor):
-        CASE_OP_32_64(muluh):
-        CASE_OP_32_64(mulsh):
-        CASE_OP_32_64(div):
-        CASE_OP_32_64(divu):
-        CASE_OP_32_64(rem):
-        CASE_OP_32_64(remu):
-            if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) {
-                tmp =3D do_constant_folding(opc, arg_info(op->args[1])->va=
l,
-                                          arg_info(op->args[2])->val);
-                tcg_opt_gen_movi(&ctx, op, op->args[0], tmp);
-                continue;
-            }
-            break;
-
         CASE_OP_32_64(clz):
         CASE_OP_32_64(ctz):
             if (arg_is_const(op->args[1])) {
@@ -1637,9 +1726,73 @@ void tcg_optimize(TCGContext *s)
             }
             break;
=20
+        default:
+            break;
+
+        /* ---------------------------------------------------------- */
+        /* Sorted alphabetically by opcode as much as possible. */
+
+        CASE_OP_32_64_VEC(add):
+            done =3D fold_add(&ctx, op);
+            break;
+        CASE_OP_32_64_VEC(and):
+            done =3D fold_and(&ctx, op);
+            break;
+        CASE_OP_32_64_VEC(andc):
+            done =3D fold_andc(&ctx, op);
+            break;
+        CASE_OP_32_64(ctpop):
+            done =3D fold_ctpop(&ctx, op);
+            break;
+        CASE_OP_32_64(div):
+        CASE_OP_32_64(divu):
+            done =3D fold_divide(&ctx, op);
+            break;
+        CASE_OP_32_64(eqv):
+            done =3D fold_eqv(&ctx, op);
+            break;
+        CASE_OP_32_64(ext8s):
+        CASE_OP_32_64(ext16s):
+        case INDEX_op_ext32s_i64:
+        case INDEX_op_ext_i32_i64:
+            done =3D fold_exts(&ctx, op);
+            break;
+        CASE_OP_32_64(ext8u):
+        CASE_OP_32_64(ext16u):
+        case INDEX_op_ext32u_i64:
+        case INDEX_op_extu_i32_i64:
+        case INDEX_op_extrl_i64_i32:
+        case INDEX_op_extrh_i64_i32:
+            done =3D fold_extu(&ctx, op);
+            break;
         case INDEX_op_mb:
             done =3D fold_mb(&ctx, op);
             break;
+        CASE_OP_32_64(mul):
+            done =3D fold_mul(&ctx, op);
+            break;
+        CASE_OP_32_64(mulsh):
+        CASE_OP_32_64(muluh):
+            done =3D fold_mul_highpart(&ctx, op);
+            break;
+        CASE_OP_32_64(nand):
+            done =3D fold_nand(&ctx, op);
+            break;
+        CASE_OP_32_64(neg):
+            done =3D fold_neg(&ctx, op);
+            break;
+        CASE_OP_32_64(nor):
+            done =3D fold_nor(&ctx, op);
+            break;
+        CASE_OP_32_64_VEC(not):
+            done =3D fold_not(&ctx, op);
+            break;
+        CASE_OP_32_64_VEC(or):
+            done =3D fold_or(&ctx, op);
+            break;
+        CASE_OP_32_64_VEC(orc):
+            done =3D fold_orc(&ctx, op);
+            break;
         case INDEX_op_qemu_ld_i32:
         case INDEX_op_qemu_ld_i64:
             done =3D fold_qemu_ld(&ctx, op);
@@ -1649,8 +1802,22 @@ void tcg_optimize(TCGContext *s)
         case INDEX_op_qemu_st_i64:
             done =3D fold_qemu_st(&ctx, op);
             break;
-
-        default:
+        CASE_OP_32_64(rem):
+        CASE_OP_32_64(remu):
+            done =3D fold_remainder(&ctx, op);
+            break;
+        CASE_OP_32_64(rotl):
+        CASE_OP_32_64(rotr):
+        CASE_OP_32_64(sar):
+        CASE_OP_32_64(shl):
+        CASE_OP_32_64(shr):
+            done =3D fold_shift(&ctx, op);
+            break;
+        CASE_OP_32_64_VEC(sub):
+            done =3D fold_sub(&ctx, op);
+            break;
+        CASE_OP_32_64_VEC(xor):
+            done =3D fold_xor(&ctx, op);
             break;
         }
=20
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=fail;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=fail(p=none dis=none)  header.from=linaro.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635389821059278.2922093582523;
 Wed, 27 Oct 2021 19:57:01 -0700 (PDT)
Received: from localhost ([::1]:48740 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvb4-0002Rq-SJ
	for importer@patchew.org; Wed, 27 Oct 2021 22:56:54 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59030)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMW-0004pB-3d
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:53 -0400
Received: from mail-pf1-x431.google.com ([2607:f8b0:4864:20::431]:43745)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMT-0003Pt-Fu
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:51 -0400
Received: by mail-pf1-x431.google.com with SMTP id 187so4548335pfc.10
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:47 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.45
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:46 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=4b6zM17cF3RrWL3jUN3e39U/QFtejbDytYKYLpCpWYI=;
 b=tjqoQZ9zyL2GasSXl+4swKPfmx2rdpmXifVx7BqsudB9VcrdcDOeDfD+0ap+bRjd/X
 Mve+zwlRyQR2+ULiULS8xXS3/clw+YlYaijLfojubEX2p+4evDSKdBjezpLOy/zAQvg7
 dsiYAHwRWIT3JG+V+1nqSj03HeKil1I3HpghHUXzrcj1pUhkGl4aNtZnED4Gb3UPjhSl
 3rn0e+Q5MHqOJ/LLaDlqY2DHgIRa+a0Xi9xnmYoqyDEgog0RoJdpwQusxGuz9hOXI5zU
 OpwKutirCAF/H2aL6wAC8Dd32fZrIdopO6IEkPjuJF+t7QnfOZE20vSdxYaGgJtPwqiE
 GV3g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=4b6zM17cF3RrWL3jUN3e39U/QFtejbDytYKYLpCpWYI=;
 b=4g0Z691zWn0mcKgRchoVsWbOZk8muzsLKXp4g6rISLLBX9MtGnArqakR0f7MWbjJE8
 hhu6I7VvuxPCeeM1f/jwm60e81appteZurwh9125BEPnot4C7Nf5oM3GBcGxRef0std7
 FVfpyI2U7ZhmphaRV3X3E7ciEBo06ydlqWT3GaN7jEsnxynGM/TkWNul9xrXmLjXeOjG
 Y6yVE5+IWOnI9fWRFk0z3o7hT900A4Vdga1xEvhSNiOpE0DJLqLNTdTLlNvuc6ERxGKz
 Vq1exjH/uUB+9qqgJF5b9Ytl06qREa5mXq4QRYQoqm+0U11EVG732adiV0Hw5r71U3uo
 362w==
X-Gm-Message-State: AOAM530l4oHANznvnkzcFZLZcT06hVNlZxlVYA4UauibAXmYKDXtSfCt
 nsJ7EqEriK6h0vPdPjQWaPMKI76sZUQZjw==
X-Google-Smtp-Source: 
 ABdhPJyQLg4pd6cnXDG5d7SAuh4P/GT3Tl67QdA68lPnDJocl9f2UjjwTamRPLAhtOij0UifNQXCBw==
X-Received: by 2002:a05:6a00:ac8:b029:320:a6bb:880d with SMTP id
 c8-20020a056a000ac8b0290320a6bb880dmr1574998pfl.41.1635388906485;
 Wed, 27 Oct 2021 19:41:46 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 21/56] tcg/optimize: Split out fold_setcond2
Date: Wed, 27 Oct 2021 19:40:56 -0700
Message-Id: <20211028024131.1492790-22-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::431;
 envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x431.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Alex=20Benn=C3=A9e?= <alex.bennee@linaro.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: fail (Header signature does not verify)
X-ZM-MESSAGEID: 1635389823114100001

Reduce some code duplication by folding the NE and EQ cases.

Reviewed-by: Alex Benn=C3=A9e <alex.bennee@linaro.org>
Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 145 ++++++++++++++++++++++++-------------------------
 1 file changed, 72 insertions(+), 73 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 5c3f8e8fcd..80e43deb8e 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -854,6 +854,75 @@ static bool fold_remainder(OptContext *ctx, TCGOp *op)
     return fold_const2(ctx, op);
 }
=20
+static bool fold_setcond2(OptContext *ctx, TCGOp *op)
+{
+    TCGCond cond =3D op->args[5];
+    int i =3D do_constant_folding_cond2(&op->args[1], &op->args[3], cond);
+    int inv =3D 0;
+
+    if (i >=3D 0) {
+        goto do_setcond_const;
+    }
+
+    switch (cond) {
+    case TCG_COND_LT:
+    case TCG_COND_GE:
+        /*
+         * Simplify LT/GE comparisons vs zero to a single compare
+         * vs the high word of the input.
+         */
+        if (arg_is_const(op->args[3]) && arg_info(op->args[3])->val =3D=3D=
 0 &&
+            arg_is_const(op->args[4]) && arg_info(op->args[4])->val =3D=3D=
 0) {
+            goto do_setcond_high;
+        }
+        break;
+
+    case TCG_COND_NE:
+        inv =3D 1;
+        QEMU_FALLTHROUGH;
+    case TCG_COND_EQ:
+        /*
+         * Simplify EQ/NE comparisons where one of the pairs
+         * can be simplified.
+         */
+        i =3D do_constant_folding_cond(INDEX_op_setcond_i32, op->args[1],
+                                     op->args[3], cond);
+        switch (i ^ inv) {
+        case 0:
+            goto do_setcond_const;
+        case 1:
+            goto do_setcond_high;
+        }
+
+        i =3D do_constant_folding_cond(INDEX_op_setcond_i32, op->args[2],
+                                     op->args[4], cond);
+        switch (i ^ inv) {
+        case 0:
+            goto do_setcond_const;
+        case 1:
+            op->args[2] =3D op->args[3];
+            op->args[3] =3D cond;
+            op->opc =3D INDEX_op_setcond_i32;
+            break;
+        }
+        break;
+
+    default:
+        break;
+
+    do_setcond_high:
+        op->args[1] =3D op->args[2];
+        op->args[2] =3D op->args[4];
+        op->args[3] =3D cond;
+        op->opc =3D INDEX_op_setcond_i32;
+        break;
+    }
+    return false;
+
+ do_setcond_const:
+    return tcg_opt_gen_movi(ctx, op, op->args[0], i);
+}
+
 static bool fold_shift(OptContext *ctx, TCGOp *op)
 {
     return fold_const2(ctx, op);
@@ -1653,79 +1722,6 @@ void tcg_optimize(TCGContext *s)
             }
             break;
=20
-        case INDEX_op_setcond2_i32:
-            i =3D do_constant_folding_cond2(&op->args[1], &op->args[3],
-                                          op->args[5]);
-            if (i >=3D 0) {
-            do_setcond_const:
-                tcg_opt_gen_movi(&ctx, op, op->args[0], i);
-                continue;
-            }
-            if ((op->args[5] =3D=3D TCG_COND_LT || op->args[5] =3D=3D TCG_=
COND_GE)
-                 && arg_is_const(op->args[3])
-                 && arg_info(op->args[3])->val =3D=3D 0
-                 && arg_is_const(op->args[4])
-                 && arg_info(op->args[4])->val =3D=3D 0) {
-                /* Simplify LT/GE comparisons vs zero to a single compare
-                   vs the high word of the input.  */
-            do_setcond_high:
-                reset_temp(op->args[0]);
-                arg_info(op->args[0])->z_mask =3D 1;
-                op->opc =3D INDEX_op_setcond_i32;
-                op->args[1] =3D op->args[2];
-                op->args[2] =3D op->args[4];
-                op->args[3] =3D op->args[5];
-                break;
-            }
-            if (op->args[5] =3D=3D TCG_COND_EQ) {
-                /* Simplify EQ comparisons where one of the pairs
-                   can be simplified.  */
-                i =3D do_constant_folding_cond(INDEX_op_setcond_i32,
-                                             op->args[1], op->args[3],
-                                             TCG_COND_EQ);
-                if (i =3D=3D 0) {
-                    goto do_setcond_const;
-                } else if (i > 0) {
-                    goto do_setcond_high;
-                }
-                i =3D do_constant_folding_cond(INDEX_op_setcond_i32,
-                                             op->args[2], op->args[4],
-                                             TCG_COND_EQ);
-                if (i =3D=3D 0) {
-                    goto do_setcond_high;
-                } else if (i < 0) {
-                    break;
-                }
-            do_setcond_low:
-                reset_temp(op->args[0]);
-                arg_info(op->args[0])->z_mask =3D 1;
-                op->opc =3D INDEX_op_setcond_i32;
-                op->args[2] =3D op->args[3];
-                op->args[3] =3D op->args[5];
-                break;
-            }
-            if (op->args[5] =3D=3D TCG_COND_NE) {
-                /* Simplify NE comparisons where one of the pairs
-                   can be simplified.  */
-                i =3D do_constant_folding_cond(INDEX_op_setcond_i32,
-                                             op->args[1], op->args[3],
-                                             TCG_COND_NE);
-                if (i =3D=3D 0) {
-                    goto do_setcond_high;
-                } else if (i > 0) {
-                    goto do_setcond_const;
-                }
-                i =3D do_constant_folding_cond(INDEX_op_setcond_i32,
-                                             op->args[2], op->args[4],
-                                             TCG_COND_NE);
-                if (i =3D=3D 0) {
-                    goto do_setcond_low;
-                } else if (i > 0) {
-                    goto do_setcond_const;
-                }
-            }
-            break;
-
         default:
             break;
=20
@@ -1813,6 +1809,9 @@ void tcg_optimize(TCGContext *s)
         CASE_OP_32_64(shr):
             done =3D fold_shift(&ctx, op);
             break;
+        case INDEX_op_setcond2_i32:
+            done =3D fold_setcond2(&ctx, op);
+            break;
         CASE_OP_32_64_VEC(sub):
             done =3D fold_sub(&ctx, op);
             break;
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635389599; cv=none;
	d=zohomail.com; s=zohoarc;
	b=Tj6UwMJQGznNndTYhDxlXcuQdEf/5uK524yYrxZFZC21M6dwlMy7M0QXBLfQbbnnyWcZH2ccSohJbi5dkjcbPNZ8x+v8kr8sBcEu7Bq2NPsE72sVg6nxkiOnZwKjEPIzt80WDMKLn3OJBrh5aU3Le+7JoJyNwMXGOzIVM9DeME0=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635389599;
 h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=wwLC3SIjtchiXP//8YOMxzaxe2iWQlOarPylhYlRTg4=;
	b=c69I/p7iaTSiatF9SRwTy53W0QpiPvq+XGnbqYACXxTUv+n51xhazsIMJ9bXbx+mTcH4SGi6GyAreJVCwV9u4mRHo4FNSp7YGYnom4nGXMBsDNVW2kHf8zG5OiL0ZAX6+PqCIIqLpPGUUhI0RRaAmTBRmTdH/rp1fk/SW6ROhag=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635389599787516.806160871772;
 Wed, 27 Oct 2021 19:53:19 -0700 (PDT)
Received: from localhost ([::1]:40512 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvXa-0005FU-NW
	for importer@patchew.org; Wed, 27 Oct 2021 22:53:18 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:58994)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMU-0004mh-A8
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:50 -0400
Received: from mail-pj1-x1030.google.com ([2607:f8b0:4864:20::1030]:55179)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMS-0003U6-Jy
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:49 -0400
Received: by mail-pj1-x1030.google.com with SMTP id np13so3564145pjb.4
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:48 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.46
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:46 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=wwLC3SIjtchiXP//8YOMxzaxe2iWQlOarPylhYlRTg4=;
 b=If4nJ+GAxXCODPYh/oAV0AsMZkNaGJU0C7YGyRH9pbyt/Y8p2Y5bNxm5+zkkvS9CTh
 MM2Da7+WFKtALpUrvvp/8CmePHZMahimGE2MFJOBJVxnJhMk97URDREOA9itu2MoQJoH
 Fhj8Hey9CXutqPmzk2OuRHcPltxC4t5k6LKfj2sJe9gEbsk9ESp7ISrICO8UtgWTJ3DX
 tJjPFUjShCi4y/2ZNXuBp0GrESjFv8ETG5tA5JowXDelhZy5adRlf5GkLInah6HwyyiK
 ksU32qGk83LsP9C6qgi7HR34xV1PnM6NigE6BFinqPYf4fytEDiT9YRf7pucKLx2uPT7
 qSVA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=wwLC3SIjtchiXP//8YOMxzaxe2iWQlOarPylhYlRTg4=;
 b=ZwAaOPMAAzE+t/behVP7siLmrcYXAj3PumvqtFwwwVuTgdk1T9WUamL8ABxwiMz/9a
 hJab0jlAMF18tGgm+8E4+aT/e6I2YrLCNj6/UfqyXasCLtH99W+AHWBV9YFDDPyS1xgw
 wEUsJzPVRp45VB5k+WuVSX+f4BRqKRhFhiWXm9A7K2McuJl5nj9yL06Tbq180af513rE
 BQ1P6cNhqH6gvjsiiYO2ItrpBhl9x8RP7FDRKCjhO0CdtClSt4hjXN6b2YEUDgXRgqlI
 r80bosySPD+MfcMI2gKnFUQTtywxt8ixTU2h9QNTHvnVFLi47U3CeN4oUL+Zlnb/aAIC
 ahzg==
X-Gm-Message-State: AOAM533K/GNcdSgbO4q+da9u7+hMpXx7QAp8psELjaoBIEeOj8c5zm82
 cSxupUl/Ii0n/Pstnxj3Mmc154e/s/d6gg==
X-Google-Smtp-Source: 
 ABdhPJxLvMxP1nBsEJR0xykXLwwPXdLB3Gj1qOdJp1Ce2qwn5XwNMYM1q6fepNIP5Cpl6o9VB/Ngeg==
X-Received: by 2002:a17:90b:4f8c:: with SMTP id
 qe12mr1531183pjb.237.1635388907315;
 Wed, 27 Oct 2021 19:41:47 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 22/56] tcg/optimize: Split out fold_brcond2
Date: Wed, 27 Oct 2021 19:40:57 -0700
Message-Id: <20211028024131.1492790-23-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::1030;
 envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1030.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635389601982100001
Content-Type: text/plain; charset="utf-8"

Reduce some code duplication by folding the NE and EQ cases.

Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 159 +++++++++++++++++++++++++------------------------
 1 file changed, 81 insertions(+), 78 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 80e43deb8e..c9db14f1d0 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -714,6 +714,84 @@ static bool fold_andc(OptContext *ctx, TCGOp *op)
     return fold_const2(ctx, op);
 }
=20
+static bool fold_brcond2(OptContext *ctx, TCGOp *op)
+{
+    TCGCond cond =3D op->args[4];
+    int i =3D do_constant_folding_cond2(&op->args[0], &op->args[2], cond);
+    TCGArg label =3D op->args[5];
+    int inv =3D 0;
+
+    if (i >=3D 0) {
+        goto do_brcond_const;
+    }
+
+    switch (cond) {
+    case TCG_COND_LT:
+    case TCG_COND_GE:
+        /*
+         * Simplify LT/GE comparisons vs zero to a single compare
+         * vs the high word of the input.
+         */
+        if (arg_is_const(op->args[2]) && arg_info(op->args[2])->val =3D=3D=
 0 &&
+            arg_is_const(op->args[3]) && arg_info(op->args[3])->val =3D=3D=
 0) {
+            goto do_brcond_high;
+        }
+        break;
+
+    case TCG_COND_NE:
+        inv =3D 1;
+        QEMU_FALLTHROUGH;
+    case TCG_COND_EQ:
+        /*
+         * Simplify EQ/NE comparisons where one of the pairs
+         * can be simplified.
+         */
+        i =3D do_constant_folding_cond(INDEX_op_brcond_i32, op->args[0],
+                                     op->args[2], cond);
+        switch (i ^ inv) {
+        case 0:
+            goto do_brcond_const;
+        case 1:
+            goto do_brcond_high;
+        }
+
+        i =3D do_constant_folding_cond(INDEX_op_brcond_i32, op->args[1],
+                                     op->args[3], cond);
+        switch (i ^ inv) {
+        case 0:
+            goto do_brcond_const;
+        case 1:
+            op->opc =3D INDEX_op_brcond_i32;
+            op->args[1] =3D op->args[2];
+            op->args[2] =3D cond;
+            op->args[3] =3D label;
+            break;
+        }
+        break;
+
+    default:
+        break;
+
+    do_brcond_high:
+        op->opc =3D INDEX_op_brcond_i32;
+        op->args[0] =3D op->args[1];
+        op->args[1] =3D op->args[3];
+        op->args[2] =3D cond;
+        op->args[3] =3D label;
+        break;
+
+    do_brcond_const:
+        if (i =3D=3D 0) {
+            tcg_op_remove(ctx->tcg, op);
+            return true;
+        }
+        op->opc =3D INDEX_op_br;
+        op->args[0] =3D label;
+        break;
+    }
+    return false;
+}
+
 static bool fold_call(OptContext *ctx, TCGOp *op)
 {
     TCGContext *s =3D ctx->tcg;
@@ -1644,84 +1722,6 @@ void tcg_optimize(TCGContext *s)
             }
             break;
=20
-        case INDEX_op_brcond2_i32:
-            i =3D do_constant_folding_cond2(&op->args[0], &op->args[2],
-                                          op->args[4]);
-            if (i =3D=3D 0) {
-            do_brcond_false:
-                tcg_op_remove(s, op);
-                continue;
-            }
-            if (i > 0) {
-            do_brcond_true:
-                op->opc =3D opc =3D INDEX_op_br;
-                op->args[0] =3D op->args[5];
-                break;
-            }
-            if ((op->args[4] =3D=3D TCG_COND_LT || op->args[4] =3D=3D TCG_=
COND_GE)
-                 && arg_is_const(op->args[2])
-                 && arg_info(op->args[2])->val =3D=3D 0
-                 && arg_is_const(op->args[3])
-                 && arg_info(op->args[3])->val =3D=3D 0) {
-                /* Simplify LT/GE comparisons vs zero to a single compare
-                   vs the high word of the input.  */
-            do_brcond_high:
-                op->opc =3D opc =3D INDEX_op_brcond_i32;
-                op->args[0] =3D op->args[1];
-                op->args[1] =3D op->args[3];
-                op->args[2] =3D op->args[4];
-                op->args[3] =3D op->args[5];
-                break;
-            }
-            if (op->args[4] =3D=3D TCG_COND_EQ) {
-                /* Simplify EQ comparisons where one of the pairs
-                   can be simplified.  */
-                i =3D do_constant_folding_cond(INDEX_op_brcond_i32,
-                                             op->args[0], op->args[2],
-                                             TCG_COND_EQ);
-                if (i =3D=3D 0) {
-                    goto do_brcond_false;
-                } else if (i > 0) {
-                    goto do_brcond_high;
-                }
-                i =3D do_constant_folding_cond(INDEX_op_brcond_i32,
-                                             op->args[1], op->args[3],
-                                             TCG_COND_EQ);
-                if (i =3D=3D 0) {
-                    goto do_brcond_false;
-                } else if (i < 0) {
-                    break;
-                }
-            do_brcond_low:
-                memset(&ctx.temps_used, 0, sizeof(ctx.temps_used));
-                op->opc =3D INDEX_op_brcond_i32;
-                op->args[1] =3D op->args[2];
-                op->args[2] =3D op->args[4];
-                op->args[3] =3D op->args[5];
-                break;
-            }
-            if (op->args[4] =3D=3D TCG_COND_NE) {
-                /* Simplify NE comparisons where one of the pairs
-                   can be simplified.  */
-                i =3D do_constant_folding_cond(INDEX_op_brcond_i32,
-                                             op->args[0], op->args[2],
-                                             TCG_COND_NE);
-                if (i =3D=3D 0) {
-                    goto do_brcond_high;
-                } else if (i > 0) {
-                    goto do_brcond_true;
-                }
-                i =3D do_constant_folding_cond(INDEX_op_brcond_i32,
-                                             op->args[1], op->args[3],
-                                             TCG_COND_NE);
-                if (i =3D=3D 0) {
-                    goto do_brcond_low;
-                } else if (i > 0) {
-                    goto do_brcond_true;
-                }
-            }
-            break;
-
         default:
             break;
=20
@@ -1737,6 +1737,9 @@ void tcg_optimize(TCGContext *s)
         CASE_OP_32_64_VEC(andc):
             done =3D fold_andc(&ctx, op);
             break;
+        case INDEX_op_brcond2_i32:
+            done =3D fold_brcond2(&ctx, op);
+            break;
         CASE_OP_32_64(ctpop):
             done =3D fold_ctpop(&ctx, op);
             break;
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635390115; cv=none;
	d=zohomail.com; s=zohoarc;
	b=hyEuWyG+n8HgiePat+Q3MUxbrbe7UQVFZiuVmNSXEyez4LqhlWl9nSMyTYlX/0/vBcN2vQdYYiN6Ea9ZExacLqqdzd00h1X0+8W3zs56RAiHj9A2S4lqjDSx6up3skG0mtAkX/QV1415FryFMBTXZE/0jD0E4DcjGXcGrFulSgc=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635390115;
 h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=CFsfCOujg6xp28y0o9M8YysK5F5Ff4YXOa1Luu+j29I=;
	b=ZIZIDU/NH8dzE/Ixe2Bfd1hBTAqqAbNF7GRfEsdtjBZcky4QBrVkD3DWlPz3bYqrvVAdXNhHHNopXu+8d919+0HSZsrh4XpOfbzui/dJLhbWVr8NFKIMyTp52i0tzXOy34qh/ve0HZ0UifGxbfvZbnFKgzt47+tDYXv28rFlaD4=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635390115703141.13968164041148;
 Wed, 27 Oct 2021 20:01:55 -0700 (PDT)
Received: from localhost ([::1]:60010 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvfu-0001qO-HP
	for importer@patchew.org; Wed, 27 Oct 2021 23:01:54 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59060)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMY-0004qg-3F
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:57 -0400
Received: from mail-pg1-x52e.google.com ([2607:f8b0:4864:20::52e]:36603)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMT-0003Xc-IE
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:53 -0400
Received: by mail-pg1-x52e.google.com with SMTP id 75so4950983pga.3
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:48 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.47
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:47 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=CFsfCOujg6xp28y0o9M8YysK5F5Ff4YXOa1Luu+j29I=;
 b=VFU0B8LdkcQvzKhkrtEYYu4a0OGFTQlxuSa6lxDZUbnJSmqfX6kW9pXK4V7IDIUSta
 ihVx/D2oMOHqdzMd+FlFDMTuPNNk1aWyDO3i+MqutfCgx+KscngoWrIruKhF5gHdAMVV
 eRbnsl/jurbXOpfcDySdWWa2oYHC4mhgwvO88Ujy6/t+z97qbYN4yWiMeXOss2RD9ls8
 slmleMbIGdCMoutdDWCGPTD3v/EBB6DbCnSeNaKtTTtM66u0v6pVB7cmomilrY8amhal
 BXuUg7byQC55fEb6cdFBQvN79sYiaDOLUJO6Bny5t0NNXZJnAAUQCGo53JKRax7dMoJ+
 PNoA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=CFsfCOujg6xp28y0o9M8YysK5F5Ff4YXOa1Luu+j29I=;
 b=E9+DUZeAMBAoOMJ6VPUueGO+7CpyVYJzma2Sc2dF0G4+BeS7yhA/DmBdlOqeJ3h2Zl
 JxbgM/zTZqhS7bgZwfkLD/NHqCG2dIwnaOPkK904zRCYPfMRc8NQ2mR+MfhTQhVubVrT
 KMjYKOCchexwyn3dmzdA9CD0JX13OsIEiNoTCDPdu27zh0nFy2P0y4mYWMxMyyKNl5M8
 f9U3mmPYWDyxgTOji6xbGLb4Byd5bpVDzqNsvhop0/wUQHxI4aV/H+uDuwOs/iLe60b5
 iLxyBOVN4GRyia+MXHslltJD+tns6K+LdSeG+itP65DLc2wEnUj9buYQIuNf6iQN5yyv
 kVlg==
X-Gm-Message-State: AOAM531TjJamWYQGS3i1EVCQQfHv81gd1oac/S1d6DE0ZP6+PtsclPtn
 z6TXOcs7i4nj6HmxkdHh0i7/Hol5U7Li1w==
X-Google-Smtp-Source: 
 ABdhPJxE48Ii3zyPd4kFjtE7X/bywbea2OIACF62j5626nFNzzzxY1NIBLtfLJWk73vIn6CSvlQL+Q==
X-Received: by 2002:a63:374c:: with SMTP id g12mr1187986pgn.35.1635388908072;
 Wed, 27 Oct 2021 19:41:48 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 23/56] tcg/optimize: Split out fold_brcond
Date: Wed, 27 Oct 2021 19:40:58 -0700
Message-Id: <20211028024131.1492790-24-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::52e;
 envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52e.google.com
X-Spam_score_int: -1
X-Spam_score: -0.2
X-Spam_bar: /
X-Spam_report: (-0.2 / 5.0 requ) DKIM_SIGNED=0.1, DKIM_VALID=-0.1,
 DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001,
 SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635390117873100001

Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 33 +++++++++++++++++++--------------
 1 file changed, 19 insertions(+), 14 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index c9db14f1d0..24ba6d2830 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -714,6 +714,22 @@ static bool fold_andc(OptContext *ctx, TCGOp *op)
     return fold_const2(ctx, op);
 }
=20
+static bool fold_brcond(OptContext *ctx, TCGOp *op)
+{
+    TCGCond cond =3D op->args[2];
+    int i =3D do_constant_folding_cond(op->opc, op->args[0], op->args[1], =
cond);
+
+    if (i =3D=3D 0) {
+        tcg_op_remove(ctx->tcg, op);
+        return true;
+    }
+    if (i > 0) {
+        op->opc =3D INDEX_op_br;
+        op->args[0] =3D op->args[3];
+    }
+    return false;
+}
+
 static bool fold_brcond2(OptContext *ctx, TCGOp *op)
 {
     TCGCond cond =3D op->args[4];
@@ -1641,20 +1657,6 @@ void tcg_optimize(TCGContext *s)
             }
             break;
=20
-        CASE_OP_32_64(brcond):
-            i =3D do_constant_folding_cond(opc, op->args[0],
-                                         op->args[1], op->args[2]);
-            if (i =3D=3D 0) {
-                tcg_op_remove(s, op);
-                continue;
-            } else if (i > 0) {
-                memset(&ctx.temps_used, 0, sizeof(ctx.temps_used));
-                op->opc =3D opc =3D INDEX_op_br;
-                op->args[0] =3D op->args[3];
-                break;
-            }
-            break;
-
         CASE_OP_32_64(movcond):
             i =3D do_constant_folding_cond(opc, op->args[1],
                                          op->args[2], op->args[5]);
@@ -1737,6 +1739,9 @@ void tcg_optimize(TCGContext *s)
         CASE_OP_32_64_VEC(andc):
             done =3D fold_andc(&ctx, op);
             break;
+        CASE_OP_32_64(brcond):
+            done =3D fold_brcond(&ctx, op);
+            break;
         case INDEX_op_brcond2_i32:
             done =3D fold_brcond2(&ctx, op);
             break;
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635390211; cv=none;
	d=zohomail.com; s=zohoarc;
	b=MbuX0yPy59aU3ZjeqKMJS3BleDlV7EEdz/5sK55pX1eMIE52asC9WhMHFzQVNzy1Qll7a89tIwR8MSTJjOi1j0BoIWgsdaa4JGuuRPhP0IoxpqXZgL/42ZEkOJRH6aPGhm+o6gRJiAVZ/lrxsma+2OUqkaHJjG6rmexi0Akm73M=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635390211;
 h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=CEAmAjtRAA8VTRQA9Y1dByLl7XumxO8Ow9/VzdNZDew=;
	b=Cl+TdHRXXagbMG9SI42x480v0cC6KgG/BYkz2psGeYaADPExLQnpQCdNU2JFI2rQ4cV1E8FB2oZSbd//WMAv0ddECQZX+vLE4aGNjMuwHXqJyevoF5mWDyWCb0h97i0S1QUY/+UsyxXeviBTKiQIqO5IXKp14DJRtwdzv54Cu80=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635390211038600.3546761770776;
 Wed, 27 Oct 2021 20:03:31 -0700 (PDT)
Received: from localhost ([::1]:36990 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvhR-0005Ow-S7
	for importer@patchew.org; Wed, 27 Oct 2021 23:03:29 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59032)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMX-0004pa-6y
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:53 -0400
Received: from mail-pj1-x1030.google.com ([2607:f8b0:4864:20::1030]:35335)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMT-0003Xh-Uo
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:51 -0400
Received: by mail-pj1-x1030.google.com with SMTP id
 n11-20020a17090a2bcb00b001a1e7a0a6a6so6806583pje.0
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:49 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.48
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:48 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=CEAmAjtRAA8VTRQA9Y1dByLl7XumxO8Ow9/VzdNZDew=;
 b=oMZrCqxQmRxDOmHOtczHnOuAwu9q7TgeTyC//KBVBSfuooDp39a3tKv0WZ322Xeg6g
 ybGLvR61KywueuR1b0ckelnMA5zieNCN3sIfYPObMc6FHZF+2o1CFp6mEYTHkzqOb3DW
 eDJ841DahJu8+CRcCBXd+KJcgtGhlwrvtlPWp+XqQQR6AJP3DUBFMrbaCH83Vgt12O4X
 AGqSdCD3TRx/UCv73dxcNimP6reS3QpuYf1asZc48P5cd/Qs8un2mKE5l/N9x1V0I0BW
 wnzhN3/MhpoYvZbxpwY3nG5XC9RruhbGgvjjhuoBbUAH/p3g2vWIUQWak3VBzAYWsp+/
 bM8w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=CEAmAjtRAA8VTRQA9Y1dByLl7XumxO8Ow9/VzdNZDew=;
 b=JThthiNj7Bu9RWJH/KUsg8vZYwlA66msxeVQcQm3isVffDVnabModLBAyXCb9T9t/t
 Ozk33K7ipHMW0lSiKffOIsQFx/Vo5rz/8zFmZv3USF1S1BD/zDaROy81XP6Vok3Es5bR
 9TvduSrd7fAWQXDPBooQwRVDyEHf8ShLASmjsdQt/iRXJIc82V8pzVbUks7qqRNtuugC
 k+5dkFMCLM/PDqKbv9TIukVtb+I6eyKW/GAvQhusqYYuKDKVItoGw4XPwRXTAMkHrenB
 v40fqyHbxRISD5fzq8UGNo8JVNTGVxyive6yTWW4vvfFStQ7OrVrfjTdwSX9+ot72aFM
 7Eog==
X-Gm-Message-State: AOAM530ruXoFUvnX21qJ5SQKl4rh/Sx8hbYRqdEhU66bgxov+cWCjCSm
 qXBKxUCXEK2g2grKjP15FDzoWtCKhsbGDg==
X-Google-Smtp-Source: 
 ABdhPJxh1Ak9eTa2Ly5ssx0Jm27lvipvcAzA4VzQMe9rjrWttA/Q0/3e9+iTtlPNl0E5vmE+S8Zt1A==
X-Received: by 2002:a17:90a:2fc7:: with SMTP id
 n7mr1550412pjm.141.1635388908693;
 Wed, 27 Oct 2021 19:41:48 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 24/56] tcg/optimize: Split out fold_setcond
Date: Wed, 27 Oct 2021 19:40:59 -0700
Message-Id: <20211028024131.1492790-25-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::1030;
 envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1030.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635390212253100001

Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 23 ++++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 24ba6d2830..f79cb44944 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -948,6 +948,17 @@ static bool fold_remainder(OptContext *ctx, TCGOp *op)
     return fold_const2(ctx, op);
 }
=20
+static bool fold_setcond(OptContext *ctx, TCGOp *op)
+{
+    TCGCond cond =3D op->args[3];
+    int i =3D do_constant_folding_cond(op->opc, op->args[1], op->args[2], =
cond);
+
+    if (i >=3D 0) {
+        return tcg_opt_gen_movi(ctx, op, op->args[0], i);
+    }
+    return false;
+}
+
 static bool fold_setcond2(OptContext *ctx, TCGOp *op)
 {
     TCGCond cond =3D op->args[5];
@@ -1648,15 +1659,6 @@ void tcg_optimize(TCGContext *s)
             }
             break;
=20
-        CASE_OP_32_64(setcond):
-            i =3D do_constant_folding_cond(opc, op->args[1],
-                                         op->args[2], op->args[3]);
-            if (i >=3D 0) {
-                tcg_opt_gen_movi(&ctx, op, op->args[0], i);
-                continue;
-            }
-            break;
-
         CASE_OP_32_64(movcond):
             i =3D do_constant_folding_cond(opc, op->args[1],
                                          op->args[2], op->args[5]);
@@ -1817,6 +1819,9 @@ void tcg_optimize(TCGContext *s)
         CASE_OP_32_64(shr):
             done =3D fold_shift(&ctx, op);
             break;
+        CASE_OP_32_64(setcond):
+            done =3D fold_setcond(&ctx, op);
+            break;
         case INDEX_op_setcond2_i32:
             done =3D fold_setcond2(&ctx, op);
             break;
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635390043; cv=none;
	d=zohomail.com; s=zohoarc;
	b=bZvqM8i8EmKPbC5f/aGZXg0JBhOkl3z667nI4UC6vjTkr2znz5Qgop/QL9Te5ud+XLqQKIeJd3qLGqAbyvLWfHl7qHPNRnRxiZeJzt6IUBqEa+eHDR6rob3GE3b0GuusrQ4sINywrwZkskcMx20zk5HOfzVcP/Am3/nncdfqtyY=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635390043;
 h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=l1Q9hVmZCD5h+WSzcvXil606EiQ6sWYW4OegtZB7+1g=;
	b=fZx9YPJppxStjSnM/1hdcCbemydgEenTJpP7HY4nsR/Bwby00YB0xGWht0lxByjKtigVJQCK73tYaL+ZODJnU1VEo/tav6dLmhCPiwANE1mOvyxuiY+M3mqjYmQRiNzAn+3mMYf5gskjEMnT/POKXrCb5f1Oi7FnZSNUOYtat08=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635390043178173.63186612030393;
 Wed, 27 Oct 2021 20:00:43 -0700 (PDT)
Received: from localhost ([::1]:57014 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvei-0008CR-CI
	for importer@patchew.org; Wed, 27 Oct 2021 23:00:40 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59088)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMZ-0004qp-BE
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:57 -0400
Received: from mail-pg1-x531.google.com ([2607:f8b0:4864:20::531]:46747)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMV-0003Xp-Cc
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:55 -0400
Received: by mail-pg1-x531.google.com with SMTP id m21so4887732pgu.13
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:50 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.48
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:49 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=l1Q9hVmZCD5h+WSzcvXil606EiQ6sWYW4OegtZB7+1g=;
 b=Bk9qZNQ07uJLdRdn0l0WX/1QWT9vfCmP0MfxT3iC7NIoBK+uKOZaZ3udPe56rNMVFT
 L4dnO3nxOOLulsdk5ni+FfoNP4GdOklaiHi3PgsHy9WpwFTJm0GnPfzw3tHRlzXqfSFK
 OElDo8MybUbdHhC5aKvknZkseYPJe1g9SGmW07s5VrwBV1axgaI17ymjQ39w+WHW7QP7
 dZuFIvp7DzHtPJoHQdCl2I6CQK03/hKfmh8r3/pupylS3smxI/P/YVxbZTeFdyNWJotm
 pY1NP3OtUnkMKJE2pxKbY8H0JFTqjflFOjMpQZIh4WDtl6n3zCmGht+uminXdsoHL6IT
 Usiw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=l1Q9hVmZCD5h+WSzcvXil606EiQ6sWYW4OegtZB7+1g=;
 b=H5vfqJDzYwm/6MEtBpAAALaTW/n0L3GYq3zNDtdWa/YP1+Ev/cWtZD73B/ygtMt7V8
 yhzSOxn9dbOiicyk6erRNVV5DQhjlZFWLvMeqeW8bh4ccPC27i+M5uyBee1bLrZYSxlI
 QCxKnlxgeuc3ulN0qfLYwL0CHKbAl4bKn7LOw8zZWgGs7HLoriydVEEe4LB/ePQZWylI
 sVV2/EE1DLuYOsLB97OsOBltLgdpVAevOkbJwS1cHy6bdTetcGldzCbivAY0zoBt63CT
 0RYj42gkZW3HaRxTWGEz/FqwuN/giSQASKH+PmMKic6Pxlj4kw5Z52Sm1Vc7njM85Cvn
 /sOg==
X-Gm-Message-State: AOAM532iAWOY628AKuzccWwBW2kcdDoWdeRlEArRW+C9okbwbmjHidl6
 haQH/YH4HAYOvu1gxNJqsj2HRoykmbhUog==
X-Google-Smtp-Source: 
 ABdhPJziDNBmo9VoVFehCaZUKwNFl8h6qTt7f8MZ76ZEBabBlNpQhsJPWv9nq1O13K6v6S9Qva0qSw==
X-Received: by 2002:a05:6a00:731:b0:44c:7c1b:fe6a with SMTP id
 17-20020a056a00073100b0044c7c1bfe6amr1385844pfm.44.1635388909293;
 Wed, 27 Oct 2021 19:41:49 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 25/56] tcg/optimize: Split out fold_mulu2_i32
Date: Wed, 27 Oct 2021 19:41:00 -0700
Message-Id: <20211028024131.1492790-26-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::531;
 envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x531.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635390044596100001

Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 37 +++++++++++++++++++++----------------
 1 file changed, 21 insertions(+), 16 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index f79cb44944..805522f99d 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -899,6 +899,24 @@ static bool fold_mul_highpart(OptContext *ctx, TCGOp *=
op)
     return fold_const2(ctx, op);
 }
=20
+static bool fold_mulu2_i32(OptContext *ctx, TCGOp *op)
+{
+    if (arg_is_const(op->args[2]) && arg_is_const(op->args[3])) {
+        uint32_t a =3D arg_info(op->args[2])->val;
+        uint32_t b =3D arg_info(op->args[3])->val;
+        uint64_t r =3D (uint64_t)a * b;
+        TCGArg rl, rh;
+        TCGOp *op2 =3D tcg_op_insert_before(ctx->tcg, op, INDEX_op_mov_i32=
);
+
+        rl =3D op->args[0];
+        rh =3D op->args[1];
+        tcg_opt_gen_movi(ctx, op, rl, (int32_t)r);
+        tcg_opt_gen_movi(ctx, op2, rh, (int32_t)(r >> 32));
+        return true;
+    }
+    return false;
+}
+
 static bool fold_nand(OptContext *ctx, TCGOp *op)
 {
     return fold_const2(ctx, op);
@@ -1710,22 +1728,6 @@ void tcg_optimize(TCGContext *s)
             }
             break;
=20
-        case INDEX_op_mulu2_i32:
-            if (arg_is_const(op->args[2]) && arg_is_const(op->args[3])) {
-                uint32_t a =3D arg_info(op->args[2])->val;
-                uint32_t b =3D arg_info(op->args[3])->val;
-                uint64_t r =3D (uint64_t)a * b;
-                TCGArg rl, rh;
-                TCGOp *op2 =3D tcg_op_insert_before(s, op, INDEX_op_mov_i3=
2);
-
-                rl =3D op->args[0];
-                rh =3D op->args[1];
-                tcg_opt_gen_movi(&ctx, op, rl, (int32_t)r);
-                tcg_opt_gen_movi(&ctx, op2, rh, (int32_t)(r >> 32));
-                continue;
-            }
-            break;
-
         default:
             break;
=20
@@ -1781,6 +1783,9 @@ void tcg_optimize(TCGContext *s)
         CASE_OP_32_64(muluh):
             done =3D fold_mul_highpart(&ctx, op);
             break;
+        case INDEX_op_mulu2_i32:
+            done =3D fold_mulu2_i32(&ctx, op);
+            break;
         CASE_OP_32_64(nand):
             done =3D fold_nand(&ctx, op);
             break;
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635391037; cv=none;
	d=zohomail.com; s=zohoarc;
	b=BUpwqZMUfJwgd7A37ATMuEbH9Yysgp+uVEKhGcJSZsTCgS0f1YlRvwoLzjcjcsmoCJOSMxZqpf2uCQsQmg5ymramDLFxvI4Phq1y0ZDuDpwxofrtlFepQLN0oY9lQ8ozuHWIc6Yqp/u4KLEtQoAOLeeGmLnsuhXOTfNScpX906g=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635391037;
 h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=XCdKX5lGX4jVtgmDyFNtAjJPKoYBkr5rEDOGi0sGeW8=;
	b=a24xONinexjaZwgxyEMom7ebSbKyZWzzAGJjQ+cGd7g7VSfYJv0QwQIAwHSzCdpYsuqkv6JcG46tX/G0NUMYVCNpeBsOrNuNApvmfH+rvdF8xbeQ07Y1RL8glGw901i5Ff+Vc45cJoAMWhEJMZMfQroK7CNIY6gfJrxcF8yo7YA=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 163539103733569.77666811521374;
 Wed, 27 Oct 2021 20:17:17 -0700 (PDT)
Received: from localhost ([::1]:47886 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvum-0006Kg-AR
	for importer@patchew.org; Wed, 27 Oct 2021 23:17:16 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59142)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMb-0004rW-CW
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:58 -0400
Received: from mail-pg1-x533.google.com ([2607:f8b0:4864:20::533]:46749)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMV-0003YA-Py
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:55 -0400
Received: by mail-pg1-x533.google.com with SMTP id m21so4887750pgu.13
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:50 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.49
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:49 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=XCdKX5lGX4jVtgmDyFNtAjJPKoYBkr5rEDOGi0sGeW8=;
 b=Ba+5shxRVqrXhOCC8juWkcImjLmDzkFGnX6KYgVTovn1BtqBhBIfZXqG2R3IUcrvTX
 szmgjtX2Qee4exsHLwBQs6WZof0AbVmiV1pQOiiIyMgGWceYmlGJC3Fwu8H4t2YPYgSJ
 W1Br9sp9RKbqzEPlVMaQc7x0QHrXYXPosm3Alb6jBRfqZnAE8+bdodaFjUHhzlJdnloJ
 mioa6qDef80Vi8U97oWHX//BfL/QhqTAJqDEVDaRUCvId6txuUuFcACTT+h9FuI9gGFJ
 6sxV8O/MCxlzLaOV9VbuYahOfasBZLSVY3RLeg1Z5XtZOyOcO9Y0bRdu+e1SNQ7O6+9t
 oi9g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=XCdKX5lGX4jVtgmDyFNtAjJPKoYBkr5rEDOGi0sGeW8=;
 b=E132BSTOGjOO7B0MH7T8VE1h9zdNX89Vt1EhyqIwETj1r9gDV1wBvWvMOkHTfh3+52
 5anlqmjDOm8c9Dt42hxRK/fHmIQUaxT4QMOJxsm7bQ+30vddHLJJncmrw9OFZcbw6mmK
 z7xYtSrERK+M4NB47N+JFlfaV8bKFXjSEwRgQTExtkz76SJOpfPUOK9AdhDfMN0D4eyH
 2CBEqeWtFyBI7y907+NrY+Ts63xrZRZj9PdPW1rmxq6B5F+DumxWl8jZbzsCBpsy1N18
 8PSTCpoMKRn4QTix949bmGuuO8ooLmxiBampt+f6ETsEXmQfJwI6a0/XkWCoeVRcrOLf
 HiKA==
X-Gm-Message-State: AOAM532LV5tmUztLGbw7feiiP96CyXhvdzEj37S00JzNVycSMBBgnfR0
 IH0yKY2f0lKEoBPqfaFtoBnB2pBfJeUxOQ==
X-Google-Smtp-Source: 
 ABdhPJzVMc6xW5vFmdMBaf79yZ4wllZbWgjuvMJ8cP3UL2J4HBKPmUNM2AZZI2X5+J01cTcxdkt+RQ==
X-Received: by 2002:a05:6a00:140e:b0:444:b077:51ef with SMTP id
 l14-20020a056a00140e00b00444b07751efmr1565032pfu.61.1635388909898;
 Wed, 27 Oct 2021 19:41:49 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 26/56] tcg/optimize: Split out fold_addsub2_i32
Date: Wed, 27 Oct 2021 19:41:01 -0700
Message-Id: <20211028024131.1492790-27-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::533;
 envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x533.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635391038692100001

Add two additional helpers, fold_add2_i32 and fold_sub2_i32
which will not be simple wrappers forever.

Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 70 +++++++++++++++++++++++++++++++-------------------
 1 file changed, 44 insertions(+), 26 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 805522f99d..9d1d045363 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -704,6 +704,39 @@ static bool fold_add(OptContext *ctx, TCGOp *op)
     return fold_const2(ctx, op);
 }
=20
+static bool fold_addsub2_i32(OptContext *ctx, TCGOp *op, bool add)
+{
+    if (arg_is_const(op->args[2]) && arg_is_const(op->args[3]) &&
+        arg_is_const(op->args[4]) && arg_is_const(op->args[5])) {
+        uint32_t al =3D arg_info(op->args[2])->val;
+        uint32_t ah =3D arg_info(op->args[3])->val;
+        uint32_t bl =3D arg_info(op->args[4])->val;
+        uint32_t bh =3D arg_info(op->args[5])->val;
+        uint64_t a =3D ((uint64_t)ah << 32) | al;
+        uint64_t b =3D ((uint64_t)bh << 32) | bl;
+        TCGArg rl, rh;
+        TCGOp *op2 =3D tcg_op_insert_before(ctx->tcg, op, INDEX_op_mov_i32=
);
+
+        if (add) {
+            a +=3D b;
+        } else {
+            a -=3D b;
+        }
+
+        rl =3D op->args[0];
+        rh =3D op->args[1];
+        tcg_opt_gen_movi(ctx, op, rl, (int32_t)a);
+        tcg_opt_gen_movi(ctx, op2, rh, (int32_t)(a >> 32));
+        return true;
+    }
+    return false;
+}
+
+static bool fold_add2_i32(OptContext *ctx, TCGOp *op)
+{
+    return fold_addsub2_i32(ctx, op, true);
+}
+
 static bool fold_and(OptContext *ctx, TCGOp *op)
 {
     return fold_const2(ctx, op);
@@ -1056,6 +1089,11 @@ static bool fold_sub(OptContext *ctx, TCGOp *op)
     return fold_const2(ctx, op);
 }
=20
+static bool fold_sub2_i32(OptContext *ctx, TCGOp *op)
+{
+    return fold_addsub2_i32(ctx, op, false);
+}
+
 static bool fold_xor(OptContext *ctx, TCGOp *op)
 {
     return fold_const2(ctx, op);
@@ -1701,32 +1739,6 @@ void tcg_optimize(TCGContext *s)
             }
             break;
=20
-        case INDEX_op_add2_i32:
-        case INDEX_op_sub2_i32:
-            if (arg_is_const(op->args[2]) && arg_is_const(op->args[3])
-                && arg_is_const(op->args[4]) && arg_is_const(op->args[5]))=
 {
-                uint32_t al =3D arg_info(op->args[2])->val;
-                uint32_t ah =3D arg_info(op->args[3])->val;
-                uint32_t bl =3D arg_info(op->args[4])->val;
-                uint32_t bh =3D arg_info(op->args[5])->val;
-                uint64_t a =3D ((uint64_t)ah << 32) | al;
-                uint64_t b =3D ((uint64_t)bh << 32) | bl;
-                TCGArg rl, rh;
-                TCGOp *op2 =3D tcg_op_insert_before(s, op, INDEX_op_mov_i3=
2);
-
-                if (opc =3D=3D INDEX_op_add2_i32) {
-                    a +=3D b;
-                } else {
-                    a -=3D b;
-                }
-
-                rl =3D op->args[0];
-                rh =3D op->args[1];
-                tcg_opt_gen_movi(&ctx, op, rl, (int32_t)a);
-                tcg_opt_gen_movi(&ctx, op2, rh, (int32_t)(a >> 32));
-                continue;
-            }
-            break;
=20
         default:
             break;
@@ -1737,6 +1749,9 @@ void tcg_optimize(TCGContext *s)
         CASE_OP_32_64_VEC(add):
             done =3D fold_add(&ctx, op);
             break;
+        case INDEX_op_add2_i32:
+            done =3D fold_add2_i32(&ctx, op);
+            break;
         CASE_OP_32_64_VEC(and):
             done =3D fold_and(&ctx, op);
             break;
@@ -1833,6 +1848,9 @@ void tcg_optimize(TCGContext *s)
         CASE_OP_32_64_VEC(sub):
             done =3D fold_sub(&ctx, op);
             break;
+        case INDEX_op_sub2_i32:
+            done =3D fold_sub2_i32(&ctx, op);
+            break;
         CASE_OP_32_64_VEC(xor):
             done =3D fold_xor(&ctx, op);
             break;
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635390436; cv=none;
	d=zohomail.com; s=zohoarc;
	b=mTrFxJ6TKsHcRHYdD8CFNy7Su3ESMa40IBUr35yXl9djiRbqrEw15/tbFk1HWLHQ9KI7mntgDxZ7JYspwexq6FQBscqGlNiQxsf3UO1KoooPs37KyWRaOFalCG8/pSNrTGJcBJOOhJ7znuLnl4BkO8q4woQanqZVMcUtSDmYXtI=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635390436;
 h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=C2TgxQz1GB819hSkndrC8NaNVJWCUo0QsMgOlWylEw4=;
	b=Zkj4LOPEt/5EVcEYOaOrgj5wcQt9T4P5eklg04N6K298+0PIluWp0Ec2GRhKzMYXci30ss1YzlakbONAqbMDV6Br9+UEbjrh9wfuiwMPwi1WYl+lOnKPlflnCK8+wxd/QqXgb0ZHrkydWIbSRhj978sPqfzap5WY6yNzI1VMKQY=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635390436002735.1333093695382;
 Wed, 27 Oct 2021 20:07:16 -0700 (PDT)
Received: from localhost ([::1]:45508 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvl4-0002kv-T2
	for importer@patchew.org; Wed, 27 Oct 2021 23:07:14 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59144)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMb-0004rY-Cl
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:58 -0400
Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]:50920)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMV-0003YH-QE
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:55 -0400
Received: by mail-pj1-x1036.google.com with SMTP id gn3so3607420pjb.0
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:51 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.50
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:50 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=C2TgxQz1GB819hSkndrC8NaNVJWCUo0QsMgOlWylEw4=;
 b=eBZfyWaOaVGiJrjxhJ9/tur8vlKhAw+HojgHDDdMbzeJlZFlpSJx8LlWPfBoXkI/MC
 jpWu/J+Ly2C5LCkhTxui9IjutIPimvTs8sNSuZN02OScXvKsIJ5aTQv2VHGhTT/rN7d1
 WLj+vcIZxRz8CTCkr5Ep3fxEyGMjpSmO+SITqe+YpI/pjZAGi5ikncczPjl3cUaJ0v+F
 TapRb9mvN6hQW3hIxTdnIuf6kDYYGVb5RahvCML/WRj9ha8kEwps1WLvuo0HktngfzSO
 AZczq/UQO7gIzfRa/w2ywEkU3DUw38grKVhzQOyQX81qjFUhwcd9dELcXEXA9B0pYgsp
 u9Rg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=C2TgxQz1GB819hSkndrC8NaNVJWCUo0QsMgOlWylEw4=;
 b=vCfAGpcieL1gGDEWD5QfJvqqa8SxP8Zsx4QI862J4H35LKpF8fbJw3D+59bsS3a0N4
 T3dep1OZ4SOsmTPtPMZ9Wq+P+h3ik/9+mWKKpoXNIVf5TVGh2QaF/nixLz75PsBmIM1L
 uCOZLp+tbJrXVexv1QtTMSvbF5BOsZfQ0lJXhp2GXBjLoK7ss5TWloyBMSLANiEhiumA
 QhPoxkiF8UUqpYhifaM8JrMI1oQ4AfnAc90nPf/pkeTi/HZBiVNEyGAKumJVL/GP514J
 4iLH8/zHIeeHX7E7WL8mYK0uvZ1I5vaIqU2lek5A8LPArQD3hYSDicbTkxPaEBuCwCB8
 lqNw==
X-Gm-Message-State: AOAM532wv1y6yjdXU1v0aIaR5+prarqy2xHOfekNAroIaudoYLTtbH5x
 oeQt2FBng4cAL/DQStnFL43DjOjZEgs1pg==
X-Google-Smtp-Source: 
 ABdhPJxeU/36KfHZiOoku/kBpqYtbap97pRH0Xfz3EV4aT4bLtZJMSSu17qyZlZw6oSxq3sWSmXQbw==
X-Received: by 2002:a17:90a:a08d:: with SMTP id
 r13mr9639673pjp.191.1635388910551;
 Wed, 27 Oct 2021 19:41:50 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 27/56] tcg/optimize: Split out fold_movcond
Date: Wed, 27 Oct 2021 19:41:02 -0700
Message-Id: <20211028024131.1492790-28-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::1036;
 envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1036.google.com
X-Spam_score_int: -1
X-Spam_score: -0.2
X-Spam_bar: /
X-Spam_report: (-0.2 / 5.0 requ) DKIM_SIGNED=0.1, DKIM_VALID=-0.1,
 DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001,
 SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635390436817100001

Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 56 ++++++++++++++++++++++++++++----------------------
 1 file changed, 31 insertions(+), 25 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 9d1d045363..110b3d1cc2 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -922,6 +922,34 @@ static bool fold_mb(OptContext *ctx, TCGOp *op)
     return true;
 }
=20
+static bool fold_movcond(OptContext *ctx, TCGOp *op)
+{
+    TCGOpcode opc =3D op->opc;
+    TCGCond cond =3D op->args[5];
+    int i =3D do_constant_folding_cond(opc, op->args[1], op->args[2], cond=
);
+
+    if (i >=3D 0) {
+        return tcg_opt_gen_mov(ctx, op, op->args[0], op->args[4 - i]);
+    }
+
+    if (arg_is_const(op->args[3]) && arg_is_const(op->args[4])) {
+        uint64_t tv =3D arg_info(op->args[3])->val;
+        uint64_t fv =3D arg_info(op->args[4])->val;
+
+        opc =3D (opc =3D=3D INDEX_op_movcond_i32
+               ? INDEX_op_setcond_i32 : INDEX_op_setcond_i64);
+
+        if (tv =3D=3D 1 && fv =3D=3D 0) {
+            op->opc =3D opc;
+            op->args[3] =3D cond;
+        } else if (fv =3D=3D 1 && tv =3D=3D 0) {
+            op->opc =3D opc;
+            op->args[3] =3D tcg_invert_cond(cond);
+        }
+    }
+    return false;
+}
+
 static bool fold_mul(OptContext *ctx, TCGOp *op)
 {
     return fold_const2(ctx, op);
@@ -1715,31 +1743,6 @@ void tcg_optimize(TCGContext *s)
             }
             break;
=20
-        CASE_OP_32_64(movcond):
-            i =3D do_constant_folding_cond(opc, op->args[1],
-                                         op->args[2], op->args[5]);
-            if (i >=3D 0) {
-                tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[4 - i]);
-                continue;
-            }
-            if (arg_is_const(op->args[3]) && arg_is_const(op->args[4])) {
-                uint64_t tv =3D arg_info(op->args[3])->val;
-                uint64_t fv =3D arg_info(op->args[4])->val;
-                TCGCond cond =3D op->args[5];
-
-                if (fv =3D=3D 1 && tv =3D=3D 0) {
-                    cond =3D tcg_invert_cond(cond);
-                } else if (!(tv =3D=3D 1 && fv =3D=3D 0)) {
-                    break;
-                }
-                op->args[3] =3D cond;
-                op->opc =3D opc =3D (opc =3D=3D INDEX_op_movcond_i32
-                                 ? INDEX_op_setcond_i32
-                                 : INDEX_op_setcond_i64);
-            }
-            break;
-
-
         default:
             break;
=20
@@ -1791,6 +1794,9 @@ void tcg_optimize(TCGContext *s)
         case INDEX_op_mb:
             done =3D fold_mb(&ctx, op);
             break;
+        CASE_OP_32_64(movcond):
+            done =3D fold_movcond(&ctx, op);
+            break;
         CASE_OP_32_64(mul):
             done =3D fold_mul(&ctx, op);
             break;
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635391591; cv=none;
	d=zohomail.com; s=zohoarc;
	b=bcZjlf/pazIaRU5gzYeSQjAQ7OvQz/Uw6J6wWJn7YLgO8TTV8eij1Nh/8I/GGt+PUfTJKZlyl/EmFHIaKosVXJehIoo3ypNC/DXEMfi55+Qr/Tnn0QF1uSvQFuCqfjKciekSm2XKGkBT+I1W7V6SWl8yVp8PssnFnXIdGWOAFvs=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635391591;
 h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=UhofiOMOxfG85+VIZHMXYK/5ma+X06jKCdYHbFqq/90=;
	b=ZTzVK8WVwLaE37ff0lgGUghK/u8KXsNLTmwh+FMXA7deCMD47FoOGzrx0NJSK7zXsTSnWNJri1aORd2D9uh55GKbohnjQBILJeJORhc7xcBp3zYkXUNLDltGJyBEGvEDF/IV9T0/7qnmyHx70symjJJMbK3RMdf7mPRr06mmk+I=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635391591413157.17010201090045;
 Wed, 27 Oct 2021 20:26:31 -0700 (PDT)
Received: from localhost ([::1]:42554 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfw3h-0005WU-Ox
	for importer@patchew.org; Wed, 27 Oct 2021 23:26:29 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59204)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMe-0004sk-6V
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:42:02 -0400
Received: from mail-pf1-x42f.google.com ([2607:f8b0:4864:20::42f]:46863)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMX-0003Yf-Qb
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:59 -0400
Received: by mail-pf1-x42f.google.com with SMTP id x66so4534203pfx.13
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:52 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.50
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:50 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=UhofiOMOxfG85+VIZHMXYK/5ma+X06jKCdYHbFqq/90=;
 b=i8BVd1CG0wgU/0fe2RS/XXrA/pzCHKE8YSE1Nef2ay14vVO9JXDpL1r2ehGUMb11SC
 asyEHlYzZV2hxnWxogd8NgYpOybb/7TPr2PMAsVLyC/Ajr1nnOW7q0/a/oRbOz1ateA1
 kT+4muNhCoG+4KYw05RLP3oiXWhEgizkAiYYqDp8zvR183dSluTJPUHFLB2Y75AYqCQt
 eiQ97GYLOo6EfmTsr+d9rtN6X/dk4Qc3VnE3ICWlNeU1+DbcFYxJDz2CZNhtU1o1WRUu
 PCwtZ3mZhlF4OWGB+ShDO9SFD03PCF+FPDsQatlJJ4dhEoZ1mCsh+J/8ZtA6uTat2vdE
 ZJOA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=UhofiOMOxfG85+VIZHMXYK/5ma+X06jKCdYHbFqq/90=;
 b=knyD9nT8tZYp5Ub036nzbF6m743cur+r/drVsdhG5NBkJVDXm/qDHEQND0szPlbl4D
 mEiylhlkJq981fpH9tbdxiJCpd/9c3cHt9krH3MknAT5hbHaWTJxnhhBYdiUY4Rn5KBT
 qLvo2ujD5uTrBe5T9CZle8Z3XtS6gbHeGY14gQzDCjKaaTItyhdhuStKNZS2m4Z2GrWl
 Y2M1vzRptnG82LTu6x2cCgBr1yergLuvQcNthtcD06j7sbGjtUXRad65EMeBH4C6Y1yY
 i4/Lb1OGUzn0FejRKfKvDfnd3KKbtJzuKWT2TzNnUSpgsJqJul3G1bR3MuDHJRSlB5st
 vIHQ==
X-Gm-Message-State: AOAM53161XTOMqB24uPH/eEgLRGp4CHWwSpskC+rD1YNKegf4EOigUWy
 3r3QREM7DLCSqnxFq7mW4a2fIeCmsCB4vw==
X-Google-Smtp-Source: 
 ABdhPJwM4mSC0jOut08UeehG3C3PJtTgxQUOdXBsLuvUEZWemGmZZucPS2Tp475qeWNGUzKI0Zdeqg==
X-Received: by 2002:a05:6a00:2410:b0:40e:7d8:ad7f with SMTP id
 z16-20020a056a00241000b0040e07d8ad7fmr1494640pfh.25.1635388911173;
 Wed, 27 Oct 2021 19:41:51 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 28/56] tcg/optimize: Split out fold_extract2
Date: Wed, 27 Oct 2021 19:41:03 -0700
Message-Id: <20211028024131.1492790-29-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::42f;
 envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42f.google.com
X-Spam_score_int: -1
X-Spam_score: -0.2
X-Spam_bar: /
X-Spam_report: (-0.2 / 5.0 requ) DKIM_SIGNED=0.1, DKIM_VALID=-0.1,
 DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001,
 SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635391593460100001

Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 39 ++++++++++++++++++++++-----------------
 1 file changed, 22 insertions(+), 17 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 110b3d1cc2..faedbdbfb8 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -888,6 +888,25 @@ static bool fold_eqv(OptContext *ctx, TCGOp *op)
     return fold_const2(ctx, op);
 }
=20
+static bool fold_extract2(OptContext *ctx, TCGOp *op)
+{
+    if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) {
+        uint64_t v1 =3D arg_info(op->args[1])->val;
+        uint64_t v2 =3D arg_info(op->args[2])->val;
+        int shr =3D op->args[3];
+
+        if (op->opc =3D=3D INDEX_op_extract2_i64) {
+            v1 >>=3D shr;
+            v2 <<=3D 64 - shr;
+        } else {
+            v1 =3D (uint32_t)v1 >> shr;
+            v2 =3D (int32_t)v2 << (32 - shr);
+        }
+        return tcg_opt_gen_movi(ctx, op, op->args[0], v1 | v2);
+    }
+    return false;
+}
+
 static bool fold_exts(OptContext *ctx, TCGOp *op)
 {
     return fold_const1(ctx, op);
@@ -1726,23 +1745,6 @@ void tcg_optimize(TCGContext *s)
             }
             break;
=20
-        CASE_OP_32_64(extract2):
-            if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) {
-                uint64_t v1 =3D arg_info(op->args[1])->val;
-                uint64_t v2 =3D arg_info(op->args[2])->val;
-                int shr =3D op->args[3];
-
-                if (opc =3D=3D INDEX_op_extract2_i64) {
-                    tmp =3D (v1 >> shr) | (v2 << (64 - shr));
-                } else {
-                    tmp =3D (int32_t)(((uint32_t)v1 >> shr) |
-                                    ((uint32_t)v2 << (32 - shr)));
-                }
-                tcg_opt_gen_movi(&ctx, op, op->args[0], tmp);
-                continue;
-            }
-            break;
-
         default:
             break;
=20
@@ -1777,6 +1779,9 @@ void tcg_optimize(TCGContext *s)
         CASE_OP_32_64(eqv):
             done =3D fold_eqv(&ctx, op);
             break;
+        CASE_OP_32_64(extract2):
+            done =3D fold_extract2(&ctx, op);
+            break;
         CASE_OP_32_64(ext8s):
         CASE_OP_32_64(ext16s):
         case INDEX_op_ext32s_i64:
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635391186; cv=none;
	d=zohomail.com; s=zohoarc;
	b=kHC3wuHqfGpjNcWGr5kDzf6SjHdZKEdz5kCtkgeHf39zs/igqhfqHl2Vx3XvQzGjbd+rSMAO0kWSbPWqiy4xB7s3evJMXLin1mtkoXRySc4i+llqZMW89UtFHcioBD70OYS4OdQGeHofKb8qypdx+vr64g0L63YkhsoFtbWp7XE=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635391186;
 h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=F1AVpbG5TP2qMj+ELcN61uRCpwzeIi0grwtPZKRIVFo=;
	b=dvBV0VoQ7RuGEG+5WON+kX2rgAPTEomPyAWwtPPaMrT0njYY2bbJ9SBvGBgblI7xlE1wPbBjWtyA2eoSiawBa4+MDavutTHdW9LWfr6oYvtYdTvqsDNpX0LbDqtCuNoVsXZF3wEqcR5whBMrZn2kln53xHgD8B8zODS7TTVcEe4=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635391186018424.32118619970345;
 Wed, 27 Oct 2021 20:19:46 -0700 (PDT)
Received: from localhost ([::1]:56216 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvxA-0003Zk-T9
	for importer@patchew.org; Wed, 27 Oct 2021 23:19:44 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59146)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMb-0004re-Du
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:58 -0400
Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]:40669)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMX-0003c1-R9
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:57 -0400
Received: by mail-pj1-x102e.google.com with SMTP id
 n36-20020a17090a5aa700b0019fa884ab85so6754618pji.5
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:52 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.51
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:51 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=F1AVpbG5TP2qMj+ELcN61uRCpwzeIi0grwtPZKRIVFo=;
 b=YS2QI95FDAof3Qb3soSPPKDYgYDnS82Xed+0nljPLJv8x4o+pOoPXugVbNJACE7byW
 fC1PvMMWZQbvO5A9l+f8NbKzFZ1TbrrAXvjgNVxfWWLNcToUuBwXpk5IUki75ziFdlN5
 dQHVIS9JqYnv2biLZrHLykpN//IdBoZu6LniWzrYJdD2vUcRwaz9McVxPn3AZdtb86Cy
 LYV8HM4asIiRhfn4W2cwJ6VS9YJVAKj3Xsv3/hqo/d/xSNCV21OEoSlmYCxOX6EuqAH6
 utWA3y0WslGYDT95Hci0TBC/En7tMWUn+Du+gb/ALA/sL6iPaW6QRALlR698wNhkulLJ
 j6Bw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=F1AVpbG5TP2qMj+ELcN61uRCpwzeIi0grwtPZKRIVFo=;
 b=QMVl2k5zK+FZY5CgoMagng8KPFpW2qTnstL76Jc5t1Y8MsouOEN3/Ct+q9dkW/ztVB
 0ag6GSFHABXbVePvnZpFLtjIebj+vlVP4zayqS4LiilYSAHkSEbLIl7hZGNsvsArl3J+
 LbjqbFZPkDLrjjysB/K7/rSNOQyzBL3pwj9J6wn8D1JGhLjfS6u5KU5nkQTbZ8XN14is
 xdwghn43yeu4fEUuLnnI/IJLtpgns8rKahWnOd5TUAWIuS83jLMmUWOfQj85uBfmB5mE
 omL6udF+kXpH+GvSfvFfEh/wdxLW0ghpEoXzGlCVKrz2W8c6fQ1FRtV5yuK8sOJFSqDB
 5aSw==
X-Gm-Message-State: AOAM531vTX2Tur8bXkED801spdfcz9PWzStuRHT3nQafl0YIDdwsor98
 jR3hrSUxxqE2agMyPITweznDckz6ad2pcg==
X-Google-Smtp-Source: 
 ABdhPJzO7/i/Q7dhE9WHv9fMXfx+ybEyEnPtdZ+T3NbPH6Czkx1j8bGCF7FomZjO6aYdiyW/aCDXAg==
X-Received: by 2002:a17:90a:4f41:: with SMTP id
 w1mr1574003pjl.117.1635388911981;
 Wed, 27 Oct 2021 19:41:51 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 29/56] tcg/optimize: Split out fold_extract, fold_sextract
Date: Wed, 27 Oct 2021 19:41:04 -0700
Message-Id: <20211028024131.1492790-30-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::102e;
 envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102e.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635391187397100001

Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 48 ++++++++++++++++++++++++++++++------------------
 1 file changed, 30 insertions(+), 18 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index faedbdbfb8..3bd5f043c8 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -888,6 +888,18 @@ static bool fold_eqv(OptContext *ctx, TCGOp *op)
     return fold_const2(ctx, op);
 }
=20
+static bool fold_extract(OptContext *ctx, TCGOp *op)
+{
+    if (arg_is_const(op->args[1])) {
+        uint64_t t;
+
+        t =3D arg_info(op->args[1])->val;
+        t =3D extract64(t, op->args[2], op->args[3]);
+        return tcg_opt_gen_movi(ctx, op, op->args[0], t);
+    }
+    return false;
+}
+
 static bool fold_extract2(OptContext *ctx, TCGOp *op)
 {
     if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) {
@@ -1126,6 +1138,18 @@ static bool fold_setcond2(OptContext *ctx, TCGOp *op)
     return tcg_opt_gen_movi(ctx, op, op->args[0], i);
 }
=20
+static bool fold_sextract(OptContext *ctx, TCGOp *op)
+{
+    if (arg_is_const(op->args[1])) {
+        uint64_t t;
+
+        t =3D arg_info(op->args[1])->val;
+        t =3D sextract64(t, op->args[2], op->args[3]);
+        return tcg_opt_gen_movi(ctx, op, op->args[0], t);
+    }
+    return false;
+}
+
 static bool fold_shift(OptContext *ctx, TCGOp *op)
 {
     return fold_const2(ctx, op);
@@ -1727,24 +1751,6 @@ void tcg_optimize(TCGContext *s)
             }
             break;
=20
-        CASE_OP_32_64(extract):
-            if (arg_is_const(op->args[1])) {
-                tmp =3D extract64(arg_info(op->args[1])->val,
-                                op->args[2], op->args[3]);
-                tcg_opt_gen_movi(&ctx, op, op->args[0], tmp);
-                continue;
-            }
-            break;
-
-        CASE_OP_32_64(sextract):
-            if (arg_is_const(op->args[1])) {
-                tmp =3D sextract64(arg_info(op->args[1])->val,
-                                 op->args[2], op->args[3]);
-                tcg_opt_gen_movi(&ctx, op, op->args[0], tmp);
-                continue;
-            }
-            break;
-
         default:
             break;
=20
@@ -1779,6 +1785,9 @@ void tcg_optimize(TCGContext *s)
         CASE_OP_32_64(eqv):
             done =3D fold_eqv(&ctx, op);
             break;
+        CASE_OP_32_64(extract):
+            done =3D fold_extract(&ctx, op);
+            break;
         CASE_OP_32_64(extract2):
             done =3D fold_extract2(&ctx, op);
             break;
@@ -1856,6 +1865,9 @@ void tcg_optimize(TCGContext *s)
         case INDEX_op_setcond2_i32:
             done =3D fold_setcond2(&ctx, op);
             break;
+        CASE_OP_32_64(sextract):
+            done =3D fold_sextract(&ctx, op);
+            break;
         CASE_OP_32_64_VEC(sub):
             done =3D fold_sub(&ctx, op);
             break;
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635390218; cv=none;
	d=zohomail.com; s=zohoarc;
	b=dER+ZRZBF4MD6kTPiMJAujaNvseAN5OvXGTlbwnhRDzjTUqtju02rEaUw7lYpeYLUHR6ytd/63Cfu5GaBQ3lsogXXGd79XpJlHMkcprRLcc1+3lWoBmUOHrhgDodZrAzNjnjrUEapbFksKm5SVs+pV9Mb0GjbxsmALqKtjt3qDc=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635390218;
 h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=OJWu7yUFUqO6SxASLIr2hIPwbeHCDr8GBSl6LyJ/KfE=;
	b=WuYq7liy9TzlKhTrwofPlo5VJ2Z4y1JFBo5giUIHOVt/hbJt/nWsoxDmWqCfGGyOGyytO1ezQLpgLxiElYXXwxtusl8840b9g26vZ8Lk48SBVK8lRQG6pEDxNymjX3DZSZbjXgo3dmOkyrfBmTT2j7i6dPI97Rn10LKpCweN2vA=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635390218052823.4861420483594;
 Wed, 27 Oct 2021 20:03:38 -0700 (PDT)
Received: from localhost ([::1]:37288 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvhY-0005cC-UN
	for importer@patchew.org; Wed, 27 Oct 2021 23:03:36 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59188)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMd-0004sj-P9
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:42:02 -0400
Received: from mail-pg1-x52c.google.com ([2607:f8b0:4864:20::52c]:39673)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMX-0003h6-Rj
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:58 -0400
Received: by mail-pg1-x52c.google.com with SMTP id g184so4925448pgc.6
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:53 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.52
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:52 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=OJWu7yUFUqO6SxASLIr2hIPwbeHCDr8GBSl6LyJ/KfE=;
 b=x/7NcGxJq+yOHrZwau6hBNkHG8txCgYZ0+Xt1KZgTgVCuXpyVO3Omekn1L7PRHClRw
 8g5HKxKsUMEEs8M11Jew5KZgJoCZYJ40rLkcw5ktwCqKBxtEfGka/bq1HuSJy8/3qhTu
 v2r9pCDbmW5I20VO7fGgwE+hracNSkYO2XbVy3T85KiZz1a3gHWMKmX/8u38OVQFYHqn
 Lz+r0vyTlGqQtaIKJW8DDPHkL/fI5VcRX2vXMdYs46QeWb+QY2F6nSoLVGTnVVokGGLc
 SBmTmiSW04sVwJ2Cznd5jdZrQ3QNZJl8LYTZvzQuLsvpr6VDCEWBhzLWidG9bqeLbl3W
 SHUA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=OJWu7yUFUqO6SxASLIr2hIPwbeHCDr8GBSl6LyJ/KfE=;
 b=vZ3Su8p8S5qMGamStwCnnrC53pNijDkLhlPgyLw73/owtuF/r19phqMOv05oTG3Ev1
 mnmfstsFYl1Q/nhLvrzaSc6YpWKHtpP9YdW05rlL9BWZcZBK4eFYdq5TDEkzV7j62FJf
 6GP9JQN98VxRNPKQGQMdgRec2iau44Q6F/dxxe3h9dxgFuJds0hirccZYMAI0UEa0s+N
 GW3lxbXb21kj8wOfj/Ym/FQrDnYeIFtG1Y6r1aTLBbS+qiBDGu/ZzjgxifUmeMGc0vFV
 wmf6TkwRCAjbgMwyuvq02AfFSv1mvAWWUscfJgpZ96IY6srrlEYoVK1lx60Q0NkCFMi/
 uMsA==
X-Gm-Message-State: AOAM533sBCgWeaAB3GCmZfomyyWgLk+FdWErCwB3Z5g7EmgfOfTFKCel
 yUjAeWasZkOuICX1zxZdPWTxmST7qTOhkg==
X-Google-Smtp-Source: 
 ABdhPJyO+O/cquYIkgM308JnSWCHgRJNX9wr+BSb+2/idxoIuQ4FGNas+xLb1oro9u8XYuwcBnvjcQ==
X-Received: by 2002:a05:6a00:2186:b0:473:5a61:a7f6 with SMTP id
 h6-20020a056a00218600b004735a61a7f6mr1482892pfi.15.1635388912561;
 Wed, 27 Oct 2021 19:41:52 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 30/56] tcg/optimize: Split out fold_deposit
Date: Wed, 27 Oct 2021 19:41:05 -0700
Message-Id: <20211028024131.1492790-31-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::52c;
 envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52c.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635390219051100001

Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 25 +++++++++++++++----------
 1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 3bd5f043c8..2c57d08760 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -878,6 +878,18 @@ static bool fold_ctpop(OptContext *ctx, TCGOp *op)
     return fold_const1(ctx, op);
 }
=20
+static bool fold_deposit(OptContext *ctx, TCGOp *op)
+{
+    if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) {
+        uint64_t t1 =3D arg_info(op->args[1])->val;
+        uint64_t t2 =3D arg_info(op->args[2])->val;
+
+        t1 =3D deposit64(t1, op->args[3], op->args[4], t2);
+        return tcg_opt_gen_movi(ctx, op, op->args[0], t1);
+    }
+    return false;
+}
+
 static bool fold_divide(OptContext *ctx, TCGOp *op)
 {
     return fold_const2(ctx, op);
@@ -1741,16 +1753,6 @@ void tcg_optimize(TCGContext *s)
             }
             break;
=20
-        CASE_OP_32_64(deposit):
-            if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) {
-                tmp =3D deposit64(arg_info(op->args[1])->val,
-                                op->args[3], op->args[4],
-                                arg_info(op->args[2])->val);
-                tcg_opt_gen_movi(&ctx, op, op->args[0], tmp);
-                continue;
-            }
-            break;
-
         default:
             break;
=20
@@ -1778,6 +1780,9 @@ void tcg_optimize(TCGContext *s)
         CASE_OP_32_64(ctpop):
             done =3D fold_ctpop(&ctx, op);
             break;
+        CASE_OP_32_64(deposit):
+            done =3D fold_deposit(&ctx, op);
+            break;
         CASE_OP_32_64(div):
         CASE_OP_32_64(divu):
             done =3D fold_divide(&ctx, op);
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635390674; cv=none;
	d=zohomail.com; s=zohoarc;
	b=XdeI9Up+zw53o70+9DOMejEtWF1VuFUfZaJyIlKYCnfzrtSLClzzTgZdart4gJM/oC8vJz93QNXgDnXMhZDzEhWuuUwiUdQOS2i+gBVnoUxvj9/8SuMz1gGx6sAnxNI4xKv67vdZFf1w1627s0R3L3KGArEIqt77xhHt9ZwkzXo=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635390674;
 h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=I6H+U1ruTrcwXeKIJx0xdeAaOvB86vmaSGOOcxgJmqQ=;
	b=nStinPZw9IhFAMZx5tPNxstQfxr2V8rrXG/T/SkpIAjgsEYGdXqxWc8+dZtP2LcF0OUAwPEgWvBqzmzLi1tE3HihdZD3YJ00i9hYSDqJVqeKDRwtpSF+88ffzpeAt7Vt5Ul03ozlfvBsxDNR8d/sy1TVImxzqYGSs+dLVBbCq1M=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635390674253710.0065392938727;
 Wed, 27 Oct 2021 20:11:14 -0700 (PDT)
Received: from localhost ([::1]:54324 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvov-0000Av-9p
	for importer@patchew.org; Wed, 27 Oct 2021 23:11:13 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59206)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMe-0004sl-6Y
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:42:02 -0400
Received: from mail-pg1-x529.google.com ([2607:f8b0:4864:20::529]:36599)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMZ-0003ie-2U
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:59 -0400
Received: by mail-pg1-x529.google.com with SMTP id 75so4951147pga.3
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:54 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.52
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:52 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=I6H+U1ruTrcwXeKIJx0xdeAaOvB86vmaSGOOcxgJmqQ=;
 b=W4jjc5T2G9pC8gRpKmVDcEmJQ3Q/tyaNss8sb3fL/Z4b2r84mUJ7UqoTGbehRIkVrF
 vxP6kZEX0YBRaQIQ84abFJ2E8fw0mA0AiuW7oxhmAtWsoO5siHh5HVSUq63zoQL6phAv
 mdn+0wblrR1pYckDbtH0jWm47wEkUEMXjnbqSIV1W9DwB18axdEZlQ1GQVLn07uQmIT8
 AJbEgk+R+SQtHJEi9LYnmfiERB1Gmzf8DaqH7dYwP0Br0Osfcxsnmzir+PvgjeqvWh4D
 kdVCk3dDOvtPrfvvO0uPnVaTGsYUpddFqXavA+L9lFX0EHPszDVI0tgDt4l2glE4Dk4e
 dDdg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=I6H+U1ruTrcwXeKIJx0xdeAaOvB86vmaSGOOcxgJmqQ=;
 b=voR1VVR3mXhzXz60y092Nuk/WOq87nEIhYD3OunyBJ0mjQx7+XVZOkb9bszvFG5m6e
 MzeExZlvoIReeMXQLkD5FK3dAgosMqIg935hf5aiqgCVYEfL13eVDlhRX2/qmcvlC25X
 qUBHauHiLgV3JGM9/8IkkBd46RLn0wS+z3oP3YaCYsX+a/uTskU2AGbO9/hl0o3AKZJE
 r5UPfHNoUyjn3Uj/DSzjcoDbyqBA9ARRQBl5jRdaPUskni7AG5wZDU30uvxD6Tf38Phd
 icC8i1f3LD4QNPPUT8kinUP0fRwWkJjyHv9mOdbZfbwOVnktqQCQT7719xeTtWftsoG+
 qkaw==
X-Gm-Message-State: AOAM533/DnWaWbkn9M6kU8cGnFvbJIXJjb6GONpg/YHCwCIKBFWmUtpa
 qkb7lmH0jZLplIctkvMGndyUpqBwMDew9A==
X-Google-Smtp-Source: 
 ABdhPJyW7ZqlA1Yte+mNpRHOXctdQj+7h5h0kiCb05iWPAsSHUUR7y8L5vw/7E1OnuK4F3k4VP3hEQ==
X-Received: by 2002:a05:6a00:bc1:b0:47b:f093:eb4e with SMTP id
 x1-20020a056a000bc100b0047bf093eb4emr1353814pfu.55.1635388913196;
 Wed, 27 Oct 2021 19:41:53 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 31/56] tcg/optimize: Split out fold_count_zeros
Date: Wed, 27 Oct 2021 19:41:06 -0700
Message-Id: <20211028024131.1492790-32-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::529;
 envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x529.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635390674556100001

Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 32 ++++++++++++++++++--------------
 1 file changed, 18 insertions(+), 14 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 2c57d08760..dd65f1afcd 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -873,6 +873,20 @@ static bool fold_call(OptContext *ctx, TCGOp *op)
     return true;
 }
=20
+static bool fold_count_zeros(OptContext *ctx, TCGOp *op)
+{
+    if (arg_is_const(op->args[1])) {
+        uint64_t t =3D arg_info(op->args[1])->val;
+
+        if (t !=3D 0) {
+            t =3D do_constant_folding(op->opc, t, 0);
+            return tcg_opt_gen_movi(ctx, op, op->args[0], t);
+        }
+        return tcg_opt_gen_mov(ctx, op, op->args[0], op->args[2]);
+    }
+    return false;
+}
+
 static bool fold_ctpop(OptContext *ctx, TCGOp *op)
 {
     return fold_const1(ctx, op);
@@ -1739,20 +1753,6 @@ void tcg_optimize(TCGContext *s)
             }
             break;
=20
-        CASE_OP_32_64(clz):
-        CASE_OP_32_64(ctz):
-            if (arg_is_const(op->args[1])) {
-                TCGArg v =3D arg_info(op->args[1])->val;
-                if (v !=3D 0) {
-                    tmp =3D do_constant_folding(opc, v, 0);
-                    tcg_opt_gen_movi(&ctx, op, op->args[0], tmp);
-                } else {
-                    tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[2]);
-                }
-                continue;
-            }
-            break;
-
         default:
             break;
=20
@@ -1777,6 +1777,10 @@ void tcg_optimize(TCGContext *s)
         case INDEX_op_brcond2_i32:
             done =3D fold_brcond2(&ctx, op);
             break;
+        CASE_OP_32_64(clz):
+        CASE_OP_32_64(ctz):
+            done =3D fold_count_zeros(&ctx, op);
+            break;
         CASE_OP_32_64(ctpop):
             done =3D fold_ctpop(&ctx, op);
             break;
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635391428; cv=none;
	d=zohomail.com; s=zohoarc;
	b=gTJLGA7+f/UtdJM6+H8BjBiUaXMkjPcAUo6QjI/w95BhHlP5IcvuVJOlBLIfGYiJ5Nec24H9M2QjHU8sajp+yWYQ3gJUDp6IFjFjcR8NyysKSjBMdSCYrSk+7LaWSs/wHF8jTeXXPfuaZ+8bAh4IYZcCjqwSMa9YmfALHg30FpA=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635391428;
 h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=5pO8srHxeyy8XfwYL1eqggORkYu4mPynLSww9CDHj/M=;
	b=DdgUmRLWH/oBDVK51J4Fn7F3kfmUoTP6Hqiv+04b6VVsGkI0slOJFb4QpctsE64aF1sevKGrjWQajAe07AUPtpXBOziKpz6ie0kH4FSRSUXtRcyHXJnO5+Ug2hGgkIl+suDWtdJBwf7pL6T7y3imylTaU+FpehdW/rQp/E/ZsLE=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635391428418942.5501758996321;
 Wed, 27 Oct 2021 20:23:48 -0700 (PDT)
Received: from localhost ([::1]:35842 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfw14-0000iR-QX
	for importer@patchew.org; Wed, 27 Oct 2021 23:23:47 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59164)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMc-0004rr-Kb
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:59 -0400
Received: from mail-pg1-x529.google.com ([2607:f8b0:4864:20::529]:43977)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMZ-0003ir-2b
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:58 -0400
Received: by mail-pg1-x529.google.com with SMTP id r2so4896430pgl.10
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:54 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.53
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:53 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=5pO8srHxeyy8XfwYL1eqggORkYu4mPynLSww9CDHj/M=;
 b=gweFX/RQW/K6p84o+5FbsGUyqI8JsA8SD7njnwDEQ9e2uUEmhhRnkcBNKJsKpuSTjk
 IUfM0YXtgC9HVXOj8lrlydYchx5O/YotNbrCxH5XIbUqUKyuYeIt6j934nOjk1qMNZLN
 t92hRCgotN7GE77SvgBiHd1QboTuxw3gcXAYCDe1nXgqLCprntZ0N7onB1PB0SHIoCYN
 oGb79B7CEzzUulrYe61wAonyVn8UrtozQU5lYaOXaD7gAJbX1db9WfcutDwMtv8+jqQ6
 MXNHOciE6sUPOwOVnyPt99/xvyWXpX70wY22p6uyf0pNKMj4df8Go4Jaj6jm+mO0JDfj
 6UVg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=5pO8srHxeyy8XfwYL1eqggORkYu4mPynLSww9CDHj/M=;
 b=n1sWzuFYvO0mpYuNUjQZ1oiLRlZUqA+NkIbDfAKJTxMU57OBBTjKbVhgLdQ9d8GK11
 L3zdMs2k4iF1zZMIdG2jiuLyRHSIf+bjQonNr+xfzrERUWlmh4eLtkJCYBVGvRnpTnwh
 kpXjC/l2ustd1h6lWKN4K7KktEKmq7oMQtDiGuGthkxeNb1avfO5Y99BeM50P62yWdZA
 EoFfM33KQOj2PaoZuK0gshK2SF+Eh6YUuQuVlrpyiNdeOzHy5hnDXRUeppO0xjcSd35t
 Z19xt/6y7DxTtIeBCxg9fdX8/+/lWDmor24rjKjFjwi8bmgBqfcwX1GsKvrNEAqZt+DB
 rvkw==
X-Gm-Message-State: AOAM532HI+hULzUoHKlo5hmuqVnJNI2Z20fdm73AveSdaUbLEgy6LS54
 B28iRZx230lvPR8vXhtBoFyyogE+gVvaFA==
X-Google-Smtp-Source: 
 ABdhPJwOhIvoE5fHBuLW+NuONsUeuRq1QCcxsioCiesQvRFnG+VqDi+yN2A3RCOS2mb6X1aAQ2XrNw==
X-Received: by 2002:a62:6d86:0:b0:448:152d:83a4 with SMTP id
 i128-20020a626d86000000b00448152d83a4mr1504242pfc.38.1635388913792;
 Wed, 27 Oct 2021 19:41:53 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 32/56] tcg/optimize: Split out fold_bswap
Date: Wed, 27 Oct 2021 19:41:07 -0700
Message-Id: <20211028024131.1492790-33-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::529;
 envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x529.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635391429160100001

Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 27 ++++++++++++++++-----------
 1 file changed, 16 insertions(+), 11 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index dd65f1afcd..5374c230da 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -841,6 +841,17 @@ static bool fold_brcond2(OptContext *ctx, TCGOp *op)
     return false;
 }
=20
+static bool fold_bswap(OptContext *ctx, TCGOp *op)
+{
+    if (arg_is_const(op->args[1])) {
+        uint64_t t =3D arg_info(op->args[1])->val;
+
+        t =3D do_constant_folding(op->opc, t, op->args[2]);
+        return tcg_opt_gen_movi(ctx, op, op->args[0], t);
+    }
+    return false;
+}
+
 static bool fold_call(OptContext *ctx, TCGOp *op)
 {
     TCGContext *s =3D ctx->tcg;
@@ -1742,17 +1753,6 @@ void tcg_optimize(TCGContext *s)
             }
             break;
=20
-        CASE_OP_32_64(bswap16):
-        CASE_OP_32_64(bswap32):
-        case INDEX_op_bswap64_i64:
-            if (arg_is_const(op->args[1])) {
-                tmp =3D do_constant_folding(opc, arg_info(op->args[1])->va=
l,
-                                          op->args[2]);
-                tcg_opt_gen_movi(&ctx, op, op->args[0], tmp);
-                continue;
-            }
-            break;
-
         default:
             break;
=20
@@ -1777,6 +1777,11 @@ void tcg_optimize(TCGContext *s)
         case INDEX_op_brcond2_i32:
             done =3D fold_brcond2(&ctx, op);
             break;
+        CASE_OP_32_64(bswap16):
+        CASE_OP_32_64(bswap32):
+        case INDEX_op_bswap64_i64:
+            done =3D fold_bswap(&ctx, op);
+            break;
         CASE_OP_32_64(clz):
         CASE_OP_32_64(ctz):
             done =3D fold_count_zeros(&ctx, op);
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635391764; cv=none;
	d=zohomail.com; s=zohoarc;
	b=Y9oxJaRR46HB5uacceFoITXC+1bUV/ad+iMJtFof6xm0Qs4RAF2jjmUj04W37oXNPAEVt0SmtepheE+lI+7RMXuJ42ifaMVB8Xtif3EucGfctzRHG2WqGz6soa7u2tVFNcl55Lc6FIk1FZZ9xvvJwRAVbHHoidOgllelSjjc12s=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635391764;
 h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=fwDfuaHLd2phF2WKQRX+NWoB84U/ilhRWeGAC07+3IE=;
	b=As2s9jhaXBcbrzdavUBqzhtzsBjwUZFAMAC0RJLKHU3b19AT1GKfDrsBdCjQyqW/zY3IiFLTQI/oqh1xKVHM+cZODD3qgNs+ILg/2daSXmCWFHIQ+OcjVl1SFzqmBZRxhdmwrGpOrvAEKF19RPyUIM1EQBhrL9+nQSRa3mml80k=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635391764291611.6667162841254;
 Wed, 27 Oct 2021 20:29:24 -0700 (PDT)
Received: from localhost ([::1]:48148 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfw6V-00015B-17
	for importer@patchew.org; Wed, 27 Oct 2021 23:29:23 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59166)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMd-0004rv-Ms
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:42:02 -0400
Received: from mail-pg1-x52c.google.com ([2607:f8b0:4864:20::52c]:35730)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMb-0003iw-3a
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:58 -0400
Received: by mail-pg1-x52c.google.com with SMTP id q187so4966439pgq.2
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:55 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.53
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:54 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=fwDfuaHLd2phF2WKQRX+NWoB84U/ilhRWeGAC07+3IE=;
 b=EVIz5wM6BJdcr+QB9fq2nzm/0+sbaYYr/zgzxZRdkf12tiHxc8baO9n3KefEtdXPGE
 gMe68nLf6zWifbhyswrYh/Os08+9qza4KogrxBZqFw/xs/9WpuWIAQYtM1LluFQ0UNgL
 SSP4OITiI1ogJy+2Y0pekDIG6lBXgfAfUl42H8Xc2YH+EmucPlTrgMi1QpHBwHyIrio9
 Wq80kdD8ZS5NOvMYNBAsu/BGyStWs/3YmyPDqhB2RckVrYfumiyE6ai+ucWj4bLKey/M
 spljy/594aEeFYHVFXQb1jEikZFk9IxLlskosoWSxtzPoNrM72W6X5H9b8r1cn3mxQWl
 QUXA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=fwDfuaHLd2phF2WKQRX+NWoB84U/ilhRWeGAC07+3IE=;
 b=a29+DbWSZlokqioaNAl9wqbV/X5CdR4Kt4XBA1YU6aUmzLMG9XHMxUwZL8pQ8jjw0f
 qir48M97tqQnnqONEz9EsbZ2yMFxJzMa9P561DWIerPS3wRWYMr+4A7yBCiZnrMmwrsd
 rOjSPjsZZAhCZUcP64A/MSv7lDLGJDb1FtfKVlNMvH8CjbyVjHqVfn90VKgRGcat4crW
 CUN6EEzY5AQkjVJeGMREbGKPCONV33pH0hNHKZ2IWJ1kRvM3Y8MgDcjGNs3kRdipdH8o
 9AngEqzkSrUkc17B2hBxpesNz0MPn3rFkoSEJMphhQCUvLrrOKP52//sqrj6u8Luw7cr
 0uIA==
X-Gm-Message-State: AOAM5328ywmeUOumJ24CebDoomO8kQdl3WjvgrMiomb0+ZSza4x09mxm
 M617OG0a++UfJboDApCD3zAC6q59qTlgOA==
X-Google-Smtp-Source: 
 ABdhPJy29laAWnR5uVCJ2YbTFeST/yxe2MD1yYOD5orMGK6cDuz7udQhlke67qs9Pcd9J/NfSZHZoQ==
X-Received: by 2002:a05:6a00:234f:b0:3eb:3ffd:6da2 with SMTP id
 j15-20020a056a00234f00b003eb3ffd6da2mr1461736pfj.15.1635388914452;
 Wed, 27 Oct 2021 19:41:54 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 33/56] tcg/optimize: Split out fold_dup, fold_dup2
Date: Wed, 27 Oct 2021 19:41:08 -0700
Message-Id: <20211028024131.1492790-34-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::52c;
 envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52c.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635391765333100001

Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 53 +++++++++++++++++++++++++++++---------------------
 1 file changed, 31 insertions(+), 22 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 5374c230da..8524fe1f8a 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -920,6 +920,31 @@ static bool fold_divide(OptContext *ctx, TCGOp *op)
     return fold_const2(ctx, op);
 }
=20
+static bool fold_dup(OptContext *ctx, TCGOp *op)
+{
+    if (arg_is_const(op->args[1])) {
+        uint64_t t =3D arg_info(op->args[1])->val;
+        t =3D dup_const(TCGOP_VECE(op), t);
+        return tcg_opt_gen_movi(ctx, op, op->args[0], t);
+    }
+    return false;
+}
+
+static bool fold_dup2(OptContext *ctx, TCGOp *op)
+{
+    if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) {
+        uint64_t t =3D deposit64(arg_info(op->args[1])->val, 32, 32,
+                               arg_info(op->args[2])->val);
+        return tcg_opt_gen_movi(ctx, op, op->args[0], t);
+    }
+
+    if (args_are_copies(op->args[1], op->args[2])) {
+        op->opc =3D INDEX_op_dup_vec;
+        TCGOP_VECE(op) =3D MO_32;
+    }
+    return false;
+}
+
 static bool fold_eqv(OptContext *ctx, TCGOp *op)
 {
     return fold_const2(ctx, op);
@@ -1731,28 +1756,6 @@ void tcg_optimize(TCGContext *s)
             done =3D tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[1]);
             break;
=20
-        case INDEX_op_dup_vec:
-            if (arg_is_const(op->args[1])) {
-                tmp =3D arg_info(op->args[1])->val;
-                tmp =3D dup_const(TCGOP_VECE(op), tmp);
-                tcg_opt_gen_movi(&ctx, op, op->args[0], tmp);
-                continue;
-            }
-            break;
-
-        case INDEX_op_dup2_vec:
-            assert(TCG_TARGET_REG_BITS =3D=3D 32);
-            if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) {
-                tcg_opt_gen_movi(&ctx, op, op->args[0],
-                                 deposit64(arg_info(op->args[1])->val, 32,=
 32,
-                                           arg_info(op->args[2])->val));
-                continue;
-            } else if (args_are_copies(op->args[1], op->args[2])) {
-                op->opc =3D INDEX_op_dup_vec;
-                TCGOP_VECE(op) =3D MO_32;
-            }
-            break;
-
         default:
             break;
=20
@@ -1796,6 +1799,12 @@ void tcg_optimize(TCGContext *s)
         CASE_OP_32_64(divu):
             done =3D fold_divide(&ctx, op);
             break;
+        case INDEX_op_dup_vec:
+            done =3D fold_dup(&ctx, op);
+            break;
+        case INDEX_op_dup2_vec:
+            done =3D fold_dup2(&ctx, op);
+            break;
         CASE_OP_32_64(eqv):
             done =3D fold_eqv(&ctx, op);
             break;
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635390438; cv=none;
	d=zohomail.com; s=zohoarc;
	b=XaTsCgxrK6yuh3hFIoekf//DqioaDUKhd8J8V+n2wJn7zgQBvAEEGLN7g1rWjUljlu5MhC4wSXgeENWhMR8EuweGRjmoGHU9pjeT7sG9zUvhQDa0s7OuxwMAuyndjUoDW8+OyiIm9YtfftVotugnA/Dror3RrbGLia2uvpSe6V4=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635390438;
 h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=3jpxULOVdIgL0Mnirkv2EuUv8fHOKVVpG1kUJouTiHI=;
	b=aV79sX/2uR43+iwkyEolu1C033nWyu6rha6UHUrfwM7h6lVV6C7fHVGAzjaj71tTyy5YmsFMufyIc3/NItHxPJ/5nct0rO7mK2c2HLnSwfd3fSfR4nSkDdRSxQlRhVVCLXdIb7B5z9FCi4TaPQNdgDCIx24D7LdujLq9n52jJn0=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 163539043886853.20843657223702;
 Wed, 27 Oct 2021 20:07:18 -0700 (PDT)
Received: from localhost ([::1]:45738 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvl7-0002tB-Pf
	for importer@patchew.org; Wed, 27 Oct 2021 23:07:17 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59238)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMf-0004sr-UL
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:42:03 -0400
Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]:35331)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMb-0003k6-4t
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:42:01 -0400
Received: by mail-pj1-x102b.google.com with SMTP id
 n11-20020a17090a2bcb00b001a1e7a0a6a6so6806787pje.0
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:55 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.54
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:54 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=3jpxULOVdIgL0Mnirkv2EuUv8fHOKVVpG1kUJouTiHI=;
 b=GlvuVap9y9oMWV+Wvfo59OlElogk3Iihe5zdtzUO5u59nn9WpZmCJQjdNlQOgiVWAe
 p/BENFFp5hpfh3MPD1/7SArt6Zgw6ohbgt2zsnfmx0TnADm+0/BFZ+hSDagP3Z6og/c4
 NQT1pLvTgVD7DP2sgmd4Jpb9sRaEnM0niBYlotQF4C9nZ9moebxq/Qb+yBg7is06Vx2B
 miS51X8zeGvAroT72yX/BphEQPWHD/9uOUEPp1guTR3tGPHsPOuXb2V/HFC0dqj2nhTd
 tpZePiN5blfoJB5MVbUOGyb2Ztbxm8EME3DdWQTg+dk4pSVSs9t7Ez5XcsICK1kjOY8S
 aKhw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=3jpxULOVdIgL0Mnirkv2EuUv8fHOKVVpG1kUJouTiHI=;
 b=YdWv0FdziYl4EdEcA9HooAN+d2HXPylSbzzq+Lo1xI3uif86JibNJKBRgi10y7gowc
 u60rI62LFQ7aAB94mOShvBuauPs2egJFEELNdWfOag97EZj5aIcxrmvxrrQV/F99sToN
 I5B3Cr8VIsTu/nz8uVCLLMRW3MspLGtPKuEoUT084Dp6ezLJ2XplawjZbYpcegjK3CiU
 C2oSDEQN8Rhg8/tkQ7NmHQfxL9lA6U0AT/5LBxYyA7VQjUH7MtH3MGFdJfW7HRgToCvy
 OcOUxWCdW0eC660OdRoY4EaJL+ZeC6NcdiW3ZdWeKzgwnuUqneMqfTkkYnPh3js1bz4F
 nvyA==
X-Gm-Message-State: AOAM533p4/Y9m4M5Evm2ohRW7dc3ADFg/hys8ipQCqFZnmFypPLbyRzS
 2JMEmH3E13lJ5Md8jRaW000H1d8y8nwJNw==
X-Google-Smtp-Source: 
 ABdhPJwCwJpOnGe0WTEVIOiP2/ukG5HdqjSWXorWUSbmlmgLQl0bxffTJTRHLlku9WdLkEha/sIk1Q==
X-Received: by 2002:a17:90b:1e05:: with SMTP id
 pg5mr1594209pjb.173.1635388915060;
 Wed, 27 Oct 2021 19:41:55 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 34/56] tcg/optimize: Split out fold_mov
Date: Wed, 27 Oct 2021 19:41:09 -0700
Message-Id: <20211028024131.1492790-35-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::102b;
 envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102b.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635390441184100001

This is the final entry in the main switch that was in a
different form.  After this, we have the option to convert
the switch into a function dispatch table.

Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 27 ++++++++++++++-------------
 1 file changed, 14 insertions(+), 13 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 8524fe1f8a..5f1bd7cd78 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -1015,6 +1015,11 @@ static bool fold_mb(OptContext *ctx, TCGOp *op)
     return true;
 }
=20
+static bool fold_mov(OptContext *ctx, TCGOp *op)
+{
+    return tcg_opt_gen_mov(ctx, op, op->args[0], op->args[1]);
+}
+
 static bool fold_movcond(OptContext *ctx, TCGOp *op)
 {
     TCGOpcode opc =3D op->opc;
@@ -1748,20 +1753,11 @@ void tcg_optimize(TCGContext *s)
             break;
         }
=20
-        /* Propagate constants through copy operations and do constant
-           folding.  Constants will be substituted to arguments by register
-           allocator where needed and possible.  Also detect copies. */
+        /*
+         * Process each opcode.
+         * Sorted alphabetically by opcode as much as possible.
+         */
         switch (opc) {
-        CASE_OP_32_64_VEC(mov):
-            done =3D tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[1]);
-            break;
-
-        default:
-            break;
-
-        /* ---------------------------------------------------------- */
-        /* Sorted alphabetically by opcode as much as possible. */
-
         CASE_OP_32_64_VEC(add):
             done =3D fold_add(&ctx, op);
             break;
@@ -1831,6 +1827,9 @@ void tcg_optimize(TCGContext *s)
         case INDEX_op_mb:
             done =3D fold_mb(&ctx, op);
             break;
+        CASE_OP_32_64_VEC(mov):
+            done =3D fold_mov(&ctx, op);
+            break;
         CASE_OP_32_64(movcond):
             done =3D fold_movcond(&ctx, op);
             break;
@@ -1900,6 +1899,8 @@ void tcg_optimize(TCGContext *s)
         CASE_OP_32_64_VEC(xor):
             done =3D fold_xor(&ctx, op);
             break;
+        default:
+            break;
         }
=20
         if (!done) {
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635390520; cv=none;
	d=zohomail.com; s=zohoarc;
	b=NUU9Dzb7BMeA8WoTmSm0/uSRRj9w0/qgEQTlMTx/qujPSaSqWoO0YyiEkU9vOrucIUw/0Pz9qHTyDk7g3sBhITwwhwPJW4MfUJIqgAZc/4nGUEDWVGhCDH0qI+ONEaVSs4eC28twkwRo74JRCg3jH/DZsRSyDMGEhq4vf6FHh2U=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635390520;
 h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=8y4qKou3t3jzIUIj9qEAD2/5WFZAuzm9armlPHHtAYM=;
	b=PejbqMUbsq3R4sW5XUQlhXpwkAp4YdnSC4hs4P6QDnuamG4tLKqU0DU5nB0rO4iFJfnMpLA7KH+PwSl+Krl5qHPCIHXpl6alVLNoeHWqeYeSR1514yKVQPWOmTeeEXLRjfO9iAsAQL9jPkE7gXGw8hehMgYeSaqrQMWQdYmbHoI=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635390520913522.3210260197487;
 Wed, 27 Oct 2021 20:08:40 -0700 (PDT)
Received: from localhost ([::1]:48786 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvmR-0004x8-Lb
	for importer@patchew.org; Wed, 27 Oct 2021 23:08:39 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59266)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMh-0004tG-60
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:42:03 -0400
Received: from mail-pg1-x535.google.com ([2607:f8b0:4864:20::535]:34477)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMb-0003nf-3l
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:42:02 -0400
Received: by mail-pg1-x535.google.com with SMTP id h193so4964437pgc.1
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:56 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.55
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:55 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=8y4qKou3t3jzIUIj9qEAD2/5WFZAuzm9armlPHHtAYM=;
 b=TkHeTtle3sxri8qarnqJ2/9ktVESMt5Ulph73eqD9LcDr8irqcvrSCjZtNj0qMZSx0
 ZtflK/viXAeMtx3FFfsIwU+8Ez8i14kbwBN2NviHMsP4LMTzkLPoOOwnTemqLrGRmUHT
 C+BtCNzmbgMKdHGykp/nJ8yaJAPcqtZvEwjFneR/1Sl9C6fcpaBCfYaKf4LK10IWBsTe
 Boc7PcLheIuqyYoFhc4Q123MxAmpvAacFsDNh3TvcZcS8UFOPxQwhTwgKjSCyfFAddtU
 9FjbMMrLurnzrjSN/2OLrrDsZi9HqUJ4crMBvddDTuZDFM+UUjidg/eBn9FOHfCXnKTO
 AkNg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=8y4qKou3t3jzIUIj9qEAD2/5WFZAuzm9armlPHHtAYM=;
 b=JfUlMTDubZsVChPrtO2FI9uPAYKC17PVBsPh/1D+903KdAtYdQMTC9O9FSkOtgDpPF
 gy1kbSFBwt3mc9oEKuzse2xfp6WaAYjxiCLeyskWudJ254TNmf1sBa211f2DcVWujpSf
 jjjsLmkMLqMeEIa3aoxYoK87HHZSTI3ACjYLJmUc2VUiLDb0N8IBd/cXIkQiBA8ST14Q
 M+0ZuhU6QgkpM3x7pzn2OBvzEoBhssiP3j07jMYMxxnPyAh1KVsIDKQ0F2eoNrnP1osQ
 GjGASTxcrSEDjpAYWRIsYuJpGQAS820ib0nGTVabBWTw2QVtqTD/rYX6Sx7afDwa5AjK
 /BWg==
X-Gm-Message-State: AOAM530peaWrmzIivOY0jtW/3jq/QE6FPWtxLQ515oujZ0yt8uBOQ1+j
 SMIrlWtJA+Ol2953l2WWUAMOnG9hbcc9RA==
X-Google-Smtp-Source: 
 ABdhPJwiNogIV/Sz8oXmu2ctY7yPGmt9mWqbAm6FGlzrGDCGndsNWCQ87TQpqhv4sEP5z89lejE6wQ==
X-Received: by 2002:a63:91ca:: with SMTP id
 l193mr1143050pge.213.1635388915650;
 Wed, 27 Oct 2021 19:41:55 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 35/56] tcg/optimize: Split out fold_xx_to_i
Date: Wed, 27 Oct 2021 19:41:10 -0700
Message-Id: <20211028024131.1492790-36-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::535;
 envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x535.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635390522349100001

Pull the "op r, a, a =3D> movi r, 0" optimization into a function,
and use it in the outer opcode fold functions.

Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 41 ++++++++++++++++++++++++-----------------
 1 file changed, 24 insertions(+), 17 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 5f1bd7cd78..2f55dc56c0 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -695,6 +695,15 @@ static bool fold_const2(OptContext *ctx, TCGOp *op)
     return false;
 }
=20
+/* If the binary operation has both arguments equal, fold to @i. */
+static bool fold_xx_to_i(OptContext *ctx, TCGOp *op, uint64_t i)
+{
+    if (args_are_copies(op->args[1], op->args[2])) {
+        return tcg_opt_gen_movi(ctx, op, op->args[0], i);
+    }
+    return false;
+}
+
 /*
  * These outermost fold_<op> functions are sorted alphabetically.
  */
@@ -744,7 +753,11 @@ static bool fold_and(OptContext *ctx, TCGOp *op)
=20
 static bool fold_andc(OptContext *ctx, TCGOp *op)
 {
-    return fold_const2(ctx, op);
+    if (fold_const2(ctx, op) ||
+        fold_xx_to_i(ctx, op, 0)) {
+        return true;
+    }
+    return false;
 }
=20
 static bool fold_brcond(OptContext *ctx, TCGOp *op)
@@ -1224,7 +1237,11 @@ static bool fold_shift(OptContext *ctx, TCGOp *op)
=20
 static bool fold_sub(OptContext *ctx, TCGOp *op)
 {
-    return fold_const2(ctx, op);
+    if (fold_const2(ctx, op) ||
+        fold_xx_to_i(ctx, op, 0)) {
+        return true;
+    }
+    return false;
 }
=20
 static bool fold_sub2_i32(OptContext *ctx, TCGOp *op)
@@ -1234,7 +1251,11 @@ static bool fold_sub2_i32(OptContext *ctx, TCGOp *op)
=20
 static bool fold_xor(OptContext *ctx, TCGOp *op)
 {
-    return fold_const2(ctx, op);
+    if (fold_const2(ctx, op) ||
+        fold_xx_to_i(ctx, op, 0)) {
+        return true;
+    }
+    return false;
 }
=20
 /* Propagate constants and copies, fold constant expressions. */
@@ -1739,20 +1760,6 @@ void tcg_optimize(TCGContext *s)
             break;
         }
=20
-        /* Simplify expression for "op r, a, a =3D> movi r, 0" cases */
-        switch (opc) {
-        CASE_OP_32_64_VEC(andc):
-        CASE_OP_32_64_VEC(sub):
-        CASE_OP_32_64_VEC(xor):
-            if (args_are_copies(op->args[1], op->args[2])) {
-                tcg_opt_gen_movi(&ctx, op, op->args[0], 0);
-                continue;
-            }
-            break;
-        default:
-            break;
-        }
-
         /*
          * Process each opcode.
          * Sorted alphabetically by opcode as much as possible.
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635390300; cv=none;
	d=zohomail.com; s=zohoarc;
	b=fix364XSZHmecaX8uIAYL8HejkoIureixHdFT3zC/SbsEcT46HYMt134wFKPYKxLJ4Ieqb8BCvNjtN5c7SXWNew09gl91SNrE6fJCRhYsrxGxACl0/k0nYVC3czpvgTSoQV/gpOIHgag7fO8o1XHFpYVaH+R6Yct9YnN2pI5d3A=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635390300;
 h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=p1UNT79xG4oDnmYUiMREY20bNauejtvwzT0okXNXFUU=;
	b=ktciuew4hqUqzavkWgF4CgL6Axar4u57SbG1BI2KMdHIIaYF2oxBP3ApCZ8m5UApHE/mr5zLP+9zvUYAB9Lern5F+NqufKfCp5CXZmuobVelmJkGlWC0VUW99y1mBrVd5bCQ/T80PSCwER2z+tkNjEa+5m1yeetSK7rY7LVWUz8=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635390300410595.3033230635286;
 Wed, 27 Oct 2021 20:05:00 -0700 (PDT)
Received: from localhost ([::1]:40390 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvit-0007g1-Am
	for importer@patchew.org; Wed, 27 Oct 2021 23:04:59 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59208)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMe-0004sm-6u
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:42:02 -0400
Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]:46986)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMc-0003qW-Aw
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:41:59 -0400
Received: by mail-pl1-x629.google.com with SMTP id p18so82020plf.13
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:57 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.55
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:55 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=p1UNT79xG4oDnmYUiMREY20bNauejtvwzT0okXNXFUU=;
 b=Y+mg9WTx2WP7qtXnxMdgQTDrM1juH75k+nlo4eYgaoefeHP+FJKJ04c2G6CxMNwpTW
 SbIWLYR5DlMOPKIg324rbplAs7FijPOc9C5Ryov7UD0xsfIxRysA8yhlYgHijjXi465o
 Jt4J+AGY3fIbRTMP//79ACGBG9J8Jw3rwqHeC5Pp0g078QgNi4bo2dWRSPJkgHYr7J3+
 /b+oajOmpps1nc1VvGhv9bUrEdIqHaw0k03kCUziaKtesA/WKpRlnrHiOfzqLKcobuqW
 OtVM+FXBhiu3JxXHSs7b8LMTITPY8RYNBeTyHVwoUWwghmauCzq2GetIVxFt8jf8vInh
 KA8Q==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=p1UNT79xG4oDnmYUiMREY20bNauejtvwzT0okXNXFUU=;
 b=Oo8lsRsVuhnuoJOkrPWYQ5UABi5G9dgmMvvX2MjMZ7XdwbDd3hJDxYiZdsY3mPEgoA
 oo3alVgpoK2gDUcWi2p+8d3MLLZtk4YDbjiOaILSiqzOYGj1hdgRor6rr9eZJsPx9fgM
 Aj/KznLtF7gGreBaK0h+6nC7+7oF0EtG3i2WOxnG+3iaGzWYKoKa14rJZd+rmb4RFbGk
 a8RGpkU/vbFzBkxEbQFzboinqPrnqgz+mej8EZdCIEmAiS74UuELLDTIjqCeHPTdpgLQ
 WBR/u7U/TryChB83DK0Lz2vvcYJ+JPqot6aRVicTuGSwx+l5UDQk1xQgIXMOvrIBkuJr
 F6oQ==
X-Gm-Message-State: AOAM532gVlzKKDjiwZuOROueUsmxsyjPLAyc28QaqcjeNWnnQPpYr3vG
 QIBbgDzT7R2rsIRvPumZ6uW+op9PYg5gSA==
X-Google-Smtp-Source: 
 ABdhPJx1NUF/f1CTvZjKVRCr+KZxDrX7dnndNqM3He8MexqrjkAKvi+INcwogM6TxSudtkN96GR5vA==
X-Received: by 2002:a17:90b:3811:: with SMTP id
 mq17mr9892506pjb.97.1635388916286;
 Wed, 27 Oct 2021 19:41:56 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 36/56] tcg/optimize: Split out fold_xx_to_x
Date: Wed, 27 Oct 2021 19:41:11 -0700
Message-Id: <20211028024131.1492790-37-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::629;
 envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x629.google.com
X-Spam_score_int: -1
X-Spam_score: -0.2
X-Spam_bar: /
X-Spam_report: (-0.2 / 5.0 requ) DKIM_SIGNED=0.1, DKIM_VALID=-0.1,
 DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001,
 SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635390302670100001

Pull the "op r, a, a =3D> mov r, a" optimization into a function,
and use it in the outer opcode fold functions.

Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 39 ++++++++++++++++++++++++---------------
 1 file changed, 24 insertions(+), 15 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 2f55dc56c0..ab96849edf 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -704,8 +704,22 @@ static bool fold_xx_to_i(OptContext *ctx, TCGOp *op, u=
int64_t i)
     return false;
 }
=20
+/* If the binary operation has both arguments equal, fold to identity. */
+static bool fold_xx_to_x(OptContext *ctx, TCGOp *op)
+{
+    if (args_are_copies(op->args[1], op->args[2])) {
+        return tcg_opt_gen_mov(ctx, op, op->args[0], op->args[1]);
+    }
+    return false;
+}
+
 /*
  * These outermost fold_<op> functions are sorted alphabetically.
+ *
+ * The ordering of the transformations should be:
+ *   1) those that produce a constant
+ *   2) those that produce a copy
+ *   3) those that produce information about the result value.
  */
=20
 static bool fold_add(OptContext *ctx, TCGOp *op)
@@ -748,7 +762,11 @@ static bool fold_add2_i32(OptContext *ctx, TCGOp *op)
=20
 static bool fold_and(OptContext *ctx, TCGOp *op)
 {
-    return fold_const2(ctx, op);
+    if (fold_const2(ctx, op) ||
+        fold_xx_to_x(ctx, op)) {
+        return true;
+    }
+    return false;
 }
=20
 static bool fold_andc(OptContext *ctx, TCGOp *op)
@@ -1111,7 +1129,11 @@ static bool fold_not(OptContext *ctx, TCGOp *op)
=20
 static bool fold_or(OptContext *ctx, TCGOp *op)
 {
-    return fold_const2(ctx, op);
+    if (fold_const2(ctx, op) ||
+        fold_xx_to_x(ctx, op)) {
+        return true;
+    }
+    return false;
 }
=20
 static bool fold_orc(OptContext *ctx, TCGOp *op)
@@ -1747,19 +1769,6 @@ void tcg_optimize(TCGContext *s)
             break;
         }
=20
-        /* Simplify expression for "op r, a, a =3D> mov r, a" cases */
-        switch (opc) {
-        CASE_OP_32_64_VEC(or):
-        CASE_OP_32_64_VEC(and):
-            if (args_are_copies(op->args[1], op->args[2])) {
-                tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[1]);
-                continue;
-            }
-            break;
-        default:
-            break;
-        }
-
         /*
          * Process each opcode.
          * Sorted alphabetically by opcode as much as possible.
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635390669; cv=none;
	d=zohomail.com; s=zohoarc;
	b=RJgq5QTbNwDiswZTP3R50LsYVO/M6cX4jQws2FvC48lhwon8sSwmqI3aqkgUfr7913AXQ08/BidD8BvI7YBu/iiu9OSNU4Y34SEdfBa6T+NcEy9oxbECF7DJL+Kg01UgfiY+68MkoIs+E4cMgukjwOukM32/OnhjNPssIOz9PME=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635390669;
 h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=YxTcI07P5KgjPUJAeZlSj6fs12sCJJNKN5YAni+jya0=;
	b=G6yu8ieD5w6YG3mJbNIzaxwT3NvuwAvr2+lNOYHb4r1iT1sMxHFqlzygkJNa6m2T/YNJyt3kNxN7SPRrQvypfm+NhutQgAtZ48tKy4CMJ7IQlCwwuWDpH3Vv2+PtB7xpCBhj0Sng9cVTlpiFGbL16arMNVDvzlFdzb3AITxDVtM=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635390669367766.8045263512178;
 Wed, 27 Oct 2021 20:11:09 -0700 (PDT)
Received: from localhost ([::1]:53976 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvoq-0008ON-2C
	for importer@patchew.org; Wed, 27 Oct 2021 23:11:08 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59228)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMf-0004sq-9F
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:42:03 -0400
Received: from mail-pl1-x635.google.com ([2607:f8b0:4864:20::635]:44652)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMc-0003qn-B8
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:42:01 -0400
Received: by mail-pl1-x635.google.com with SMTP id t11so3365567plq.11
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:57 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.56
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:56 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=YxTcI07P5KgjPUJAeZlSj6fs12sCJJNKN5YAni+jya0=;
 b=mVmCfOpN1RAa6jm5fhA0jPLA4MR6sZ0R2QpGEUMQ5p79xffRDCwejaxGroaFf0vhMF
 d2gP8ibqQXPI5r6ljkXxEf+JbfcoDOTLubeBElKpGrt4wFT5DV8rUDO0YWZWRDhZXVr4
 zRuHAklFLXh5RUlEL+fAbRuwAWPvbbFGDcLuAqwQI56DCjqn/WJs7Y9yeloEAI8M7zek
 Z7kmFKoi+hLMfvXsYTr188HnqKVkSrEv7Tiwh1npk/V4YO3zkF5W/39yKkpVLSU0VxeQ
 77l+mxkvBwPxaxMEkva2oROYKBUpYuNc78VAlS8SS4Ckx6Dx+Ef9A/eUU1kBaKkGbxYf
 vKhQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=YxTcI07P5KgjPUJAeZlSj6fs12sCJJNKN5YAni+jya0=;
 b=Z7hlsKI5yCJw98VyfpWWvZ4FB2aK6udHqjHqeD6ZnoXm7Ex6bbq2/mppweYmYq8fdO
 39fVNRi7Xnn1yBrZxu2S3Ldt7Is61X8j4nD1Cjd3Jdf36tQVOJcVKVtAdzAvsUyRYKle
 U1JcTYZXnlAnXtudEmalgjwoS6vZq0jAKpoCee2ipBXNa8ykpHOKiLtNFuUMp+AnOFGz
 +Z33qNdNkk3qyOFslscidHYxifvRV+6iSpsyalqZDHnqlUMGIvGIXUbRvwAAZRbRvBc2
 ocdSQBpTR6Jn/lGcXqoj+VUtFQCuHfqP5yPHMSF9fBQVBsrfMdxcSganwRb2nn05yWB/
 QTzg==
X-Gm-Message-State: AOAM532xpTHNALDEbNnvlnmBd1ED4EGIsnQkCF6syGLYGIMKc6APIZAf
 WSkpoNNF1f3YBRLnKys8F7mQe05XZ5RBRg==
X-Google-Smtp-Source: 
 ABdhPJzNz43ewiKQjtkuBsrEuUIT7ZkZ0jLHN2p/4QhCJE7SlyQDX5v8F7daUfsBu+TtoIC1Cms1Xg==
X-Received: by 2002:a17:90b:789:: with SMTP id
 l9mr9922284pjz.19.1635388916864;
 Wed, 27 Oct 2021 19:41:56 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 37/56] tcg/optimize: Split out fold_xi_to_i
Date: Wed, 27 Oct 2021 19:41:12 -0700
Message-Id: <20211028024131.1492790-38-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::635;
 envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x635.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635390670440100001

Pull the "op r, a, 0 =3D> movi r, 0" optimization into a function,
and use it in the outer opcode fold functions.

Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 38 ++++++++++++++++++++------------------
 1 file changed, 20 insertions(+), 18 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index ab96849edf..cfdc53c964 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -695,6 +695,15 @@ static bool fold_const2(OptContext *ctx, TCGOp *op)
     return false;
 }
=20
+/* If the binary operation has second argument @i, fold to @i. */
+static bool fold_xi_to_i(OptContext *ctx, TCGOp *op, uint64_t i)
+{
+    if (arg_is_const(op->args[2]) && arg_info(op->args[2])->val =3D=3D i) {
+        return tcg_opt_gen_movi(ctx, op, op->args[0], i);
+    }
+    return false;
+}
+
 /* If the binary operation has both arguments equal, fold to @i. */
 static bool fold_xx_to_i(OptContext *ctx, TCGOp *op, uint64_t i)
 {
@@ -763,6 +772,7 @@ static bool fold_add2_i32(OptContext *ctx, TCGOp *op)
 static bool fold_and(OptContext *ctx, TCGOp *op)
 {
     if (fold_const2(ctx, op) ||
+        fold_xi_to_i(ctx, op, 0) ||
         fold_xx_to_x(ctx, op)) {
         return true;
     }
@@ -1081,12 +1091,20 @@ static bool fold_movcond(OptContext *ctx, TCGOp *op)
=20
 static bool fold_mul(OptContext *ctx, TCGOp *op)
 {
-    return fold_const2(ctx, op);
+    if (fold_const2(ctx, op) ||
+        fold_xi_to_i(ctx, op, 0)) {
+        return true;
+    }
+    return false;
 }
=20
 static bool fold_mul_highpart(OptContext *ctx, TCGOp *op)
 {
-    return fold_const2(ctx, op);
+    if (fold_const2(ctx, op) ||
+        fold_xi_to_i(ctx, op, 0)) {
+        return true;
+    }
+    return false;
 }
=20
 static bool fold_mulu2_i32(OptContext *ctx, TCGOp *op)
@@ -1753,22 +1771,6 @@ void tcg_optimize(TCGContext *s)
             continue;
         }
=20
-        /* Simplify expression for "op r, a, 0 =3D> movi r, 0" cases */
-        switch (opc) {
-        CASE_OP_32_64_VEC(and):
-        CASE_OP_32_64_VEC(mul):
-        CASE_OP_32_64(muluh):
-        CASE_OP_32_64(mulsh):
-            if (arg_is_const(op->args[2])
-                && arg_info(op->args[2])->val =3D=3D 0) {
-                tcg_opt_gen_movi(&ctx, op, op->args[0], 0);
-                continue;
-            }
-            break;
-        default:
-            break;
-        }
-
         /*
          * Process each opcode.
          * Sorted alphabetically by opcode as much as possible.
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635391934; cv=none;
	d=zohomail.com; s=zohoarc;
	b=JIc19clxNNWh5fto+wCPA2eaV7I0DdC3106aYexJIDIydbvB50Ap+H+2anBlbQuWYipWR9yyrjOJo2MZ3rP2i7VejpBXX0/KHY4mZRf5hk5Tcz6m6nynNEoD0aZHdU7dFGxiqtG0KkSDhHNOk81LtqcdW0NVialrhEewr85ve0M=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635391934;
 h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=skOoD+WVXqg1LP1/W8y7ihe77x/ObnYayHV13fG5FOQ=;
	b=ArZLiWHozPtCdp9m9DrYl5YK9z3GgOC8ZiOjpvts7JSvLasgi8i01tSrbRl5lkjucBpWHINLC75+BiQcg8JcolyvR9CXL23lAajyv+oChtDjn6pgIO16DHMDIHQ0KrFpCmH4hSIeqyGZF0ViCBNmaL9H//OixaGbF95eFnP5zyc=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635391934233860.9481442567044;
 Wed, 27 Oct 2021 20:32:14 -0700 (PDT)
Received: from localhost ([::1]:52328 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfw9F-00040m-1E
	for importer@patchew.org; Wed, 27 Oct 2021 23:32:13 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59242)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMg-0004ss-2J
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:42:03 -0400
Received: from mail-pf1-x430.google.com ([2607:f8b0:4864:20::430]:44566)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMd-0003qx-UT
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:42:01 -0400
Received: by mail-pf1-x430.google.com with SMTP id a26so4537152pfr.11
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:41:58 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.57
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:57 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=skOoD+WVXqg1LP1/W8y7ihe77x/ObnYayHV13fG5FOQ=;
 b=rdWktjlxbAibkH+oLyfrquSGrOtb3m9rOF76pcm53HCBWG686G44IJyKnu5MjdsuQR
 UQ2owC0tAbr9h11W+PXq1dDdVA21OjeKmZ152HkNd6My4eXQq282sA1FHThu3If4RXac
 2qhyBSicnntQGmbwahaLCFbNLWzqL+FUY+GOdqzlHAw4MEj7eIaosJXo2oSGrTFoFShA
 YBZP/T5z7cvjRB1ciGnwE3VjX8Z7Y0P5NjrsGGPa/nYB7GhosxaG3sG+ASLN6oR3SOOE
 nieuxSkANEMFORCtB6HKUro7vzg8Tz6FvJX23fWFUuiKeM12x7Y5PBr/AwrvEM3cppM+
 R8xg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=skOoD+WVXqg1LP1/W8y7ihe77x/ObnYayHV13fG5FOQ=;
 b=q1nNB54sEgYxvJil3b3rSFNTugQmjrbEvkpmBYwRMU0ImYis2Llk2TCVw8oF+PxHhe
 2qN/RBsGtrjU8wTcrNvmJgi+j/dXFImDvc+C5ay7o15yvvspZRPPny8vvZ6/mGijOqHA
 mmh2Znsv5q2WjRSpv7TWsboID5x5h+eJpQE4f3Aqk7a2NZco7XbfCLMlRlfGzmfS1oi2
 d6EzRUDzojeYoVvbMiUYJQyJILizgLI2tPD2Wa0UUD2FuB8VqnekHKDWhVfcUlzAo0Xd
 rfPpwm/76mzgJOBdli4jt22UCmZ3UaRpDGhgq0SaE0ULFteUxqz5EwXdQBCLw/djfPkv
 NNXQ==
X-Gm-Message-State: AOAM533Gq0N/p43dUwxRHjY5m1CS4MYbzJhLgzprY0tMcOuOqQaTcO3c
 FICNtvOJKPLRbWq9h2crQ7MgnkwPNaEKBg==
X-Google-Smtp-Source: 
 ABdhPJydkRk7KNNlXaiU8K0HW91ijLvxjkQeSddk89+R8SFlvy4H6RkaqgS3yQ79Uaa5QVK6C7ixJA==
X-Received: by 2002:a63:3c53:: with SMTP id i19mr1221163pgn.450.1635388917528;
 Wed, 27 Oct 2021 19:41:57 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 38/56] tcg/optimize: Add type to OptContext
Date: Wed, 27 Oct 2021 19:41:13 -0700
Message-Id: <20211028024131.1492790-39-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::430;
 envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x430.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635391935479100001
Content-Type: text/plain; charset="utf-8"

Compute the type of the operation early.

There are at least 4 places that used a def->flags ladder
to determine the type of the operation being optimized.

There were two places that assumed !TCG_OPF_64BIT means
TCG_TYPE_I32, and so could potentially compute incorrect
results for vector operations.

Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 149 +++++++++++++++++++++++++++++--------------------
 1 file changed, 89 insertions(+), 60 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index cfdc53c964..e869fa7e78 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -51,6 +51,7 @@ typedef struct OptContext {
=20
     /* In flight values from optimization. */
     uint64_t z_mask;
+    TCGType type;
 } OptContext;
=20
 static inline TempOptInfo *ts_info(TCGTemp *ts)
@@ -187,7 +188,6 @@ static bool tcg_opt_gen_mov(OptContext *ctx, TCGOp *op,=
 TCGArg dst, TCGArg src)
 {
     TCGTemp *dst_ts =3D arg_temp(dst);
     TCGTemp *src_ts =3D arg_temp(src);
-    const TCGOpDef *def;
     TempOptInfo *di;
     TempOptInfo *si;
     uint64_t z_mask;
@@ -201,16 +201,24 @@ static bool tcg_opt_gen_mov(OptContext *ctx, TCGOp *o=
p, TCGArg dst, TCGArg src)
     reset_ts(dst_ts);
     di =3D ts_info(dst_ts);
     si =3D ts_info(src_ts);
-    def =3D &tcg_op_defs[op->opc];
-    if (def->flags & TCG_OPF_VECTOR) {
-        new_op =3D INDEX_op_mov_vec;
-    } else if (def->flags & TCG_OPF_64BIT) {
-        new_op =3D INDEX_op_mov_i64;
-    } else {
+
+    switch (ctx->type) {
+    case TCG_TYPE_I32:
         new_op =3D INDEX_op_mov_i32;
+        break;
+    case TCG_TYPE_I64:
+        new_op =3D INDEX_op_mov_i64;
+        break;
+    case TCG_TYPE_V64:
+    case TCG_TYPE_V128:
+    case TCG_TYPE_V256:
+        /* TCGOP_VECL and TCGOP_VECE remain unchanged.  */
+        new_op =3D INDEX_op_mov_vec;
+        break;
+    default:
+        g_assert_not_reached();
     }
     op->opc =3D new_op;
-    /* TCGOP_VECL and TCGOP_VECE remain unchanged.  */
     op->args[0] =3D dst;
     op->args[1] =3D src;
=20
@@ -237,20 +245,9 @@ static bool tcg_opt_gen_mov(OptContext *ctx, TCGOp *op=
, TCGArg dst, TCGArg src)
 static bool tcg_opt_gen_movi(OptContext *ctx, TCGOp *op,
                              TCGArg dst, uint64_t val)
 {
-    const TCGOpDef *def =3D &tcg_op_defs[op->opc];
-    TCGType type;
-    TCGTemp *tv;
-
-    if (def->flags & TCG_OPF_VECTOR) {
-        type =3D TCGOP_VECL(op) + TCG_TYPE_V64;
-    } else if (def->flags & TCG_OPF_64BIT) {
-        type =3D TCG_TYPE_I64;
-    } else {
-        type =3D TCG_TYPE_I32;
-    }
-
     /* Convert movi to mov with constant temp. */
-    tv =3D tcg_constant_internal(type, val);
+    TCGTemp *tv =3D tcg_constant_internal(ctx->type, val);
+
     init_ts_info(ctx, tv);
     return tcg_opt_gen_mov(ctx, op, dst, temp_arg(tv));
 }
@@ -420,11 +417,11 @@ static uint64_t do_constant_folding_2(TCGOpcode op, u=
int64_t x, uint64_t y)
     }
 }
=20
-static uint64_t do_constant_folding(TCGOpcode op, uint64_t x, uint64_t y)
+static uint64_t do_constant_folding(TCGOpcode op, TCGType type,
+                                    uint64_t x, uint64_t y)
 {
-    const TCGOpDef *def =3D &tcg_op_defs[op];
     uint64_t res =3D do_constant_folding_2(op, x, y);
-    if (!(def->flags & TCG_OPF_64BIT)) {
+    if (type =3D=3D TCG_TYPE_I32) {
         res =3D (int32_t)res;
     }
     return res;
@@ -510,19 +507,21 @@ static bool do_constant_folding_cond_eq(TCGCond c)
  * Return -1 if the condition can't be simplified,
  * and the result of the condition (0 or 1) if it can.
  */
-static int do_constant_folding_cond(TCGOpcode op, TCGArg x,
+static int do_constant_folding_cond(TCGType type, TCGArg x,
                                     TCGArg y, TCGCond c)
 {
     uint64_t xv =3D arg_info(x)->val;
     uint64_t yv =3D arg_info(y)->val;
=20
     if (arg_is_const(x) && arg_is_const(y)) {
-        const TCGOpDef *def =3D &tcg_op_defs[op];
-        tcg_debug_assert(!(def->flags & TCG_OPF_VECTOR));
-        if (def->flags & TCG_OPF_64BIT) {
-            return do_constant_folding_cond_64(xv, yv, c);
-        } else {
+        switch (type) {
+        case TCG_TYPE_I32:
             return do_constant_folding_cond_32(xv, yv, c);
+        case TCG_TYPE_I64:
+            return do_constant_folding_cond_64(xv, yv, c);
+        default:
+            /* Only scalar comparisons are optimizable */
+            return -1;
         }
     } else if (args_are_copies(x, y)) {
         return do_constant_folding_cond_eq(c);
@@ -677,7 +676,7 @@ static bool fold_const1(OptContext *ctx, TCGOp *op)
         uint64_t t;
=20
         t =3D arg_info(op->args[1])->val;
-        t =3D do_constant_folding(op->opc, t, 0);
+        t =3D do_constant_folding(op->opc, ctx->type, t, 0);
         return tcg_opt_gen_movi(ctx, op, op->args[0], t);
     }
     return false;
@@ -689,7 +688,7 @@ static bool fold_const2(OptContext *ctx, TCGOp *op)
         uint64_t t1 =3D arg_info(op->args[1])->val;
         uint64_t t2 =3D arg_info(op->args[2])->val;
=20
-        t1 =3D do_constant_folding(op->opc, t1, t2);
+        t1 =3D do_constant_folding(op->opc, ctx->type, t1, t2);
         return tcg_opt_gen_movi(ctx, op, op->args[0], t1);
     }
     return false;
@@ -791,7 +790,7 @@ static bool fold_andc(OptContext *ctx, TCGOp *op)
 static bool fold_brcond(OptContext *ctx, TCGOp *op)
 {
     TCGCond cond =3D op->args[2];
-    int i =3D do_constant_folding_cond(op->opc, op->args[0], op->args[1], =
cond);
+    int i =3D do_constant_folding_cond(ctx->type, op->args[0], op->args[1]=
, cond);
=20
     if (i =3D=3D 0) {
         tcg_op_remove(ctx->tcg, op);
@@ -836,7 +835,7 @@ static bool fold_brcond2(OptContext *ctx, TCGOp *op)
          * Simplify EQ/NE comparisons where one of the pairs
          * can be simplified.
          */
-        i =3D do_constant_folding_cond(INDEX_op_brcond_i32, op->args[0],
+        i =3D do_constant_folding_cond(TCG_TYPE_I32, op->args[0],
                                      op->args[2], cond);
         switch (i ^ inv) {
         case 0:
@@ -845,7 +844,7 @@ static bool fold_brcond2(OptContext *ctx, TCGOp *op)
             goto do_brcond_high;
         }
=20
-        i =3D do_constant_folding_cond(INDEX_op_brcond_i32, op->args[1],
+        i =3D do_constant_folding_cond(TCG_TYPE_I32, op->args[1],
                                      op->args[3], cond);
         switch (i ^ inv) {
         case 0:
@@ -887,7 +886,7 @@ static bool fold_bswap(OptContext *ctx, TCGOp *op)
     if (arg_is_const(op->args[1])) {
         uint64_t t =3D arg_info(op->args[1])->val;
=20
-        t =3D do_constant_folding(op->opc, t, op->args[2]);
+        t =3D do_constant_folding(op->opc, ctx->type, t, op->args[2]);
         return tcg_opt_gen_movi(ctx, op, op->args[0], t);
     }
     return false;
@@ -931,7 +930,7 @@ static bool fold_count_zeros(OptContext *ctx, TCGOp *op)
         uint64_t t =3D arg_info(op->args[1])->val;
=20
         if (t !=3D 0) {
-            t =3D do_constant_folding(op->opc, t, 0);
+            t =3D do_constant_folding(op->opc, ctx->type, t, 0);
             return tcg_opt_gen_movi(ctx, op, op->args[0], t);
         }
         return tcg_opt_gen_mov(ctx, op, op->args[0], op->args[2]);
@@ -1063,9 +1062,8 @@ static bool fold_mov(OptContext *ctx, TCGOp *op)
=20
 static bool fold_movcond(OptContext *ctx, TCGOp *op)
 {
-    TCGOpcode opc =3D op->opc;
     TCGCond cond =3D op->args[5];
-    int i =3D do_constant_folding_cond(opc, op->args[1], op->args[2], cond=
);
+    int i =3D do_constant_folding_cond(ctx->type, op->args[1], op->args[2]=
, cond);
=20
     if (i >=3D 0) {
         return tcg_opt_gen_mov(ctx, op, op->args[0], op->args[4 - i]);
@@ -1074,9 +1072,18 @@ static bool fold_movcond(OptContext *ctx, TCGOp *op)
     if (arg_is_const(op->args[3]) && arg_is_const(op->args[4])) {
         uint64_t tv =3D arg_info(op->args[3])->val;
         uint64_t fv =3D arg_info(op->args[4])->val;
+        TCGOpcode opc;
=20
-        opc =3D (opc =3D=3D INDEX_op_movcond_i32
-               ? INDEX_op_setcond_i32 : INDEX_op_setcond_i64);
+        switch (ctx->type) {
+        case TCG_TYPE_I32:
+            opc =3D INDEX_op_setcond_i32;
+            break;
+        case TCG_TYPE_I64:
+            opc =3D INDEX_op_setcond_i64;
+            break;
+        default:
+            g_assert_not_reached();
+        }
=20
         if (tv =3D=3D 1 && fv =3D=3D 0) {
             op->opc =3D opc;
@@ -1181,7 +1188,7 @@ static bool fold_remainder(OptContext *ctx, TCGOp *op)
 static bool fold_setcond(OptContext *ctx, TCGOp *op)
 {
     TCGCond cond =3D op->args[3];
-    int i =3D do_constant_folding_cond(op->opc, op->args[1], op->args[2], =
cond);
+    int i =3D do_constant_folding_cond(ctx->type, op->args[1], op->args[2]=
, cond);
=20
     if (i >=3D 0) {
         return tcg_opt_gen_movi(ctx, op, op->args[0], i);
@@ -1220,7 +1227,7 @@ static bool fold_setcond2(OptContext *ctx, TCGOp *op)
          * Simplify EQ/NE comparisons where one of the pairs
          * can be simplified.
          */
-        i =3D do_constant_folding_cond(INDEX_op_setcond_i32, op->args[1],
+        i =3D do_constant_folding_cond(TCG_TYPE_I32, op->args[1],
                                      op->args[3], cond);
         switch (i ^ inv) {
         case 0:
@@ -1229,7 +1236,7 @@ static bool fold_setcond2(OptContext *ctx, TCGOp *op)
             goto do_setcond_high;
         }
=20
-        i =3D do_constant_folding_cond(INDEX_op_setcond_i32, op->args[2],
+        i =3D do_constant_folding_cond(TCG_TYPE_I32, op->args[2],
                                      op->args[4], cond);
         switch (i ^ inv) {
         case 0:
@@ -1331,6 +1338,15 @@ void tcg_optimize(TCGContext *s)
         init_arguments(&ctx, op, def->nb_oargs + def->nb_iargs);
         copy_propagate(&ctx, op, def->nb_oargs, def->nb_iargs);
=20
+        /* Pre-compute the type of the operation. */
+        if (def->flags & TCG_OPF_VECTOR) {
+            ctx.type =3D TCG_TYPE_V64 + TCGOP_VECL(op);
+        } else if (def->flags & TCG_OPF_64BIT) {
+            ctx.type =3D TCG_TYPE_I64;
+        } else {
+            ctx.type =3D TCG_TYPE_I32;
+        }
+
         /* For commutative operations make constant second argument */
         switch (opc) {
         CASE_OP_32_64_VEC(add):
@@ -1411,19 +1427,24 @@ void tcg_optimize(TCGContext *s)
                     /* Proceed with possible constant folding. */
                     break;
                 }
-                if (opc =3D=3D INDEX_op_sub_i32) {
+                switch (ctx.type) {
+                case TCG_TYPE_I32:
                     neg_op =3D INDEX_op_neg_i32;
                     have_neg =3D TCG_TARGET_HAS_neg_i32;
-                } else if (opc =3D=3D INDEX_op_sub_i64) {
+                    break;
+                case TCG_TYPE_I64:
                     neg_op =3D INDEX_op_neg_i64;
                     have_neg =3D TCG_TARGET_HAS_neg_i64;
-                } else if (TCG_TARGET_HAS_neg_vec) {
-                    TCGType type =3D TCGOP_VECL(op) + TCG_TYPE_V64;
-                    unsigned vece =3D TCGOP_VECE(op);
-                    neg_op =3D INDEX_op_neg_vec;
-                    have_neg =3D tcg_can_emit_vec_op(neg_op, type, vece) >=
 0;
-                } else {
                     break;
+                case TCG_TYPE_V64:
+                case TCG_TYPE_V128:
+                case TCG_TYPE_V256:
+                    neg_op =3D INDEX_op_neg_vec;
+                    have_neg =3D tcg_can_emit_vec_op(neg_op, ctx.type,
+                                                   TCGOP_VECE(op)) > 0;
+                    break;
+                default:
+                    g_assert_not_reached();
                 }
                 if (!have_neg) {
                     break;
@@ -1476,15 +1497,23 @@ void tcg_optimize(TCGContext *s)
                 TCGOpcode not_op;
                 bool have_not;
=20
-                if (def->flags & TCG_OPF_VECTOR) {
-                    not_op =3D INDEX_op_not_vec;
-                    have_not =3D TCG_TARGET_HAS_not_vec;
-                } else if (def->flags & TCG_OPF_64BIT) {
-                    not_op =3D INDEX_op_not_i64;
-                    have_not =3D TCG_TARGET_HAS_not_i64;
-                } else {
+                switch (ctx.type) {
+                case TCG_TYPE_I32:
                     not_op =3D INDEX_op_not_i32;
                     have_not =3D TCG_TARGET_HAS_not_i32;
+                    break;
+                case TCG_TYPE_I64:
+                    not_op =3D INDEX_op_not_i64;
+                    have_not =3D TCG_TARGET_HAS_not_i64;
+                    break;
+                case TCG_TYPE_V64:
+                case TCG_TYPE_V128:
+                case TCG_TYPE_V256:
+                    not_op =3D INDEX_op_not_vec;
+                    have_not =3D TCG_TARGET_HAS_not_vec;
+                    break;
+                default:
+                    g_assert_not_reached();
                 }
                 if (!have_not) {
                     break;
@@ -1755,7 +1784,7 @@ void tcg_optimize(TCGContext *s)
            below, we can ignore high bits, but for further optimizations we
            need to record that the high bits contain garbage.  */
         partmask =3D z_mask;
-        if (!(def->flags & TCG_OPF_64BIT)) {
+        if (ctx.type =3D=3D TCG_TYPE_I32) {
             z_mask |=3D ~(tcg_target_ulong)0xffffffffu;
             partmask &=3D 0xffffffffu;
             affected &=3D 0xffffffffu;
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635390813; cv=none;
	d=zohomail.com; s=zohoarc;
	b=P6hugTfb0db1eGaXsgdqsULj1UnPVOEYx6myxLLEv0i5jt5Hq3FOAdHKGhiesmNHEX+tKG/TeObKofBsjZLogBaX/xb6OiCb9ZG9diDgg90FuKuNnEIgY43THnyD06uKzMiAl2Ni+Un/q843MpoR6R0LXKzvcMqZvjnyQc8fF1c=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635390813;
 h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=r+4GM6rwelmTJwNvr/gYfS2ZPgfNCRXjAydc4wwegxg=;
	b=IKkx3x/eO13eHtmbCMj7ZiUmliXjAxPfLxijxKvV0CotS2qrEOCW9kmATkQUTZMwH+Et4l7Jr8W0YttClrgZSyhUkLDuGlgEj3p3rjvP7uBj/ZObxvPv+cGUySE1KLbSOST0e2qpZyNrd+6SwCYmUg9QkWc1VKfO8idTQlx/48w=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635390813398702.1355102069602;
 Wed, 27 Oct 2021 20:13:33 -0700 (PDT)
Received: from localhost ([::1]:34230 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvrA-0005h7-C3
	for importer@patchew.org; Wed, 27 Oct 2021 23:13:32 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59270)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMh-0004uO-HY
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:42:04 -0400
Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]:36632)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvMe-0003vH-Vt
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:42:03 -0400
Received: by mail-pl1-x631.google.com with SMTP id w16so3391602plg.3
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:42:00 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id c25sm1218824pfn.159.2021.10.27.19.41.57
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:41:58 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=r+4GM6rwelmTJwNvr/gYfS2ZPgfNCRXjAydc4wwegxg=;
 b=IND0lbejwPOs3G6dJIDtxhSfc6ZHDB0wNOseVsKqypfbvvONkqax3I48kfIgsG787V
 S88q2pG64Zexu2do52WrxRhAIEucZ8c2vEnMHkkayr0rjqtyxX+Zc73/vC4AeNTzFUhn
 rSj/ElY+XGaM56XkCZFc78RClWXAJ/Ek3OG0Z5LvSOlKm9BW9BabB3Bhdeq4qc2+WDRk
 KTO3SDi54hf3xqeqME/F2okC0Tziv2ecjq9249XuuGN42J53uARkyFDR6AFYsHH/uQnx
 4phkSoKX66sq3dXHGBei1iJ2tZ75MHEOTxKoTfc/MWnT4oeCRiIkMQ9r0M8CLH+BbDHG
 jFmg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=r+4GM6rwelmTJwNvr/gYfS2ZPgfNCRXjAydc4wwegxg=;
 b=evFSh2rkkVoGSfyK/J4ZjpjphYtCoHiNWGxmkDnIHzLLj4rVvL/mrDnxG6yRy5qBPs
 gFB7euPJktMWbauPsjU+6i/SbJj7fyJk1VA5FZXrp0ICP0554835SSaIfQFP2AYZ+HnR
 OycZGCoTtCO++Od49b5UyVTwMwEj7joPGdDyCYZkFslG0TbkfXQGc+7W2eYMDOFn63Zp
 zbbyEX+N6gqnZvK27yqcb+BUax6N2NstFT9TmCq3YRsljA2dh8WJVj/XL4CD+8FRkelr
 1/VORRdzj4m4sqxWmhaD1n0LSvM2fH0uQRqJtUe9Ng8KNVu93zpvY91WWgZpoPlgStbl
 p61Q==
X-Gm-Message-State: AOAM533G1fptcXsTaDW3IP+Y/RK2qUT7zSKcUy5tJJNb9djb06zaEpT+
 lONXsf1SVCDVhBASp28IfrJM9iE4yKGsjA==
X-Google-Smtp-Source: 
 ABdhPJw3Adw0lcIUvrePezCsPZTgadAbXrgfOKkFPrqn+PXJ/FlZ41kA9LVJFGLouiXzcT1e5emXbw==
X-Received: by 2002:a17:90a:4b0a:: with SMTP id
 g10mr9733771pjh.91.1635388918328;
 Wed, 27 Oct 2021 19:41:58 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 39/56] tcg/optimize: Split out fold_to_not
Date: Wed, 27 Oct 2021 19:41:14 -0700
Message-Id: <20211028024131.1492790-40-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::631;
 envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x631.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635390813801100001
Content-Type: text/plain; charset="utf-8"

Split out the conditional conversion from a more complex logical
operation to a simple NOT.  Create a couple more helpers to make
this easy for the outer-most logical operations.

Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 158 +++++++++++++++++++++++++++----------------------
 1 file changed, 86 insertions(+), 72 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index e869fa7e78..21f4251b4f 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -694,6 +694,52 @@ static bool fold_const2(OptContext *ctx, TCGOp *op)
     return false;
 }
=20
+/*
+ * Convert @op to NOT, if NOT is supported by the host.
+ * Return true f the conversion is successful, which will still
+ * indicate that the processing is complete.
+ */
+static bool fold_not(OptContext *ctx, TCGOp *op);
+static bool fold_to_not(OptContext *ctx, TCGOp *op, int idx)
+{
+    TCGOpcode not_op;
+    bool have_not;
+
+    switch (ctx->type) {
+    case TCG_TYPE_I32:
+        not_op =3D INDEX_op_not_i32;
+        have_not =3D TCG_TARGET_HAS_not_i32;
+        break;
+    case TCG_TYPE_I64:
+        not_op =3D INDEX_op_not_i64;
+        have_not =3D TCG_TARGET_HAS_not_i64;
+        break;
+    case TCG_TYPE_V64:
+    case TCG_TYPE_V128:
+    case TCG_TYPE_V256:
+        not_op =3D INDEX_op_not_vec;
+        have_not =3D TCG_TARGET_HAS_not_vec;
+        break;
+    default:
+        g_assert_not_reached();
+    }
+    if (have_not) {
+        op->opc =3D not_op;
+        op->args[1] =3D op->args[idx];
+        return fold_not(ctx, op);
+    }
+    return false;
+}
+
+/* If the binary operation has first argument @i, fold to NOT. */
+static bool fold_ix_to_not(OptContext *ctx, TCGOp *op, uint64_t i)
+{
+    if (arg_is_const(op->args[1]) && arg_info(op->args[1])->val =3D=3D i) {
+        return fold_to_not(ctx, op, 2);
+    }
+    return false;
+}
+
 /* If the binary operation has second argument @i, fold to @i. */
 static bool fold_xi_to_i(OptContext *ctx, TCGOp *op, uint64_t i)
 {
@@ -703,6 +749,15 @@ static bool fold_xi_to_i(OptContext *ctx, TCGOp *op, u=
int64_t i)
     return false;
 }
=20
+/* If the binary operation has second argument @i, fold to NOT. */
+static bool fold_xi_to_not(OptContext *ctx, TCGOp *op, uint64_t i)
+{
+    if (arg_is_const(op->args[2]) && arg_info(op->args[2])->val =3D=3D i) {
+        return fold_to_not(ctx, op, 1);
+    }
+    return false;
+}
+
 /* If the binary operation has both arguments equal, fold to @i. */
 static bool fold_xx_to_i(OptContext *ctx, TCGOp *op, uint64_t i)
 {
@@ -781,7 +836,8 @@ static bool fold_and(OptContext *ctx, TCGOp *op)
 static bool fold_andc(OptContext *ctx, TCGOp *op)
 {
     if (fold_const2(ctx, op) ||
-        fold_xx_to_i(ctx, op, 0)) {
+        fold_xx_to_i(ctx, op, 0) ||
+        fold_ix_to_not(ctx, op, -1)) {
         return true;
     }
     return false;
@@ -987,7 +1043,11 @@ static bool fold_dup2(OptContext *ctx, TCGOp *op)
=20
 static bool fold_eqv(OptContext *ctx, TCGOp *op)
 {
-    return fold_const2(ctx, op);
+    if (fold_const2(ctx, op) ||
+        fold_xi_to_not(ctx, op, 0)) {
+        return true;
+    }
+    return false;
 }
=20
 static bool fold_extract(OptContext *ctx, TCGOp *op)
@@ -1134,7 +1194,11 @@ static bool fold_mulu2_i32(OptContext *ctx, TCGOp *o=
p)
=20
 static bool fold_nand(OptContext *ctx, TCGOp *op)
 {
-    return fold_const2(ctx, op);
+    if (fold_const2(ctx, op) ||
+        fold_xi_to_not(ctx, op, -1)) {
+        return true;
+    }
+    return false;
 }
=20
 static bool fold_neg(OptContext *ctx, TCGOp *op)
@@ -1144,12 +1208,22 @@ static bool fold_neg(OptContext *ctx, TCGOp *op)
=20
 static bool fold_nor(OptContext *ctx, TCGOp *op)
 {
-    return fold_const2(ctx, op);
+    if (fold_const2(ctx, op) ||
+        fold_xi_to_not(ctx, op, 0)) {
+        return true;
+    }
+    return false;
 }
=20
 static bool fold_not(OptContext *ctx, TCGOp *op)
 {
-    return fold_const1(ctx, op);
+    if (fold_const1(ctx, op)) {
+        return true;
+    }
+
+    /* Because of fold_to_not, we want to always return true, via finish. =
*/
+    finish_folding(ctx, op);
+    return true;
 }
=20
 static bool fold_or(OptContext *ctx, TCGOp *op)
@@ -1163,7 +1237,11 @@ static bool fold_or(OptContext *ctx, TCGOp *op)
=20
 static bool fold_orc(OptContext *ctx, TCGOp *op)
 {
-    return fold_const2(ctx, op);
+    if (fold_const2(ctx, op) ||
+        fold_ix_to_not(ctx, op, 0)) {
+        return true;
+    }
+    return false;
 }
=20
 static bool fold_qemu_ld(OptContext *ctx, TCGOp *op)
@@ -1299,7 +1377,8 @@ static bool fold_sub2_i32(OptContext *ctx, TCGOp *op)
 static bool fold_xor(OptContext *ctx, TCGOp *op)
 {
     if (fold_const2(ctx, op) ||
-        fold_xx_to_i(ctx, op, 0)) {
+        fold_xx_to_i(ctx, op, 0) ||
+        fold_xi_to_not(ctx, op, -1)) {
         return true;
     }
     return false;
@@ -1458,71 +1537,6 @@ void tcg_optimize(TCGContext *s)
                 }
             }
             break;
-        CASE_OP_32_64_VEC(xor):
-        CASE_OP_32_64(nand):
-            if (!arg_is_const(op->args[1])
-                && arg_is_const(op->args[2])
-                && arg_info(op->args[2])->val =3D=3D -1) {
-                i =3D 1;
-                goto try_not;
-            }
-            break;
-        CASE_OP_32_64(nor):
-            if (!arg_is_const(op->args[1])
-                && arg_is_const(op->args[2])
-                && arg_info(op->args[2])->val =3D=3D 0) {
-                i =3D 1;
-                goto try_not;
-            }
-            break;
-        CASE_OP_32_64_VEC(andc):
-            if (!arg_is_const(op->args[2])
-                && arg_is_const(op->args[1])
-                && arg_info(op->args[1])->val =3D=3D -1) {
-                i =3D 2;
-                goto try_not;
-            }
-            break;
-        CASE_OP_32_64_VEC(orc):
-        CASE_OP_32_64(eqv):
-            if (!arg_is_const(op->args[2])
-                && arg_is_const(op->args[1])
-                && arg_info(op->args[1])->val =3D=3D 0) {
-                i =3D 2;
-                goto try_not;
-            }
-            break;
-        try_not:
-            {
-                TCGOpcode not_op;
-                bool have_not;
-
-                switch (ctx.type) {
-                case TCG_TYPE_I32:
-                    not_op =3D INDEX_op_not_i32;
-                    have_not =3D TCG_TARGET_HAS_not_i32;
-                    break;
-                case TCG_TYPE_I64:
-                    not_op =3D INDEX_op_not_i64;
-                    have_not =3D TCG_TARGET_HAS_not_i64;
-                    break;
-                case TCG_TYPE_V64:
-                case TCG_TYPE_V128:
-                case TCG_TYPE_V256:
-                    not_op =3D INDEX_op_not_vec;
-                    have_not =3D TCG_TARGET_HAS_not_vec;
-                    break;
-                default:
-                    g_assert_not_reached();
-                }
-                if (!have_not) {
-                    break;
-                }
-                op->opc =3D not_op;
-                reset_temp(op->args[0]);
-                op->args[1] =3D op->args[i];
-                continue;
-            }
         default:
             break;
         }
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635390958; cv=none;
	d=zohomail.com; s=zohoarc;
	b=B/ayMIqAdTv3+c90SNt10Rbl3s1KLvH7QznPmm6ibRbr3wGwKC/DuvNIXT0w9gSBns5By8uUm6fjrURKP/inNWYKKbgPtUfNeWw1AgLfqis5tu4obR53Hu8Ty/u5CpPGmkXQHIq190K3MSiBW5QHvv4KUl0HpZG0Qgx3v3BjFTM=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635390958;
 h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=FGhVKVJSDxY3HmMJpb1bjuDxl1XBH/ImqPdvrbNQikQ=;
	b=PxzzGp79K4jfFC6Dy5yw3rgB8svlEmluWfFNw3oHAaCdnWftFtT2DGZiThHS20GRjWgdAlRbHJa5yU/fASJSmhHm3ukI/mO34pIx9NqGP5kLZhyXNk20Gz+uF7KldOkEkTW08sRSPm/gUUoAoA99N/6ZLH0B2b9WcT+sc24pJ+k=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635390957986507.0016356368661;
 Wed, 27 Oct 2021 20:15:57 -0700 (PDT)
Received: from localhost ([::1]:43194 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvtU-0003AI-S2
	for importer@patchew.org; Wed, 27 Oct 2021 23:15:56 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59636)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPb-0001QY-4G
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:03 -0400
Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]:42680)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPY-0005wN-Kr
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:02 -0400
Received: by mail-pf1-x433.google.com with SMTP id m14so4557929pfc.9
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:45:00 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id z8sm995907pgc.53.2021.10.27.19.44.58
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:44:59 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=FGhVKVJSDxY3HmMJpb1bjuDxl1XBH/ImqPdvrbNQikQ=;
 b=zGlsgN95Re40ShmurealoFx0hEER4AQNEyMlf9+B5jkpLiVuvLCWUZasonl9lzQkob
 9axCtqpx/6QUjR20Y5jzhIF3ThSiKFu7D7IM0CPsX9+g7LcXbKlyrUZsKcXaGTEc7P4c
 76DUrvqfS7lt//OsDNMpCDNu4vNGVNdNN15xCFra9WLgA0klNTWo0mRsBD9eqm731v/7
 DoB+ZkS69HtOxcH95x3bXxa2jjeSFofQ6JTlTBdMGKzycUlqbSLBfBKociJYd8oMAL5X
 l+80yLAq5yVQ4XS+UCGiM38ijq29JQRpJGY39tP2nIwZblATFKkqfBfcibbUMFs+d0lf
 6JhQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=FGhVKVJSDxY3HmMJpb1bjuDxl1XBH/ImqPdvrbNQikQ=;
 b=hywTedv6pnfvACB1EGfqs3rDp1FaKfwQvQ81/2iStU0z4G7/EsxJ3NZpKAzNEYQayH
 8j8iRFaNDWALzcuekAxtbITgm0LNO/bPBxZ5dCV0wNTA4YIyTYNAWIk/sPP9TMwdVpje
 d8z9/VWH7L+kHTaJDis6ocWBy2ExCnC1phQmoqE/L7RX5GxWZYFgm4KJNpQc6Sjlht/K
 ShGh9corucrrdY5bwtldP5FObm8jhiO+c9ythMEPexKGZxsvIVz9A8h6nuoyh0na5QWL
 5+Z891qgJk8yRqn4spnjRrxMkjzlkwQFYAJ9W9OSNVHFEHbFKErAcKh5XLSwHrmW3fvn
 co1g==
X-Gm-Message-State: AOAM533ElAgBrSANb/6Ocpf51Z+F5jhdrE/d/FVIoz+HdRv13ZclMV/h
 se6EfZJnTHIDKswfxe+bpY2oPfXb00QlGg==
X-Google-Smtp-Source: 
 ABdhPJxTz/L14V5SsjbbHBVE1kMuYJQ+J+j2he1/HUXLwTzX0zncoZ2lBqgJACJd33WFaBJiO4DMgw==
X-Received: by 2002:a63:9550:: with SMTP id t16mr1160364pgn.318.1635389099370;
 Wed, 27 Oct 2021 19:44:59 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 40/56] tcg/optimize: Split out fold_sub_to_neg
Date: Wed, 27 Oct 2021 19:41:15 -0700
Message-Id: <20211028024131.1492790-41-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::433;
 envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x433.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635390958749100003
Content-Type: text/plain; charset="utf-8"

Even though there is only one user, place this more complex
conversion into its own helper.

Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 89 ++++++++++++++++++++++++++------------------------
 1 file changed, 47 insertions(+), 42 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 21f4251b4f..e0d850ffe4 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -1203,7 +1203,15 @@ static bool fold_nand(OptContext *ctx, TCGOp *op)
=20
 static bool fold_neg(OptContext *ctx, TCGOp *op)
 {
-    return fold_const1(ctx, op);
+    if (fold_const1(ctx, op)) {
+        return true;
+    }
+    /*
+     * Because of fold_sub_to_neg, we want to always return true,
+     * via finish_folding.
+     */
+    finish_folding(ctx, op);
+    return true;
 }
=20
 static bool fold_nor(OptContext *ctx, TCGOp *op)
@@ -1360,10 +1368,47 @@ static bool fold_shift(OptContext *ctx, TCGOp *op)
     return fold_const2(ctx, op);
 }
=20
+static bool fold_sub_to_neg(OptContext *ctx, TCGOp *op)
+{
+    TCGOpcode neg_op;
+    bool have_neg;
+
+    if (!arg_is_const(op->args[1]) || arg_info(op->args[1])->val !=3D 0) {
+        return false;
+    }
+
+    switch (ctx->type) {
+    case TCG_TYPE_I32:
+        neg_op =3D INDEX_op_neg_i32;
+        have_neg =3D TCG_TARGET_HAS_neg_i32;
+        break;
+    case TCG_TYPE_I64:
+        neg_op =3D INDEX_op_neg_i64;
+        have_neg =3D TCG_TARGET_HAS_neg_i64;
+        break;
+    case TCG_TYPE_V64:
+    case TCG_TYPE_V128:
+    case TCG_TYPE_V256:
+        neg_op =3D INDEX_op_neg_vec;
+        have_neg =3D (TCG_TARGET_HAS_neg_vec &&
+                    tcg_can_emit_vec_op(neg_op, ctx->type, TCGOP_VECE(op))=
 > 0);
+        break;
+    default:
+        g_assert_not_reached();
+    }
+    if (have_neg) {
+        op->opc =3D neg_op;
+        op->args[1] =3D op->args[2];
+        return fold_neg(ctx, op);
+    }
+    return false;
+}
+
 static bool fold_sub(OptContext *ctx, TCGOp *op)
 {
     if (fold_const2(ctx, op) ||
-        fold_xx_to_i(ctx, op, 0)) {
+        fold_xx_to_i(ctx, op, 0) ||
+        fold_sub_to_neg(ctx, op)) {
         return true;
     }
     return false;
@@ -1497,46 +1542,6 @@ void tcg_optimize(TCGContext *s)
                 continue;
             }
             break;
-        CASE_OP_32_64_VEC(sub):
-            {
-                TCGOpcode neg_op;
-                bool have_neg;
-
-                if (arg_is_const(op->args[2])) {
-                    /* Proceed with possible constant folding. */
-                    break;
-                }
-                switch (ctx.type) {
-                case TCG_TYPE_I32:
-                    neg_op =3D INDEX_op_neg_i32;
-                    have_neg =3D TCG_TARGET_HAS_neg_i32;
-                    break;
-                case TCG_TYPE_I64:
-                    neg_op =3D INDEX_op_neg_i64;
-                    have_neg =3D TCG_TARGET_HAS_neg_i64;
-                    break;
-                case TCG_TYPE_V64:
-                case TCG_TYPE_V128:
-                case TCG_TYPE_V256:
-                    neg_op =3D INDEX_op_neg_vec;
-                    have_neg =3D tcg_can_emit_vec_op(neg_op, ctx.type,
-                                                   TCGOP_VECE(op)) > 0;
-                    break;
-                default:
-                    g_assert_not_reached();
-                }
-                if (!have_neg) {
-                    break;
-                }
-                if (arg_is_const(op->args[1])
-                    && arg_info(op->args[1])->val =3D=3D 0) {
-                    op->opc =3D neg_op;
-                    reset_temp(op->args[0]);
-                    op->args[1] =3D op->args[2];
-                    continue;
-                }
-            }
-            break;
         default:
             break;
         }
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635392104; cv=none;
	d=zohomail.com; s=zohoarc;
	b=TT3Gl43n5ioEPzpceuN1g7qMAnSNQDbcBAdXagSdJ88QeBymluFzdKCWn0vCykU48rOdtfw7Zwzkwne01YHVouARquyHr3j+VWl9XvQenlHPFyHf7/yEaYU7JjGWVasHAFV66HIGSZb2yqxSVf6W6hW7fDeB/tswTRURWoLThCk=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635392104;
 h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=YOUc3yXenTRMiM7WTQSICcimIlL2Z5B4rJ9cAL/TpyU=;
	b=hAa2sO7KZMa9Iv3MKvc29DlS2Gz7txfW+L3AWRRaj6MYR7VXMYJ4KRVSanvnkD+KfzzoIfKlQUhXpOnFUkAPGSM0R+tzzIHYPn/Zfib0Ugk+setci17QOvLaTWLX37GZFZY7j5FRoN/zQozAQc5gNEYT8tEMZUnJzIiY5nVwXno=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635392104086819.9236884439691;
 Wed, 27 Oct 2021 20:35:04 -0700 (PDT)
Received: from localhost ([::1]:56644 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfwBy-0006te-7n
	for importer@patchew.org; Wed, 27 Oct 2021 23:35:02 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59676)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPd-0001UG-3l
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:05 -0400
Received: from mail-pg1-x530.google.com ([2607:f8b0:4864:20::530]:38571)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPZ-0005wQ-EX
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:04 -0400
Received: by mail-pg1-x530.google.com with SMTP id e65so4937828pgc.5
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:45:01 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id z8sm995907pgc.53.2021.10.27.19.44.59
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:44:59 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=YOUc3yXenTRMiM7WTQSICcimIlL2Z5B4rJ9cAL/TpyU=;
 b=UdlNKkG2va1qOKWQDYIkmCImGEQFf8EnsLRtw4M/KRgRXuXm3OYdB5G43wM6s/0tCC
 qkRwTPygh+intYGcUZ9NK1/bVwN5oH6s+SzLlbrLMFVTQBwaHJVausqzUHY+zHr0whal
 cXa5/zCjMQSvtR6yygTfj3Q2UYaF25zXacj1gOemn0KztQ5goYSDeO2xtyB4BQpMDgnm
 4S3IYBqOJGi2UxD3sxE+aMiLmh8ZUNgW3swmZug4Z1ibIdpV3bX0zPxzr4KJdpYTQqBe
 NfaJ5C71bu9IkyhrU1271fmFMSd5RJ2O1KmnMmVrMfpyGt7SQ/1WQbX11TDAEhkzI3Ke
 quSg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=YOUc3yXenTRMiM7WTQSICcimIlL2Z5B4rJ9cAL/TpyU=;
 b=QzEo+dH0lWWENn5vc7IOjbUv5tevAQypP3FxYdUqBXSvZ94rvH/I+ZTSaAjhG3q/k1
 MdmAGfnPCJ2qxtO7OQn7wbBxVcRmOWl+SngfsUQp/NIMU++Ag/5+EB140ewlphOHXqPa
 aqGRq0ybDl1AgRO0A+rB0JZWNinaZ2t9iHODQYjPG3G9oyTX15N4bUW85lJFVrhcK6Zz
 HsKL0HC0kJttotRRcCWqSMhkSjspIUUadBhGn78fTsM9JZ1kxShzu2qZKUUPJ3hEnxeH
 BdzKbDaGc4VOurDTR4Se20wZAs5Qr2N3nO1NoI6Xbmmv6zwlo7YoAXabH6+E4u+HUOm0
 jmlA==
X-Gm-Message-State: AOAM532viANo/b7/KUmUtQSVlD7pNhGsUDf0R4gUbPf44qAOUB71Yk8m
 /+rx9vt31EAV4fMmj9skxoIroNM/KMqLQg==
X-Google-Smtp-Source: 
 ABdhPJzxCKXPmQ2hRWgahpsDZLfKLKGipPWk++Is9ex/5eeHG3A/PSjm+7NbJnnHpgGMQPUVYjzY5A==
X-Received: by 2002:a05:6a00:1804:b0:47c:d7:fc59 with SMTP id
 y4-20020a056a00180400b0047c00d7fc59mr1625025pfa.32.1635389099961;
 Wed, 27 Oct 2021 19:44:59 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 41/56] tcg/optimize: Split out fold_xi_to_x
Date: Wed, 27 Oct 2021 19:41:16 -0700
Message-Id: <20211028024131.1492790-42-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::530;
 envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x530.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635392104703100001
Content-Type: text/plain; charset="utf-8"

Pull the "op r, a, i =3D> mov r, a" optimization into a function,
and use them in the outer-most logical operations.

Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 61 +++++++++++++++++++++-----------------------------
 1 file changed, 26 insertions(+), 35 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index e0d850ffe4..f5ab0500b7 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -749,6 +749,15 @@ static bool fold_xi_to_i(OptContext *ctx, TCGOp *op, u=
int64_t i)
     return false;
 }
=20
+/* If the binary operation has second argument @i, fold to identity. */
+static bool fold_xi_to_x(OptContext *ctx, TCGOp *op, uint64_t i)
+{
+    if (arg_is_const(op->args[2]) && arg_info(op->args[2])->val =3D=3D i) {
+        return tcg_opt_gen_mov(ctx, op, op->args[0], op->args[1]);
+    }
+    return false;
+}
+
 /* If the binary operation has second argument @i, fold to NOT. */
 static bool fold_xi_to_not(OptContext *ctx, TCGOp *op, uint64_t i)
 {
@@ -787,7 +796,11 @@ static bool fold_xx_to_x(OptContext *ctx, TCGOp *op)
=20
 static bool fold_add(OptContext *ctx, TCGOp *op)
 {
-    return fold_const2(ctx, op);
+    if (fold_const2(ctx, op) ||
+        fold_xi_to_x(ctx, op, 0)) {
+        return true;
+    }
+    return false;
 }
=20
 static bool fold_addsub2_i32(OptContext *ctx, TCGOp *op, bool add)
@@ -827,6 +840,7 @@ static bool fold_and(OptContext *ctx, TCGOp *op)
 {
     if (fold_const2(ctx, op) ||
         fold_xi_to_i(ctx, op, 0) ||
+        fold_xi_to_x(ctx, op, -1) ||
         fold_xx_to_x(ctx, op)) {
         return true;
     }
@@ -837,6 +851,7 @@ static bool fold_andc(OptContext *ctx, TCGOp *op)
 {
     if (fold_const2(ctx, op) ||
         fold_xx_to_i(ctx, op, 0) ||
+        fold_xi_to_x(ctx, op, 0) ||
         fold_ix_to_not(ctx, op, -1)) {
         return true;
     }
@@ -1044,6 +1059,7 @@ static bool fold_dup2(OptContext *ctx, TCGOp *op)
 static bool fold_eqv(OptContext *ctx, TCGOp *op)
 {
     if (fold_const2(ctx, op) ||
+        fold_xi_to_x(ctx, op, -1) ||
         fold_xi_to_not(ctx, op, 0)) {
         return true;
     }
@@ -1237,6 +1253,7 @@ static bool fold_not(OptContext *ctx, TCGOp *op)
 static bool fold_or(OptContext *ctx, TCGOp *op)
 {
     if (fold_const2(ctx, op) ||
+        fold_xi_to_x(ctx, op, 0) ||
         fold_xx_to_x(ctx, op)) {
         return true;
     }
@@ -1246,6 +1263,7 @@ static bool fold_or(OptContext *ctx, TCGOp *op)
 static bool fold_orc(OptContext *ctx, TCGOp *op)
 {
     if (fold_const2(ctx, op) ||
+        fold_xi_to_x(ctx, op, -1) ||
         fold_ix_to_not(ctx, op, 0)) {
         return true;
     }
@@ -1365,7 +1383,11 @@ static bool fold_sextract(OptContext *ctx, TCGOp *op)
=20
 static bool fold_shift(OptContext *ctx, TCGOp *op)
 {
-    return fold_const2(ctx, op);
+    if (fold_const2(ctx, op) ||
+        fold_xi_to_x(ctx, op, 0)) {
+        return true;
+    }
+    return false;
 }
=20
 static bool fold_sub_to_neg(OptContext *ctx, TCGOp *op)
@@ -1408,6 +1430,7 @@ static bool fold_sub(OptContext *ctx, TCGOp *op)
 {
     if (fold_const2(ctx, op) ||
         fold_xx_to_i(ctx, op, 0) ||
+        fold_xi_to_x(ctx, op, 0) ||
         fold_sub_to_neg(ctx, op)) {
         return true;
     }
@@ -1423,6 +1446,7 @@ static bool fold_xor(OptContext *ctx, TCGOp *op)
 {
     if (fold_const2(ctx, op) ||
         fold_xx_to_i(ctx, op, 0) ||
+        fold_xi_to_x(ctx, op, 0) ||
         fold_xi_to_not(ctx, op, -1)) {
         return true;
     }
@@ -1546,39 +1570,6 @@ void tcg_optimize(TCGContext *s)
             break;
         }
=20
-        /* Simplify expression for "op r, a, const =3D> mov r, a" cases */
-        switch (opc) {
-        CASE_OP_32_64_VEC(add):
-        CASE_OP_32_64_VEC(sub):
-        CASE_OP_32_64_VEC(or):
-        CASE_OP_32_64_VEC(xor):
-        CASE_OP_32_64_VEC(andc):
-        CASE_OP_32_64(shl):
-        CASE_OP_32_64(shr):
-        CASE_OP_32_64(sar):
-        CASE_OP_32_64(rotl):
-        CASE_OP_32_64(rotr):
-            if (!arg_is_const(op->args[1])
-                && arg_is_const(op->args[2])
-                && arg_info(op->args[2])->val =3D=3D 0) {
-                tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[1]);
-                continue;
-            }
-            break;
-        CASE_OP_32_64_VEC(and):
-        CASE_OP_32_64_VEC(orc):
-        CASE_OP_32_64(eqv):
-            if (!arg_is_const(op->args[1])
-                && arg_is_const(op->args[2])
-                && arg_info(op->args[2])->val =3D=3D -1) {
-                tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[1]);
-                continue;
-            }
-            break;
-        default:
-            break;
-        }
-
         /* Simplify using known-zero bits. Currently only ops with a single
            output argument is supported. */
         z_mask =3D -1;
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635390791; cv=none;
	d=zohomail.com; s=zohoarc;
	b=SzL9ctta+gG1oHCfT7x/X6nttIydu+h/o9fiMOjU+Buej/f60RIWvKv4y9da9bmkVRTO8u8YTKwdeZ2k156hIB8BFDss8CuOK3c4TgX0s5BfZAQfBWED2kVhrCjUMI7XTqZzkPjev2f1kAsxL6jiiK8I/CQfPx/DpCd827Wj9Jo=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635390791;
 h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=c9WNRlGeOHz8VZWPjOaGMMZX6Dax33jheJzEQdYsE1k=;
	b=i7xNrfabkoird1xFJyg4FypHDX14mF54EFAjzduoFO1NGuAp5DkbuXr46cnERB+n2EOPRNO3f1ZNwOapyP+Obsy+cN7rtxmMJPxItA1DhVfWXt49owQbnQrjTzVVcT3tFaEQMINzwLrHE/KCfQ82PtADBoPcWSB+zLUVOR4modI=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635390791670984.6077896794015;
 Wed, 27 Oct 2021 20:13:11 -0700 (PDT)
Received: from localhost ([::1]:60428 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvqo-0004Ko-NG
	for importer@patchew.org; Wed, 27 Oct 2021 23:13:10 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59678)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPe-0001Uk-9z
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:06 -0400
Received: from mail-pf1-x42e.google.com ([2607:f8b0:4864:20::42e]:44582)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPa-0005ya-FR
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:05 -0400
Received: by mail-pf1-x42e.google.com with SMTP id a26so4542100pfr.11
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:45:01 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id z8sm995907pgc.53.2021.10.27.19.45.00
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:45:00 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=c9WNRlGeOHz8VZWPjOaGMMZX6Dax33jheJzEQdYsE1k=;
 b=gE5Q+1nsu2Bv3zt9O2npp5hRbm9Z8eFR4kssxCl81yZKz6V3RGcJCWcmo27yF5CVTQ
 A3qyFY2AXOGlDXuob4+/jhc9s0bJ7tnYZ+kJlg8PalRJdMCpZHVJSNFL4XcTMInonY7a
 pJU0vG4GWChRnum8aXdW09Bcw8IcYEktlBxhr5iquTFFhQ9ZcUl9zJm6cXhLSGGUpWV3
 IlPX2CcM25nG9NhzQnBiQPiRl2Ikdz3B72R+kPMeed4vnWcAZKsROeEMfQsN0YrrT0W+
 n1l1Vq8VvsNza3pqXMPE55+VajJdi5r3bBr6TMNjtD4cjBKOhwa/Chs1FZlhAADonoeM
 DQzg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=c9WNRlGeOHz8VZWPjOaGMMZX6Dax33jheJzEQdYsE1k=;
 b=cD5uInAXa51GmVcNzQV507Plfp8VoM2ue7ftjCk+vf4jf9hBm7k39tHV/SQSIeui4+
 wHKSPhIsoMjq7UdwnRY7fLVQUIVL4TbQaVMEgblXj3g+doN5DaKKtKJKklmvKkGINNEX
 ymA6k7wfrKf4bhq7B8OUV6HnpSnXNg+LHd+5QV9DGA5Ab5s7Q4qLeyHFRESlAT9wwnee
 z3iwJJzytO+MKX+4M/oApADoRkQa+pXLkvqvjzMC0NiagewmaFfVGl2wuMipy949NbwB
 TeoZuAmZKcHYmU5Q3I1SOt3MeZxyq1aOaytYjqRwMjWo4Xei9kfUO1PBdB9cx+vekl0V
 +zEg==
X-Gm-Message-State: AOAM531dDdwg7ZHHRP17KEnZpLWI3JUlYw1hfeezPP3WglJOmbXq8IrJ
 7bHAWCgrFsqrjWvkQReyPh80N6AFZpqy1g==
X-Google-Smtp-Source: 
 ABdhPJw6Hgf+lzRZTEw4ZeSvIJ/ffbxI3SH1KwgFmmQiFQHWTpchhC2l/zE4mz0g2p6ITAQ21tjuPQ==
X-Received: by 2002:a65:62d1:: with SMTP id m17mr1200140pgv.370.1635389100625;
 Wed, 27 Oct 2021 19:45:00 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 42/56] tcg/optimize: Split out fold_ix_to_i
Date: Wed, 27 Oct 2021 19:41:17 -0700
Message-Id: <20211028024131.1492790-43-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::42e;
 envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42e.google.com
X-Spam_score_int: -1
X-Spam_score: -0.2
X-Spam_bar: /
X-Spam_report: (-0.2 / 5.0 requ) DKIM_SIGNED=0.1, DKIM_VALID=-0.1,
 DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001,
 SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635390792343100001

Pull the "op r, 0, b =3D> movi r, 0" optimization into a function,
and use it in fold_shift.

Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 28 ++++++++++------------------
 1 file changed, 10 insertions(+), 18 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index f5ab0500b7..bf74b77355 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -731,6 +731,15 @@ static bool fold_to_not(OptContext *ctx, TCGOp *op, in=
t idx)
     return false;
 }
=20
+/* If the binary operation has first argument @i, fold to @i. */
+static bool fold_ix_to_i(OptContext *ctx, TCGOp *op, uint64_t i)
+{
+    if (arg_is_const(op->args[1]) && arg_info(op->args[1])->val =3D=3D i) {
+        return tcg_opt_gen_movi(ctx, op, op->args[0], i);
+    }
+    return false;
+}
+
 /* If the binary operation has first argument @i, fold to NOT. */
 static bool fold_ix_to_not(OptContext *ctx, TCGOp *op, uint64_t i)
 {
@@ -1384,6 +1393,7 @@ static bool fold_sextract(OptContext *ctx, TCGOp *op)
 static bool fold_shift(OptContext *ctx, TCGOp *op)
 {
     if (fold_const2(ctx, op) ||
+        fold_ix_to_i(ctx, op, 0) ||
         fold_xi_to_x(ctx, op, 0)) {
         return true;
     }
@@ -1552,24 +1562,6 @@ void tcg_optimize(TCGContext *s)
             break;
         }
=20
-        /* Simplify expressions for "shift/rot r, 0, a =3D> movi r, 0",
-           and "sub r, 0, a =3D> neg r, a" case.  */
-        switch (opc) {
-        CASE_OP_32_64(shl):
-        CASE_OP_32_64(shr):
-        CASE_OP_32_64(sar):
-        CASE_OP_32_64(rotl):
-        CASE_OP_32_64(rotr):
-            if (arg_is_const(op->args[1])
-                && arg_info(op->args[1])->val =3D=3D 0) {
-                tcg_opt_gen_movi(&ctx, op, op->args[0], 0);
-                continue;
-            }
-            break;
-        default:
-            break;
-        }
-
         /* Simplify using known-zero bits. Currently only ops with a single
            output argument is supported. */
         z_mask =3D -1;
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=fail;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=fail(p=none dis=none)  header.from=linaro.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635392253514643.0430965248383;
 Wed, 27 Oct 2021 20:37:33 -0700 (PDT)
Received: from localhost ([::1]:59852 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfwEO-0000jj-B8
	for importer@patchew.org; Wed, 27 Oct 2021 23:37:32 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59790)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPj-0001Zi-LO
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:12 -0400
Received: from mail-pg1-x52c.google.com ([2607:f8b0:4864:20::52c]:36622)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPa-00064i-Ub
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:08 -0400
Received: by mail-pg1-x52c.google.com with SMTP id 75so4957944pga.3
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:45:02 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id z8sm995907pgc.53.2021.10.27.19.45.00
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:45:01 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=zF6vggycXDaDd5dET1qndnY/2O0LubesziohYu5fTa8=;
 b=AAieZED+cgV3KBFsimgaX90JOKpyYj0jTQImr4GA0loZNxqUrZGbvq4e25Woq+2S8W
 zp3bCTlkq8fKoDvQ3wRomRwkkteJe4Q3NXq8FyN3dCsWL0PeGMLrBDCBEj5I25PuaxhT
 k5seDVgKBwAOjicdRnbooWNOzHjbbokqx+gMZhFVsT9VdrAmGsJ9XN3HGpx9M/0zJMuY
 z6a0sz/p4+a3tsp6rfbLJ5qpWJIgFjV46K4tUn0czSDlnGsUOVqtD0ZzgQBaRQLEooZH
 mWLC+8hSwmsDqUnYCuhtNewlmBkbyEaLYe8P5/5yYDWEPjpEPJuWpUqPrOgshNpr0cUa
 Dndw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=zF6vggycXDaDd5dET1qndnY/2O0LubesziohYu5fTa8=;
 b=DAU6QTEGhGCVOyOOxTFCl0WqDqdMwr0bnNSpEVsPUOTTJWqsiAoNQ6Ge0ETB/MFrxv
 85blAXV7JP/ovDxQ7VV9XmvAMpejYXafvH8wN0SXWJSVlikbXF/UqvzNEYPjGUsaic5s
 8k3cKVpKuqGm3vwuLRISFTqIpYxGfSrH6X72bK/scMohVFyjckaii0w/hC6+F8ikXCID
 lvAcQ++hQjylz09fct/wOxAypSucgrrtEUaambyPOSWNXAVCCwFL5Qar5iDGra2E/PIA
 2QzAnmH9F+dpp/o7r8FX52sxOorBWgbNJvjRH/q3zyykdzIVeMr5xyhCN5DPOB5RFcnD
 w9fw==
X-Gm-Message-State: AOAM531FH+Ysd0sYxiUkcGKaA/yrkycRNIPBFJBWUVMcJ+ZjLur4WrGq
 CBbr4NxY0R0EqM1rtnk57lPB4JisKN2rFQ==
X-Google-Smtp-Source: 
 ABdhPJyHvJVFYrI1mjcM9cm49NW5rx1zEmoT5qQexvVsQpDAWl/rPx+sAonq8f9XeZShBne4V23YXQ==
X-Received: by 2002:a05:6a00:21c6:b0:44c:937:fbf3 with SMTP id
 t6-20020a056a0021c600b0044c0937fbf3mr1447357pfj.2.1635389101456;
 Wed, 27 Oct 2021 19:45:01 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 43/56] tcg/optimize: Split out fold_masks
Date: Wed, 27 Oct 2021 19:41:18 -0700
Message-Id: <20211028024131.1492790-44-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::52c;
 envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52c.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Alex=20Benn=C3=A9e?= <alex.bennee@linaro.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: fail (Header signature does not verify)
X-ZM-MESSAGEID: 1635392255052100001

Move all of the known-zero optimizations into the per-opcode
functions.  Use fold_masks when there is a possibility of the
result being determined, and simply set ctx->z_mask otherwise.

Reviewed-by: Alex Benn=C3=A9e <alex.bennee@linaro.org>
Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 545 ++++++++++++++++++++++++++-----------------------
 1 file changed, 294 insertions(+), 251 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index bf74b77355..e84d10be53 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -50,7 +50,8 @@ typedef struct OptContext {
     TCGTempSet temps_used;
=20
     /* In flight values from optimization. */
-    uint64_t z_mask;
+    uint64_t a_mask;  /* mask bit is 0 iff value identical to first input =
*/
+    uint64_t z_mask;  /* mask bit is 0 iff value bit is 0 */
     TCGType type;
 } OptContext;
=20
@@ -694,6 +695,31 @@ static bool fold_const2(OptContext *ctx, TCGOp *op)
     return false;
 }
=20
+static bool fold_masks(OptContext *ctx, TCGOp *op)
+{
+    uint64_t a_mask =3D ctx->a_mask;
+    uint64_t z_mask =3D ctx->z_mask;
+
+    /*
+     * 32-bit ops generate 32-bit results.  For the result is zero test
+     * below, we can ignore high bits, but for further optimizations we
+     * need to record that the high bits contain garbage.
+     */
+    if (ctx->type =3D=3D TCG_TYPE_I32) {
+        ctx->z_mask |=3D MAKE_64BIT_MASK(32, 32);
+        a_mask &=3D MAKE_64BIT_MASK(0, 32);
+        z_mask &=3D MAKE_64BIT_MASK(0, 32);
+    }
+
+    if (z_mask =3D=3D 0) {
+        return tcg_opt_gen_movi(ctx, op, op->args[0], 0);
+    }
+    if (a_mask =3D=3D 0) {
+        return tcg_opt_gen_mov(ctx, op, op->args[0], op->args[1]);
+    }
+    return false;
+}
+
 /*
  * Convert @op to NOT, if NOT is supported by the host.
  * Return true f the conversion is successful, which will still
@@ -847,24 +873,55 @@ static bool fold_add2_i32(OptContext *ctx, TCGOp *op)
=20
 static bool fold_and(OptContext *ctx, TCGOp *op)
 {
+    uint64_t z1, z2;
+
     if (fold_const2(ctx, op) ||
         fold_xi_to_i(ctx, op, 0) ||
         fold_xi_to_x(ctx, op, -1) ||
         fold_xx_to_x(ctx, op)) {
         return true;
     }
-    return false;
+
+    z1 =3D arg_info(op->args[1])->z_mask;
+    z2 =3D arg_info(op->args[2])->z_mask;
+    ctx->z_mask =3D z1 & z2;
+
+    /*
+     * Known-zeros does not imply known-ones.  Therefore unless
+     * arg2 is constant, we can't infer affected bits from it.
+     */
+    if (arg_is_const(op->args[2])) {
+        ctx->a_mask =3D z1 & ~z2;
+    }
+
+    return fold_masks(ctx, op);
 }
=20
 static bool fold_andc(OptContext *ctx, TCGOp *op)
 {
+    uint64_t z1;
+
     if (fold_const2(ctx, op) ||
         fold_xx_to_i(ctx, op, 0) ||
         fold_xi_to_x(ctx, op, 0) ||
         fold_ix_to_not(ctx, op, -1)) {
         return true;
     }
-    return false;
+
+    z1 =3D arg_info(op->args[1])->z_mask;
+
+    /*
+     * Known-zeros does not imply known-ones.  Therefore unless
+     * arg2 is constant, we can't infer anything from it.
+     */
+    if (arg_is_const(op->args[2])) {
+        uint64_t z2 =3D ~arg_info(op->args[2])->z_mask;
+        ctx->a_mask =3D z1 & ~z2;
+        z1 &=3D z2;
+    }
+    ctx->z_mask =3D z1;
+
+    return fold_masks(ctx, op);
 }
=20
 static bool fold_brcond(OptContext *ctx, TCGOp *op)
@@ -963,13 +1020,52 @@ static bool fold_brcond2(OptContext *ctx, TCGOp *op)
=20
 static bool fold_bswap(OptContext *ctx, TCGOp *op)
 {
+    uint64_t z_mask, sign;
+
     if (arg_is_const(op->args[1])) {
         uint64_t t =3D arg_info(op->args[1])->val;
=20
         t =3D do_constant_folding(op->opc, ctx->type, t, op->args[2]);
         return tcg_opt_gen_movi(ctx, op, op->args[0], t);
     }
-    return false;
+
+    z_mask =3D arg_info(op->args[1])->z_mask;
+    switch (op->opc) {
+    case INDEX_op_bswap16_i32:
+    case INDEX_op_bswap16_i64:
+        z_mask =3D bswap16(z_mask);
+        sign =3D INT16_MIN;
+        break;
+    case INDEX_op_bswap32_i32:
+    case INDEX_op_bswap32_i64:
+        z_mask =3D bswap32(z_mask);
+        sign =3D INT32_MIN;
+        break;
+    case INDEX_op_bswap64_i64:
+        z_mask =3D bswap64(z_mask);
+        sign =3D INT64_MIN;
+        break;
+    default:
+        g_assert_not_reached();
+    }
+
+    switch (op->args[2] & (TCG_BSWAP_OZ | TCG_BSWAP_OS)) {
+    case TCG_BSWAP_OZ:
+        break;
+    case TCG_BSWAP_OS:
+        /* If the sign bit may be 1, force all the bits above to 1. */
+        if (z_mask & sign) {
+            z_mask |=3D sign;
+        }
+        break;
+    default:
+        /* The high bits are undefined: force all bits above the sign to 1=
. */
+        z_mask |=3D sign << 1;
+        break;
+    }
+    ctx->z_mask =3D z_mask;
+
+    return fold_masks(ctx, op);
 }
=20
 static bool fold_call(OptContext *ctx, TCGOp *op)
@@ -1006,6 +1102,8 @@ static bool fold_call(OptContext *ctx, TCGOp *op)
=20
 static bool fold_count_zeros(OptContext *ctx, TCGOp *op)
 {
+    uint64_t z_mask;
+
     if (arg_is_const(op->args[1])) {
         uint64_t t =3D arg_info(op->args[1])->val;
=20
@@ -1015,12 +1113,39 @@ static bool fold_count_zeros(OptContext *ctx, TCGOp=
 *op)
         }
         return tcg_opt_gen_mov(ctx, op, op->args[0], op->args[2]);
     }
+
+    switch (ctx->type) {
+    case TCG_TYPE_I32:
+        z_mask =3D 31;
+        break;
+    case TCG_TYPE_I64:
+        z_mask =3D 63;
+        break;
+    default:
+        g_assert_not_reached();
+    }
+    ctx->z_mask =3D arg_info(op->args[2])->z_mask | z_mask;
+
     return false;
 }
=20
 static bool fold_ctpop(OptContext *ctx, TCGOp *op)
 {
-    return fold_const1(ctx, op);
+    if (fold_const1(ctx, op)) {
+        return true;
+    }
+
+    switch (ctx->type) {
+    case TCG_TYPE_I32:
+        ctx->z_mask =3D 32 | 31;
+        break;
+    case TCG_TYPE_I64:
+        ctx->z_mask =3D 64 | 63;
+        break;
+    default:
+        g_assert_not_reached();
+    }
+    return false;
 }
=20
 static bool fold_deposit(OptContext *ctx, TCGOp *op)
@@ -1032,6 +1157,10 @@ static bool fold_deposit(OptContext *ctx, TCGOp *op)
         t1 =3D deposit64(t1, op->args[3], op->args[4], t2);
         return tcg_opt_gen_movi(ctx, op, op->args[0], t1);
     }
+
+    ctx->z_mask =3D deposit64(arg_info(op->args[1])->z_mask,
+                            op->args[3], op->args[4],
+                            arg_info(op->args[2])->z_mask);
     return false;
 }
=20
@@ -1077,6 +1206,8 @@ static bool fold_eqv(OptContext *ctx, TCGOp *op)
=20
 static bool fold_extract(OptContext *ctx, TCGOp *op)
 {
+    uint64_t z_mask_old, z_mask;
+
     if (arg_is_const(op->args[1])) {
         uint64_t t;
=20
@@ -1084,7 +1215,15 @@ static bool fold_extract(OptContext *ctx, TCGOp *op)
         t =3D extract64(t, op->args[2], op->args[3]);
         return tcg_opt_gen_movi(ctx, op, op->args[0], t);
     }
-    return false;
+
+    z_mask_old =3D arg_info(op->args[1])->z_mask;
+    z_mask =3D extract64(z_mask_old, op->args[2], op->args[3]);
+    if (op->args[2] =3D=3D 0) {
+        ctx->a_mask =3D z_mask_old ^ z_mask;
+    }
+    ctx->z_mask =3D z_mask;
+
+    return fold_masks(ctx, op);
 }
=20
 static bool fold_extract2(OptContext *ctx, TCGOp *op)
@@ -1108,12 +1247,83 @@ static bool fold_extract2(OptContext *ctx, TCGOp *o=
p)
=20
 static bool fold_exts(OptContext *ctx, TCGOp *op)
 {
-    return fold_const1(ctx, op);
+    uint64_t z_mask_old, z_mask, sign;
+    bool type_change =3D false;
+
+    if (fold_const1(ctx, op)) {
+        return true;
+    }
+
+    z_mask_old =3D z_mask =3D arg_info(op->args[1])->z_mask;
+
+    switch (op->opc) {
+    CASE_OP_32_64(ext8s):
+        sign =3D INT8_MIN;
+        z_mask =3D (uint8_t)z_mask;
+        break;
+    CASE_OP_32_64(ext16s):
+        sign =3D INT16_MIN;
+        z_mask =3D (uint16_t)z_mask;
+        break;
+    case INDEX_op_ext_i32_i64:
+        type_change =3D true;
+        QEMU_FALLTHROUGH;
+    case INDEX_op_ext32s_i64:
+        sign =3D INT32_MIN;
+        z_mask =3D (uint32_t)z_mask;
+        break;
+    default:
+        g_assert_not_reached();
+    }
+
+    if (z_mask & sign) {
+        z_mask |=3D sign;
+    } else if (!type_change) {
+        ctx->a_mask =3D z_mask_old ^ z_mask;
+    }
+    ctx->z_mask =3D z_mask;
+
+    return fold_masks(ctx, op);
 }
=20
 static bool fold_extu(OptContext *ctx, TCGOp *op)
 {
-    return fold_const1(ctx, op);
+    uint64_t z_mask_old, z_mask;
+    bool type_change =3D false;
+
+    if (fold_const1(ctx, op)) {
+        return true;
+    }
+
+    z_mask_old =3D z_mask =3D arg_info(op->args[1])->z_mask;
+
+    switch (op->opc) {
+    CASE_OP_32_64(ext8u):
+        z_mask =3D (uint8_t)z_mask;
+        break;
+    CASE_OP_32_64(ext16u):
+        z_mask =3D (uint16_t)z_mask;
+        break;
+    case INDEX_op_extrl_i64_i32:
+    case INDEX_op_extu_i32_i64:
+        type_change =3D true;
+        QEMU_FALLTHROUGH;
+    case INDEX_op_ext32u_i64:
+        z_mask =3D (uint32_t)z_mask;
+        break;
+    case INDEX_op_extrh_i64_i32:
+        type_change =3D true;
+        z_mask >>=3D 32;
+        break;
+    default:
+        g_assert_not_reached();
+    }
+
+    ctx->z_mask =3D z_mask;
+    if (!type_change) {
+        ctx->a_mask =3D z_mask_old ^ z_mask;
+    }
+    return fold_masks(ctx, op);
 }
=20
 static bool fold_mb(OptContext *ctx, TCGOp *op)
@@ -1154,6 +1364,9 @@ static bool fold_movcond(OptContext *ctx, TCGOp *op)
         return tcg_opt_gen_mov(ctx, op, op->args[0], op->args[4 - i]);
     }
=20
+    ctx->z_mask =3D arg_info(op->args[3])->z_mask
+                | arg_info(op->args[4])->z_mask;
+
     if (arg_is_const(op->args[3]) && arg_is_const(op->args[4])) {
         uint64_t tv =3D arg_info(op->args[3])->val;
         uint64_t fv =3D arg_info(op->args[4])->val;
@@ -1228,9 +1441,16 @@ static bool fold_nand(OptContext *ctx, TCGOp *op)
=20
 static bool fold_neg(OptContext *ctx, TCGOp *op)
 {
+    uint64_t z_mask;
+
     if (fold_const1(ctx, op)) {
         return true;
     }
+
+    /* Set to 1 all bits to the left of the rightmost.  */
+    z_mask =3D arg_info(op->args[1])->z_mask;
+    ctx->z_mask =3D -(z_mask & -z_mask);
+
     /*
      * Because of fold_sub_to_neg, we want to always return true,
      * via finish_folding.
@@ -1266,7 +1486,10 @@ static bool fold_or(OptContext *ctx, TCGOp *op)
         fold_xx_to_x(ctx, op)) {
         return true;
     }
-    return false;
+
+    ctx->z_mask =3D arg_info(op->args[1])->z_mask
+                | arg_info(op->args[2])->z_mask;
+    return fold_masks(ctx, op);
 }
=20
 static bool fold_orc(OptContext *ctx, TCGOp *op)
@@ -1281,6 +1504,15 @@ static bool fold_orc(OptContext *ctx, TCGOp *op)
=20
 static bool fold_qemu_ld(OptContext *ctx, TCGOp *op)
 {
+    const TCGOpDef *def =3D &tcg_op_defs[op->opc];
+    MemOpIdx oi =3D op->args[def->nb_oargs + def->nb_iargs];
+    MemOp mop =3D get_memop(oi);
+    int width =3D 8 * memop_size(mop);
+
+    if (!(mop & MO_SIGN) && width < 64) {
+        ctx->z_mask =3D MAKE_64BIT_MASK(0, width);
+    }
+
     /* Opcodes that touch guest memory stop the mb optimization.  */
     ctx->prev_mb =3D NULL;
     return false;
@@ -1306,6 +1538,8 @@ static bool fold_setcond(OptContext *ctx, TCGOp *op)
     if (i >=3D 0) {
         return tcg_opt_gen_movi(ctx, op, op->args[0], i);
     }
+
+    ctx->z_mask =3D 1;
     return false;
 }
=20
@@ -1372,6 +1606,8 @@ static bool fold_setcond2(OptContext *ctx, TCGOp *op)
         op->opc =3D INDEX_op_setcond_i32;
         break;
     }
+
+    ctx->z_mask =3D 1;
     return false;
=20
  do_setcond_const:
@@ -1380,6 +1616,8 @@ static bool fold_setcond2(OptContext *ctx, TCGOp *op)
=20
 static bool fold_sextract(OptContext *ctx, TCGOp *op)
 {
+    int64_t z_mask_old, z_mask;
+
     if (arg_is_const(op->args[1])) {
         uint64_t t;
=20
@@ -1387,7 +1625,15 @@ static bool fold_sextract(OptContext *ctx, TCGOp *op)
         t =3D sextract64(t, op->args[2], op->args[3]);
         return tcg_opt_gen_movi(ctx, op, op->args[0], t);
     }
-    return false;
+
+    z_mask_old =3D arg_info(op->args[1])->z_mask;
+    z_mask =3D sextract64(z_mask_old, op->args[2], op->args[3]);
+    if (op->args[2] =3D=3D 0 && z_mask >=3D 0) {
+        ctx->a_mask =3D z_mask_old ^ z_mask;
+    }
+    ctx->z_mask =3D z_mask;
+
+    return fold_masks(ctx, op);
 }
=20
 static bool fold_shift(OptContext *ctx, TCGOp *op)
@@ -1397,6 +1643,13 @@ static bool fold_shift(OptContext *ctx, TCGOp *op)
         fold_xi_to_x(ctx, op, 0)) {
         return true;
     }
+
+    if (arg_is_const(op->args[2])) {
+        ctx->z_mask =3D do_constant_folding(op->opc, ctx->type,
+                                          arg_info(op->args[1])->z_mask,
+                                          arg_info(op->args[2])->val);
+        return fold_masks(ctx, op);
+    }
     return false;
 }
=20
@@ -1452,6 +1705,25 @@ static bool fold_sub2_i32(OptContext *ctx, TCGOp *op)
     return fold_addsub2_i32(ctx, op, false);
 }
=20
+static bool fold_tcg_ld(OptContext *ctx, TCGOp *op)
+{
+    /* We can't do any folding with a load, but we can record bits. */
+    switch (op->opc) {
+    CASE_OP_32_64(ld8u):
+        ctx->z_mask =3D MAKE_64BIT_MASK(0, 8);
+        break;
+    CASE_OP_32_64(ld16u):
+        ctx->z_mask =3D MAKE_64BIT_MASK(0, 16);
+        break;
+    case INDEX_op_ld32u_i64:
+        ctx->z_mask =3D MAKE_64BIT_MASK(0, 32);
+        break;
+    default:
+        g_assert_not_reached();
+    }
+    return false;
+}
+
 static bool fold_xor(OptContext *ctx, TCGOp *op)
 {
     if (fold_const2(ctx, op) ||
@@ -1460,7 +1732,10 @@ static bool fold_xor(OptContext *ctx, TCGOp *op)
         fold_xi_to_not(ctx, op, -1)) {
         return true;
     }
-    return false;
+
+    ctx->z_mask =3D arg_info(op->args[1])->z_mask
+                | arg_info(op->args[2])->z_mask;
+    return fold_masks(ctx, op);
 }
=20
 /* Propagate constants and copies, fold constant expressions. */
@@ -1481,7 +1756,6 @@ void tcg_optimize(TCGContext *s)
     }
=20
     QTAILQ_FOREACH_SAFE(op, &s->ops, link, op_next) {
-        uint64_t z_mask, partmask, affected, tmp;
         TCGOpcode opc =3D op->opc;
         const TCGOpDef *def;
         bool done =3D false;
@@ -1562,245 +1836,9 @@ void tcg_optimize(TCGContext *s)
             break;
         }
=20
-        /* Simplify using known-zero bits. Currently only ops with a single
-           output argument is supported. */
-        z_mask =3D -1;
-        affected =3D -1;
-        switch (opc) {
-        CASE_OP_32_64(ext8s):
-            if ((arg_info(op->args[1])->z_mask & 0x80) !=3D 0) {
-                break;
-            }
-            QEMU_FALLTHROUGH;
-        CASE_OP_32_64(ext8u):
-            z_mask =3D 0xff;
-            goto and_const;
-        CASE_OP_32_64(ext16s):
-            if ((arg_info(op->args[1])->z_mask & 0x8000) !=3D 0) {
-                break;
-            }
-            QEMU_FALLTHROUGH;
-        CASE_OP_32_64(ext16u):
-            z_mask =3D 0xffff;
-            goto and_const;
-        case INDEX_op_ext32s_i64:
-            if ((arg_info(op->args[1])->z_mask & 0x80000000) !=3D 0) {
-                break;
-            }
-            QEMU_FALLTHROUGH;
-        case INDEX_op_ext32u_i64:
-            z_mask =3D 0xffffffffU;
-            goto and_const;
-
-        CASE_OP_32_64(and):
-            z_mask =3D arg_info(op->args[2])->z_mask;
-            if (arg_is_const(op->args[2])) {
-        and_const:
-                affected =3D arg_info(op->args[1])->z_mask & ~z_mask;
-            }
-            z_mask =3D arg_info(op->args[1])->z_mask & z_mask;
-            break;
-
-        case INDEX_op_ext_i32_i64:
-            if ((arg_info(op->args[1])->z_mask & 0x80000000) !=3D 0) {
-                break;
-            }
-            QEMU_FALLTHROUGH;
-        case INDEX_op_extu_i32_i64:
-            /* We do not compute affected as it is a size changing op.  */
-            z_mask =3D (uint32_t)arg_info(op->args[1])->z_mask;
-            break;
-
-        CASE_OP_32_64(andc):
-            /* Known-zeros does not imply known-ones.  Therefore unless
-               op->args[2] is constant, we can't infer anything from it.  =
*/
-            if (arg_is_const(op->args[2])) {
-                z_mask =3D ~arg_info(op->args[2])->z_mask;
-                goto and_const;
-            }
-            /* But we certainly know nothing outside args[1] may be set. */
-            z_mask =3D arg_info(op->args[1])->z_mask;
-            break;
-
-        case INDEX_op_sar_i32:
-            if (arg_is_const(op->args[2])) {
-                tmp =3D arg_info(op->args[2])->val & 31;
-                z_mask =3D (int32_t)arg_info(op->args[1])->z_mask >> tmp;
-            }
-            break;
-        case INDEX_op_sar_i64:
-            if (arg_is_const(op->args[2])) {
-                tmp =3D arg_info(op->args[2])->val & 63;
-                z_mask =3D (int64_t)arg_info(op->args[1])->z_mask >> tmp;
-            }
-            break;
-
-        case INDEX_op_shr_i32:
-            if (arg_is_const(op->args[2])) {
-                tmp =3D arg_info(op->args[2])->val & 31;
-                z_mask =3D (uint32_t)arg_info(op->args[1])->z_mask >> tmp;
-            }
-            break;
-        case INDEX_op_shr_i64:
-            if (arg_is_const(op->args[2])) {
-                tmp =3D arg_info(op->args[2])->val & 63;
-                z_mask =3D (uint64_t)arg_info(op->args[1])->z_mask >> tmp;
-            }
-            break;
-
-        case INDEX_op_extrl_i64_i32:
-            z_mask =3D (uint32_t)arg_info(op->args[1])->z_mask;
-            break;
-        case INDEX_op_extrh_i64_i32:
-            z_mask =3D (uint64_t)arg_info(op->args[1])->z_mask >> 32;
-            break;
-
-        CASE_OP_32_64(shl):
-            if (arg_is_const(op->args[2])) {
-                tmp =3D arg_info(op->args[2])->val & (TCG_TARGET_REG_BITS =
- 1);
-                z_mask =3D arg_info(op->args[1])->z_mask << tmp;
-            }
-            break;
-
-        CASE_OP_32_64(neg):
-            /* Set to 1 all bits to the left of the rightmost.  */
-            z_mask =3D -(arg_info(op->args[1])->z_mask
-                       & -arg_info(op->args[1])->z_mask);
-            break;
-
-        CASE_OP_32_64(deposit):
-            z_mask =3D deposit64(arg_info(op->args[1])->z_mask,
-                               op->args[3], op->args[4],
-                               arg_info(op->args[2])->z_mask);
-            break;
-
-        CASE_OP_32_64(extract):
-            z_mask =3D extract64(arg_info(op->args[1])->z_mask,
-                               op->args[2], op->args[3]);
-            if (op->args[2] =3D=3D 0) {
-                affected =3D arg_info(op->args[1])->z_mask & ~z_mask;
-            }
-            break;
-        CASE_OP_32_64(sextract):
-            z_mask =3D sextract64(arg_info(op->args[1])->z_mask,
-                                op->args[2], op->args[3]);
-            if (op->args[2] =3D=3D 0 && (tcg_target_long)z_mask >=3D 0) {
-                affected =3D arg_info(op->args[1])->z_mask & ~z_mask;
-            }
-            break;
-
-        CASE_OP_32_64(or):
-        CASE_OP_32_64(xor):
-            z_mask =3D arg_info(op->args[1])->z_mask
-                   | arg_info(op->args[2])->z_mask;
-            break;
-
-        case INDEX_op_clz_i32:
-        case INDEX_op_ctz_i32:
-            z_mask =3D arg_info(op->args[2])->z_mask | 31;
-            break;
-
-        case INDEX_op_clz_i64:
-        case INDEX_op_ctz_i64:
-            z_mask =3D arg_info(op->args[2])->z_mask | 63;
-            break;
-
-        case INDEX_op_ctpop_i32:
-            z_mask =3D 32 | 31;
-            break;
-        case INDEX_op_ctpop_i64:
-            z_mask =3D 64 | 63;
-            break;
-
-        CASE_OP_32_64(setcond):
-        case INDEX_op_setcond2_i32:
-            z_mask =3D 1;
-            break;
-
-        CASE_OP_32_64(movcond):
-            z_mask =3D arg_info(op->args[3])->z_mask
-                   | arg_info(op->args[4])->z_mask;
-            break;
-
-        CASE_OP_32_64(ld8u):
-            z_mask =3D 0xff;
-            break;
-        CASE_OP_32_64(ld16u):
-            z_mask =3D 0xffff;
-            break;
-        case INDEX_op_ld32u_i64:
-            z_mask =3D 0xffffffffu;
-            break;
-
-        CASE_OP_32_64(qemu_ld):
-            {
-                MemOpIdx oi =3D op->args[def->nb_oargs + def->nb_iargs];
-                MemOp mop =3D get_memop(oi);
-                if (!(mop & MO_SIGN)) {
-                    z_mask =3D (2ULL << ((8 << (mop & MO_SIZE)) - 1)) - 1;
-                }
-            }
-            break;
-
-        CASE_OP_32_64(bswap16):
-            z_mask =3D arg_info(op->args[1])->z_mask;
-            if (z_mask <=3D 0xffff) {
-                op->args[2] |=3D TCG_BSWAP_IZ;
-            }
-            z_mask =3D bswap16(z_mask);
-            switch (op->args[2] & (TCG_BSWAP_OZ | TCG_BSWAP_OS)) {
-            case TCG_BSWAP_OZ:
-                break;
-            case TCG_BSWAP_OS:
-                z_mask =3D (int16_t)z_mask;
-                break;
-            default: /* undefined high bits */
-                z_mask |=3D MAKE_64BIT_MASK(16, 48);
-                break;
-            }
-            break;
-
-        case INDEX_op_bswap32_i64:
-            z_mask =3D arg_info(op->args[1])->z_mask;
-            if (z_mask <=3D 0xffffffffu) {
-                op->args[2] |=3D TCG_BSWAP_IZ;
-            }
-            z_mask =3D bswap32(z_mask);
-            switch (op->args[2] & (TCG_BSWAP_OZ | TCG_BSWAP_OS)) {
-            case TCG_BSWAP_OZ:
-                break;
-            case TCG_BSWAP_OS:
-                z_mask =3D (int32_t)z_mask;
-                break;
-            default: /* undefined high bits */
-                z_mask |=3D MAKE_64BIT_MASK(32, 32);
-                break;
-            }
-            break;
-
-        default:
-            break;
-        }
-
-        /* 32-bit ops generate 32-bit results.  For the result is zero test
-           below, we can ignore high bits, but for further optimizations we
-           need to record that the high bits contain garbage.  */
-        partmask =3D z_mask;
-        if (ctx.type =3D=3D TCG_TYPE_I32) {
-            z_mask |=3D ~(tcg_target_ulong)0xffffffffu;
-            partmask &=3D 0xffffffffu;
-            affected &=3D 0xffffffffu;
-        }
-        ctx.z_mask =3D z_mask;
-
-        if (partmask =3D=3D 0) {
-            tcg_opt_gen_movi(&ctx, op, op->args[0], 0);
-            continue;
-        }
-        if (affected =3D=3D 0) {
-            tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[1]);
-            continue;
-        }
+        /* Assume all bits affected, and no bits known zero. */
+        ctx.a_mask =3D -1;
+        ctx.z_mask =3D -1;
=20
         /*
          * Process each opcode.
@@ -1873,6 +1911,11 @@ void tcg_optimize(TCGContext *s)
         case INDEX_op_extrh_i64_i32:
             done =3D fold_extu(&ctx, op);
             break;
+        CASE_OP_32_64(ld8u):
+        CASE_OP_32_64(ld16u):
+        case INDEX_op_ld32u_i64:
+            done =3D fold_tcg_ld(&ctx, op);
+            break;
         case INDEX_op_mb:
             done =3D fold_mb(&ctx, op);
             break;
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635391124; cv=none;
	d=zohomail.com; s=zohoarc;
	b=LBy9pZFxNu3p7mPH01zuP3ZF23DeA8jPA5qfy5WxUrfsYnD0ButYBOezbpEctr92p1zGUKBEBbcJ4FLLM/qtf7yTxuzmL/9ymElHezsZs9cnCkQQm9G9tI6sJd8mEkh41YlIHZSV+amdQmt/jdvo6hBKpVtLNkIOK1V7ia+Wz/A=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635391124;
 h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=jRRRP6JmvKBpZ0VJ9BwC7heQ6m7xhbcAt+61FCJAiek=;
	b=fk0gnBVi63sXeiLBaw34wGDW6cGqLquzWuB3wsNI9xQE83WWNZBryp92/BQpyZripkhi38sryoaBsa8WhhERg7K4BIfiRMB6WtBXFxEzCgY6X3Mmh9K0g9TFdmIyIMK4eQtPxiLyoWSI5v563fvf5Ud3wSGXs2uJTfoj/hz8DWM=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635391124551525.0098465473011;
 Wed, 27 Oct 2021 20:18:44 -0700 (PDT)
Received: from localhost ([::1]:51804 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvwB-0000ZG-DX
	for importer@patchew.org; Wed, 27 Oct 2021 23:18:43 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59824)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPk-0001a1-Bo
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:12 -0400
Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]:56139)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPb-00065A-92
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:11 -0400
Received: by mail-pj1-x102b.google.com with SMTP id om14so3569114pjb.5
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:45:02 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id z8sm995907pgc.53.2021.10.27.19.45.01
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:45:01 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=jRRRP6JmvKBpZ0VJ9BwC7heQ6m7xhbcAt+61FCJAiek=;
 b=RZKTdaDFlLejimHaHk4cxnDD77ufpxatfxLfpHuoFFLXcV1NQTqj5ypbFN9QZxjAAy
 LfPcEsICkQIK8a62UWad4yPGClDMGQJLMPtdh6N7HruwJMG+judshRk/eUShF3a+/RJu
 Hem9O/fe5POalpjsaR7Wq2+abXbtm7fgb+Wbc+JvZsi4Xl+XbCN4qyEdMNYD8l+q99Cu
 16L1+XNmZwDbKqKVWgPDYTsEEHELMY0DHJN8l92ujT5iUHyKstvEMAAO0yBDKpG8rOQe
 jfe+CstSRewThdZV+K1IVPa5Ntvu9XPBdANYISrxr7U6/CV5UeTB/qqRIujNsxeW1S9r
 +41Q==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=jRRRP6JmvKBpZ0VJ9BwC7heQ6m7xhbcAt+61FCJAiek=;
 b=iJoJ7Jr/M/SjN6dabY3CdpIkKqm5MZwCpF46DA6ADvtz5lh1uZxQEG1TegWtbPtmIN
 2vY6OzXB6Ry3AstEa2HOjSJwvHKjKM62ihlYTOEc4Xd7y7lHOJMx5OQUSgSRXQ3l1X+X
 YVLqQNMteoT3bwrYAdOsrtA85kXfvPbpIgoDLLb3K3ecMM0J3qkVrurvhlS9vJ20Rvqv
 wV3FMhYBmghoq9qWlOn4hWlI0kc/c8vwSadBl6+PDdKWLwf/JHXAfVNxNJ71x/CF15mL
 ERPRtKKVUVkHaxddNjtWKb39fjNNxvBvE+sq1UV6S0TnuFZzhug5aXdwrGeOuXxctlTg
 47AA==
X-Gm-Message-State: AOAM533fS96q4VqEo341cMKR9zT0CdCyIcFwOvXf5/YGP+QwEDgTEevz
 8FkjFiiakrDsGsf+KjSrAROEnw76oIe6bQ==
X-Google-Smtp-Source: 
 ABdhPJzJfXY5NNEzjtSLfqjlKRug9AIIXfm47Wq0ZWo5AqCNZ1+oAeo439QRHjKakbVorgYjLooO7w==
X-Received: by 2002:a17:90b:4d8e:: with SMTP id
 oj14mr1595146pjb.160.1635389101999;
 Wed, 27 Oct 2021 19:45:01 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 44/56] tcg/optimize: Expand fold_mulu2_i32 to all 4-arg
 multiplies
Date: Wed, 27 Oct 2021 19:41:19 -0700
Message-Id: <20211028024131.1492790-45-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::102b;
 envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102b.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 T_SPF_TEMPERROR=0.01 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635391126329100001

Rename to fold_multiply2, and handle muls2_i32, mulu2_i64,
and muls2_i64.

Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 44 +++++++++++++++++++++++++++++++++++---------
 1 file changed, 35 insertions(+), 9 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index e84d10be53..e2ecad2884 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -1412,19 +1412,44 @@ static bool fold_mul_highpart(OptContext *ctx, TCGO=
p *op)
     return false;
 }
=20
-static bool fold_mulu2_i32(OptContext *ctx, TCGOp *op)
+static bool fold_multiply2(OptContext *ctx, TCGOp *op)
 {
     if (arg_is_const(op->args[2]) && arg_is_const(op->args[3])) {
-        uint32_t a =3D arg_info(op->args[2])->val;
-        uint32_t b =3D arg_info(op->args[3])->val;
-        uint64_t r =3D (uint64_t)a * b;
+        uint64_t a =3D arg_info(op->args[2])->val;
+        uint64_t b =3D arg_info(op->args[3])->val;
+        uint64_t h, l;
         TCGArg rl, rh;
-        TCGOp *op2 =3D tcg_op_insert_before(ctx->tcg, op, INDEX_op_mov_i32=
);
+        TCGOp *op2;
+
+        switch (op->opc) {
+        case INDEX_op_mulu2_i32:
+            l =3D (uint64_t)(uint32_t)a * (uint32_t)b;
+            h =3D (int32_t)(l >> 32);
+            l =3D (int32_t)l;
+            break;
+        case INDEX_op_muls2_i32:
+            l =3D (int64_t)(int32_t)a * (int32_t)b;
+            h =3D l >> 32;
+            l =3D (int32_t)l;
+            break;
+        case INDEX_op_mulu2_i64:
+            mulu64(&l, &h, a, b);
+            break;
+        case INDEX_op_muls2_i64:
+            muls64(&l, &h, a, b);
+            break;
+        default:
+            g_assert_not_reached();
+        }
=20
         rl =3D op->args[0];
         rh =3D op->args[1];
-        tcg_opt_gen_movi(ctx, op, rl, (int32_t)r);
-        tcg_opt_gen_movi(ctx, op2, rh, (int32_t)(r >> 32));
+
+        /* The proper opcode is supplied by tcg_opt_gen_mov. */
+        op2 =3D tcg_op_insert_before(ctx->tcg, op, 0);
+
+        tcg_opt_gen_movi(ctx, op, rl, l);
+        tcg_opt_gen_movi(ctx, op2, rh, h);
         return true;
     }
     return false;
@@ -1932,8 +1957,9 @@ void tcg_optimize(TCGContext *s)
         CASE_OP_32_64(muluh):
             done =3D fold_mul_highpart(&ctx, op);
             break;
-        case INDEX_op_mulu2_i32:
-            done =3D fold_mulu2_i32(&ctx, op);
+        CASE_OP_32_64(muls2):
+        CASE_OP_32_64(mulu2):
+            done =3D fold_multiply2(&ctx, op);
             break;
         CASE_OP_32_64(nand):
             done =3D fold_nand(&ctx, op);
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=fail;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=fail(p=none dis=none)  header.from=linaro.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635391326633490.1328355379321;
 Wed, 27 Oct 2021 20:22:06 -0700 (PDT)
Received: from localhost ([::1]:60306 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvzR-0006R0-J8
	for importer@patchew.org; Wed, 27 Oct 2021 23:22:05 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59828)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPk-0001b0-PJ
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:12 -0400
Received: from mail-pf1-x435.google.com ([2607:f8b0:4864:20::435]:36720)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPc-00069b-UL
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:12 -0400
Received: by mail-pf1-x435.google.com with SMTP id m26so4592324pff.3
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:45:03 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id z8sm995907pgc.53.2021.10.27.19.45.02
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:45:02 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=sNZW+SE7IkpCycmJxNFsxBL0QVYPzgqHpcz72Yg09Ec=;
 b=iNMGiY029Ki4blk7okmvkzQpTXVGtcOHSBhZokZoEJ81Z5Iter9gafLLy1l+f/V0L6
 CaU1sitrQPY/wSuVmJNQOTrqBQZmyIvCMGV7XahfOKblR9ofi1peZ0ucmUaHQ0QYyNqZ
 AAJGt7ZB5PSHtLZ8oavm9E3nUER2rDoeMKDoPpOCTss6CPFcsFBUHmsmIuHX9hXggL0V
 J4mXQxobCj7t3Hgo+Nk4zPa55uaMxsDKauhiOOOMTFgTDrdyYp/ne0WX9syhVl9VgfWm
 uyz85KoCr0SGPXWTrMz6eg6zRrrqL1CIlJoPM549JtmP8pCQjVKDuvRZXtM8kQE1u9GC
 g/lg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=sNZW+SE7IkpCycmJxNFsxBL0QVYPzgqHpcz72Yg09Ec=;
 b=LZHQVDO20gCxykZUMRkn3c5t8K3uxErFo0lC+dHnd2AoZaWC9dt2xQ+a3mfH6BVqB/
 lHMTH9Y3wOK1tlrKhwQ6UDVxL1eUlWLZghu9QitMUS6cNH5n9avqAKHPYWAi61VTANfh
 ZylpGJIaJAnLvJhZKxYnOM1yARpWE6zCUnE9f2RVpo2rzhV+xg3Tr9XUFd9LgsOMQrhg
 m4akaO8slKmts1e1wJuOYuAFgR9Uj5j0n2OslVIzb2CwMK7freqymt4c0/YYBSlTVRUX
 lYWZGGuc5AiZxbz4Rf43gDMQ751fih7Ja7R3jmslxmtmGsluiJiMf911QJMjIE2z3zbb
 bq3g==
X-Gm-Message-State: AOAM530jZkfqKgZ7CZfNBqj926BrjGQdPC5h4lb8lO9DgYeniCO/jucD
 ftDJLRL7NJEnauf9mYaNXRrZb6L850WNrw==
X-Google-Smtp-Source: 
 ABdhPJykIU+nq60VYxdsB7QEi5y5hK6hODQrNDhIDGE3OofFidcuRat53MJs3qjvpp71Ovu6GN6noQ==
X-Received: by 2002:a62:b606:0:b0:47b:e32f:9ca with SMTP id
 j6-20020a62b606000000b0047be32f09camr1472162pff.57.1635389102679;
 Wed, 27 Oct 2021 19:45:02 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 45/56] tcg/optimize: Expand fold_addsub2_i32 to 64-bit ops
Date: Wed, 27 Oct 2021 19:41:20 -0700
Message-Id: <20211028024131.1492790-46-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::435;
 envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x435.google.com
X-Spam_score_int: -1
X-Spam_score: -0.2
X-Spam_bar: /
X-Spam_report: (-0.2 / 5.0 requ) DKIM_SIGNED=0.1, DKIM_VALID=-0.1,
 DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001,
 SPF_HELO_NONE=0.001, T_SPF_TEMPERROR=0.01 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Alex=20Benn=C3=A9e?= <alex.bennee@linaro.org>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: fail (Header signature does not verify)
X-ZM-MESSAGEID: 1635391327806100001

Rename to fold_addsub2.
Use Int128 to implement the wider operation.

Reviewed-by: Alex Benn=C3=A9e <alex.bennee@linaro.org>
Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 65 ++++++++++++++++++++++++++++++++++----------------
 1 file changed, 44 insertions(+), 21 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index e2ecad2884..f723deaafe 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -24,6 +24,7 @@
  */
=20
 #include "qemu/osdep.h"
+#include "qemu/int128.h"
 #include "tcg/tcg-op.h"
 #include "tcg-internal.h"
=20
@@ -838,37 +839,59 @@ static bool fold_add(OptContext *ctx, TCGOp *op)
     return false;
 }
=20
-static bool fold_addsub2_i32(OptContext *ctx, TCGOp *op, bool add)
+static bool fold_addsub2(OptContext *ctx, TCGOp *op, bool add)
 {
     if (arg_is_const(op->args[2]) && arg_is_const(op->args[3]) &&
         arg_is_const(op->args[4]) && arg_is_const(op->args[5])) {
-        uint32_t al =3D arg_info(op->args[2])->val;
-        uint32_t ah =3D arg_info(op->args[3])->val;
-        uint32_t bl =3D arg_info(op->args[4])->val;
-        uint32_t bh =3D arg_info(op->args[5])->val;
-        uint64_t a =3D ((uint64_t)ah << 32) | al;
-        uint64_t b =3D ((uint64_t)bh << 32) | bl;
+        uint64_t al =3D arg_info(op->args[2])->val;
+        uint64_t ah =3D arg_info(op->args[3])->val;
+        uint64_t bl =3D arg_info(op->args[4])->val;
+        uint64_t bh =3D arg_info(op->args[5])->val;
         TCGArg rl, rh;
-        TCGOp *op2 =3D tcg_op_insert_before(ctx->tcg, op, INDEX_op_mov_i32=
);
+        TCGOp *op2;
=20
-        if (add) {
-            a +=3D b;
+        if (ctx->type =3D=3D TCG_TYPE_I32) {
+            uint64_t a =3D deposit64(al, 32, 32, ah);
+            uint64_t b =3D deposit64(bl, 32, 32, bh);
+
+            if (add) {
+                a +=3D b;
+            } else {
+                a -=3D b;
+            }
+
+            al =3D sextract64(a, 0, 32);
+            ah =3D sextract64(a, 32, 32);
         } else {
-            a -=3D b;
+            Int128 a =3D int128_make128(al, ah);
+            Int128 b =3D int128_make128(bl, bh);
+
+            if (add) {
+                a =3D int128_add(a, b);
+            } else {
+                a =3D int128_sub(a, b);
+            }
+
+            al =3D int128_getlo(a);
+            ah =3D int128_gethi(a);
         }
=20
         rl =3D op->args[0];
         rh =3D op->args[1];
-        tcg_opt_gen_movi(ctx, op, rl, (int32_t)a);
-        tcg_opt_gen_movi(ctx, op2, rh, (int32_t)(a >> 32));
+
+        /* The proper opcode is supplied by tcg_opt_gen_mov. */
+        op2 =3D tcg_op_insert_before(ctx->tcg, op, 0);
+
+        tcg_opt_gen_movi(ctx, op, rl, al);
+        tcg_opt_gen_movi(ctx, op2, rh, ah);
         return true;
     }
     return false;
 }
=20
-static bool fold_add2_i32(OptContext *ctx, TCGOp *op)
+static bool fold_add2(OptContext *ctx, TCGOp *op)
 {
-    return fold_addsub2_i32(ctx, op, true);
+    return fold_addsub2(ctx, op, true);
 }
=20
 static bool fold_and(OptContext *ctx, TCGOp *op)
@@ -1725,9 +1748,9 @@ static bool fold_sub(OptContext *ctx, TCGOp *op)
     return false;
 }
=20
-static bool fold_sub2_i32(OptContext *ctx, TCGOp *op)
+static bool fold_sub2(OptContext *ctx, TCGOp *op)
 {
-    return fold_addsub2_i32(ctx, op, false);
+    return fold_addsub2(ctx, op, false);
 }
=20
 static bool fold_tcg_ld(OptContext *ctx, TCGOp *op)
@@ -1873,8 +1896,8 @@ void tcg_optimize(TCGContext *s)
         CASE_OP_32_64_VEC(add):
             done =3D fold_add(&ctx, op);
             break;
-        case INDEX_op_add2_i32:
-            done =3D fold_add2_i32(&ctx, op);
+        CASE_OP_32_64(add2):
+            done =3D fold_add2(&ctx, op);
             break;
         CASE_OP_32_64_VEC(and):
             done =3D fold_and(&ctx, op);
@@ -2011,8 +2034,8 @@ void tcg_optimize(TCGContext *s)
         CASE_OP_32_64_VEC(sub):
             done =3D fold_sub(&ctx, op);
             break;
-        case INDEX_op_sub2_i32:
-            done =3D fold_sub2_i32(&ctx, op);
+        CASE_OP_32_64(sub2):
+            done =3D fold_sub2(&ctx, op);
             break;
         CASE_OP_32_64_VEC(xor):
             done =3D fold_xor(&ctx, op);
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635390821; cv=none;
	d=zohomail.com; s=zohoarc;
	b=AUoFbmsTephYPFJiBE3TeUugR2oApwMPHTtQSTr9RYkN/KKcSQr5k0PH/HEc5xM3c95zBG/KJsxNDMQriKWAh1aeBvmCy3d9HchF/3Q4GE7pe0oBSpc6z7xkk+HmPZUBEq3dTEz1MvO2grVzjCdV6gugWNFHN+ZfYHanYu+Cz4g=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635390821;
 h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=kKgmC2gHMMUvFs/AnAI16cdc8E9nMTcv1IhY3bF9FCU=;
	b=FQO9y3cHg74JwGukF3504ABO1R1DhVdh0KcCOc7/S99jPylRQyb5rVkBIQCFWa1DlVThefEBnZPovmnV3j8huET5BtL3FTebh9Ga2zrLUtqSIQpvtbmqV/ADm9D7CHuQHaksLVZ2yra8eyOApsXkx01c3++5r+80AgEZKKI5DHk=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635390821389266.88046214931865;
 Wed, 27 Oct 2021 20:13:41 -0700 (PDT)
Received: from localhost ([::1]:34762 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvrI-00062B-8C
	for importer@patchew.org; Wed, 27 Oct 2021 23:13:40 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59718)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPf-0001Y0-E9
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:07 -0400
Received: from mail-pg1-x531.google.com ([2607:f8b0:4864:20::531]:35754)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPc-0006CT-TN
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:07 -0400
Received: by mail-pg1-x531.google.com with SMTP id q187so4972880pgq.2
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:45:04 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id z8sm995907pgc.53.2021.10.27.19.45.02
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:45:02 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=kKgmC2gHMMUvFs/AnAI16cdc8E9nMTcv1IhY3bF9FCU=;
 b=IhYeIiK+uYh6C5zBJixhKWb/4IakqvfhZU/PiZKz5yMDbaR8f5SVPpU3/uoFxQemdN
 78EXIfhJW3q+McjQHoaQwfpd2ZU3KneSWd1OPkqcy/BJC/Re6HGUmQXoXbqeT3XSCUjj
 l7wJbvaKde7+yFoIxzb1FgRWxM6IlzzDUfqn34fWOeOPuinFpI+9jWcW1qtHsXRCmsc3
 tBjlHIQOIMVyF0a1clGQ0c1H+rj1/T1TwA1LKMISwxA8YiwlpLo+ryUfRGT5b5DhwnlR
 djpMtbX98HX+Bf+V1uqA/hb3Kkbu+R+hadsjVtns/X9pqzKcVumUPLTPHXRt9E1BK62w
 Z14Q==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=kKgmC2gHMMUvFs/AnAI16cdc8E9nMTcv1IhY3bF9FCU=;
 b=kr5wabrefz5330+YOMtOOaKfSFFasCe3qNCkwWnE3ADpSYSuHAxMi3QhSJ5xrThuJt
 5Bkm/cvHBSm3VD6LjTyodDWeUo+aXgn1oT7hY+72zLKwCFT4+l1aJEU7tz+dw0QUARSY
 /yqI+uHSBc2SqWCCRgiCHNtQ5fJJRZZ9oY6QoRvP+VcK8FvCRk0w6fsD9LiGGECnx4sc
 u/Fymj3WKfpnv3/WdcZ2uRqXAFG9g0yDizbxQB8Lhch4KBH4StoGq3GDC9W/5nwaEf6s
 v5f71nn87TZly1MI+crrss+JXYj5i32c6nZOnw6j/govqUKFtgA+975JugmePoJO/89T
 WdDA==
X-Gm-Message-State: AOAM532jPYRRjhoBDLEEwgyvZKXqpqPxw2yT0w0+4hQe5BFL24KUGtAl
 qsqBCiy4R9TgMBGch6rtZWPw+3CjIfrMkQ==
X-Google-Smtp-Source: 
 ABdhPJx3TRGw9m3lUcQ3rb9cLWO8INdBLy6KREgirpeiDgnHcOdPxu4tXxEYF43pdlPpbMtTR47ALA==
X-Received: by 2002:a63:1415:: with SMTP id u21mr1177438pgl.165.1635389103266;
 Wed, 27 Oct 2021 19:45:03 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 46/56] tcg/optimize: Sink commutative operand swapping into
 fold functions
Date: Wed, 27 Oct 2021 19:41:21 -0700
Message-Id: <20211028024131.1492790-47-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::531;
 envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x531.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635390822125100001
Content-Type: text/plain; charset="utf-8"

Most of these are handled by creating a fold_const2_commutative
to handle all of the binary operators.  The rest were already
handled on a case-by-case basis in the switch, and have their
own fold function in which to place the call.

We now have only one major switch on TCGOpcode.

Introduce NO_DEST and a block comment for swap_commutative in
order to make the handling of brcond and movcond opcodes cleaner.

Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 142 ++++++++++++++++++++++++-------------------------
 1 file changed, 70 insertions(+), 72 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index f723deaafe..e42f5a145f 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -577,6 +577,19 @@ static int do_constant_folding_cond2(TCGArg *p1, TCGAr=
g *p2, TCGCond c)
     return -1;
 }
=20
+/**
+ * swap_commutative:
+ * @dest: TCGArg of the destination argument, or NO_DEST.
+ * @p1: first paired argument
+ * @p2: second paired argument
+ *
+ * If *@p1 is a constant and *@p2 is not, swap.
+ * If *@p2 matches @dest, swap.
+ * Return true if a swap was performed.
+ */
+
+#define NO_DEST  temp_arg(NULL)
+
 static bool swap_commutative(TCGArg dest, TCGArg *p1, TCGArg *p2)
 {
     TCGArg a1 =3D *p1, a2 =3D *p2;
@@ -696,6 +709,12 @@ static bool fold_const2(OptContext *ctx, TCGOp *op)
     return false;
 }
=20
+static bool fold_const2_commutative(OptContext *ctx, TCGOp *op)
+{
+    swap_commutative(op->args[0], &op->args[1], &op->args[2]);
+    return fold_const2(ctx, op);
+}
+
 static bool fold_masks(OptContext *ctx, TCGOp *op)
 {
     uint64_t a_mask =3D ctx->a_mask;
@@ -832,7 +851,7 @@ static bool fold_xx_to_x(OptContext *ctx, TCGOp *op)
=20
 static bool fold_add(OptContext *ctx, TCGOp *op)
 {
-    if (fold_const2(ctx, op) ||
+    if (fold_const2_commutative(ctx, op) ||
         fold_xi_to_x(ctx, op, 0)) {
         return true;
     }
@@ -891,6 +910,10 @@ static bool fold_addsub2(OptContext *ctx, TCGOp *op, b=
ool add)
=20
 static bool fold_add2(OptContext *ctx, TCGOp *op)
 {
+    /* Note that the high and low parts may be independently swapped. */
+    swap_commutative(op->args[0], &op->args[2], &op->args[4]);
+    swap_commutative(op->args[1], &op->args[3], &op->args[5]);
+
     return fold_addsub2(ctx, op, true);
 }
=20
@@ -898,7 +921,7 @@ static bool fold_and(OptContext *ctx, TCGOp *op)
 {
     uint64_t z1, z2;
=20
-    if (fold_const2(ctx, op) ||
+    if (fold_const2_commutative(ctx, op) ||
         fold_xi_to_i(ctx, op, 0) ||
         fold_xi_to_x(ctx, op, -1) ||
         fold_xx_to_x(ctx, op)) {
@@ -950,8 +973,13 @@ static bool fold_andc(OptContext *ctx, TCGOp *op)
 static bool fold_brcond(OptContext *ctx, TCGOp *op)
 {
     TCGCond cond =3D op->args[2];
-    int i =3D do_constant_folding_cond(ctx->type, op->args[0], op->args[1]=
, cond);
+    int i;
=20
+    if (swap_commutative(NO_DEST, &op->args[0], &op->args[1])) {
+        op->args[2] =3D cond =3D tcg_swap_cond(cond);
+    }
+
+    i =3D do_constant_folding_cond(ctx->type, op->args[0], op->args[1], co=
nd);
     if (i =3D=3D 0) {
         tcg_op_remove(ctx->tcg, op);
         return true;
@@ -966,10 +994,14 @@ static bool fold_brcond(OptContext *ctx, TCGOp *op)
 static bool fold_brcond2(OptContext *ctx, TCGOp *op)
 {
     TCGCond cond =3D op->args[4];
-    int i =3D do_constant_folding_cond2(&op->args[0], &op->args[2], cond);
     TCGArg label =3D op->args[5];
-    int inv =3D 0;
+    int i, inv =3D 0;
=20
+    if (swap_commutative2(&op->args[0], &op->args[2])) {
+        op->args[4] =3D cond =3D tcg_swap_cond(cond);
+    }
+
+    i =3D do_constant_folding_cond2(&op->args[0], &op->args[2], cond);
     if (i >=3D 0) {
         goto do_brcond_const;
     }
@@ -1219,7 +1251,7 @@ static bool fold_dup2(OptContext *ctx, TCGOp *op)
=20
 static bool fold_eqv(OptContext *ctx, TCGOp *op)
 {
-    if (fold_const2(ctx, op) ||
+    if (fold_const2_commutative(ctx, op) ||
         fold_xi_to_x(ctx, op, -1) ||
         fold_xi_to_not(ctx, op, 0)) {
         return true;
@@ -1381,8 +1413,20 @@ static bool fold_mov(OptContext *ctx, TCGOp *op)
 static bool fold_movcond(OptContext *ctx, TCGOp *op)
 {
     TCGCond cond =3D op->args[5];
-    int i =3D do_constant_folding_cond(ctx->type, op->args[1], op->args[2]=
, cond);
+    int i;
=20
+    if (swap_commutative(NO_DEST, &op->args[1], &op->args[2])) {
+        op->args[5] =3D cond =3D tcg_swap_cond(cond);
+    }
+    /*
+     * Canonicalize the "false" input reg to match the destination reg so
+     * that the tcg backend can implement a "move if true" operation.
+     */
+    if (swap_commutative(op->args[0], &op->args[4], &op->args[3])) {
+        op->args[5] =3D cond =3D tcg_invert_cond(cond);
+    }
+
+    i =3D do_constant_folding_cond(ctx->type, op->args[1], op->args[2], co=
nd);
     if (i >=3D 0) {
         return tcg_opt_gen_mov(ctx, op, op->args[0], op->args[4 - i]);
     }
@@ -1428,7 +1472,7 @@ static bool fold_mul(OptContext *ctx, TCGOp *op)
=20
 static bool fold_mul_highpart(OptContext *ctx, TCGOp *op)
 {
-    if (fold_const2(ctx, op) ||
+    if (fold_const2_commutative(ctx, op) ||
         fold_xi_to_i(ctx, op, 0)) {
         return true;
     }
@@ -1437,6 +1481,8 @@ static bool fold_mul_highpart(OptContext *ctx, TCGOp =
*op)
=20
 static bool fold_multiply2(OptContext *ctx, TCGOp *op)
 {
+    swap_commutative(op->args[0], &op->args[2], &op->args[3]);
+
     if (arg_is_const(op->args[2]) && arg_is_const(op->args[3])) {
         uint64_t a =3D arg_info(op->args[2])->val;
         uint64_t b =3D arg_info(op->args[3])->val;
@@ -1480,7 +1526,7 @@ static bool fold_multiply2(OptContext *ctx, TCGOp *op)
=20
 static bool fold_nand(OptContext *ctx, TCGOp *op)
 {
-    if (fold_const2(ctx, op) ||
+    if (fold_const2_commutative(ctx, op) ||
         fold_xi_to_not(ctx, op, -1)) {
         return true;
     }
@@ -1509,7 +1555,7 @@ static bool fold_neg(OptContext *ctx, TCGOp *op)
=20
 static bool fold_nor(OptContext *ctx, TCGOp *op)
 {
-    if (fold_const2(ctx, op) ||
+    if (fold_const2_commutative(ctx, op) ||
         fold_xi_to_not(ctx, op, 0)) {
         return true;
     }
@@ -1529,7 +1575,7 @@ static bool fold_not(OptContext *ctx, TCGOp *op)
=20
 static bool fold_or(OptContext *ctx, TCGOp *op)
 {
-    if (fold_const2(ctx, op) ||
+    if (fold_const2_commutative(ctx, op) ||
         fold_xi_to_x(ctx, op, 0) ||
         fold_xx_to_x(ctx, op)) {
         return true;
@@ -1581,8 +1627,13 @@ static bool fold_remainder(OptContext *ctx, TCGOp *o=
p)
 static bool fold_setcond(OptContext *ctx, TCGOp *op)
 {
     TCGCond cond =3D op->args[3];
-    int i =3D do_constant_folding_cond(ctx->type, op->args[1], op->args[2]=
, cond);
+    int i;
=20
+    if (swap_commutative(op->args[0], &op->args[1], &op->args[2])) {
+        op->args[3] =3D cond =3D tcg_swap_cond(cond);
+    }
+
+    i =3D do_constant_folding_cond(ctx->type, op->args[1], op->args[2], co=
nd);
     if (i >=3D 0) {
         return tcg_opt_gen_movi(ctx, op, op->args[0], i);
     }
@@ -1594,9 +1645,13 @@ static bool fold_setcond(OptContext *ctx, TCGOp *op)
 static bool fold_setcond2(OptContext *ctx, TCGOp *op)
 {
     TCGCond cond =3D op->args[5];
-    int i =3D do_constant_folding_cond2(&op->args[1], &op->args[3], cond);
-    int inv =3D 0;
+    int i, inv =3D 0;
=20
+    if (swap_commutative2(&op->args[1], &op->args[3])) {
+        op->args[5] =3D cond =3D tcg_swap_cond(cond);
+    }
+
+    i =3D do_constant_folding_cond2(&op->args[1], &op->args[3], cond);
     if (i >=3D 0) {
         goto do_setcond_const;
     }
@@ -1774,7 +1829,7 @@ static bool fold_tcg_ld(OptContext *ctx, TCGOp *op)
=20
 static bool fold_xor(OptContext *ctx, TCGOp *op)
 {
-    if (fold_const2(ctx, op) ||
+    if (fold_const2_commutative(ctx, op) ||
         fold_xx_to_i(ctx, op, 0) ||
         fold_xi_to_x(ctx, op, 0) ||
         fold_xi_to_not(ctx, op, -1)) {
@@ -1827,63 +1882,6 @@ void tcg_optimize(TCGContext *s)
             ctx.type =3D TCG_TYPE_I32;
         }
=20
-        /* For commutative operations make constant second argument */
-        switch (opc) {
-        CASE_OP_32_64_VEC(add):
-        CASE_OP_32_64_VEC(mul):
-        CASE_OP_32_64_VEC(and):
-        CASE_OP_32_64_VEC(or):
-        CASE_OP_32_64_VEC(xor):
-        CASE_OP_32_64(eqv):
-        CASE_OP_32_64(nand):
-        CASE_OP_32_64(nor):
-        CASE_OP_32_64(muluh):
-        CASE_OP_32_64(mulsh):
-            swap_commutative(op->args[0], &op->args[1], &op->args[2]);
-            break;
-        CASE_OP_32_64(brcond):
-            if (swap_commutative(-1, &op->args[0], &op->args[1])) {
-                op->args[2] =3D tcg_swap_cond(op->args[2]);
-            }
-            break;
-        CASE_OP_32_64(setcond):
-            if (swap_commutative(op->args[0], &op->args[1], &op->args[2]))=
 {
-                op->args[3] =3D tcg_swap_cond(op->args[3]);
-            }
-            break;
-        CASE_OP_32_64(movcond):
-            if (swap_commutative(-1, &op->args[1], &op->args[2])) {
-                op->args[5] =3D tcg_swap_cond(op->args[5]);
-            }
-            /* For movcond, we canonicalize the "false" input reg to match
-               the destination reg so that the tcg backend can implement
-               a "move if true" operation.  */
-            if (swap_commutative(op->args[0], &op->args[4], &op->args[3]))=
 {
-                op->args[5] =3D tcg_invert_cond(op->args[5]);
-            }
-            break;
-        CASE_OP_32_64(add2):
-            swap_commutative(op->args[0], &op->args[2], &op->args[4]);
-            swap_commutative(op->args[1], &op->args[3], &op->args[5]);
-            break;
-        CASE_OP_32_64(mulu2):
-        CASE_OP_32_64(muls2):
-            swap_commutative(op->args[0], &op->args[2], &op->args[3]);
-            break;
-        case INDEX_op_brcond2_i32:
-            if (swap_commutative2(&op->args[0], &op->args[2])) {
-                op->args[4] =3D tcg_swap_cond(op->args[4]);
-            }
-            break;
-        case INDEX_op_setcond2_i32:
-            if (swap_commutative2(&op->args[1], &op->args[3])) {
-                op->args[5] =3D tcg_swap_cond(op->args[5]);
-            }
-            break;
-        default:
-            break;
-        }
-
         /* Assume all bits affected, and no bits known zero. */
         ctx.a_mask =3D -1;
         ctx.z_mask =3D -1;
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=fail;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=fail(p=none dis=none)  header.from=linaro.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635391218973333.5659648516174;
 Wed, 27 Oct 2021 20:20:18 -0700 (PDT)
Received: from localhost ([::1]:57906 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvxh-0004hG-TM
	for importer@patchew.org; Wed, 27 Oct 2021 23:20:17 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59840)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPl-0001bP-5P
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:13 -0400
Received: from mail-pg1-x52b.google.com ([2607:f8b0:4864:20::52b]:39692)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPf-0006Cd-BY
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:12 -0400
Received: by mail-pg1-x52b.google.com with SMTP id g184so4932375pgc.6
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:45:06 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id z8sm995907pgc.53.2021.10.27.19.45.03
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:45:03 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=cFuKKvQtYwjGDR/SL40zlWOoRmbGI/uezw/kXXNgdBQ=;
 b=z8AGwKcrcZ5obu4BKMxFiM1A4OG+LN5gJ5rcfGhUCpFfA35PQNYr84H30TdAcdakYU
 KqJcPg+2XY+J97pn2wyQ3ZQZaK4t4aGFZPp6MkVWuBr8LWCzWiEGBxGIb0knobbMslJ1
 1hb257+q9WPlx3S2dtXmLbOnhZe/JEa/y/MwughobDvWqYQYSPw4So7VL6ggV6a9oLbj
 XqVFgkVh6xp43b3YZyVKvpwxpSJUHNyvUbkaNXuycXRwm6kI78tvBTvJY7UB2LsuaCiK
 SQelGHOxDyKZtazU2Mdtq5KkBLoOjn1p23F4R4+XOE10Y5p3vPRArJ32raZC0POs0tUd
 o3NA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=cFuKKvQtYwjGDR/SL40zlWOoRmbGI/uezw/kXXNgdBQ=;
 b=XQHYMT/eMosWZ+E2NNWovHQUnWeQlmMcwrMVAGabkjFO8UbYKRfQkrG95Ay2zRsbYp
 fkeJrVNNIq0DEsNKgvNQxxF8fHW35SKFrDmn8C8i/MNAirvSnChnxcyqg7ryXDoPd4p0
 FWK/Vkbqn8UtNoQOZ5a47S2j6skL/HKncJKWd+XDMlTzr9rTNFVFfMUaFM1iMWOGV4eh
 L6bnBMERJ7tZJPKrtftzdVWMyVGXgr7AOPkYXQHkmicm+yRu+ebdKPTWkDOlB6HCYPEf
 EukRp240nBbB8SBUuJLk1UKOQdNN1v+8zuzMpOmuIro2YvYDinieuSdC89jrm+w6ghxc
 J50g==
X-Gm-Message-State: AOAM533azk7kR8FujcnKH3MrIqnVCmEl48UyGi1U67gC77FFOyDR1VXN
 F526ObgdjtomjYrTv9tgp6co7A7Lmes6mQ==
X-Google-Smtp-Source: 
 ABdhPJwrseMcALTeDfyjNliafoc5tVZEAcbtQruFZpQCk3mWMOUOkqWucdGpnDmDYzY/S/0is9u23g==
X-Received: by 2002:a05:6a00:a8b:b0:44d:ef7c:94b9 with SMTP id
 b11-20020a056a000a8b00b0044def7c94b9mr1540747pfl.36.1635389103909;
 Wed, 27 Oct 2021 19:45:03 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 47/56] tcg/optimize: Stop forcing z_mask to "garbage" for
 32-bit values
Date: Wed, 27 Oct 2021 19:41:22 -0700
Message-Id: <20211028024131.1492790-48-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::52b;
 envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52b.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Alex=20Benn=C3=A9e?= <alex.bennee@linaro.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: fail (Header signature does not verify)
X-ZM-MESSAGEID: 1635391221083100001

This "garbage" setting pre-dates the addition of the type
changing opcodes INDEX_op_ext_i32_i64, INDEX_op_extu_i32_i64,
and INDEX_op_extr{l,h}_i64_i32.

So now we have a definitive points at which to adjust z_mask
to eliminate such bits from the 32-bit operands.

Reviewed-by: Alex Benn=C3=A9e <alex.bennee@linaro.org>
Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 35 ++++++++++++++++-------------------
 1 file changed, 16 insertions(+), 19 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index e42f5a145f..e0abf769d0 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -124,10 +124,6 @@ static void init_ts_info(OptContext *ctx, TCGTemp *ts)
         ti->is_const =3D true;
         ti->val =3D ts->val;
         ti->z_mask =3D ts->val;
-        if (TCG_TARGET_REG_BITS > 32 && ts->type =3D=3D TCG_TYPE_I32) {
-            /* High bits of a 32-bit quantity are garbage.  */
-            ti->z_mask |=3D ~0xffffffffull;
-        }
     } else {
         ti->is_const =3D false;
         ti->z_mask =3D -1;
@@ -192,7 +188,6 @@ static bool tcg_opt_gen_mov(OptContext *ctx, TCGOp *op,=
 TCGArg dst, TCGArg src)
     TCGTemp *src_ts =3D arg_temp(src);
     TempOptInfo *di;
     TempOptInfo *si;
-    uint64_t z_mask;
     TCGOpcode new_op;
=20
     if (ts_are_copies(dst_ts, src_ts)) {
@@ -224,12 +219,7 @@ static bool tcg_opt_gen_mov(OptContext *ctx, TCGOp *op=
, TCGArg dst, TCGArg src)
     op->args[0] =3D dst;
     op->args[1] =3D src;
=20
-    z_mask =3D si->z_mask;
-    if (TCG_TARGET_REG_BITS > 32 && new_op =3D=3D INDEX_op_mov_i32) {
-        /* High bits of the destination are now garbage.  */
-        z_mask |=3D ~0xffffffffull;
-    }
-    di->z_mask =3D z_mask;
+    di->z_mask =3D si->z_mask;
=20
     if (src_ts->type =3D=3D dst_ts->type) {
         TempOptInfo *ni =3D ts_info(si->next_copy);
@@ -247,9 +237,14 @@ static bool tcg_opt_gen_mov(OptContext *ctx, TCGOp *op=
, TCGArg dst, TCGArg src)
 static bool tcg_opt_gen_movi(OptContext *ctx, TCGOp *op,
                              TCGArg dst, uint64_t val)
 {
-    /* Convert movi to mov with constant temp. */
-    TCGTemp *tv =3D tcg_constant_internal(ctx->type, val);
+    TCGTemp *tv;
=20
+    if (ctx->type =3D=3D TCG_TYPE_I32) {
+        val =3D (int32_t)val;
+    }
+
+    /* Convert movi to mov with constant temp. */
+    tv =3D tcg_constant_internal(ctx->type, val);
     init_ts_info(ctx, tv);
     return tcg_opt_gen_mov(ctx, op, dst, temp_arg(tv));
 }
@@ -721,14 +716,16 @@ static bool fold_masks(OptContext *ctx, TCGOp *op)
     uint64_t z_mask =3D ctx->z_mask;
=20
     /*
-     * 32-bit ops generate 32-bit results.  For the result is zero test
-     * below, we can ignore high bits, but for further optimizations we
-     * need to record that the high bits contain garbage.
+     * 32-bit ops generate 32-bit results, which for the purpose of
+     * simplifying tcg are sign-extended.  Certainly that's how we
+     * represent our constants elsewhere.  Note that the bits will
+     * be reset properly for a 64-bit value when encountering the
+     * type changing opcodes.
      */
     if (ctx->type =3D=3D TCG_TYPE_I32) {
-        ctx->z_mask |=3D MAKE_64BIT_MASK(32, 32);
-        a_mask &=3D MAKE_64BIT_MASK(0, 32);
-        z_mask &=3D MAKE_64BIT_MASK(0, 32);
+        a_mask =3D (int32_t)a_mask;
+        z_mask =3D (int32_t)z_mask;
+        ctx->z_mask =3D z_mask;
     }
=20
     if (z_mask =3D=3D 0) {
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=fail;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=fail(p=none dis=none)  header.from=linaro.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635390887003939.983575888761;
 Wed, 27 Oct 2021 20:14:47 -0700 (PDT)
Received: from localhost ([::1]:41024 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvsL-0001iA-Tn
	for importer@patchew.org; Wed, 27 Oct 2021 23:14:45 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59728)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPf-0001Yj-Md
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:10 -0400
Received: from mail-pg1-x52d.google.com ([2607:f8b0:4864:20::52d]:38569)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPd-0006Co-PS
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:07 -0400
Received: by mail-pg1-x52d.google.com with SMTP id e65so4938008pgc.5
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:45:05 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id z8sm995907pgc.53.2021.10.27.19.45.04
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:45:04 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=Y4xHy0fvt8edEZwuGcc2OkG2z52vT5Lj+p/53oH5sv8=;
 b=lPruxXd480vjpiHC3SY/cJti/ZvPYXDRNZH1m7JnfaJyh1bQrW3VKOobOzdS7RdCE+
 k36LHpi9BtWIK2c6vGuxCa3943Ju2aDKQCHdQA9rKQpqqpJT78tU90RcS8mmoL/7cQZd
 00AHwmnKias0pbwPa/YWLHzVi+dNLkySPjmyDrIdkZZ7b2ddi23XDf3Qdzo3Txk1Z+0i
 Vd83qMplN38Vnt7OglvpleyRo8SQS3XB9fwn+o7ZZZVcXig5i/KFNlDXHn5mHv/zSxCK
 lzlqL87eKkB2/psY6dM9tpTU/N0/MVxX9/df03xnni/JOhkjh1P31hoRHeZ+W5BaPFth
 ea/Q==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=Y4xHy0fvt8edEZwuGcc2OkG2z52vT5Lj+p/53oH5sv8=;
 b=IAifyUUJPMAfMsJKB85LIv3ejh0VQOToLTKGmZmf9Ya4dZHAw8Ri2CPgaNNgDEWPhp
 gBfjZqSo5ZDSd4Ns7HG7pxohsGRh6vSUqw/I+/aSBHfc75m/H58jYOdjA4zZc6jBrh2u
 j0kEzuP7YgOfE0xW2+oPMN06lziDNjBZ0Kenr0807Y10CGgIXYBfcG7Ft+fJnuu+Xkj+
 b7qF/x5FSOYVckZgha2joP38UnZWAZ72AvcA3IqQfQX4yIpfH0LwNQ24bH5chgNE6S5M
 ubJP+ZTW2Kcy7LVjkZNyqfP9E1Jsee4onhQgHxp8F6fuXR21yF0Ch2F/aQ5CHOS8pxlj
 LU4w==
X-Gm-Message-State: AOAM532071CwVj51eWTdC1yoJcrr3YuxGfcXlJmfaZrC8dX6+q/PdBi5
 SdQ2HHprsCvJ8mMypIvu+iF3GPapOweeYQ==
X-Google-Smtp-Source: 
 ABdhPJzSNNfxGaK8h/RG9CVJ+ibj6ryfzIzhtBFFHAk/hdFJCPrM9Sb4lfcQI9D7Xq3uC//lUXS7IA==
X-Received: by 2002:a65:6499:: with SMTP id e25mr1198508pgv.146.1635389104478;
 Wed, 27 Oct 2021 19:45:04 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 48/56] tcg/optimize: Use fold_xx_to_i for orc
Date: Wed, 27 Oct 2021 19:41:23 -0700
Message-Id: <20211028024131.1492790-49-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::52d;
 envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52d.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Alex=20Benn=C3=A9e?= <alex.bennee@linaro.org>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: fail (Header signature does not verify)
X-ZM-MESSAGEID: 1635390888954100001

Recognize the constant function for or-complement.

Reviewed-by: Alex Benn=C3=A9e <alex.bennee@linaro.org>
Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index e0abf769d0..6d795954f2 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -1586,6 +1586,7 @@ static bool fold_or(OptContext *ctx, TCGOp *op)
 static bool fold_orc(OptContext *ctx, TCGOp *op)
 {
     if (fold_const2(ctx, op) ||
+        fold_xx_to_i(ctx, op, -1) ||
         fold_xi_to_x(ctx, op, -1) ||
         fold_ix_to_not(ctx, op, 0)) {
         return true;
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635391062; cv=none;
	d=zohomail.com; s=zohoarc;
	b=cZQxxoIWLQs2ppSXBDfjWP3wqwFm+g9mOqhOgu4umaOtckZBag1pRliHD8jAza4lQ5ImmPMb5OOdmMy9zyPoZZac2pPYbV4ZOBxX1FfYNayg21V1Njrptt8+LrLJyPAtawdX6xOTLjDNFqdtQ2J5ZdSMRJnyjmC0NaxjmyyGzYQ=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635391062;
 h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=94vBg5DwrKjzYyc2SPZ2xHl0Qntly4eUJLdtjM2QYhE=;
	b=daqFxT69kLfwnQk2/FVKw85FAZ3vqwfH4+rniC38zj2wMqOo0h/G09CK9x36HDPqftL1cu5iCQa2wIdW8cb6ad3SiDuk6YIi5Jm22FFczUC+Pcx3ewjymLq5z11jhBILoC9QzHpGBIQi9PEoMZnRr955htiTmkvnadNXI1em+Mk=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635391062161822.6890514053192;
 Wed, 27 Oct 2021 20:17:42 -0700 (PDT)
Received: from localhost ([::1]:49766 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvv9-0007br-F8
	for importer@patchew.org; Wed, 27 Oct 2021 23:17:41 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59796)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPj-0001Zx-Qu
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:12 -0400
Received: from mail-pf1-x42e.google.com ([2607:f8b0:4864:20::42e]:39928)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPe-0006Da-9M
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:10 -0400
Received: by mail-pf1-x42e.google.com with SMTP id b1so1056562pfm.6
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:45:05 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id z8sm995907pgc.53.2021.10.27.19.45.04
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:45:04 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=94vBg5DwrKjzYyc2SPZ2xHl0Qntly4eUJLdtjM2QYhE=;
 b=ATuWS3DGawUUtmsQetDTyR8Yfw3ScuEY9K3FeXWKm4pXDcQtgZKe/52h6HKsjOyTkU
 HMJAKW83W+oKG3aQVgjpMh3HG5FOUJ0FLdZ62mcLAy/b+WSAtszXP8/TpfctEGtAUJYP
 8nSWQ0N4C21VUfeuYRt8dGH82jF6IVrjb7b83EqT/Mo7vuUs9zq/LvbPDCWXf4rrxq3D
 kKAFhzNg8neV7Rgb9+4xPIA5jBjvRrpdtFKgBtNPFXV8eFUI73Jy+3eUu2paX7EfzC9l
 nCBkkp4Qg09LUQS4XqkIkz0S/B8R1wWXq8PX4HIa49dT7TdcDrB7j5xa1chYBP22LIt4
 mexA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=94vBg5DwrKjzYyc2SPZ2xHl0Qntly4eUJLdtjM2QYhE=;
 b=Ucf18btM05E0Jh91LwvLONrk4LT5Q0VWnuR5dsgPxI6I/1//HG6/+l+B6JASt/E73Z
 ortoll73NqJAHSw4jI/8ECJXMAdXqMUr6e7fuRI+xUDuN/gRjUFiW9Rv7/XOiSyvFK+G
 RIxiBWXYCcDsuTBBeoN5e50Z8NH2gE3s31oTqNVbvJXdwZwgyKifNx+Qvxf7GKohzy0m
 FMFRQ+ORhCdR13s2+0jNFcH4ClhRYD51IvRDPjpqI3gnCAiy5vNfTGixPc9mb38jlOUh
 i5cCYT61SiflrSGezid//npQODajV7R++Br8QmfWLVeB/qSoRLLWeVDCDGrem1FFx8jg
 OEAA==
X-Gm-Message-State: AOAM530Ioldk4QrDwkkDUfEfVUHhAhWK2EOs74jJgUwAKiEt0U1mnd8C
 H9Sf5oB4Cf9fStDNZa3OriTNTedwBxfrSA==
X-Google-Smtp-Source: 
 ABdhPJwlOpSSvPS0VhFoU/fMm6RIoeEfXTSvpi+XYqlWppHeU33sbMu/gRVt5IODndj8jw2SneKqUg==
X-Received: by 2002:a05:6a00:1309:b0:44d:4d1e:c930 with SMTP id
 j9-20020a056a00130900b0044d4d1ec930mr1471858pfu.65.1635389105078;
 Wed, 27 Oct 2021 19:45:05 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 49/56] tcg/optimize: Use fold_xi_to_x for mul
Date: Wed, 27 Oct 2021 19:41:24 -0700
Message-Id: <20211028024131.1492790-50-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::42e;
 envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42e.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635391063733100001

Recognize the identity function for low-part multiply.

Suggested-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 6d795954f2..907049fb06 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -1461,7 +1461,8 @@ static bool fold_movcond(OptContext *ctx, TCGOp *op)
 static bool fold_mul(OptContext *ctx, TCGOp *op)
 {
     if (fold_const2(ctx, op) ||
-        fold_xi_to_i(ctx, op, 0)) {
+        fold_xi_to_i(ctx, op, 0) ||
+        fold_xi_to_x(ctx, op, 1)) {
         return true;
     }
     return false;
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635390958; cv=none;
	d=zohomail.com; s=zohoarc;
	b=TR8hRabVoQRKYVBTIRSNAloGBHvfg+aM0LesbY9UMpIcZt9+w5vvb9ah4UXPWKMEpD1PE8WAGQKIaWeZNtiNWic9VD7aLQDNT30M5TAmxcqPiW47a5wLkjnSs4QjhrLqMgkfq803V7H381zWhvqgywXTC6HYCYjgUg7rWLpBKGc=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635390958;
 h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=cdbRxhQ1wpUhR1+s4AARw22mXFf4Uzb2BWNb0AuXuG8=;
	b=dj671NMH/FL6rrA4UkJqD+HNYUJyNlCpy+cogBmT2NFD9joS0HcFbWDYoycXpH1Gej/smRzkiy60XTUcxe9mNHYsc0KripV63B3Shgna48Ak58k03mAxBUx9ykqGy5hXToO2EHMQ9X5Y9vSNm2H9bsuTYs4OfxmXMFc0eiFEUCc=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635390958925678.8730158946679;
 Wed, 27 Oct 2021 20:15:58 -0700 (PDT)
Received: from localhost ([::1]:43304 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvtV-0003Dm-QB
	for importer@patchew.org; Wed, 27 Oct 2021 23:15:57 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59798)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPj-0001Zy-R3
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:12 -0400
Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]:46880)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPe-0006Dl-UQ
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:10 -0400
Received: by mail-pf1-x42c.google.com with SMTP id x66so4539491pfx.13
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:45:06 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id z8sm995907pgc.53.2021.10.27.19.45.05
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:45:05 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=cdbRxhQ1wpUhR1+s4AARw22mXFf4Uzb2BWNb0AuXuG8=;
 b=hsgbcnLzOBX8cViVyh1Jec4LpNmsCMKMIj04b9RjP3iSMSF5GMgqUJdaQAK6VwWodX
 7t8XJR0ceJfDq5yxAz4JlUd9jVkWDRvM8cgOZcvHFZRD6HoCx6SKEOuuY0U/HgHAb/Y7
 jPvTghvYGp3LtJgXWdlkRcSeU2brl50subgDdFixSOtdJHpNru+txQ5NcEc//TbRktLv
 d/QyVSRhs5CGVfdYyAxXhnx4jehRMLWiTnsvdItPDI9VM+hdJx4vwOuhQG/OqZa2/z0U
 xyOZMGPCq9f/sYbqHgd8dyw6AmZYYGTsVY388d7vf0PU/QsnHx1eJILXvY3aaYqFCmFb
 +Nqw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=cdbRxhQ1wpUhR1+s4AARw22mXFf4Uzb2BWNb0AuXuG8=;
 b=a1HP0G0smkB7zL8TsnuCIf3tZ9+fLRmkVapHK0zjWCQYdf08LcMRCZMHJxp2xHfUA5
 Z3sXKoWK25E5VNkTCKkiNzkbtiRstLiS6TCD2cBbeMLRHw3Z9dSKtsteWUKsn8HfvgZn
 XicY2SDy3iNWMnCVGogXtYnf/ipFqz28YfRM+nvYRaH5Ksp0d6PDDEW3ISY7uz+Z4ltW
 EDBc3D/kvoHn7+hBC4eLL5yuh6aRDZcxVL6zrlNjLmQtcjleGO0sVTDRPFpa2LtbD2Uj
 y7HfF60L4nepojR7SiIWFJibsW7W4j6ziRunOILmGOAC68m9gQW5iyWl7k5M9Z4j+DRy
 nlYA==
X-Gm-Message-State: AOAM532XOb+mtn96dtARaaTY+TomZt7wx9N4drcMKxm/UNasrRA7EfnD
 GAd0Z1MQpV/kD6xoXxz55rvHHYbMxa9rOA==
X-Google-Smtp-Source: 
 ABdhPJwKjI0tqKr0bj5sFe6udHJfOfFWLRGPGKUOhz2zjR7NFx3Qt/UXXObKvKK8KfxeXysRYL4oBA==
X-Received: by 2002:a05:6a00:23c8:b0:47c:37d5:430 with SMTP id
 g8-20020a056a0023c800b0047c37d50430mr1532748pfc.72.1635389105685;
 Wed, 27 Oct 2021 19:45:05 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 50/56] tcg/optimize: Use fold_xi_to_x for div
Date: Wed, 27 Oct 2021 19:41:25 -0700
Message-Id: <20211028024131.1492790-51-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::42c;
 envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42c.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635390960840100007

Recognize the identity function for division.

Suggested-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 907049fb06..f8b0709157 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -1218,7 +1218,11 @@ static bool fold_deposit(OptContext *ctx, TCGOp *op)
=20
 static bool fold_divide(OptContext *ctx, TCGOp *op)
 {
-    return fold_const2(ctx, op);
+    if (fold_const2(ctx, op) ||
+        fold_xi_to_x(ctx, op, 1)) {
+        return true;
+    }
+    return false;
 }
=20
 static bool fold_dup(OptContext *ctx, TCGOp *op)
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=linaro.org
ARC-Seal: i=1; a=rsa-sha256; t=1635391124; cv=none;
	d=zohomail.com; s=zohoarc;
	b=YXtzM7ZFIdibEqLiu5vPnUiGzR3m6UcrRFEj+DkehFKxxEcToavzgxV+jr2y4rJ399z/fCkTLGqE7cVW5aBUPAEto5PtmiVqyeVCKajOGzKGgeadp7vv9ADf81B9Yl6PupRtYFHdhd8DTWSkx7/z0AeYXB7uGro+fCNT5Mg2hbw=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1635391124;
 h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To;
	bh=SdotFvU2e4IHfnDwno1rmmgso4RvH1V9XL12SznLyiA=;
	b=Am9bbF4QEQrT/B0nNSA1Npqk8tZ9VdqOY/5V8FiBeg6qOfQyy2u1SJYRkdS9g39iAhrxE4wQqN4htl94C6veu9Wuek7hZMQwTPv5Havq1hfpfmpNy2dyLvYKYe5pkvWToNM6rIpYUdRJqqaOoY286Uq2pGxOC16hF5hF7GUM7mM=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<richard.henderson@linaro.org> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635391124247510.18574617896843;
 Wed, 27 Oct 2021 20:18:44 -0700 (PDT)
Received: from localhost ([::1]:51826 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfvwB-0000ae-1a
	for importer@patchew.org; Wed, 27 Oct 2021 23:18:43 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59844)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPl-0001bo-9q
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:13 -0400
Received: from mail-pg1-x52f.google.com ([2607:f8b0:4864:20::52f]:39696)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPg-0006Dx-RZ
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:12 -0400
Received: by mail-pg1-x52f.google.com with SMTP id g184so4932461pgc.6
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:45:07 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id z8sm995907pgc.53.2021.10.27.19.45.05
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:45:06 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=SdotFvU2e4IHfnDwno1rmmgso4RvH1V9XL12SznLyiA=;
 b=Z2Clh9uYEpfuvRVKCYW5X8NuN0FmCTjjm+dolBcIIRYBRsxPysVWySIrdROzKINml6
 CZBa6Wk+t6XVbwORVvuFVNy2hv49BVAdVX2qkZbAhWzHTBoGSHuqP7ultmcRdEUJiujE
 H82tWbhU05pUqMoRC9E4UoeM/3miHU3CWNoHqmy+wtPSaeaQeedee5QwLyNia9dZo/3Y
 gtnfa1CWwa7ggh7kMKjgz1LbAHYogcy360+f4AnIIRmiWUGuAX+iBvYsWqNBM3nZ8jD7
 iicZSLg7/k9ITc52Kc1oq8rnryMW0+AEaye4YPsB/ZZ48o0JKoCQN9vs3lM/CjhEeTXi
 CVNQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=SdotFvU2e4IHfnDwno1rmmgso4RvH1V9XL12SznLyiA=;
 b=p5zoN0HvusE/8taSRTEfWMA+6cFavdASNImzc2oiZRga24VZjuj7esZXSv3bW2RDIx
 rDEhNy+1tlwqcg5Tzu2+TTAqtDcV1J7Ds5TmLow3iLi6CSysSZPFIKMSyPfR/yYsPtjW
 wDq6M/GJU9v2kvOcsus+t3lfILdN7EJblUWqlMEuL0kcEnCcAmzSwepvvx3v3nLERCsO
 FVeqp1NXQHn8G3CR7Q4dqYnZsAjz04kKmf/EWoQNsTZLAgjZFzhxZlnKAnlJ0R+BedkD
 zLcPQ8iafxHOkoNzTDjY+EvzYY/YLZvl1CQBGL0OSyADwwjFCQYq54s6eBxbpg0vCy1T
 5Sbg==
X-Gm-Message-State: AOAM5320k7rPc4y7DDoTRfnXZ3oATI8XFoajdNF09TFQlcMRvoGPw/r4
 GukbkV/BqP5H90H1+oOCqFU6xnaE1e/0dQ==
X-Google-Smtp-Source: 
 ABdhPJyAMGfkmYnhfKw+ji38zYaHJM2cNMQT/yc/3zbihYdM9qRNO9AvDhlVWu4v2NLpCwBenEkbCQ==
X-Received: by 2002:a05:6a00:2443:b0:44e:ec:f388 with SMTP id
 d3-20020a056a00244300b0044e00ecf388mr1368424pfj.7.1635389106293;
 Wed, 27 Oct 2021 19:45:06 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 51/56] tcg/optimize: Use fold_xx_to_i for rem
Date: Wed, 27 Oct 2021 19:41:26 -0700
Message-Id: <20211028024131.1492790-52-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::52f;
 envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52f.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1635391126331100002

Recognize the constant function for remainder.

Suggested-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index f8b0709157..7ac63c9231 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -1624,7 +1624,11 @@ static bool fold_qemu_st(OptContext *ctx, TCGOp *op)
=20
 static bool fold_remainder(OptContext *ctx, TCGOp *op)
 {
-    return fold_const2(ctx, op);
+    if (fold_const2(ctx, op) ||
+        fold_xx_to_i(ctx, op, 0)) {
+        return true;
+    }
+    return false;
 }
=20
 static bool fold_setcond(OptContext *ctx, TCGOp *op)
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=fail;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=fail(p=none dis=none)  header.from=linaro.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635391485348732.0785683533217;
 Wed, 27 Oct 2021 20:24:45 -0700 (PDT)
Received: from localhost ([::1]:37680 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfw20-00022t-AL
	for importer@patchew.org; Wed, 27 Oct 2021 23:24:44 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59860)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPm-0001cM-3s
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:14 -0400
Received: from mail-pl1-x62c.google.com ([2607:f8b0:4864:20::62c]:42928)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPi-0006NG-QM
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:13 -0400
Received: by mail-pl1-x62c.google.com with SMTP id v16so3370033ple.9
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:45:08 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id z8sm995907pgc.53.2021.10.27.19.45.07
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:45:07 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=BKLftSTQsQ1gAc3QxL60hYM2F6IdjBMip2wzW+AEFac=;
 b=u+XXDISjo2E7zXmLA8pzIBZiNLciSpaUiSWbCaC2yxg8JK7x/StSF5DAq4A9tNsmrp
 Hl+zzr7z13e5kPZd6f8eun+/x4CJqji8+yE61BnjelWojSNUlHbP1h7zYDx5brcuj+bg
 yRQpqgnz4D78ULZWtm85+ivIZG15z3hWTQONLcCIX2AykC7CnH2XpK/oNjXrjUApFVO3
 3AIM923K6/SdVRkvodBenV2+6LUIth3losOhXP3ZMjaItBygyXBlNi4aarVOm8lhB5RW
 Iik9It1CgMYbcePgKVNY2bWetgGxJWihVMsxEEbXiyzrkSCqbkNBK0aGuYBzReMlzlqd
 jyoQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=BKLftSTQsQ1gAc3QxL60hYM2F6IdjBMip2wzW+AEFac=;
 b=N/Jyz4tS8umiDgrlMERZREy8H5JYQdSkQit6cYJ/T6vJPU+BwjgnZ8TW/sy77LTPUR
 SMIXtqgATDC452Raj32hgn/G/Uy7Qjgt4uPGoChZnZr4jYXTpybGkFTYM+IghV1VSrQ0
 Z1eZhpQE7uM+mjQNvolXDjSGBwnZGuI84Z0u7dS6BaSvwU5bsgt8BpuoA4ZxCVCiszZc
 XmwQzxKEZTcKD9RgTrLjusRalppb+xwxg6FxjdNRPJGsJa0Qwnz/LRsmZEvGDkwdDwML
 YvuuPmcfO43dyP4qR+sfANtC4jSHTf0V+zXxctntiVovbi59Vpokc+7BFqp807Z71/El
 bflg==
X-Gm-Message-State: AOAM532feEeaV5KuVC+5koxMEcY8wQ09b7JtJzXJ2+NN2i0xWWPxpSaX
 fw/ptM43VVayFC8NcDGRWLssI1rzM7l2pg==
X-Google-Smtp-Source: 
 ABdhPJzPRKaibNqZg0+MSYvo8Ex/fImf9/z9W0pnkmOCUNi6nKkbI8AmoiYyaEb+u6wfWkoWS1pRlA==
X-Received: by 2002:a17:902:ce85:b0:13e:dfc0:139 with SMTP id
 f5-20020a170902ce8500b0013edfc00139mr1263378plg.80.1635389107811;
 Wed, 27 Oct 2021 19:45:07 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 52/56] tcg/optimize: Optimize sign extensions
Date: Wed, 27 Oct 2021 19:41:27 -0700
Message-Id: <20211028024131.1492790-53-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::62c;
 envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62c.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Alex=20Benn=C3=A9e?= <alex.bennee@linaro.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: fail (Header signature does not verify)
X-ZM-MESSAGEID: 1635391487080100001

Certain targets, like riscv, produce signed 32-bit results.
This can lead to lots of redundant extensions as values are
manipulated.

Begin by tracking only the obvious sign-extensions, and
converting them to simple copies when possible.

Reviewed-by: Alex Benn=C3=A9e <alex.bennee@linaro.org>
Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 123 ++++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 102 insertions(+), 21 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 7ac63c9231..ef202abbcb 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -43,6 +43,7 @@ typedef struct TempOptInfo {
     TCGTemp *next_copy;
     uint64_t val;
     uint64_t z_mask;  /* mask bit is 0 if and only if value bit is 0 */
+    uint64_t s_mask;  /* a left-aligned mask of clrsb(value) bits. */
 } TempOptInfo;
=20
 typedef struct OptContext {
@@ -53,9 +54,37 @@ typedef struct OptContext {
     /* In flight values from optimization. */
     uint64_t a_mask;  /* mask bit is 0 iff value identical to first input =
*/
     uint64_t z_mask;  /* mask bit is 0 iff value bit is 0 */
+    uint64_t s_mask;  /* mask of clrsb(value) bits */
     TCGType type;
 } OptContext;
=20
+/* Calculate the smask for a specific value. */
+static uint64_t smask_from_value(uint64_t value)
+{
+    int rep =3D clrsb64(value);
+    return ~(~0ull >> rep);
+}
+
+/*
+ * Calculate the smask for a given set of known-zeros.
+ * If there are lots of zeros on the left, we can consider the remainder
+ * an unsigned field, and thus the corresponding signed field is one bit
+ * larger.
+ */
+static uint64_t smask_from_zmask(uint64_t zmask)
+{
+    /*
+     * Only the 0 bits are significant for zmask, thus the msb itself
+     * must be zero, else we have no sign information.
+     */
+    int rep =3D clz64(zmask);
+    if (rep =3D=3D 0) {
+        return 0;
+    }
+    rep -=3D 1;
+    return ~(~0ull >> rep);
+}
+
 static inline TempOptInfo *ts_info(TCGTemp *ts)
 {
     return ts->state_ptr;
@@ -94,6 +123,7 @@ static void reset_ts(TCGTemp *ts)
     ti->prev_copy =3D ts;
     ti->is_const =3D false;
     ti->z_mask =3D -1;
+    ti->s_mask =3D 0;
 }
=20
 static void reset_temp(TCGArg arg)
@@ -124,9 +154,11 @@ static void init_ts_info(OptContext *ctx, TCGTemp *ts)
         ti->is_const =3D true;
         ti->val =3D ts->val;
         ti->z_mask =3D ts->val;
+        ti->s_mask =3D smask_from_value(ts->val);
     } else {
         ti->is_const =3D false;
         ti->z_mask =3D -1;
+        ti->s_mask =3D 0;
     }
 }
=20
@@ -220,6 +252,7 @@ static bool tcg_opt_gen_mov(OptContext *ctx, TCGOp *op,=
 TCGArg dst, TCGArg src)
     op->args[1] =3D src;
=20
     di->z_mask =3D si->z_mask;
+    di->s_mask =3D si->s_mask;
=20
     if (src_ts->type =3D=3D dst_ts->type) {
         TempOptInfo *ni =3D ts_info(si->next_copy);
@@ -658,13 +691,15 @@ static void finish_folding(OptContext *ctx, TCGOp *op)
=20
     nb_oargs =3D def->nb_oargs;
     for (i =3D 0; i < nb_oargs; i++) {
-        reset_temp(op->args[i]);
+        TCGTemp *ts =3D arg_temp(op->args[i]);
+        reset_ts(ts);
         /*
-         * Save the corresponding known-zero bits mask for the
+         * Save the corresponding known-zero/sign bits mask for the
          * first output argument (only one supported so far).
          */
         if (i =3D=3D 0) {
-            arg_info(op->args[i])->z_mask =3D ctx->z_mask;
+            ts_info(ts)->z_mask =3D ctx->z_mask;
+            ts_info(ts)->s_mask =3D ctx->s_mask;
         }
     }
 }
@@ -714,6 +749,7 @@ static bool fold_masks(OptContext *ctx, TCGOp *op)
 {
     uint64_t a_mask =3D ctx->a_mask;
     uint64_t z_mask =3D ctx->z_mask;
+    uint64_t s_mask =3D ctx->s_mask;
=20
     /*
      * 32-bit ops generate 32-bit results, which for the purpose of
@@ -725,7 +761,9 @@ static bool fold_masks(OptContext *ctx, TCGOp *op)
     if (ctx->type =3D=3D TCG_TYPE_I32) {
         a_mask =3D (int32_t)a_mask;
         z_mask =3D (int32_t)z_mask;
+        s_mask |=3D MAKE_64BIT_MASK(32, 32);
         ctx->z_mask =3D z_mask;
+        ctx->s_mask =3D s_mask;
     }
=20
     if (z_mask =3D=3D 0) {
@@ -1072,7 +1110,7 @@ static bool fold_brcond2(OptContext *ctx, TCGOp *op)
=20
 static bool fold_bswap(OptContext *ctx, TCGOp *op)
 {
-    uint64_t z_mask, sign;
+    uint64_t z_mask, s_mask, sign;
=20
     if (arg_is_const(op->args[1])) {
         uint64_t t =3D arg_info(op->args[1])->val;
@@ -1082,6 +1120,7 @@ static bool fold_bswap(OptContext *ctx, TCGOp *op)
     }
=20
     z_mask =3D arg_info(op->args[1])->z_mask;
+
     switch (op->opc) {
     case INDEX_op_bswap16_i32:
     case INDEX_op_bswap16_i64:
@@ -1100,6 +1139,7 @@ static bool fold_bswap(OptContext *ctx, TCGOp *op)
     default:
         g_assert_not_reached();
     }
+    s_mask =3D smask_from_zmask(z_mask);
=20
     switch (op->args[2] & (TCG_BSWAP_OZ | TCG_BSWAP_OS)) {
     case TCG_BSWAP_OZ:
@@ -1108,14 +1148,17 @@ static bool fold_bswap(OptContext *ctx, TCGOp *op)
         /* If the sign bit may be 1, force all the bits above to 1. */
         if (z_mask & sign) {
             z_mask |=3D sign;
+            s_mask =3D sign << 1;
         }
         break;
     default:
         /* The high bits are undefined: force all bits above the sign to 1=
. */
         z_mask |=3D sign << 1;
+        s_mask =3D 0;
         break;
     }
     ctx->z_mask =3D z_mask;
+    ctx->s_mask =3D s_mask;
=20
     return fold_masks(ctx, op);
 }
@@ -1263,21 +1306,24 @@ static bool fold_eqv(OptContext *ctx, TCGOp *op)
 static bool fold_extract(OptContext *ctx, TCGOp *op)
 {
     uint64_t z_mask_old, z_mask;
+    int pos =3D op->args[2];
+    int len =3D op->args[3];
=20
     if (arg_is_const(op->args[1])) {
         uint64_t t;
=20
         t =3D arg_info(op->args[1])->val;
-        t =3D extract64(t, op->args[2], op->args[3]);
+        t =3D extract64(t, pos, len);
         return tcg_opt_gen_movi(ctx, op, op->args[0], t);
     }
=20
     z_mask_old =3D arg_info(op->args[1])->z_mask;
-    z_mask =3D extract64(z_mask_old, op->args[2], op->args[3]);
-    if (op->args[2] =3D=3D 0) {
+    z_mask =3D extract64(z_mask_old, pos, len);
+    if (pos =3D=3D 0) {
         ctx->a_mask =3D z_mask_old ^ z_mask;
     }
     ctx->z_mask =3D z_mask;
+    ctx->s_mask =3D smask_from_zmask(z_mask);
=20
     return fold_masks(ctx, op);
 }
@@ -1303,14 +1349,16 @@ static bool fold_extract2(OptContext *ctx, TCGOp *o=
p)
=20
 static bool fold_exts(OptContext *ctx, TCGOp *op)
 {
-    uint64_t z_mask_old, z_mask, sign;
+    uint64_t s_mask_old, s_mask, z_mask, sign;
     bool type_change =3D false;
=20
     if (fold_const1(ctx, op)) {
         return true;
     }
=20
-    z_mask_old =3D z_mask =3D arg_info(op->args[1])->z_mask;
+    z_mask =3D arg_info(op->args[1])->z_mask;
+    s_mask =3D arg_info(op->args[1])->s_mask;
+    s_mask_old =3D s_mask;
=20
     switch (op->opc) {
     CASE_OP_32_64(ext8s):
@@ -1334,10 +1382,14 @@ static bool fold_exts(OptContext *ctx, TCGOp *op)
=20
     if (z_mask & sign) {
         z_mask |=3D sign;
-    } else if (!type_change) {
-        ctx->a_mask =3D z_mask_old ^ z_mask;
     }
+    s_mask |=3D sign << 1;
+
     ctx->z_mask =3D z_mask;
+    ctx->s_mask =3D s_mask;
+    if (!type_change) {
+        ctx->a_mask =3D s_mask & ~s_mask_old;
+    }
=20
     return fold_masks(ctx, op);
 }
@@ -1376,6 +1428,7 @@ static bool fold_extu(OptContext *ctx, TCGOp *op)
     }
=20
     ctx->z_mask =3D z_mask;
+    ctx->s_mask =3D smask_from_zmask(z_mask);
     if (!type_change) {
         ctx->a_mask =3D z_mask_old ^ z_mask;
     }
@@ -1606,8 +1659,12 @@ static bool fold_qemu_ld(OptContext *ctx, TCGOp *op)
     MemOp mop =3D get_memop(oi);
     int width =3D 8 * memop_size(mop);
=20
-    if (!(mop & MO_SIGN) && width < 64) {
-        ctx->z_mask =3D MAKE_64BIT_MASK(0, width);
+    if (width < 64) {
+        ctx->s_mask =3D MAKE_64BIT_MASK(width, 64 - width);
+        if (!(mop & MO_SIGN)) {
+            ctx->z_mask =3D MAKE_64BIT_MASK(0, width);
+            ctx->s_mask <<=3D 1;
+        }
     }
=20
     /* Opcodes that touch guest memory stop the mb optimization.  */
@@ -1726,23 +1783,31 @@ static bool fold_setcond2(OptContext *ctx, TCGOp *o=
p)
=20
 static bool fold_sextract(OptContext *ctx, TCGOp *op)
 {
-    int64_t z_mask_old, z_mask;
+    uint64_t z_mask, s_mask, s_mask_old;
+    int pos =3D op->args[2];
+    int len =3D op->args[3];
=20
     if (arg_is_const(op->args[1])) {
         uint64_t t;
=20
         t =3D arg_info(op->args[1])->val;
-        t =3D sextract64(t, op->args[2], op->args[3]);
+        t =3D sextract64(t, pos, len);
         return tcg_opt_gen_movi(ctx, op, op->args[0], t);
     }
=20
-    z_mask_old =3D arg_info(op->args[1])->z_mask;
-    z_mask =3D sextract64(z_mask_old, op->args[2], op->args[3]);
-    if (op->args[2] =3D=3D 0 && z_mask >=3D 0) {
-        ctx->a_mask =3D z_mask_old ^ z_mask;
-    }
+    z_mask =3D arg_info(op->args[1])->z_mask;
+    z_mask =3D sextract64(z_mask, pos, len);
     ctx->z_mask =3D z_mask;
=20
+    s_mask_old =3D arg_info(op->args[1])->s_mask;
+    s_mask =3D sextract64(s_mask_old, pos, len);
+    s_mask |=3D MAKE_64BIT_MASK(len, 64 - len);
+    ctx->s_mask =3D s_mask;
+
+    if (pos =3D=3D 0) {
+        ctx->a_mask =3D s_mask & ~s_mask_old;
+    }
+
     return fold_masks(ctx, op);
 }
=20
@@ -1819,14 +1884,26 @@ static bool fold_tcg_ld(OptContext *ctx, TCGOp *op)
 {
     /* We can't do any folding with a load, but we can record bits. */
     switch (op->opc) {
+    CASE_OP_32_64(ld8s):
+        ctx->s_mask =3D MAKE_64BIT_MASK(8, 56);
+        break;
     CASE_OP_32_64(ld8u):
         ctx->z_mask =3D MAKE_64BIT_MASK(0, 8);
+        ctx->s_mask =3D MAKE_64BIT_MASK(9, 55);
+        break;
+    CASE_OP_32_64(ld16s):
+        ctx->s_mask =3D MAKE_64BIT_MASK(16, 48);
         break;
     CASE_OP_32_64(ld16u):
         ctx->z_mask =3D MAKE_64BIT_MASK(0, 16);
+        ctx->s_mask =3D MAKE_64BIT_MASK(17, 47);
+        break;
+    case INDEX_op_ld32s_i64:
+        ctx->s_mask =3D MAKE_64BIT_MASK(32, 32);
         break;
     case INDEX_op_ld32u_i64:
         ctx->z_mask =3D MAKE_64BIT_MASK(0, 32);
+        ctx->s_mask =3D MAKE_64BIT_MASK(33, 31);
         break;
     default:
         g_assert_not_reached();
@@ -1889,9 +1966,10 @@ void tcg_optimize(TCGContext *s)
             ctx.type =3D TCG_TYPE_I32;
         }
=20
-        /* Assume all bits affected, and no bits known zero. */
+        /* Assume all bits affected, no bits known zero, no sign reps. */
         ctx.a_mask =3D -1;
         ctx.z_mask =3D -1;
+        ctx.s_mask =3D 0;
=20
         /*
          * Process each opcode.
@@ -1964,8 +2042,11 @@ void tcg_optimize(TCGContext *s)
         case INDEX_op_extrh_i64_i32:
             done =3D fold_extu(&ctx, op);
             break;
+        CASE_OP_32_64(ld8s):
         CASE_OP_32_64(ld8u):
+        CASE_OP_32_64(ld16s):
         CASE_OP_32_64(ld16u):
+        case INDEX_op_ld32s_i64:
         case INDEX_op_ld32u_i64:
             done =3D fold_tcg_ld(&ctx, op);
             break;
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=fail;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=fail(p=none dis=none)  header.from=linaro.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635392416411558.0223417663177;
 Wed, 27 Oct 2021 20:40:16 -0700 (PDT)
Received: from localhost ([::1]:36142 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfwH1-0003nj-Bm
	for importer@patchew.org; Wed, 27 Oct 2021 23:40:15 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59880)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPm-0001cb-VP
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:16 -0400
Received: from mail-pg1-x52e.google.com ([2607:f8b0:4864:20::52e]:33323)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPj-0006Ra-KI
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:14 -0400
Received: by mail-pg1-x52e.google.com with SMTP id r28so5005812pga.0
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:45:09 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id z8sm995907pgc.53.2021.10.27.19.45.08
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:45:08 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=c7PIUhClAKYoh5JUzZ+4sWh4Ck2Ifd+q7rxsEfop2hY=;
 b=CA7npjadsmtdJPqfOCvv+T/2hORKJG+XH+Ftw846pAUZDDPoDJrUowrNCtPWqktekk
 QO92wd0miH5YagzRdQaMvkBbmL8/ZVUYeSHLC8WP0eoOCMRAW0OKg2/v3loAa5jX4g9a
 k+LQz3N7L16Xjad8F/o8OSjxtalGcFGY+k16Dg9q9GzMqbY+Z8IpVsgRsu35oQR2AzxZ
 3HnBcAUhFzEumJlbNDt8R4drXxzB5y9TcP+DimiIDTHERtWAVGHCbzuBijMeX8nNU1nk
 Wa7/G7fDxxmOc3v3ZdAz2pbGW/B5XX0zyhWBQF2cw2CyoK0ksE1lHfaTay0F7J0iTCUR
 MAIQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=c7PIUhClAKYoh5JUzZ+4sWh4Ck2Ifd+q7rxsEfop2hY=;
 b=AdGMLBC4XgWUIF/RWRuiSi6i8f8KscEj0jNN2Ez32ZjTUosiW1+iJex/fSx+i8aA8H
 emcsJ8W3ie4z2LlLMDQM+k+l8m0Vj8jFHf0RuxckbyyJA+ruDxfmoIDQ5yxLsdOO5qrP
 VztTNJhz2LMd50JcBRdcRIBVizPo+6je2vuY/RxPz5QvD6MBj7Rx9GVBkKJm9zzNr1uF
 PnBMUhxBRxgJfTHfsWM7fBrcojx2k1xSuAdV0mlbtFSxaicFNWxadD+3fPtRSD/GGkHj
 PM3+d1/zEbwFvwN955jKHc3RymkrhMbJrcgiC9W4iH/M4ennyY7BswdQXmQr19/Z79Y1
 sesQ==
X-Gm-Message-State: AOAM533S3sCfog+2aifsl5p1rkllscLQ6rqULUg1jehDyJeGzurA9vIR
 k2cCzSpCY5yzjH/3Hk3E2rjkXoF/G27CVw==
X-Google-Smtp-Source: 
 ABdhPJzLa3SBoVh/lW2viB+xK1R/HrlH1orpd9hNIMMUM0+tNOaYyflnDR4gCxEtdCt8Dvb/yRh3yA==
X-Received: by 2002:a62:5ec2:0:b0:44d:47e2:4b3b with SMTP id
 s185-20020a625ec2000000b0044d47e24b3bmr1536907pfb.38.1635389108627;
 Wed, 27 Oct 2021 19:45:08 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 53/56] tcg/optimize: Propagate sign info for logical operations
Date: Wed, 27 Oct 2021 19:41:28 -0700
Message-Id: <20211028024131.1492790-54-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::52e;
 envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52e.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Alex=20Benn=C3=A9e?= <alex.bennee@linaro.org>,
 =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <f4bug@amsat.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: fail (Header signature does not verify)
X-ZM-MESSAGEID: 1635392418009100001

Sign repetitions are perforce all identical, whether they are 1 or 0.
Bitwise operations preserve the relative quantity of the repetitions.

Reviewed-by: Alex Benn=C3=A9e <alex.bennee@linaro.org>
Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index ef202abbcb..de1abd9cc3 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -967,6 +967,13 @@ static bool fold_and(OptContext *ctx, TCGOp *op)
     z2 =3D arg_info(op->args[2])->z_mask;
     ctx->z_mask =3D z1 & z2;
=20
+    /*
+     * Sign repetitions are perforce all identical, whether they are 1 or =
0.
+     * Bitwise operations preserve the relative quantity of the repetition=
s.
+     */
+    ctx->s_mask =3D arg_info(op->args[1])->s_mask
+                & arg_info(op->args[2])->s_mask;
+
     /*
      * Known-zeros does not imply known-ones.  Therefore unless
      * arg2 is constant, we can't infer affected bits from it.
@@ -1002,6 +1009,8 @@ static bool fold_andc(OptContext *ctx, TCGOp *op)
     }
     ctx->z_mask =3D z1;
=20
+    ctx->s_mask =3D arg_info(op->args[1])->s_mask
+                & arg_info(op->args[2])->s_mask;
     return fold_masks(ctx, op);
 }
=20
@@ -1300,6 +1309,9 @@ static bool fold_eqv(OptContext *ctx, TCGOp *op)
         fold_xi_to_not(ctx, op, 0)) {
         return true;
     }
+
+    ctx->s_mask =3D arg_info(op->args[1])->s_mask
+                & arg_info(op->args[2])->s_mask;
     return false;
 }
=20
@@ -1487,6 +1499,8 @@ static bool fold_movcond(OptContext *ctx, TCGOp *op)
=20
     ctx->z_mask =3D arg_info(op->args[3])->z_mask
                 | arg_info(op->args[4])->z_mask;
+    ctx->s_mask =3D arg_info(op->args[3])->s_mask
+                & arg_info(op->args[4])->s_mask;
=20
     if (arg_is_const(op->args[3]) && arg_is_const(op->args[4])) {
         uint64_t tv =3D arg_info(op->args[3])->val;
@@ -1585,6 +1599,9 @@ static bool fold_nand(OptContext *ctx, TCGOp *op)
         fold_xi_to_not(ctx, op, -1)) {
         return true;
     }
+
+    ctx->s_mask =3D arg_info(op->args[1])->s_mask
+                & arg_info(op->args[2])->s_mask;
     return false;
 }
=20
@@ -1614,6 +1631,9 @@ static bool fold_nor(OptContext *ctx, TCGOp *op)
         fold_xi_to_not(ctx, op, 0)) {
         return true;
     }
+
+    ctx->s_mask =3D arg_info(op->args[1])->s_mask
+                & arg_info(op->args[2])->s_mask;
     return false;
 }
=20
@@ -1623,6 +1643,8 @@ static bool fold_not(OptContext *ctx, TCGOp *op)
         return true;
     }
=20
+    ctx->s_mask =3D arg_info(op->args[1])->s_mask;
+
     /* Because of fold_to_not, we want to always return true, via finish. =
*/
     finish_folding(ctx, op);
     return true;
@@ -1638,6 +1660,8 @@ static bool fold_or(OptContext *ctx, TCGOp *op)
=20
     ctx->z_mask =3D arg_info(op->args[1])->z_mask
                 | arg_info(op->args[2])->z_mask;
+    ctx->s_mask =3D arg_info(op->args[1])->s_mask
+                & arg_info(op->args[2])->s_mask;
     return fold_masks(ctx, op);
 }
=20
@@ -1649,6 +1673,9 @@ static bool fold_orc(OptContext *ctx, TCGOp *op)
         fold_ix_to_not(ctx, op, 0)) {
         return true;
     }
+
+    ctx->s_mask =3D arg_info(op->args[1])->s_mask
+                & arg_info(op->args[2])->s_mask;
     return false;
 }
=20
@@ -1922,6 +1949,8 @@ static bool fold_xor(OptContext *ctx, TCGOp *op)
=20
     ctx->z_mask =3D arg_info(op->args[1])->z_mask
                 | arg_info(op->args[2])->z_mask;
+    ctx->s_mask =3D arg_info(op->args[1])->s_mask
+                & arg_info(op->args[2])->s_mask;
     return fold_masks(ctx, op);
 }
=20
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=fail;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=fail(p=none dis=none)  header.from=linaro.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635392332139703.8537443129318;
 Wed, 27 Oct 2021 20:38:52 -0700 (PDT)
Received: from localhost ([::1]:33986 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfwFf-0002LY-0b
	for importer@patchew.org; Wed, 27 Oct 2021 23:38:51 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59862)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPm-0001cN-5y
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:14 -0400
Received: from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035]:50931)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPi-0006UH-RU
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:13 -0400
Received: by mail-pj1-x1035.google.com with SMTP id gn3so3612220pjb.0
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:45:09 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id z8sm995907pgc.53.2021.10.27.19.45.08
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:45:08 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=UvnOEYcQnp8j/yc4rVZsMaNR1mFxyTm3qBQfekyS408=;
 b=y4UGZHo/gYpnmImKlAbfQZogwMEQA1OOmPXlRUzQWWOL6y1HluHFCvwCiRoKIox5XS
 QHzsu9XzWzOgZVILE2COE2Q8j8vv5BvILDfBjeMxyNcrwpSG6zExmm2r3XWYIj7wiR+M
 VLh1YfdUiv5Fxv+m1wOea/C1C73la3NEL36vmUx/tVZt7ikXM2HU+RJk7MEzKxANgRyt
 AzquS4RHYeK+Tz0sRa2QR53LjaLP+3eOIZpAFUbQS+SwkN67eVv7SohY1EU4zDuPI8Ta
 yiW9zTi82ZwPymswlbmLikc5CNJpVDwNh/b1fwvMR8uPdhhbuW2UR52c4XNlGVzaRM3T
 fU0g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=UvnOEYcQnp8j/yc4rVZsMaNR1mFxyTm3qBQfekyS408=;
 b=ZuwTo65S3gyaWgGHmBo9MrVh2puWyNnMY/4z9NLylw2mVAbgWwjnclTIvJIY7TcoU3
 HVOt0w/tGai5/qaffuO1e2jjgWNMUSpU3hPjeIclmg6B+yZU5L/j9VHhXA7x5JD71ETR
 gJ5bePmi4v1FuBR2WjzNnRjPpt63+fP0lbFr5VHWX6tywFS6Onb6dKwTaQyyjmP8e06r
 s9OHvMqsWY2qbwbqsSQUL9tRuSky8OcQlSo4CqTVbPoPFQUIv314Po6ocHDEpfboVBox
 Z8zIz7Lbg1mgBNWCeUeSs5nfABCS1gdrwEoyEVgToqe8ZEQYclQnqX3nXms+LaLzprei
 +32Q==
X-Gm-Message-State: AOAM533/LvqrZJVcUel83Q4H2uXT+Swz7UygG8qo6o8g7JxtzcgEJG2G
 QCVE/oNYF3/N86Z4StSOcTPJ2RsBI7ibpw==
X-Google-Smtp-Source: 
 ABdhPJwBuoZIqX5LZlW9+wRVRWbPFRLQWdm58egeFKph97PS/ofq0itDN/d83v4IzqFoYXBRunA43A==
X-Received: by 2002:a17:902:6ac7:b0:140:14d5:cfb6 with SMTP id
 i7-20020a1709026ac700b0014014d5cfb6mr1264335plt.58.1635389109168;
 Wed, 27 Oct 2021 19:45:09 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 54/56] tcg/optimize: Propagate sign info for setcond
Date: Wed, 27 Oct 2021 19:41:29 -0700
Message-Id: <20211028024131.1492790-55-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::1035;
 envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1035.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Alex=20Benn=C3=A9e?= <alex.bennee@linaro.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: fail (Header signature does not verify)
X-ZM-MESSAGEID: 1635392332613100001

The result is either 0 or 1, which means that we have
a 2 bit signed result, and thus 62 bits of sign.
For clarity, use the smask_from_zmask function.

Reviewed-by: Alex Benn=C3=A9e <alex.bennee@linaro.org>
Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index de1abd9cc3..5fa4d7285d 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -1730,6 +1730,7 @@ static bool fold_setcond(OptContext *ctx, TCGOp *op)
     }
=20
     ctx->z_mask =3D 1;
+    ctx->s_mask =3D smask_from_zmask(1);
     return false;
 }
=20
@@ -1802,6 +1803,7 @@ static bool fold_setcond2(OptContext *ctx, TCGOp *op)
     }
=20
     ctx->z_mask =3D 1;
+    ctx->s_mask =3D smask_from_zmask(1);
     return false;
=20
  do_setcond_const:
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=fail;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=fail(p=none dis=none)  header.from=linaro.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635391637663654.3656113430188;
 Wed, 27 Oct 2021 20:27:17 -0700 (PDT)
Received: from localhost ([::1]:44246 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfw4S-0006fT-GU
	for importer@patchew.org; Wed, 27 Oct 2021 23:27:16 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59890)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPp-0001dc-Pf
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:18 -0400
Received: from mail-pj1-x102f.google.com ([2607:f8b0:4864:20::102f]:43720)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPj-0006Up-GK
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:17 -0400
Received: by mail-pj1-x102f.google.com with SMTP id
 k2-20020a17090ac50200b001a218b956aaso3551383pjt.2
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:45:10 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id z8sm995907pgc.53.2021.10.27.19.45.09
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:45:09 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=A6kctx71i8wzEpW9P/tf7EMU4+ENs8we2z5h5BKjvM0=;
 b=CS958hBKAXVq+buI5QL55jQMlNyQhosyFRDxa2/PmOkyDgrloLUYAwX6ppr945WdEx
 Rl6aQEElnCt348TnZP4Fn26tFg7o5HaMMrvOXAxgnkWbo7hV+DCA6t2Oirs9meygPAeU
 whPVWIQieUElWqJV2YqTjXg9q+ET/Gq82B/kguLMtIzYlAjcYtATrrE+8D4u4DtgYRY2
 fbOA3UFIypvigP24c+1FH7mbJm7VYZgzwLPbWSRXgfzEpafXLfcJkroCsAVLEkotv7e8
 StE8i8q1fn3vqP860jFt9VASXjYNTqjgBVvoztfBMHNFgP3BfpAKHJ1jBNUZf2ATfKnE
 v6Yw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=A6kctx71i8wzEpW9P/tf7EMU4+ENs8we2z5h5BKjvM0=;
 b=wdbfHy0ySPcPdYHeT6nvOjPtlOIF4N+5TSt6viOMbJwPYIOqgC3aENtmr6PyoZ+E13
 T0TrapZZR1l+Gi1SMvfCoHpbBg2w5axL0y0biJldPAwP8DbQOCLKtMIxhnR8Lx/JDwyM
 DVn4t5vCyq8MpRFxQYdcL0Sfm+SVsGNDWBVlkCM0AZwu4MDmQDTUM2ujz3pjC8MPeWSr
 CBQXsaZawoZavuRBruU1cb/dKLWYnDfJdQS/8oMa7H6rk4T0syoP2VRQNeQWZD7rCDbe
 wOnxj10NaVkiKKq/E2oFE3TbaSm30BPkn0gDyAEMPE7BnMHsxEp9LHQ7B88+AlSOQqfJ
 yiHg==
X-Gm-Message-State: AOAM533hfq5TELRqrqMIn0suJyYNIi5boVM8SnpKvXnK5kOLhDkJlnuy
 1oLgWZ9PZYd/kXwWu6mYoG3vr8qSxs5GyQ==
X-Google-Smtp-Source: 
 ABdhPJyXfLr/kneGciMtnlYko+1OnkMI76pxrZCoxMIl/PjDhMQv2z1G9WJVnLZ3aTJ4p8mZzgfsFg==
X-Received: by 2002:a17:903:1207:b0:138:e2f9:6c98 with SMTP id
 l7-20020a170903120700b00138e2f96c98mr1480276plh.11.1635389109790;
 Wed, 27 Oct 2021 19:45:09 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 55/56] tcg/optimize: Propagate sign info for bit counting
Date: Wed, 27 Oct 2021 19:41:30 -0700
Message-Id: <20211028024131.1492790-56-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::102f;
 envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102f.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Alex=20Benn=C3=A9e?= <alex.bennee@linaro.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: fail (Header signature does not verify)
X-ZM-MESSAGEID: 1635391639335100001

The results are generally 6 bit unsigned values, though
the count leading and trailing bits may produce any value
for a zero input.

Reviewed-by: Alex Benn=C3=A9e <alex.bennee@linaro.org>
Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 5fa4d7285d..c0eccc61d6 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -1229,7 +1229,7 @@ static bool fold_count_zeros(OptContext *ctx, TCGOp *=
op)
         g_assert_not_reached();
     }
     ctx->z_mask =3D arg_info(op->args[2])->z_mask | z_mask;
-
+    ctx->s_mask =3D smask_from_zmask(ctx->z_mask);
     return false;
 }
=20
@@ -1249,6 +1249,7 @@ static bool fold_ctpop(OptContext *ctx, TCGOp *op)
     default:
         g_assert_not_reached();
     }
+    ctx->s_mask =3D smask_from_zmask(ctx->z_mask);
     return false;
 }
=20
--=20
2.25.1


From nobody Wed May  7 23:25:03 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=fail;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=fail(p=none dis=none)  header.from=linaro.org
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1635392530225719.9875263130598;
 Wed, 27 Oct 2021 20:42:10 -0700 (PDT)
Received: from localhost ([::1]:38442 helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>)
	id 1mfwIr-0005Q2-9T
	for importer@patchew.org; Wed, 27 Oct 2021 23:42:09 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59888)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPp-0001db-O0
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:18 -0400
Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]:46747)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)
 id 1mfvPk-0006Ut-07
 for qemu-devel@nongnu.org; Wed, 27 Oct 2021 22:45:16 -0400
Received: by mail-pj1-x102d.google.com with SMTP id
 lx5-20020a17090b4b0500b001a262880e99so3532558pjb.5
 for <qemu-devel@nongnu.org>; Wed, 27 Oct 2021 19:45:11 -0700 (PDT)
Received: from localhost.localdomain ([71.212.134.125])
 by smtp.gmail.com with ESMTPSA id z8sm995907pgc.53.2021.10.27.19.45.09
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Oct 2021 19:45:10 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=r6S77ImV++TbyhM1Alu0N2O92xVncEhY3IGwCmm5NjQ=;
 b=OgFQCo1OAX/8CxOmNBpjsiB4gxe2yMV1GPMyyD+4IMsvlAOyMNXZgMw4NeULSWSv48
 vkDumSJOIAyaViSuqadhlkmSN1maJmhirfft4FH3HdO4MzB37Ai0Bz2vtsy4uoVV+L5K
 1vo00FA1zdwkLeiECrR2jTVcZ0fqKech8Tl6Mv63x2i13mPoahb2QI+MZWZsA7UUhl0K
 /G1gFcjZvzCrEAHcp13gj0HDNpkNiVElmSAG6/xd1ipZK06YbaMxKTNa0G8Sk4epcJYe
 OONNe9STyBSfQjXtKB23YRiCjT+Mxvm0Rsv+u6Vy+1CVfVj29SRjK9CnacYOuaAlk7N+
 NT3Q==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=r6S77ImV++TbyhM1Alu0N2O92xVncEhY3IGwCmm5NjQ=;
 b=KXz9bueTxEh3f9FAPdK1EZBzIXOdqKBFX9CVaeAqMm4XsDxBRpnoKvyfXDhSmDQN+f
 9KzMtMhBR2G949h25/dcXj0lx4jYgdTRjK4W7HBgOwSd2hxtIP/3gQ2+QCnqGaCRV07p
 Ljw9+TR/R9/7IkScLvphmqZRIO9ShADGvNAt0HsWaxQxkJQwTKhxPoDrkrg+zAvo4qGn
 LKy+xMxyWeAq4Va+DX9ju+gLJ/AotewpJ6T3mE0DBSFfxQRJ5PfH0Hs54stCP7A8z0QM
 Jo9Zb5IcfXOzGBtt/4v4L5KQ9dryBkRAN7i3cQTf8yqqde8BsDB0LM1nnPIvyY/yGEoR
 aLqQ==
X-Gm-Message-State: AOAM530USiQ/O689PYffl7dp8okOV/4yreUXCJJ/F20JRZAkoqod7o9U
 R/WPHKj9DAcvhAyrE8erzNdFMRBgA0Bm2g==
X-Google-Smtp-Source: 
 ABdhPJzHygXho3GIOHzjASFWtZKkSKjLa5Anf580cuMEfrsTIVANR+e7v2/J/NIdwaYwL3umUbTIOg==
X-Received: by 2002:a17:902:900c:b0:13f:974c:19b0 with SMTP id
 a12-20020a170902900c00b0013f974c19b0mr1275792plp.12.1635389110431;
 Wed, 27 Oct 2021 19:45:10 -0700 (PDT)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 56/56] tcg/optimize: Propagate sign info for shifting
Date: Wed, 27 Oct 2021 19:41:31 -0700
Message-Id: <20211028024131.1492790-57-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20211028024131.1492790-1-richard.henderson@linaro.org>
References: <20211028024131.1492790-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=2607:f8b0:4864:20::102d;
 envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102d.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Cc: Luis Pires <luis.pires@eldorado.org.br>,
 =?UTF-8?q?Alex=20Benn=C3=A9e?= <alex.bennee@linaro.org>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org>
X-ZohoMail-DKIM: fail (Header signature does not verify)
X-ZM-MESSAGEID: 1635392530682100001

For constant shifts, we can simply shift the s_mask.

For variable shifts, we know that sar does not reduce
the s_mask, which helps for sequences like

    ext32s_i64  t, in
    sar_i64     t, t, v
    ext32s_i64  out, t

allowing the final extend to be eliminated.

Reviewed-by: Alex Benn=C3=A9e <alex.bennee@linaro.org>
Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 47 insertions(+), 3 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index c0eccc61d6..dbb2d46e88 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -85,6 +85,18 @@ static uint64_t smask_from_zmask(uint64_t zmask)
     return ~(~0ull >> rep);
 }
=20
+/*
+ * Recreate a properly left-aligned smask after manipulation.
+ * Some bit-shuffling, particularly shifts and rotates, may
+ * retain sign bits on the left, but may scatter disconnected
+ * sign bits on the right.  Retain only what remains to the left.
+ */
+static uint64_t smask_from_smask(int64_t smask)
+{
+    /* Only the 1 bits are significant for smask */
+    return smask_from_zmask(~smask);
+}
+
 static inline TempOptInfo *ts_info(TCGTemp *ts)
 {
     return ts->state_ptr;
@@ -1843,18 +1855,50 @@ static bool fold_sextract(OptContext *ctx, TCGOp *o=
p)
=20
 static bool fold_shift(OptContext *ctx, TCGOp *op)
 {
+    uint64_t s_mask, z_mask, sign;
+
     if (fold_const2(ctx, op) ||
         fold_ix_to_i(ctx, op, 0) ||
         fold_xi_to_x(ctx, op, 0)) {
         return true;
     }
=20
+    s_mask =3D arg_info(op->args[1])->s_mask;
+    z_mask =3D arg_info(op->args[1])->z_mask;
+
     if (arg_is_const(op->args[2])) {
-        ctx->z_mask =3D do_constant_folding(op->opc, ctx->type,
-                                          arg_info(op->args[1])->z_mask,
-                                          arg_info(op->args[2])->val);
+        int sh =3D arg_info(op->args[2])->val;
+
+        ctx->z_mask =3D do_constant_folding(op->opc, ctx->type, z_mask, sh=
);
+
+        s_mask =3D do_constant_folding(op->opc, ctx->type, s_mask, sh);
+        ctx->s_mask =3D smask_from_smask(s_mask);
+
         return fold_masks(ctx, op);
     }
+
+    switch (op->opc) {
+    CASE_OP_32_64(sar):
+        /*
+         * Arithmetic right shift will not reduce the number of
+         * input sign repetitions.
+         */
+        ctx->s_mask =3D s_mask;
+        break;
+    CASE_OP_32_64(shr):
+        /*
+         * If the sign bit is known zero, then logical right shift
+         * will not reduced the number of input sign repetitions.
+         */
+        sign =3D (s_mask & -s_mask) >> 1;
+        if (!(z_mask & sign)) {
+            ctx->s_mask =3D s_mask;
+        }
+        break;
+    default:
+        break;
+    }
+
     return false;
 }
=20
--=20
2.25.1