From nobody Thu May  8 06:28:20 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=1641343936; cv=none;
	d=zohomail.com; s=zohoarc;
	b=cIwUQGFPLmyjcGym63k5bPYPy0U4YmvXoVl0HyUBz7GqLjqFePj50e/AhVNm1+QW4YZV4yj36R6MtDd+dhuSUNzutKarbYK4sHaGX816BVtK/8P1SDPI4JeLzxbmGPd6LEfzW2JwXsVVlUPyZ3X/c0nalFIknmnr2pZnZ1vAcA8=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1641343936;
 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=5JjYgAjXn1kQxSGxYgLEIz1R3XcGictv5Sz0+SPB7Hc=;
	b=kFWnbw/+rx8gZyyQMJkpHNaoXEyOJCH0M63eKW1qvlRwRbbYAxWTCJHdpGbrKGLaLv0lEQVkvWxhHD+73wQ9e6b11aojGLAd39CbsFT/de0uG9non4LHu0Gl90zjp6NbMlC/hNl61nEEWoRoCDDzvQfp393uoEF9qqHMoHPilRM=
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 1641343936151690.5702136476103;
 Tue, 4 Jan 2022 16:52:16 -0800 (PST)
Received: from localhost ([::1]:44292 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 1n4uXG-0003T2-NE
	for importer@patchew.org; Tue, 04 Jan 2022 19:52:14 -0500
Received: from eggs.gnu.org ([209.51.188.92]:33924)
 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 1n4uMW-0005Eb-Ls
 for qemu-devel@nongnu.org; Tue, 04 Jan 2022 19:41:12 -0500
Received: from [2607:f8b0:4864:20::1034] (port=45886
 helo=mail-pj1-x1034.google.com)
 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 1n4uML-0005eu-Em
 for qemu-devel@nongnu.org; Tue, 04 Jan 2022 19:41:08 -0500
Received: by mail-pj1-x1034.google.com with SMTP id
 l16-20020a17090a409000b001b2e9628c9cso4785087pjg.4
 for <qemu-devel@nongnu.org>; Tue, 04 Jan 2022 16:40:57 -0800 (PST)
Received: from localhost.localdomain (174-21-75-75.tukw.qwest.net.
 [174.21.75.75])
 by smtp.gmail.com with ESMTPSA id k3sm35312356pgq.54.2022.01.04.16.40.55
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Tue, 04 Jan 2022 16:40:55 -0800 (PST)
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=5JjYgAjXn1kQxSGxYgLEIz1R3XcGictv5Sz0+SPB7Hc=;
 b=okq8YPLpf8gr+v1HLphYVdWkyNhpTaBGTZXgSz5MxC7wkCPXN9QKxAEvI0ILgxOoqF
 yYBHSd7k3HMVqptvHqGViuDD/ByRXTlT9A7fw4rIDbF76u6rkM6fhZ4U+xSwkckzvHxF
 lb3QR6CNAcO1FscanxVPCVT7xP0zYmmkG+gOq6A6VPmeUSgRKFpnN8hDxOVQTpn9vfdK
 qorZAG62A4Tu8sTpgxIwlEogZxpIU6qWArXRR3zErc0RPlcyqqlTQuz1gyEuOR5kANm/
 HYe9KMhj/Q+TEImj37F3Gf4owjqA2uav7CzDJYHJ6X2fhlnRPqr5RB/IzBRvj9fs5mro
 7Iyw==
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=5JjYgAjXn1kQxSGxYgLEIz1R3XcGictv5Sz0+SPB7Hc=;
 b=upy/0BgbksnmMhbLn2VgypWGMtt6ePIHItMilA2uLSBqVWbcDW1I7xOkrDP6yKtbs8
 +WJtDyNoCOx/rrORDmby/N0Y7LJqZf+Gd5UyzYEnd8x8VfexgFULh/fMV6+RH9/F6N+E
 nvnRPcLKNSy3UziCD1VMPvvA8shOdcpOVFLNCwCIB+bVhVilCOeMrQB/dxV6rVrzD/Bl
 06eslgNq3ABdoZMEAFUfDtIVA0bqLcfgwpFWnaH3Q/o43ZgY2oLAlTeO+8yBd2eh+aup
 A6DD2UkAx4z9Oc4GD17wngfRUHzIeZ5FlOOTxb0mbg33ECy3PJAPZhxO8tLRcza0JAoH
 vz+Q==
X-Gm-Message-State: AOAM533qR424MdkXPllqf2UDZt+1dlEVYJHRBDxTYI9LZoNcg98HLdK9
 PeorJWlUYDjfAS7aHgf0RGh8YcBZpjSaqg==
X-Google-Smtp-Source: 
 ABdhPJzeanz0S3bR2zMY8WuSvOQAlmj+GW702GpRNqDCkaLd7RKzCiZS951DK2f5W6WoTSIAOGQLuQ==
X-Received: by 2002:a17:902:d487:b0:149:c6e8:b4aa with SMTP id
 c7-20020a170902d48700b00149c6e8b4aamr3805936plg.108.1641343256134;
 Tue, 04 Jan 2022 16:40:56 -0800 (PST)
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 1/4] tcg/optimize: Fix folding of vector ops
Date: Tue,  4 Jan 2022 16:40:51 -0800
Message-Id: <20220105004054.587588-2-richard.henderson@linaro.org>
X-Mailer: git-send-email 2.25.1
In-Reply-To: <20220105004054.587588-1-richard.henderson@linaro.org>
References: <20220105004054.587588-1-richard.henderson@linaro.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
X-Host-Lookup-Failed: Reverse DNS lookup failed for 2607:f8b0:4864:20::1034
 (failed)
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::1034;
 envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1034.google.com
X-Spam_score_int: 6
X-Spam_score: 0.6
X-Spam_bar: /
X-Spam_report: (0.6 / 5.0 requ) DKIM_SIGNED=0.1, DKIM_VALID=-0.1,
 DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RDNS_NONE=0.793, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=no autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.29
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: qemu-stable@nongnu.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: pass (identity @linaro.org)
X-ZM-MESSAGEID: 1641343937608100001

Bitwise operations are easy to fold, because the operation is
identical regardless of element size.  But add and sub need
extra element size info that is not currently propagated.

Fixes: 2f9f08ba43d
Cc: qemu-stable@nongnu.org
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/799
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/optimize.c | 49 ++++++++++++++++++++++++++++++++++++++-----------
 1 file changed, 38 insertions(+), 11 deletions(-)

diff --git a/tcg/optimize.c b/tcg/optimize.c
index 2397f2cf93..e573000951 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -308,13 +308,13 @@ static uint64_t do_constant_folding_2(TCGOpcode op, u=
int64_t x, uint64_t y)
     CASE_OP_32_64(mul):
         return x * y;
=20
-    CASE_OP_32_64(and):
+    CASE_OP_32_64_VEC(and):
         return x & y;
=20
-    CASE_OP_32_64(or):
+    CASE_OP_32_64_VEC(or):
         return x | y;
=20
-    CASE_OP_32_64(xor):
+    CASE_OP_32_64_VEC(xor):
         return x ^ y;
=20
     case INDEX_op_shl_i32:
@@ -347,16 +347,16 @@ static uint64_t do_constant_folding_2(TCGOpcode op, u=
int64_t x, uint64_t y)
     case INDEX_op_rotl_i64:
         return rol64(x, y & 63);
=20
-    CASE_OP_32_64(not):
+    CASE_OP_32_64_VEC(not):
         return ~x;
=20
     CASE_OP_32_64(neg):
         return -x;
=20
-    CASE_OP_32_64(andc):
+    CASE_OP_32_64_VEC(andc):
         return x & ~y;
=20
-    CASE_OP_32_64(orc):
+    CASE_OP_32_64_VEC(orc):
         return x | ~y;
=20
     CASE_OP_32_64(eqv):
@@ -751,6 +751,12 @@ static bool fold_const2(OptContext *ctx, TCGOp *op)
     return false;
 }
=20
+static bool fold_commutative(OptContext *ctx, TCGOp *op)
+{
+    swap_commutative(op->args[0], &op->args[1], &op->args[2]);
+    return false;
+}
+
 static bool fold_const2_commutative(OptContext *ctx, TCGOp *op)
 {
     swap_commutative(op->args[0], &op->args[1], &op->args[2]);
@@ -905,6 +911,16 @@ static bool fold_add(OptContext *ctx, TCGOp *op)
     return false;
 }
=20
+/* We cannot as yet do_constant_folding with vectors. */
+static bool fold_add_vec(OptContext *ctx, TCGOp *op)
+{
+    if (fold_commutative(ctx, op) ||
+        fold_xi_to_x(ctx, op, 0)) {
+        return true;
+    }
+    return false;
+}
+
 static bool fold_addsub2(OptContext *ctx, TCGOp *op, bool add)
 {
     if (arg_is_const(op->args[2]) && arg_is_const(op->args[3]) &&
@@ -1938,10 +1954,10 @@ static bool fold_sub_to_neg(OptContext *ctx, TCGOp =
*op)
     return false;
 }
=20
-static bool fold_sub(OptContext *ctx, TCGOp *op)
+/* We cannot as yet do_constant_folding with vectors. */
+static bool fold_sub_vec(OptContext *ctx, TCGOp *op)
 {
-    if (fold_const2(ctx, op) ||
-        fold_xx_to_i(ctx, op, 0) ||
+    if (fold_xx_to_i(ctx, op, 0) ||
         fold_xi_to_x(ctx, op, 0) ||
         fold_sub_to_neg(ctx, op)) {
         return true;
@@ -1949,6 +1965,11 @@ static bool fold_sub(OptContext *ctx, TCGOp *op)
     return false;
 }
=20
+static bool fold_sub(OptContext *ctx, TCGOp *op)
+{
+    return fold_const2(ctx, op) || fold_sub_vec(ctx, op);
+}
+
 static bool fold_sub2(OptContext *ctx, TCGOp *op)
 {
     return fold_addsub2(ctx, op, false);
@@ -2052,9 +2073,12 @@ void tcg_optimize(TCGContext *s)
          * Sorted alphabetically by opcode as much as possible.
          */
         switch (opc) {
-        CASE_OP_32_64_VEC(add):
+        CASE_OP_32_64(add):
             done =3D fold_add(&ctx, op);
             break;
+        case INDEX_op_add_vec:
+            done =3D fold_add_vec(&ctx, op);
+            break;
         CASE_OP_32_64(add2):
             done =3D fold_add2(&ctx, op);
             break;
@@ -2193,9 +2217,12 @@ void tcg_optimize(TCGContext *s)
         CASE_OP_32_64(sextract):
             done =3D fold_sextract(&ctx, op);
             break;
-        CASE_OP_32_64_VEC(sub):
+        CASE_OP_32_64(sub):
             done =3D fold_sub(&ctx, op);
             break;
+        case INDEX_op_sub_vec:
+            done =3D fold_sub_vec(&ctx, op);
+            break;
         CASE_OP_32_64(sub2):
             done =3D fold_sub2(&ctx, op);
             break;
--=20
2.25.1