From nobody Mon Feb 9 17:54:38 2026 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=1633636774; cv=none; d=zohomail.com; s=zohoarc; b=CdX8oq37VvJoJ8RQOC1uIV3w8H30ztY2vh3VB5c3jgYRWzXSw9BCJkwvZ6euKSnxlzE/ONA5bljWCnQ9UzuFe/S50LwQNmcpNVaZBqZ9L7PDRWDKAhE+DnrA5tkrqDDrHBJhpE0ruzMHxaz7tWJfyCRTsnpX6Y0IQ1vwFYTxFIU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633636774; 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=s0XPethfT6mZ/iplG2iR9LB7xOwoA2oyCaPBqTu/3ao=; b=dKizegUS1pNoljdUhKd5eBwjIGlFgQZF3D7D08KwS0duqcXbE5ySo5UnyaEFOcy6dLTY4M2pC33NvTYXpurXqYz+F4FYa9cyjxDRDiKSFVDj9BWGtEKQqpuc9DYn2RiydCDrqv6KvzYD+GT2X5NAnA0BHPCsFFdyT2bAPXotvmo= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633636774253214.37674661486062; Thu, 7 Oct 2021 12:59:34 -0700 (PDT) Received: from localhost ([::1]:35252 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZYB-0000OX-1y for importer@patchew.org; Thu, 07 Oct 2021 15:59:31 -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 ) id 1mYZTp-0000Fv-OX for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:02 -0400 Received: from mail-pg1-x535.google.com ([2607:f8b0:4864:20::535]:41796) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZTn-00071g-KN for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:01 -0400 Received: by mail-pg1-x535.google.com with SMTP id v11so816201pgb.8 for ; Thu, 07 Oct 2021 12:54:59 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.54.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:54: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=s0XPethfT6mZ/iplG2iR9LB7xOwoA2oyCaPBqTu/3ao=; b=gnfBiszI3zx1tWbqtOrlT0dknVf6PxVTzU6wIOXxE8MN8P1lI0x2d6oxrT904zfnvu H4gCUcBFfS7evQywQggnfA4OCKDnkOENhi4uUEFBuQr+fE19rRhDEr5MH+WiL1ap+OgD zXLIjw9XgE0WuhvYGXsIFAnsqFiKG+/HKQu1rW1O0TAQ/TJgdgerDYTK9P4y5E8rQMne ZV9LwBubltlne0VWpGVHp31oFal1EVZ5MrhI0x2JKaFoHVtt2/vf1qwqLgWYQbDyLvCw 69kW+VfIPgjY72jroD0nrETEy/kiweaOQAlqGbBpXFNnJDO/K5ounjiwfurfQY4cOz2F s46w== 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=s0XPethfT6mZ/iplG2iR9LB7xOwoA2oyCaPBqTu/3ao=; b=JAujMiPWbVIcuTmVnGLPQA8wLFfPTnE5W2fdrkvKRuDdps7DpEp/F9ERLP8+ScIQqd kkR/tOMu6BvsJZVqIErn5xbcg/4BExkvflTYea7fMQFPW3RUVXEaRh484DTfCdwDAUJU And+C0DSZ/nXardduaJVJjMfTq7POtfWJ2Gycyy4L26vY0JRrVhoyCcSGnFV2angD3oE vmsdOAO7cVhyhsZg8bcoplFspMmifk3Y9oyl272l7Z7kdIeAIIHynX4xdi5OxyWx3gJQ +LlJjDDSCtVU32opIhUqWMSy32UQIixet/j2zxdRr8kpqK9aym0OgkNz5xRzhRfgFZbB J0Lg== X-Gm-Message-State: AOAM532VWUKNvziDZQNWW69iek6ZoId3g6HPSZUj2MsJLo1el/APPtj3 gzqo5mgtRyRHXJ5XwWeAwuASo3J/CIa+kw== X-Google-Smtp-Source: ABdhPJwmf9MGJ2MnKTwVpd6bzspd4JCIjMW7gSvbzPyLlDtrSgxgGyQu09dn3l1hPjzmMb/sBkMisg== X-Received: by 2002:aa7:811a:0:b0:44c:b9ef:f618 with SMTP id b26-20020aa7811a000000b0044cb9eff618mr5908219pfi.9.1633636498126; Thu, 07 Oct 2021 12:54:58 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 01/48] tcg/optimize: Rename "mask" to "z_mask" Date: Thu, 7 Oct 2021 12:54:09 -0700 Message-Id: <20211007195456.1168070-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633636775340100001 Prepare for tracking different masks by renaming this one. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Luis Pires --- 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 Mon Feb 9 17:54:38 2026 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=1633636637; cv=none; d=zohomail.com; s=zohoarc; b=SQohAADWGzo0snfYU8AglrFIEGXqSPAb5FsGBCOAg8pK6xZmUk9N6PEWbV+3lI87XPXQBN8v9SRknd4xgGeMIj62dltmikqO4prIhN4fpB8H98NGEqRI9wtXD+ylGe/h2hd3hIaVo+LF7mRJTa2VttqGI1wTh5BljVep7cIqP1A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633636637; h=Content-Transfer-Encoding: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=G5sTPxFQcPQ6lGu6RzozKhGK61kGdfP0gfNJpFvTMJY=; b=YqaBZRT/tj6uBsotwywnkkGJWlju5BJ4mYKCch0N6S2/wSEv0wA71py4MuNPxNt+wciZB7e32nDxvRkxg/nAAdDtyXz/UftgG74XPLJSMh1ODLi/fvSNbhhyGqWrI3Fkxr5+SwP77FBCcvVJ483m8S5fY6JFqiqlrHDMopH4RcA= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633636637250556.133814187783; Thu, 7 Oct 2021 12:57:17 -0700 (PDT) Received: from localhost ([::1]:55082 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZW0-0003Gm-5d for importer@patchew.org; Thu, 07 Oct 2021 15:57:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59656) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZTr-0000G5-25 for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:03 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]:55006) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZTo-00072K-CS for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:02 -0400 Received: by mail-pj1-x1031.google.com with SMTP id np13so5712885pjb.4 for ; Thu, 07 Oct 2021 12:54:59 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.54.58 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:54:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=G5sTPxFQcPQ6lGu6RzozKhGK61kGdfP0gfNJpFvTMJY=; b=ME3zIskZxG3mSgeOFfHwxDPQDwgcxb3rGd4EVw1+lB7ASgcWo1Hdhi7KehvwdE4mei 6bQyq2H07HKtZpBnZZhmgITmWHrVZ7YLODwOPob3gFRKPosSRFTdSLW/7YIx1QDXqWXk pQJqj7rvuvNnPrrjeIF7J41UteT66A0eTqAz6nNkh0kYmF/6zF3gEaA3OKBdUdaIDmSj ydeq52RaWXx0bndqqaUS7TCDr8vWMj5YQcXzstfclBu8L23Mvh8VSqRV5zpE+5p/lFZa T97lW3XhvFzM7sPXLvKSEBYp65rMNExePu5r6HTpFuXFbRcbr+m2xz82D+KE3gVODUfr HfPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=G5sTPxFQcPQ6lGu6RzozKhGK61kGdfP0gfNJpFvTMJY=; b=T3H3AU/i8F4zk1/HppBW6jlcpPSEC0rgDum/Fnqr1gX5Mqdvxq8I2ErpDJeAutD+46 tx2DzOSLRHG3qplLdUaMUXGcQkE6+iK+F5QLEhHUtgTw/tzQ+miD71vRWYM72LMsTd1z 3144mPLtNIwiIzghI7hKSkNZxIXN+gbmNWaBBivHIsSYuh5rQ6F4uxH39GzTME+IQvQa I/TH89gQ90BZEAk7D6x3tzcS0J8ivs0+zGJoClhuUJbqCg3iV4jvbnbRlEeFUO8aGLsi e9gNeWl+vdozdwnT2gNy+AkpfvEPn6yhG4Tnu0S306GZ9E3nEBMFbIzcDLBrt/RCH/fz lj/Q== X-Gm-Message-State: AOAM530L13marTPYAMdOrJpEUMVsKOsyyRS+k66lggXbRtiZP03ZCwg2 t0m2Jl5p23c8A9DciinLzZ7GNhz9NaWHag== X-Google-Smtp-Source: ABdhPJy2XGQFpgbZukqKM1gToMTXxllvTAsYjHWPUu+l44ZX0vhxC1/VtlcI/yMlEmoIztT19PrKlw== X-Received: by 2002:a17:90a:9317:: with SMTP id p23mr7051860pjo.151.1633636498908; Thu, 07 Oct 2021 12:54:58 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 02/48] tcg/optimize: Split out OptContext Date: Thu, 7 Oct 2021 12:54:10 -0700 Message-Id: <20211007195456.1168070-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633637540629100002 Content-Type: text/plain; charset="utf-8" Provide what will become a larger context for splitting the very large tcg_optimize function. Signed-off-by: Richard Henderson Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Luis Pires --- 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 Mon Feb 9 17:54:38 2026 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=1633636781; cv=none; d=zohomail.com; s=zohoarc; b=FQIV/Bqvb85a1u/J3wD6QGAnYfkMQaC2KRRNPUdvscnS59tt94vExixS0FYtbnyz+5OOh8nJhaImBWsfGHKgg7j7WOIi+QeeDJ6BmyUHvYjE+L1DczqNKMcpodDlSfAQP21FEVFGF4L2OJlnD8QcUyPHEDxvyg+MDSGDTnswvV4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633636781; h=Content-Transfer-Encoding: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=H7+aJi9oZDMnm75AN6L/sanLCuwRKsPKjXVfdc8d9CE=; b=gMikytL9r1PBtNpvQ5679cIIouG2J3Izv/OC8ZqL48u/y8TBzsVjC1rz6W+THWWxn4XoW7dsty/viHiseK6JBuEg76IErLX4uACvKBFTksMXfBf71zzx+yC4A5okAEtQJ9D257YwEuU2ELRCS6l26WCuO2h1pGnpqeaU1SoQuRg= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633636781810947.4533746682689; Thu, 7 Oct 2021 12:59:41 -0700 (PDT) Received: from localhost ([::1]:35518 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZYK-0000ZJ-J3 for importer@patchew.org; Thu, 07 Oct 2021 15:59:40 -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 ) id 1mYZTt-0000Gl-00 for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:06 -0400 Received: from mail-pg1-x52c.google.com ([2607:f8b0:4864:20::52c]:36804) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZTp-00073o-Ad for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:04 -0400 Received: by mail-pg1-x52c.google.com with SMTP id 75so835783pga.3 for ; Thu, 07 Oct 2021 12:55:00 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.54.59 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:54:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=H7+aJi9oZDMnm75AN6L/sanLCuwRKsPKjXVfdc8d9CE=; b=rLKM3fSPgLgy4Z2XPen4Mm4+5sA4KlXqe8vbzMjzh7oUguqINfWcdQxxNnBOIhJV+K ANI/KRTZCR/RFqXN9oSbq1VfkDAi9qDG35EMfVD79ICT4Od3MaPhro09Ai6gCtTOccG5 7zYogY6w9ZsFAGwLufS896Dhqmd2OfWu+XDDsWwoQtwzCh82qhcFfHkpobit8vdPVBiN azoKOY1I/9TzMJhh8Kt7PxbqhJphgBFbjKE0CXko00bovU9O6+lVjOhiJrR+bnVtqUaR FWdGCo6O6vb0acn6tch6gWzcnSZj5JZ1mBJtF2Q2LV93jeGGIs99B3uIenSvQerI1Vd6 x6lA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=H7+aJi9oZDMnm75AN6L/sanLCuwRKsPKjXVfdc8d9CE=; b=7wJFRxgZCHd1niiHOUHL4SoxgtXmaFx480hQiwlJ4zXEhAOMta0qiwSRBfgza2uly/ H34TDkHmUGBxkPFvVpR3N1IAtCKMd7sFFmyTWDRKArKXkSIe0RxMBKpNtpkhsfNJndsE pDMikIh3VWd3z6AWXnlA3U8lYBQjl+fetkJzlsrqROfuJUPsJmXBHTqm6rlM4LbVr/uO 7ad5ybJTrLoHU3r4aFKYhgRGnhL7U5cr2vMBt5M2xz1Yje0i9SwBjO5W+KMHXAJ0NEro Le9rpYJSGEzDihoKU3sXtmDTxQE0LK6M6QzK/BinX44ZMdiOS0Gp7QKTMs/24hT+YeHM FDXA== X-Gm-Message-State: AOAM5331rjHSwSOtqzFoPIVXxD6vny574M1AIt561K2inVfa2bgoOmb0 1tpLsg91ypEu+nnFF04aG67YW8uadFOYsg== X-Google-Smtp-Source: ABdhPJyrrzdH+8OJrxdy91gEPToWcLckU82eeSk5AlyvA3+0YGAP2+PRz6C4PqEQvLZ16Rtz2tmEOQ== X-Received: by 2002:a65:62c4:: with SMTP id m4mr1196736pgv.453.1633636499868; Thu, 07 Oct 2021 12:54:59 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 03/48] tcg/optimize: Remove do_default label Date: Thu, 7 Oct 2021 12:54:11 -0700 Message-Id: <20211007195456.1168070-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633636784182100001 Content-Type: text/plain; charset="utf-8" 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. Signed-off-by: Richard Henderson Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Luis Pires --- 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 Mon Feb 9 17:54:38 2026 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: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 163363697869753.85215660600136; Thu, 7 Oct 2021 13:02:58 -0700 (PDT) Received: from localhost ([::1]:44050 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZbV-0006Jc-Er for importer@patchew.org; Thu, 07 Oct 2021 16:02:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59680) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZTt-0000Gn-2N for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:06 -0400 Received: from mail-pf1-x435.google.com ([2607:f8b0:4864:20::435]:44025) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZTq-000741-52 for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:04 -0400 Received: by mail-pf1-x435.google.com with SMTP id 187so6222681pfc.10 for ; Thu, 07 Oct 2021 12:55:01 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.00 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=zrvO2z9GjXuWPQBRWWDewzO2sRrhZhxmVaxdB8/aWA4=; b=qmyZA5O0WqoyAEk9WAE6X+PfrND0b4rYzgGGuqLgopB+I1jClk5dZSAZQaLPxAR0a8 uu5PMEYYT58/TqalP+prrgnxFe0nAxzLx1t91H2vNB2ifVCnwI02wMo621wCPSnHntTX dgM5fc5AItUeJBgtvDU8eb+han03I49zRunYIHogFPg5fZ5SIhd2/Fu+25A6gAuFMpVG Oqi694c6zjIQEMWALEVnFcN6SIvik7Vtk10o+JTr0i7ICGgxX9NRim2f9PufM1bOC9B7 kBPdOcTDmFsDghhVRELKoaAZtL/DrPD2YRSebm+bbxUm1+CQ+gbFiyW/ou+ooByU4Ako LcDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=zrvO2z9GjXuWPQBRWWDewzO2sRrhZhxmVaxdB8/aWA4=; b=yoCFb96s2fXfPlrpRruYFKLOhok6X2+RhRK6f2FLoNCHv75joJ9v1BP88hHES4jTdm DqWnvn+nl+tKUMb619htS4ZM5ROOcZ7iL65NCQaFWxM3DONtf3qFR5y0eocbyroR/TFa lPZL2k7RRClH0oSYa/ZcSqu4qNiSWawXMm0EXQImYtmhhRmMahCI/rn6DkfDfVRIzkf3 X6AgReJdg5vPnO1/XBsNNz/C3/4jxxBYDl0gxPb3wrrwFdoLezzHa4vf3bIJPkHLKnyt FksOC/VpGx9N9VlcQf2HcZ31Q/kwjGZX/iiJEE9YbpefSqjL8GKTU1WrJQ0QPYKcVAyo Oe9g== X-Gm-Message-State: AOAM530fKVX3+vDL12kYmci42Tifm75T0tC9ko2NeVysl+OQMr9yFC58 AD4ytx1JXMVOLaJ9vS2qh9HFr+B7iZ5RcQ== X-Google-Smtp-Source: ABdhPJz69UKbKLgtmZx/5AJo/AUoCUXLQoCU6BvQCE7LmcnkF3RX+Yf82YDfvL2h7TfzStcBebUpvg== X-Received: by 2002:a62:9215:0:b0:44c:4de1:f777 with SMTP id o21-20020a629215000000b0044c4de1f777mr5902113pfd.31.1633636500620; Thu, 07 Oct 2021 12:55:00 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 04/48] tcg/optimize: Change tcg_opt_gen_{mov, movi} interface Date: Thu, 7 Oct 2021 12:54:12 -0700 Message-Id: <20211007195456.1168070-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1633636981013100001 Content-Type: text/plain; charset="utf-8" Adjust the interface to take the OptContext parameter instead of TCGContext or both. Signed-off-by: Richard Henderson Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Luis Pires --- 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 Mon Feb 9 17:54:38 2026 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=1633637182; cv=none; d=zohomail.com; s=zohoarc; b=XVj5ZM8FXUCsr6koSEhKjbs5/9HgOfIAeRV8aaWjCB7Dxtpg13j20Qs4tFCdWYv1ARV4kHYISs3EYEpDaecU8cEA89khXgC5mxX5t8c6dNnwLTHgw4B9DXpUwDz/oOuAwgxXWpyRM8OzSCo1NNC5EdTlvKZWTdUvEbd8kzACXHc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633637182; h=Content-Transfer-Encoding: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=bZjsDV3+PdEwghAz4tiS3FK0KdMqPyfVHay2I29+vhA=; b=P1c+rrq739YlDGPFe+FIUwxjepEIXjrPbezMI3yo6sJpBSXGHQ+QsrN6CPe/MlWBPOK3Qh4d4InQjvnvYPVHGM4+KucYYVbcZFmBQza1viW9tW7XHsWmnS+o1HXxP8ZtbAXVAaQIOcd3mVxSclsgJ78VXb90fqhDXIVSpYCWNmw= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633637182598982.4920747587234; Thu, 7 Oct 2021 13:06:22 -0700 (PDT) Received: from localhost ([::1]:52504 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZen-0003dG-IA for importer@patchew.org; Thu, 07 Oct 2021 16:06:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59682) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZTt-0000Go-2V for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:06 -0400 Received: from mail-pg1-x52e.google.com ([2607:f8b0:4864:20::52e]:44826) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZTq-00074i-Qt for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:04 -0400 Received: by mail-pg1-x52e.google.com with SMTP id s11so808434pgr.11 for ; Thu, 07 Oct 2021 12:55:02 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.00 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=bZjsDV3+PdEwghAz4tiS3FK0KdMqPyfVHay2I29+vhA=; b=WosyALx1t6l24kQR8bqSt55BuKJ4ggw5DN4hagvynywe9hoiNt/+BO0dhfJq1FoLZ8 czMmwLjL60h3P0PXHPw3O0e6ss0CCqsEh84ivRp9LLeoco8WImH8GAlravsLT4oYCacp STnehKaOwDwizvCWvG2IMFn7xRVbqozbpnNN+a2Ka24MisK8CHhCC3IA4OPxTSCd+PyL Vi4czyMhG31Jy+KajygzC0jYBkzsuAJdx89Hx4jSEp5GJeGbJSID02i7Vt+qLV7fFz5I 4XAvMAZIjnzRKGhg7oFyTssEbwS+6Ux+wpcHgOTHMLHUHgL/JxHK8VMntENm82/cBivg m/dQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=bZjsDV3+PdEwghAz4tiS3FK0KdMqPyfVHay2I29+vhA=; b=Lz4Ir8I6SgX+iqW2O8wJgFB9cfzB61Drk+KxgDGlFc8YaigQ2fFaMn0lQ+2Z5ORppL GeFFGhMoKtV7E1KLVOtjx44imPBBtrsP73WGGuDIenmT3M4N2w7BlCQPLAvUxXFTzhCn /x5LJtlDtTJA6WLh3V05LLXgM8lE2gfAT/m1bICq4rWmfGQd1r/Z20LlTvNfbHeF2sst aEvf5IU2xJj5ttjJF/LGuYotW9z4bTbY5gbrPhrIFyz2QRxFPKOYEbjVo4v8dmAY/Bbp 8r/nbl66LEhKKjAEHzQG4P3l1ixCvk5Y8YmNpbMz/17Hxw/EfOJOiHFLo8dHkuyZ8XuZ IeKQ== X-Gm-Message-State: AOAM530/30kZ3/02QZ5Yjtq+isjVoezJ1qRxdlQdpE8scveEyajriihO E7u+E1WUA8lRJ/rMd0kCZ7/NSsTJx0AtQA== X-Google-Smtp-Source: ABdhPJyjDYQLzO6C4QA81MtTN4lJgFhsABC/LgDGog/cNkWv658zA/wAbWBV8Yg0Xy8yHfgMeEsk8w== X-Received: by 2002:a63:1d7:: with SMTP id 206mr1207286pgb.387.1633636501322; Thu, 07 Oct 2021 12:55:01 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 05/48] tcg/optimize: Move prev_mb into OptContext Date: Thu, 7 Oct 2021 12:54:13 -0700 Message-Id: <20211007195456.1168070-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633637183786100003 Content-Type: text/plain; charset="utf-8" This will expose the variable to subroutines that will be broken out of tcg_optimize. Signed-off-by: Richard Henderson Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Luis Pires --- 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 Mon Feb 9 17:54:38 2026 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=1633637026; cv=none; d=zohomail.com; s=zohoarc; b=d7qcsoVBrDLtS5T7Vguuc2bgLc+47wwq0X3iTM7g5wOghBq2ARSvawQq2cnn0JdlbRZsCJ745gX85n4fVJSwQPzz0sOSTOpM4dewX8dlTY4RqybLdSHOfsjrTA5Dir3UskWsdxD0XMpvb/grjvByyapKKjO4TiQKYIfUJuuQGPY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633637026; 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=sFg/bPoIgY9SnPKHZvYfCYYREfzlMzqsSqKnPi8OcM0=; b=GE8bkkXrF89bDJuHoh6kVzbCGao7oyTlY7dhLkCEulfOS/OdCVp1WVUZmNyDHSPk68/MtTZSetwFkXFhe0OTo4Loki0uDHB1nSYtzW0v/cRaq05RFRT1Nq/6VkIw8rk/x37ucUNJpEoGBCI1uW2v9rnikuQxSY5rR+0IKu2vcyg= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633637026678524.4581132646327; Thu, 7 Oct 2021 13:03:46 -0700 (PDT) Received: from localhost ([::1]:47116 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZcH-0008M9-Eb for importer@patchew.org; Thu, 07 Oct 2021 16:03:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59974) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZU8-0000NZ-H7 for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:23 -0400 Received: from mail-pf1-x42b.google.com ([2607:f8b0:4864:20::42b]:33331) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZTs-00074r-0Z for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:18 -0400 Received: by mail-pf1-x42b.google.com with SMTP id s16so6285513pfk.0 for ; Thu, 07 Oct 2021 12:55:02 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55: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=sFg/bPoIgY9SnPKHZvYfCYYREfzlMzqsSqKnPi8OcM0=; b=afAOQSCQZY62rvWYkJFSi/+nCPrRGfBgglAG1gr8mMBBuLOBoWnjKIrIdvNJZNnadW PMy9UJfJ6sx40lhQ25vnp04IqKVndgRVAcFztFo3zzTUUfDUOj/lloB5x6K5Wl6+VDEE ajuFc9H3RrKI7SoDwbRTQ82JEBQkWQBN60sv7g1/vMnXDqRCGQWnBshdv9CwiFYBOnST cCZGJQHYkqAPgrGoqLSS3xJsY3HR/AyvgYIQV3H0IhFMKEzxcIw5am+1vFio8dCfIvNX rfRjKUC1rkYxuBnTFI0TDZX4Zp2cQLNGFyrkL5sZdQUQSwKJzpx7EjXphRoiuCUVo5NA 6D+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=sFg/bPoIgY9SnPKHZvYfCYYREfzlMzqsSqKnPi8OcM0=; b=GlIqEumW2HOPA47C6FwW1RnU5bSJ/jOqIHUzqN3X3biMk/FdyCHxwtPFTipeIaFxxo +SmxVLBATWd4tV/bYxbtCPwSfDeNYJdJcZo5tYGnbbAjT6LdgARFoZTLXeBeOgUfV26f Tpy7k5UJSIedPEXQdURmokUikRKB0bKYHQHaGZRHhjwXNOx3i6v3841KuYaADCYC3qKZ +Fr6IIIgJUDoaFrWhtsUGGu36sVeSYLfY+9zNWpIYCi2XNpCFRp+a/x9c41Ew7g/Gmw/ skyADymS8GURJEwK/z0BkiQEdEKZtN2pfzMneLLl7xWxm7DJPLd7Hjt9ABpWehRgOSad YoSQ== X-Gm-Message-State: AOAM533XXdaA1tXXemGMOAHWGXJJXlh2nGBLs4A8hJB3W5io8vWH3Aid YB4tRzEqMEKA6hZFRPQBRsRxArQjf2hNFg== X-Google-Smtp-Source: ABdhPJyXRopDNwvdy9I86DnuZGGeD5htvybhyzhPk6y+U+BkW3vy2MJLJ67tdA6GwXZuvRR933E1Sw== X-Received: by 2002:aa7:8198:0:b0:44b:e191:7058 with SMTP id g24-20020aa78198000000b0044be1917058mr6012878pfi.39.1633636501995; Thu, 07 Oct 2021 12:55:01 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 06/48] tcg/optimize: Split out init_arguments Date: Thu, 7 Oct 2021 12:54:14 -0700 Message-Id: <20211007195456.1168070-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::42b; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42b.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, 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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633637028209100001 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: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Luis Pires --- 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 Mon Feb 9 17:54:38 2026 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=1633636974; cv=none; d=zohomail.com; s=zohoarc; b=ftfq3Amka4yW+8Fcl+oLzLEKISO8s7kbRl05EPBLQck6V5m178LhGHzANziAakKvrw+apIIO9S/ifumuu3NoMoRWPmEqSmzenxQPAEN1NQ/LSmqEqihumcn3LXpaF1Nnh6Y4LEXt5+WxihjgUEhav9xFiWROJNXeSxy3TnHxcw4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633636974; 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=9LSSL1fK8gHyFxNWGcE8fASpw4qPl5Wv54F/J5LK5dE=; b=OGT2tFpIdnDysD+YFlWdu9wpIqc49sR5GxzoCepfkrKkhzCGJMzf7uwIPU1xCUeLWLFDGGTyvwTj4DtVV07VhStjNIVdVYO8SwnToD5k211VtjAgdGw4SQwsSeJPj+yKfEBqnyAglFH5Wm7cgWY2cwZ3bWwoBleHo0mkVjOvs2Y= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633636974137264.5716199537218; Thu, 7 Oct 2021 13:02:54 -0700 (PDT) Received: from localhost ([::1]:43698 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZbQ-00065i-SL for importer@patchew.org; Thu, 07 Oct 2021 16:02:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59804) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZTy-0000K2-Oi for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:10 -0400 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]:46626) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZTt-00076f-Qv for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:10 -0400 Received: by mail-pj1-x1034.google.com with SMTP id pi19-20020a17090b1e5300b0019fdd3557d3so6005278pjb.5 for ; Thu, 07 Oct 2021 12:55:04 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55: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=9LSSL1fK8gHyFxNWGcE8fASpw4qPl5Wv54F/J5LK5dE=; b=QOc75qNtBrVszWqmTt0ZYx/Uqjq8YFoyDqtofbhjYsAftsJLidg+bYI2B/Vt7enmCv EmO9O91mpjoPE/P930Pv9bIAGCoTrLILij+ZCrC06aZAtu1JUpPXEFXGHk34TolOflzc NkhJPBzOzW/JgVR5mLr68KN9ZACyY05Mw+7jIu0kM49kHsKkReFbPA/Bkovqx2ELO/CM REQ5pMSNxhtOB4JEM4PV+aL7McR9nUNDv2WaLlvJXHmYTlq1Li7XsBqdVmEpwL2apGSG H3nzJoxak0L1UouFyi8TZS1j0wsArkzOi5JJZ3+cNNggfMMUS9UZ9you/yrexrki+rPz Ok4w== 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=9LSSL1fK8gHyFxNWGcE8fASpw4qPl5Wv54F/J5LK5dE=; b=KRpRWZmLKjF277XOir8Ms5cgQwxZmZIiMjpldbDRCvIOdU8HpRjDWXnsmSnZ010P3l 62imE/0yx0bGobIDoftPogWwyV+ScdVnb6XdjtBdsJZyIYgIpWHlcwqr8N7zJ6WQiEYw iVnso3leaFm5QhrFg5AYoUmoAoMBsoFtJ0S+vFlXrffP9tvTNGJvhw2B+jB/mQOh3MYV hGrDYqMeEwAI1lqE0mBHpdDon5CTpdOtSzvcDav3qGDeqJEOzA1a7HAJsaSYYM/Vxeii 7vdmtzp8LECJwCEJ0NvqOOS6DUAdDZ4XI2zmZGcas0L/pCfaieUE1pmJ/DW7l1zm5XDo D8Pg== X-Gm-Message-State: AOAM531/WDgGQ/LxgbJYt3Qs2dySCApdRg0Vdpe5UvVe3s4JF9fen4xa BgH9zre626HNU+f/BNSVGpWtXN9QOTafGQ== X-Google-Smtp-Source: ABdhPJwO4iYHJNxKDip+2Odxztbyr/pOKzq8MrOxjQwHhXQrkqSH6JY25jAiFmwVMxlRe/Qmz9449g== X-Received: by 2002:a17:902:bb01:b0:13e:a6e6:9a53 with SMTP id im1-20020a170902bb0100b0013ea6e69a53mr5556553plb.4.1633636502803; Thu, 07 Oct 2021 12:55:02 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 07/48] tcg/optimize: Split out copy_propagate Date: Thu, 7 Oct 2021 12:54:15 -0700 Message-Id: <20211007195456.1168070-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::1034; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1034.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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633636976352100001 Continue splitting tcg_optimize. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Luis Pires --- 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 Mon Feb 9 17:54:38 2026 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=1633637365; cv=none; d=zohomail.com; s=zohoarc; b=LRZKipM2Faljr3fknS7kvT/nn4SMVJcEhnzQh68O5sZeRWSPGyIJpMVoDvkEkgaatXH5Fy+eaxbFRyjKVltXZjTqOqrr+VMV+qokJII74ZAIEMJiprFHTeumOWnaK9Plu853jgh/CtNFh7fFQ0/fJUZXSAiHF0DJf2YJjUzwxyM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633637365; h=Content-Transfer-Encoding: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=/vbKJTGG/osCQnHCopwdaDi44nUoZOlB0Lh8d456MxE=; b=MO/Ek2A39BsLTeJr9MI3GRDu57ied35fFGSwK4Mmayr1VFvBthYFh6WEsap0hd8exYYdxDlxRZI/YDBSsn/O7d7ywkgjq91hsGCnBCwnP4DlHK6PHkORyu9dsMbIv+7rhbFcsh0EvWpqd+NLvaKind5FHff2q02a+Vdqx96KA3I= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633637365937867.776342065245; Thu, 7 Oct 2021 13:09:25 -0700 (PDT) Received: from localhost ([::1]:60846 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZhk-0000sH-Ub for importer@patchew.org; Thu, 07 Oct 2021 16:09:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59722) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZTv-0000HM-Ez for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:08 -0400 Received: from mail-pg1-x52e.google.com ([2607:f8b0:4864:20::52e]:34650) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZTs-00076s-V9 for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:07 -0400 Received: by mail-pg1-x52e.google.com with SMTP id 133so842755pgb.1 for ; Thu, 07 Oct 2021 12:55:04 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.03 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=/vbKJTGG/osCQnHCopwdaDi44nUoZOlB0Lh8d456MxE=; b=Nn1aeNWEnBDVFCwL9AjEh6P7uZBIhgVjZ8COfn0356ocFooRzXjslN2vSijm4Ey8Vr sqkrWjgc98mk1vQWLb42NNBBvf1s7AihrFa1EBx/S+j7UIpfjgv4wr8uIvrD0wajTd9q cc2Oph6YdxCWxqUI2MzktrmMFq4O154qwRJyjojD8bdmW+E2O7rUCoamkUzWVYsjgLtd NdDO5b3rbVP2pFCz+RysHSrLOs36/aEhpTljbKTS/10ahURM973Ycg4O+US204dFsmY2 lwY2/AzEvB/W+o2R3xNUBaLe4gCM9iCMJ39eo0tja5m3+vgrFZB81eIexLaa/6DOKg6i MVtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=/vbKJTGG/osCQnHCopwdaDi44nUoZOlB0Lh8d456MxE=; b=w1MmguEtWRGFVnLQyQN8YARoPmBdDfsiAOidAkxwAxhiRwWaj6r1KGWXeQ1W6brVto nLVMOVNgY+F9S/8xapTAEjvLmna2kIMjBOqQq40a88lRIVNaue9qzUDxkmdi/P8cjpDB kHvCMpsWguA/+QIBrQafW6Lgm3d+gd1PCgDYk98RS0MWKh6Ro0xB8T1ylTx53DggSUeS /WJ4iIkTstgCfXp7eEMVtDs0Na05sg8hSwwf6DoqBNkBVBNXrHVKAxxmrt6HWbAQaWST wtF3ywBqNqjsX1CGH82r7qwyqN9vhSO8Lz4KwStJPjhadg+uB0E1gGqkqm9TbbQRNSSG 1wng== X-Gm-Message-State: AOAM531HDGZ/boum7E1FGB75EpgtT5haEZ7Gnd5bNV+ksMLOQt1fJPzw YYTTqFIBdg7g4rmoJzNfHULeqW4rrKN3uw== X-Google-Smtp-Source: ABdhPJy1tykAFk2gjolVALfyfbEeND/L0oIS2TN3VJjj57s73/VU9LSodJ+9xkdKiqKg/A7Lk6aoJw== X-Received: by 2002:a05:6a00:14c2:b0:44c:d483:4df3 with SMTP id w2-20020a056a0014c200b0044cd4834df3mr1147028pfu.52.1633636503597; Thu, 07 Oct 2021 12:55:03 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 08/48] tcg/optimize: Split out fold_call Date: Thu, 7 Oct 2021 12:54:16 -0700 Message-Id: <20211007195456.1168070-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633637366692100001 Content-Type: text/plain; charset="utf-8" Calls are special in that they have a variable number of arguments, and need to be able to clobber globals. Signed-off-by: Richard Henderson Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Luis Pires --- 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 Mon Feb 9 17:54:38 2026 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=1633637573; cv=none; d=zohomail.com; s=zohoarc; b=Jrip4CHFoNBVTbJBPcFY2gHN5TdRbDUsQFiHBNpvRia8IoO5xCCY828Sno9hhOb5/OHr1pJe4vy/3Y0tCIdbeHguvUgSCD1iHygtRFVfmyDOpS0sBzCBNCeRfaIDsIa+TEQKbI0bd6ZthdWLclnPJvmsK2FQfQGJSmU67rhpKtM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633637573; h=Content-Transfer-Encoding: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=Kpelzxu+pseKSsdrmRZaJYnoThPJcyWO4xuGF5g68K0=; b=Qd+ZZqluaueLHpJRWKXxNrsI171mg2xUSKRD7nqInt6rm6QDDYlQHeySILZ9n0ReJiimYd4Q/7s+L2KdvYg9k0rWJ8Y4CAofd68YKZIJND75WivBffk5r3KS9T4HaoAkm33iiSMqiIGHfLpavcWUoqJbagp/CLki7iVzCcvwV58= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633637573009707.1693446143789; Thu, 7 Oct 2021 13:12:53 -0700 (PDT) Received: from localhost ([::1]:40982 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZl5-0006qR-SX for importer@patchew.org; Thu, 07 Oct 2021 16:12:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59766) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZTw-0000Hz-RP for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:08 -0400 Received: from mail-pj1-x102f.google.com ([2607:f8b0:4864:20::102f]:43634) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZTt-00077C-Ul for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:08 -0400 Received: by mail-pj1-x102f.google.com with SMTP id k23-20020a17090a591700b001976d2db364so6026547pji.2 for ; Thu, 07 Oct 2021 12:55:05 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.03 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=Kpelzxu+pseKSsdrmRZaJYnoThPJcyWO4xuGF5g68K0=; b=VfgDHYZWkRHvAfWnYxZI4HZ2/PrqfJv2RhsOkQyTT7hOX00ee+AHMX9cYQwVdcFV4S CAW8C4NRVlbqchJcGpdJRQkJPk/NwQzDiQ04wEKjSUtfAbXqKN8v3q6p9wf8sh57yW9x HKuhEVzoBCcqQhWZzImBp71VG+Q1Cqo9mIqjodrRJYg+z2S/2vuvrAuunZV74VT/okc3 HemcDEgFntBaGmabUsY0YGHxtELGZwDeIr/ezWkImyNdYRcxjitdItRcvYZVqYoOipwu P86rcB8wZTxuf2iHkycsSgVCeTehkj5cD3Z2APTxcHVFgda7PE+0flr9tOVhJvFHCgIV 9A+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Kpelzxu+pseKSsdrmRZaJYnoThPJcyWO4xuGF5g68K0=; b=57D2Q+Ptd6Kjj4sb6JcvfsVSKuGvBBSXZiLqEeNfdMidZp+GQ2rs5BZNZjoP99x/4a xxuhr1vzgVoHWNNwdJcz8pO9BFzprkeL+sY5kdHT8v/IQsaOo3R1P/7q4U5JnzeJiR0I GGj5kqeLyOtC6H+FXWUOrNtO60Lf7gZGcECEBmx9UzwahePRi8Ld1Y/CuV6AhyZgGfwu 1a0PIjxrFyezqWSON7NX+m2LbAlgu7jX8PfKy0GN2T+6omEBV+hX+g2C0fv9C+99T8gW VZ4dmCcWjMgm7EdGKNCVcpfDMfYQZWj1mJLQAn1DAkQoMcOjpGSP+6Spc75vhzC8ZTWz CQxg== X-Gm-Message-State: AOAM530YAgsk9Ti7eU26LX3VNma5aIb+rVnP365WGneldzhGqrG8ebcd i4gT/gihFE9eWZ5l0+GpydiuZcMrU0hB9w== X-Google-Smtp-Source: ABdhPJxuCo3/NO9SrtOQTs+3JG1iGIH5sM/Ce881XyEL7eREq23vUi1vWiGOuCuNFgmqcpGV8Zb3GQ== X-Received: by 2002:a17:90a:9f95:: with SMTP id o21mr6857439pjp.21.1633636504502; Thu, 07 Oct 2021 12:55:04 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 09/48] tcg/optimize: Drop nb_oargs, nb_iargs locals Date: Thu, 7 Oct 2021 12:54:17 -0700 Message-Id: <20211007195456.1168070-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633637573798100003 Content-Type: text/plain; charset="utf-8" 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. Signed-off-by: Richard Henderson Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Luis Pires --- 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 Mon Feb 9 17:54:38 2026 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=1633636790; cv=none; d=zohomail.com; s=zohoarc; b=aBdzL2JNfnDAOlxObbF5BvbnNe/9LiBAMODHAPMQxXSRFO16o6/ckwE8ItlxX7r9VGkCGExpfE6f9ocyHAYvAj/Kr4eoSupBEgGGADk9HUGSBzsVaktXoZt40uCn3t2uFCWTDmhGW2i6MxrDt+OPEXNsYX5sBRBBKSVt63sQvls= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633636790; h=Content-Transfer-Encoding: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=lhaJ8Fv2bf/jhlOxVpEn6P3GPHotD+LGcFmEtqjf1js=; b=FtnCLphc37M+NHDti+K0xcJUzMDiDFQzYovUv6NoTge6jN05sW+Hcyd9CI+UrzDd2+ocKmVyqQCJECoeeeqd340PB033Ch80G6KkeT4yjZCkMD6qjuw+gnovBvoX/rrORwqou49bhnfm4Yu6DvZVXw16UzXxUHdQMvEAicMfy/0= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633636790625573.817782490161; Thu, 7 Oct 2021 12:59:50 -0700 (PDT) Received: from localhost ([::1]:35354 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZYT-0000Sx-JY for importer@patchew.org; Thu, 07 Oct 2021 15:59:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59770) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZTx-0000J4-8A for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:09 -0400 Received: from mail-pg1-x52b.google.com ([2607:f8b0:4864:20::52b]:42912) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZTu-000784-Qu for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:08 -0400 Received: by mail-pg1-x52b.google.com with SMTP id 66so814702pgc.9 for ; Thu, 07 Oct 2021 12:55:06 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.04 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=lhaJ8Fv2bf/jhlOxVpEn6P3GPHotD+LGcFmEtqjf1js=; b=w65qoLth6fBY1aGpEEpOwou4gZna3eZnxyXSfDvVF77aNsF03G5uMGokL9znVzoqpU 636Z9bUDb4DC3vczyIseWTwGkTEMLNbJfHKdurxY/uGt6FdcO1W21BMPiaocVwQseQf9 9WO9Ye0DTJSW1BmMlW9TpXP90jdC+VX/lQQBGlQiwWZPhGukD6rwBIwuophxHInBqRmQ JwKj4mWe8+NWETfMeXv+IdnQObBVlBqItopfMW5++MN2wzW189vapZqf9aDLgynaDctD MQXsG/MNEf0vrO/s38iQURCkcHM8K6TsFP/u8q+18eWSqcjIV0GjCQd1CAixpcfZ3O19 yU2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=lhaJ8Fv2bf/jhlOxVpEn6P3GPHotD+LGcFmEtqjf1js=; b=XB+Ka7kXa0/9gOsShDx9sKaTX1EV26wyuGkJvBcAitQKr0njMqT4WkJLeZ4IGJF5BZ O0jZRQqW/67/BTgaBzqW7uaYGEXeJYeD+GkIWoUp8bi4v1GXLObaaPwhUxZY4zsVSmWd whUJmBgQSWZ58PtnuPMRKRXkLF+WVJApqIDL7uyfD90fVkQTtzT61iX6CPXSmONGuPCA j30YmkL0mAQpXu0GD2ww8jnw2DjXho8Nrx1i18n41s0PmUGvu+5hKQer/5cZMYp5is5z Ntj03keqMrMFvXd/FF6zNmLTutyeL4DD7WjqpMLyp8Q4wZ2Ge0hGc3Me5fhoCQb+1Gtr D/Rw== X-Gm-Message-State: AOAM5308jjH4Cx4nJbCXKbZrDLC99o/ibPAOYn4JeHd7vBAqXFzOaVp/ pkLS46AOjq2mmRIJNfvE9+IveSgHy+mwCQ== X-Google-Smtp-Source: ABdhPJyLxunyxc+BSSGzVQ66OeCm9w96DBCNiNFvCeuwioJDwslocL4k9i7FPqhcwSevJzb7OBJ6bg== X-Received: by 2002:a05:6a00:1ac6:b0:44c:9e9:9e98 with SMTP id f6-20020a056a001ac600b0044c09e99e98mr6314079pfv.69.1633636505431; Thu, 07 Oct 2021 12:55:05 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 10/48] tcg/optimize: Change fail return for do_constant_folding_cond* Date: Thu, 7 Oct 2021 12:54:18 -0700 Message-Id: <20211007195456.1168070-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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: -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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633636792752100001 Content-Type: text/plain; charset="utf-8" Return -1 instead of 2 for failure. This us to use comparisons against 0 for all cases. Signed-off-by: Richard Henderson Reviewed-by: Luis Pires --- 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 Mon Feb 9 17:54:38 2026 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: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633637786148575.7268755045218; Thu, 7 Oct 2021 13:16:26 -0700 (PDT) Received: from localhost ([::1]:49172 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZoW-00045h-S2 for importer@patchew.org; Thu, 07 Oct 2021 16:16:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59808) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZTy-0000KG-W1 for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:11 -0400 Received: from mail-pg1-x530.google.com ([2607:f8b0:4864:20::530]:37841) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZTw-000797-Gl for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:10 -0400 Received: by mail-pg1-x530.google.com with SMTP id r201so831385pgr.4 for ; Thu, 07 Oct 2021 12:55:06 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55: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=PXYs6BKQGgxD10RSzQzzU46QA/mx5PLipRBQg658RPE=; b=XuNmhyE6Pj2yM5/L3p4Ww1qNU6/Zk/dZnbyNfU/AjA9r/jLAEfq6YZExIq0mOhvsMV mqH4TKwEGPNp+BpWLFd3t7cWhQdS7wF9vQMMERJ3b6RUPEqJKZ1veMbzUJEP0n0Ds/Qe KRaQSdNSz6Uy78ckfF1QrGAUbqJLtFFsmtpO92BgYAE6vrgFHDOcCEb38xfLLWF1yzjy nW4bUOBDfrsTRi0nsWaREjLc/2ch3yphsnDhD5YJVAqZ6iZ6KfFV3+ffbUVangW4ECmi lj4JpgHXBDbnm6WHqycGL2jQh7X8BG2GGLGqwBLjguuMMsWIT4YgWurLlGLJLdmT26uq qE2w== 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=PXYs6BKQGgxD10RSzQzzU46QA/mx5PLipRBQg658RPE=; b=VyxWYAcdjZvnO9uKPe1AIhVLz5C+OI9eaCkf+81Z75CmsmvknvpluzdhjjakCoPiq8 LdEVt4gWzFnUsN5seU7C34axcPOPpMaF3OR6n24HdGXAwsMiUjOJQY9GNa/Kz16AF5x0 6pHUypWuogiKYZxPJ2iA8BNQR8M2GJAFXqkxDDi/0lgDWrP/QIXZ0JfySGSPZa9V9Bah THgHd2LELA1fj37D7+2seYkRp8Vphk3o85pCkoGrE1YjkDTQnIv2/i/097rQaQ8N8J0o jqfs2A291p2WenR+IRsUyqc4JOZ4llZOGVg12Uz6Slm2pVGH7M4hJxshzWG1HEgLRbBj JKQg== X-Gm-Message-State: AOAM5318YpzWGCVuFOg6y4pD6fGvR1H+CHpZ/84gEfmbHExr7V1+fCkM 9+Lt/zNaYXD6ajzRTkZLXYJJOPh2FmWquw== X-Google-Smtp-Source: ABdhPJyDr64E8x50bR5appEUpRd/9BV0se8TclbMO3w6KFsmDqvz3Ys4ZOWl8J5NkGWG93GZgSEYHg== X-Received: by 2002:a63:7504:: with SMTP id q4mr1217918pgc.103.1633636505996; Thu, 07 Oct 2021 12:55:05 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 11/48] tcg/optimize: Return true from tcg_opt_gen_{mov, movi} Date: Thu, 7 Oct 2021 12:54:19 -0700 Message-Id: <20211007195456.1168070-12-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1633637787172100001 This will allow callers to tail call to these functions and return true indicating processing complete. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson Reviewed-by: Luis Pires --- 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 Mon Feb 9 17:54:38 2026 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=1633638314; cv=none; d=zohomail.com; s=zohoarc; b=b0JDD3cYFGvSFpx9cEstLFVR4yK++fbpAK6EIfASOrz/DlI2xF8SCzOpISa9sm5VyrXmwx/lrmDb37UayF3Pb/4jI+mLfRz4fx+fnRtjE/YxfrUeIZMkU8lOI0tQ5IERbH/fM+etS7WVUSOhtStJEceiJ1NX60IGfiv+DwM5snk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633638314; h=Content-Transfer-Encoding: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=EkJH7YP2c0ZzPN845v369IjZ6rqU1eCv28JZAOL39rA=; b=hz3Zx6ChLPA5wfQdfb4NtgpfJhI4iB6cpzvK+yTsGwCsGM43qhiqnykqov9mneuhtN05UFEmsXJkLibR3FJJCn6/LK4Gc6zAXDpMV5nDsB1ENGwCywrWp6hBwlE+CwXfhyQOkPsm9UTDS6ikpbIwnGEojFPss9OUauuTc3EwpGg= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 163363831420358.578681045055646; Thu, 7 Oct 2021 13:25:14 -0700 (PDT) Received: from localhost ([::1]:45466 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZx3-0003e1-87 for importer@patchew.org; Thu, 07 Oct 2021 16:25:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60068) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZUC-0000Ok-QD for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:29 -0400 Received: from mail-pf1-x42a.google.com ([2607:f8b0:4864:20::42a]:38867) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZTw-00079p-IX for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:24 -0400 Received: by mail-pf1-x42a.google.com with SMTP id k26so6243625pfi.5 for ; Thu, 07 Oct 2021 12:55:07 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.06 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=EkJH7YP2c0ZzPN845v369IjZ6rqU1eCv28JZAOL39rA=; b=HsM6AnwbSkFbPwvny0N0aj31CPdH27C93pOdROD/hcuiL/QxkwWJIpoN72dU3MVzph +FvQmU4Rj1/CPcYzRehUo0H9W9xZz9ljoqb37cT4fBNDt8/hfS/KwqKw9dGeoYxGahT9 pNLLdr51aOwbO0Ncc/hiVlqab/k8tB/0nRgUX8cn6DpcWemXQw8szlksn5XGk+RbokkQ DNzRc4OvVsPZm7jyf5LwgL4NZ13uZcQl8flIJ3YwLwM0kJu266KF2P4UJf0h7WNtm88y jSVmO6MOBCZ1nZPYHvho/AsQBDQLNRs6PeMEp7QySuoXDoBDQxTI7SFMxCFL2hgXwMu5 MFGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=EkJH7YP2c0ZzPN845v369IjZ6rqU1eCv28JZAOL39rA=; b=tWrDkvZ+t4k0OnDvxllh9m/Mbr8nW4XiN1Ed/eM+SELZGdQsTpchL4yEV9RHTdtVtL ynkPTnp7KJ9F9zkgVuKgi+HIQRSEP8NqxwnzYZDPlMPJeuNESrdlMsudn2TR7tAdkMOR PCYKvQXZSyhSxjnvow1zJKoH3QPylfyohfZri6h2EqTNdal+9BaeAFzeg5oRNOwDVVLW 8nczdz9MMax4noGhNXpxFe0P5XgbOTvPdiqq2RoPKJwLuiQm8+fJqdXn8woQcytQb82E P9Ih0zkCXs9G2EqW/OHfZTqYSHnbeLRwqfh5Fc6IA9iVbpJHuYJtb2RFGbsBAwDTmWok wgvA== X-Gm-Message-State: AOAM530FyFf3bbV89WWxVgG4emvLiikyKhMcBHKPqMUeCzantK84DEvr fBLpCw3+b3VrJIDbn1lWzNEuTFoRDn7TNA== X-Google-Smtp-Source: ABdhPJz4spT4vKmaXSBfyMT1LxaefLyogUMhrn3oPKyFHq4knhdfmvQSNQnTaDUSv8ZeX0Dr6jzf3g== X-Received: by 2002:aa7:9816:0:b0:447:bdf9:eac2 with SMTP id e22-20020aa79816000000b00447bdf9eac2mr6070485pfl.31.1633636506790; Thu, 07 Oct 2021 12:55:06 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 12/48] tcg/optimize: Split out finish_folding Date: Thu, 7 Oct 2021 12:54:20 -0700 Message-Id: <20211007195456.1168070-13-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::42a; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42a.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, 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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633638315416100001 Content-Type: text/plain; charset="utf-8" Copy z_mask into OptContext, for writeback to the first output within the new function. Signed-off-by: Richard Henderson Reviewed-by: Luis Pires --- 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 Mon Feb 9 17:54:38 2026 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=1633637181; cv=none; d=zohomail.com; s=zohoarc; b=IB43BGpIEnOHrhiht/iU9fOKogNQ6dI2N2IJG9YO2oK95rRwg6Q4AY74/8QoOehoMS5Cj8toksquQuGImx4ogUcz/hmh5ahKrfYt+nfVIQXdzclirG5AikDm0wRCpv6BsJE8+S49i+x4EOvk0N+kvuKuNmteYbWFgxPNVM9e9Tc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633637181; 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=AyLUBtxbPeKzXjyQ5K6kYUzoBjWab2ZZtvxniXAJP+o=; b=cIdyM0rmwGygA2jf1WNO3CBhBNW3aFrih4tt9FSFXpHUkl83fU0bmc9wY6xesygW0NAUv4YS3KCmVwrEWVcSd7yvV1/0CFn/fOtS3Brxb4X2pl5eZ3sPVy+HdqyaJJAmkKaLAYp9FLlXzt+scofGYh6cdOw/p4S7jcArRi6GgxQ= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633637181060573.8497233422243; Thu, 7 Oct 2021 13:06:21 -0700 (PDT) Received: from localhost ([::1]:52326 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZel-0003W2-PP for importer@patchew.org; Thu, 07 Oct 2021 16:06:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59836) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZU0-0000L7-6D for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:14 -0400 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]:46618) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZTw-00079x-Nl for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:11 -0400 Received: by mail-pj1-x102b.google.com with SMTP id pi19-20020a17090b1e5300b0019fdd3557d3so6005391pjb.5 for ; Thu, 07 Oct 2021 12:55:08 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55: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=AyLUBtxbPeKzXjyQ5K6kYUzoBjWab2ZZtvxniXAJP+o=; b=H7rzkVZMdPY79Ed/05P3XpcxM+B1k5dWjCIF0TjFPjouxG+wuzUZACkp+0D6HAnYEd gVx6eddP9nNHCj/xeT5XBITqULO5iOYG83NDXQxZy19fxPlYlRDRqP9qIGtWG0sua7AS 3DSKG1TIQz/v7jMHnNELa+fMLImOReCBBOYzbhkn77GluTSNHxaXRlpwT1NpCQv1U126 X/5Q5e1XiNXnmVxqo2EeS075TiE243se0fwdU8A/xUsYzH7abv1f03jR2ZiQ1a0RDPh8 gMuQ/vy2X3xhSBhPUbj0BgpG1LoX689wSRdFbhgZN1lEpL6iomK0O437IigLJQeAk6bb aMbw== 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=AyLUBtxbPeKzXjyQ5K6kYUzoBjWab2ZZtvxniXAJP+o=; b=2SpxWaWBp9WrnH2sw57j57GtlNp2pW6E3qwaccj4lQYnuxKdVR2/egPoVhlllYOW0O DyU/6dbrueYTlJ8L/iP4+MnbGKGQJq4sSx1pZVb+iIhqq3beGav7Nnar/Ri7qW6JdAcu 3jyy0dW/3qK5dE8SHMjYq83bgV6wxY7rUAuN4qoUGbhtK9qgxxucfxMuc2f4uEi1empc K0I0kzeJ351qtzqah32s3QMizVsSb2UgzQP6OBewSGpvyzvTpWGjQu6s8LAHIEBi8oNT zkJ+bEkihCbwn0WHDJPYvQp8yRDCvOGy5klQMnJoc01yv6nDiv8U0+knzQhBJzCuXNCF RQEQ== X-Gm-Message-State: AOAM533wC9/XHanbgcPa/uvQKuU/zEi7ni36i84aHoJDiG6kh4tHwFfc gUnsBPEBr7dLrjab/RAYs7/V+N0fpwnIfQ== X-Google-Smtp-Source: ABdhPJwpyYUrsZjTcrK4pULbqfwSGvblPNKx4x5x+n43hiZ0MvELyuNGWKB+JRYpzNPEbEyVcIDjgA== X-Received: by 2002:a17:90a:a60e:: with SMTP id c14mr7714016pjq.70.1633636507407; Thu, 07 Oct 2021 12:55:07 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 13/48] tcg/optimize: Use a boolean to avoid a mass of continues Date: Thu, 7 Oct 2021 12:54:21 -0700 Message-Id: <20211007195456.1168070-14-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633637181963100001 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson Reviewed-by: Luis Pires --- 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 Mon Feb 9 17:54:38 2026 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=1633636637; cv=none; d=zohomail.com; s=zohoarc; b=jIdlNMhk8FX7yP8LSI8+zD9Qe+5avAp7M4eOCMUvu3BPqUwnVaaVEF9zSl0NKDPkhPDTSLysIeZ2AT6Tr7nlVEGgIOU0psZ/sKKN83mH+Hiwksk9HlkTzXtr13U23eJu9PEtzIZn6TQ9q3QBQ5aEQPwIb2mtMwRwqyNJju+c918= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633636637; h=Content-Transfer-Encoding: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=ivbtox5EsaYRIQBScoD/oS8vfaIIGA8BHzU4lzD24ws=; b=EtJPbR4Q91hQ2sbabU145R29vlCnGfBBI5vzScHaDFKFRa9qrF2sfoDXTnaE3KmOBTcUiEOfll/Yh1AV2KTcoBl809Ae1dfWa+gPP6nOZM87j8YlY38dr8HP/JThSTZujkCaCH44sNigLsirFnZ+2grcezL6WJNmS/fIvGT4trE= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 163363663710954.98933953545543; Thu, 7 Oct 2021 12:57:17 -0700 (PDT) Received: from localhost ([::1]:55038 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZVz-0003F1-RV for importer@patchew.org; Thu, 07 Oct 2021 15:57:15 -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 ) id 1mYZU1-0000LA-JT for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:14 -0400 Received: from mail-pg1-x530.google.com ([2607:f8b0:4864:20::530]:35803) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZTy-0007AI-Cr for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:13 -0400 Received: by mail-pg1-x530.google.com with SMTP id e7so840778pgk.2 for ; Thu, 07 Oct 2021 12:55:09 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.07 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=ivbtox5EsaYRIQBScoD/oS8vfaIIGA8BHzU4lzD24ws=; b=UKLkGtour8uZurYiOGrVHa4n2KL1QSqHxGLk6Yntr10Fain1AFNp88dZ+xGHPpuOZo cb2+WXHCGjTFGotDXAzFOo+BY9zMRmu83n9/fURO1qsdDaP7FKTPbtoJ2ilJi5s7y0a0 cRIMLOqGP2x4SYdDJYjB9Ns/BrCZYQNGtKuo5xaPJOCeQIHKR97sRWHGvavV8KDj27r2 2ePacKHftDSJ5dAXbsFs6TzN688LZFUJbnz+liRe3mEt0gUNJdzemtqLtXSdLWC4Bs+4 tcS3hyxL1mKpWFdajLEdSZfTGWS7lPw3CIDD2oNnB3AvIk5PXtttOchNLDfJKujxm683 m11A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ivbtox5EsaYRIQBScoD/oS8vfaIIGA8BHzU4lzD24ws=; b=YJqCoFnXWfCjL3Z29Fkvkp77U93Bb3PFf09nPrNvjFIDEDDkLqnJ/yGin1+8uoVOsG 3VmPqfmWS8Je9e5He1ODlF5AXAcR1KvzJGbBvg3yLtKcJ0A7nngTP4cHWCGXS3G2eZER WHoT6MCXMAd3sQxz/6V9snWN53MSEDQLqfFkrKpjoQdSHP1pwRbc8gkd4sxzCdayjALA kBCJYlTjm9XvPxVsCptmNvxrSwBxeBuzIiAqJaXXkGejM4iOneHAhjpehWgE3HumdSOi ZtrEoH5ne1xqQLXos/F6nPchyqOlNoNPBIAKz2iA/oXVyV2cKbKucEfshvUS6G5+cdDF CYag== X-Gm-Message-State: AOAM53323hiWm0K3J3nWmIBGWMqvjs6w2B1xoX0jv2RgjF0iv3so9xto mMA2bOoXxyD9wx8lX0j5zyPWkp4gQUw72g== X-Google-Smtp-Source: ABdhPJz3fqPG+ZtaMiqdBnLef2wLgd49mZ2DxSwVBaOnhKZFlY8nNWIGNSjprQAFGJ/8hi6YfaE1FA== X-Received: by 2002:a63:dc03:: with SMTP id s3mr1248058pgg.88.1633636508120; Thu, 07 Oct 2021 12:55:08 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 14/48] tcg/optimize: Split out fold_mb, fold_qemu_{ld,st} Date: Thu, 7 Oct 2021 12:54:22 -0700 Message-Id: <20211007195456.1168070-15-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633636639165100001 Content-Type: text/plain; charset="utf-8" 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. Signed-off-by: Richard Henderson Reviewed-by: Luis Pires --- 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 Mon Feb 9 17:54:38 2026 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=1633637989; cv=none; d=zohomail.com; s=zohoarc; b=AVcTL/ZRkNdLWUHSymC5Lz27Ofli5qqcDj4MPC6cyrX/E9GNc+4MKjGTG3BlYLXVd10s9pmoFw+GYbcj/JbgGhFThhOET38yXozyuxGMv+M+lFsbcQEx7VUk24mb6rBoehjekWVa3kU+YlymlRpZJU1sL6vKlWZXis2oFwf+DDA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633637989; h=Content-Transfer-Encoding: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=j8qKw+huWrMPH2N6V+66PQcxQU5GU5OWfKmT2kIY3Ac=; b=bVPWMLunHKRe8ly0utPggLfIKdZRhsUNrOa+t//AJ5In66423S+1nuERusg8YqO3B7Min00TROWoAZZzeOD+hqxvCPHMSE0XbOwWvuP6hnIwajdM+r+MTEs0Bq9Jmgk1+BKg3ZdfJbnXynxaOncqT6PZ6zuawyh5XxRjWsUabYs= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633637989138777.461635221607; Thu, 7 Oct 2021 13:19:49 -0700 (PDT) Received: from localhost ([::1]:57670 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZrn-0001NU-WD for importer@patchew.org; Thu, 07 Oct 2021 16:19:48 -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 ) id 1mYZU2-0000Lm-D1 for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:14 -0400 Received: from mail-pl1-x636.google.com ([2607:f8b0:4864:20::636]:46658) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZTy-0007BX-D6 for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:13 -0400 Received: by mail-pl1-x636.google.com with SMTP id w11so4578397plz.13 for ; Thu, 07 Oct 2021 12:55:09 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.08 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=j8qKw+huWrMPH2N6V+66PQcxQU5GU5OWfKmT2kIY3Ac=; b=fb91xAmcnrKLy0RI8avMGFZDhjQ0H7AJUuJCH7b/cEqroP7WFn7i3FD0TNRqFUJ00l ss0vUo3mKDPl4F3OTnmsyL56hoid1o+opTqdXrR8t5dPGZTXmW2haJaVmht3KyM2wnKV iotBLuJCXERGq+eD7gnDCibTIXmo0Xa/TEE1tuSSNa+LaPhCN2hhmsNkQSHB8h7qyOqV /ri7bMoEz0Dp+vfHpQERtcU+SANSsxY7+7CYWiV/MniK8WsYkKQOdNVg7crVUyTx1KyP 7eAoxggL1Kzn9AmXWvAtGLbI8RpaH/oFNztzRQjICEzJ2uQ+puGkUD8rtE3qw3D4RHJy Cufw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=j8qKw+huWrMPH2N6V+66PQcxQU5GU5OWfKmT2kIY3Ac=; b=24cLefb5ORhTNMn7ybpznmJDeFsL9oRm1gX7UhMTMxQ6ZOBNMtZl0YE5crqVACdbpc QsOiFfHBPJMg23lPW6CZXy9w6EgcwzrLcXd63d15+M1ZV4MUTL/URC5fmpqRf/R+rDv6 yu9DtUjmz3pZB0uYVePmr79Q+m4Xnf5PZTnYPhRH4ftyuRD5lWIZoX/lL+UJEAOHRs5N E6rf5znUqtZYw7a2jA4R/zXteFpuMeCk5IxAemtxRHKVbJR8LmVc/eJFqwBWGFVDhhiR AaHneEsLDOETWe5Z25VkiA0fXUxfm+bibg8EPQcKfuYnWR6G50wstBDl+icHTfjkkRb3 /E4g== X-Gm-Message-State: AOAM530VqKoCB4uHVVXM5JNXq2D57rejRGF5g5AlRxhCCYm1NnxfhqBu 68nTl5+PDuBxRE1m8CPKLdhN43S4uUal3Q== X-Google-Smtp-Source: ABdhPJzATODtAQApHEv1+8ZEN7xM1SHdWHC9i9G0cCpHvSHdSl0Le7grVjkkpdE5taSRA+h6c295BA== X-Received: by 2002:a17:90b:490a:: with SMTP id kr10mr6981261pjb.192.1633636508852; Thu, 07 Oct 2021 12:55:08 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 15/48] tcg/optimize: Split out fold_const{1,2} Date: Thu, 7 Oct 2021 12:54:23 -0700 Message-Id: <20211007195456.1168070-16-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::636; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x636.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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633637991012100003 Content-Type: text/plain; charset="utf-8" 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. Signed-off-by: Richard Henderson Reviewed-by: Luis Pires --- tcg/optimize.c | 254 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 202 insertions(+), 52 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 159a5a9ee5..e66d935808 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_ 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,26 @@ 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_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 +790,41 @@ static bool fold_mb(OptContext *ctx, TCGOp *op) return true; } =20 +static bool fold_multiply(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 +839,21 @@ static bool fold_qemu_st(OptContext *ctx, TCGOp *op) return false; } =20 +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 +1400,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 +1411,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 +1711,71 @@ 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_const2(&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): + CASE_OP_32_64(mulsh): + CASE_OP_32_64(muluh): + done =3D fold_multiply(&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 +1785,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_const2(&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 Mon Feb 9 17:54:38 2026 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=1633637360; cv=none; d=zohomail.com; s=zohoarc; b=dwqdbrZ3N0Z+CRgifD3Rag+KUKYizgL9lb5RwvvtgfPntnVTvwWzYvTOVo6nJ5WHbmG9S0ALEjWS6RUVYW5E2g1HFMwIpzo7LQr4RpLITlJsV2n2xh57R9jGhtS/hkp64m+QjDZrTw1kshiKeX+UiV4F9azXXxcX8MHs8kHskXA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633637360; h=Content-Transfer-Encoding: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=BeOygzL1rbJik2l6R84kwhGkxx7uBGOtHSBNQ+6+Wr8=; b=DcZBhcj7w17Jcw8dmYFSvAhN7VsFoaymKajQGQJX+P3Y/jC1ceM3W1etrAZ2Zb6Gt72ULwlZLVVuTGNOhcChSeyt6uekl8ZpaWCav1IKWuemzuQtMGdaPSO4rE0FwFGShmkCkdFChueaKv09bbZ8S2DWrX/k3XZ3/EQpT7YJKMg= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633637360346453.09107046995734; Thu, 7 Oct 2021 13:09:20 -0700 (PDT) Received: from localhost ([::1]:60632 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZhf-0000kA-8X for importer@patchew.org; Thu, 07 Oct 2021 16:09:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59900) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZU2-0000MY-NS for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:16 -0400 Received: from mail-pf1-x42a.google.com ([2607:f8b0:4864:20::42a]:33331) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZTz-0007C9-0x for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:14 -0400 Received: by mail-pf1-x42a.google.com with SMTP id s16so6285761pfk.0 for ; Thu, 07 Oct 2021 12:55:10 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.09 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=BeOygzL1rbJik2l6R84kwhGkxx7uBGOtHSBNQ+6+Wr8=; b=UmX5qVD5LnaDCOwicWT7h0VN7Y0AOEulXi+0oudS5iBwvKHCkQsHJiVkrG5I+z1wsj 12TapG173KoWupwHFg7e/XqJNhQTcbhi0id9J4AMFa1B6RUMNP/ULi7Qi3Xblr9+Wg5x w6uOmfx+skyH1W8bZYeQe4kcvL8W0BU3CG2FEeY7/a9p+BBT4GGP3WDebvXxaBhSIKDG Kp+amTJwmr+VEII/ZPDCaDYk/SG4rxvyrIHO6Vt7Fc9YDuBYkiWEQKA5g4zIk3y9SMNf 208Ua8bFFF3l8DGRo3bh5xr46tZVBlY1L3oGjXtlvcthEg75bWHqA68JtVHp1Ard2bVH +IUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=BeOygzL1rbJik2l6R84kwhGkxx7uBGOtHSBNQ+6+Wr8=; b=reO5LU5a5UnqjyuUlovF5EEG9/omcFZpm2Rl9iDUqT4VyNWwA0s/uwWkNzX7sY+zQ+ xFnF2cEGFRu1EFUMBs0794igIl4FBAR+HzG9PW2rXuMDih+Ict6KithUoa13Ea6FtS2x 2843Mtxsi3hWETn2f4XtOqtLH93k6FsoTgaKqBFebg2PbrAO7zYDWdlCpGZwntcn7yc6 eA32rhngTA6Pplbad5RxAPrHiQdlB8bOfZZYgl0c9+Z5yb64sWpsy7gk2oCWAGV/gva9 aZdpMGkRJXlQqOORnmrKLK9DYUmV6s6vWvSnHyQlLCvGbCq8UXOBrb4M9aZeKitqxYm2 g+eg== X-Gm-Message-State: AOAM532CfrPWVk3jdMIqDm3V63uOjfQHa2wx4cjSAJAXsxgql3kortlD fq6SwzqR7EOxsrtsJyern7sW7deDgYAjhA== X-Google-Smtp-Source: ABdhPJyauFen4z1k3ZCaRktrRorpQ2yn3hv4r33UQ3DsWAbbFF1Lss8ehHtRKs2z/di29utXa7stTw== X-Received: by 2002:aa7:8439:0:b0:44c:80da:fc39 with SMTP id q25-20020aa78439000000b0044c80dafc39mr6232411pfn.47.1633636509650; Thu, 07 Oct 2021 12:55:09 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 16/48] tcg/optimize: Split out fold_setcond2 Date: Thu, 7 Oct 2021 12:54:24 -0700 Message-Id: <20211007195456.1168070-17-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::42a; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42a.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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633637362265100001 Content-Type: text/plain; charset="utf-8" Reduce some code duplication by folding the NE and EQ cases. Signed-off-by: Richard Henderson Reviewed-by: Luis Pires --- tcg/optimize.c | 145 ++++++++++++++++++++++++------------------------- 1 file changed, 72 insertions(+), 73 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index e66d935808..0eaa0127f3 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -839,6 +839,75 @@ static bool fold_qemu_st(OptContext *ctx, TCGOp *op) return false; } =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); @@ -1638,79 +1707,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 @@ -1796,6 +1792,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 Mon Feb 9 17:54:38 2026 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=1633636638; cv=none; d=zohomail.com; s=zohoarc; b=gppBPM7JBi7P4kiO0rll7CPNUWXhBRafV9V40wrZBwiLZAJxA3Z49RhXs/alz61lvSOdO928PCDdDGy+DUBx3Ad0aHnaKZZ5htnM19BCqMQZql7Gu0AnRsY9gxxApXDN3CKPUXFx+rDQXtfABrl5nPeWwUJ/DxfPZk2ayN7Ep88= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633636638; h=Content-Transfer-Encoding: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=On8p0nm7X78nxgPyJKdPkafnqI3Hx22VucKTdVUBGpA=; b=cDunae7cfH9fMkADhWYxZYtozZpGamCNyKE2tSmk58ZDoIVvbY9pZfyxuOTo+mAI7Gwwa9AtBhNN1KWRiPTeRmEhWTuASgokE5QMNZYGK5zWssaDiAW3ttbZ86KLClYbcALg8axKd2yWWZncGWFTNdcQb6Q67LTKsmy5yTg2aiU= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633636638680227.44412726015196; Thu, 7 Oct 2021 12:57:18 -0700 (PDT) Received: from localhost ([::1]:55270 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZW1-0003OD-Lz for importer@patchew.org; Thu, 07 Oct 2021 15:57:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59910) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZU3-0000Ma-7v for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:16 -0400 Received: from mail-pf1-x434.google.com ([2607:f8b0:4864:20::434]:41494) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZTz-0007CO-N5 for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:14 -0400 Received: by mail-pf1-x434.google.com with SMTP id p1so6216127pfh.8 for ; Thu, 07 Oct 2021 12:55:11 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.09 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=On8p0nm7X78nxgPyJKdPkafnqI3Hx22VucKTdVUBGpA=; b=vutxtg3EuUwGxyOFGteCKWB/7mowDnl6Wjljjxq5eZZFoWNrHDJwAuwCHSilS6OU6k nx/g4QBBmRS9/RSrO4ne95GN7t+vMZw8154WkUEyZw/b38dc8C1Xb/fYSPM1094pC4sP njk849xxAPeSR+0ND8WGrWOlmRmxKM6VhQ6YxAI8/+aWRxOlepruTuRtk2y70nxAID6R ELiIeEj+2QlEzXb9SG4OqBGkMKJO+CtDdWwizOwsnxuTNm8m84zs22aZUgO61e8VKaJS +GpgZQTX13BHgZvn3LfEmycsg77tsolivpuwWJeI0ru+6MPRUJXCjESxbbbH591F/rOP 1SbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=On8p0nm7X78nxgPyJKdPkafnqI3Hx22VucKTdVUBGpA=; b=6gHkEz5GhMivuAZQ7hcSmJAz5RXkIC7fFYoCU0pgIuVNhfrB8ysMcrQ+ZsV1iHibXP NbBd480ihwQqoSTRgSbUXJq07d7QoqomGqb7JgqSY/CHgG3NlL7Cn/mWE0ZxLmCpUIu5 pB/AoJKyBuf+oqscAsjADWgHBudaOeZmdxvqYhsGGOCZX137ynUu1xMBQsq/WdFJWshE qkHpdSV7Qfx41wy8N4o/sT0XGTudN6fkHWIoN5dmKwfIW+Tastg5doPNw5JV7CwkXrIB 6uv5MPYU4m9JR2S9xyqm5TPDuslZHsldzpg3SP8aryyjJBImX7rZqe7lfG1oNhtejo3s 2g0A== X-Gm-Message-State: AOAM531/vlH03TLPaiwtxsQrXBUoaaz+VwFZ4uj3sY0xNWJtdVnXg2FJ YrTCoj9BBOOEQFao1dv6sH5ADAUmWLyJng== X-Google-Smtp-Source: ABdhPJydufFUzZsV1iWTMH1Z4dvYtKapyqNW3Y5kYl1Asm5+P4GwnEnyuxNfjFR2iyAWd46QfYvmww== X-Received: by 2002:a62:5bc1:0:b0:44c:7905:777e with SMTP id p184-20020a625bc1000000b0044c7905777emr6277571pfb.0.1633636510295; Thu, 07 Oct 2021 12:55:10 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 17/48] tcg/optimize: Split out fold_brcond2 Date: Thu, 7 Oct 2021 12:54:25 -0700 Message-Id: <20211007195456.1168070-18-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633637540614100001 Content-Type: text/plain; charset="utf-8" Reduce some code duplication by folding the NE and EQ cases. Signed-off-by: Richard Henderson --- tcg/optimize.c | 161 +++++++++++++++++++++++++------------------------ 1 file changed, 83 insertions(+), 78 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 0eaa0127f3..266787957f 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -714,6 +714,86 @@ 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=3D 0) { + goto do_brcond_false; + } else if (i > 0) { + goto do_brcond_true; + } + + 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_false; + 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_false; + 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_true: + op->opc =3D INDEX_op_br; + op->args[0] =3D label; + 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; + } + return false; + + do_brcond_false: + tcg_op_remove(ctx->tcg, op); + return true; +} + static bool fold_call(OptContext *ctx, TCGOp *op) { TCGContext *s =3D ctx->tcg; @@ -1629,84 +1709,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 @@ -1722,6 +1724,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 Mon Feb 9 17:54:38 2026 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=1633637571; cv=none; d=zohomail.com; s=zohoarc; b=X/dYDgfZUsvKP4g6qXgV/GaDCDAGQ6ERFx6MT3gq/2D3XgC8Gfa9f7ez7xYEfuY8vz/gHLW8BLNmX9ZBF2JtTe+wOCxwj/8/cQYSW7KYn1DC2M26KhwpjUa83d7tqfH9gqebMG3uzconKWHSWWEdr+025u70ifRamW1bHeLxD6w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633637571; h=Content-Transfer-Encoding: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=MlsO6ZMAQGud5Wj7+vXSpsi/bOL8QSLMb8UKjMILIrM=; b=hplu93fMVIcuj3Cc3Hsa+zP6c1N1Ky37q+Tg/tOpdwsIkIlZ6GiC75HRNtBa6Tf6gHWwSdGyUwpc60wOR/6SVouasxiE5TgzZCbFTF60glg50/gbDsj79Uf3EFaYaPLCP2YLHp7ZcvCTcU4nqmNfE4drBSKbR0JtDDR3TwSE1yw= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633637571473528.2440974875177; Thu, 7 Oct 2021 13:12:51 -0700 (PDT) Received: from localhost ([::1]:40648 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZl4-0006dU-Fp for importer@patchew.org; Thu, 07 Oct 2021 16:12:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59908) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZU3-0000MZ-54 for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:16 -0400 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]:47085) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZU0-0007D7-QC for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:14 -0400 Received: by mail-pf1-x433.google.com with SMTP id u7so6202630pfg.13 for ; Thu, 07 Oct 2021 12:55:11 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.10 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=MlsO6ZMAQGud5Wj7+vXSpsi/bOL8QSLMb8UKjMILIrM=; b=QD3+3fpQGr+WZaxNfEENX0YSjll+67WNGnwJJtWu1uF/F+ktIBS3LgeSzFE0vguU+f c4Yv88EEZWno4PIrsiv2eIjUBL84x/fm9sWut5/t5fBof+YiS4+S5765qdunuSx1D3Fg +KjDUdcBqoNtDuPIfv8bRTdjv/4hImXFQhG1ImqBF+N6z/jdk3MVMPae8VRnbXBsPsku J345cNsBCC2R814CMTG0HR8mN6yLbhLYe/9IaPwDtre9JaHOcu/JGn30hGSfr0Q98v2u iQNaBp+Js3r0MdVAYiLOpghRKIsgjR2cz+o/E2NHAVDsFysWkgBcHoYKwLhGGwgk8f9R aPhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=MlsO6ZMAQGud5Wj7+vXSpsi/bOL8QSLMb8UKjMILIrM=; b=LAvCthif97N4xrNSSV6xZRhnoDU1GUGS8n0MkXYXrzqkUIe2QUsdd04JkOrKITpa66 6phlObUNv9vO2fmcloJ18QYwZS4mRFv9L+9v6zqMVzTbZC8qF3PhrNICvo1a5q7t0s/i q+6beqo9Mi6VJFmNpWv+ETrYoriJh35wUTULGL+rFwIBiaJObmo6wCDnPEiDQKQwA8fe M9q1xjlvAuvIbKuPWoquBAXbwC+TxmRN1HaECk2lo6SGNLVSysmaPssj3L01/IrJ9J2l JxX+tt63vzwfQqqaRusd7+SuGxNE+LX8USscowtI1ROHQs6ZiZcgXtl3belU2uilbQjO 2kTg== X-Gm-Message-State: AOAM5306h2xMrFlHVhfhcgN31dUKBYgMJBFYmK+mWsOj+lWE4j/Fz2Ih Kzpmf/yCQhqpVxlhe7IoBPYPmFzu/Xh+bw== X-Google-Smtp-Source: ABdhPJzTlrWGlM64jStY/1bdV5r/8Dp/4md6eIFizlhiVCfJQXIF9U3LRvqe1PRSX6E9/+MfTi52uA== X-Received: by 2002:aa7:9111:0:b0:44c:c206:ad9a with SMTP id 17-20020aa79111000000b0044cc206ad9amr4481901pfh.72.1633636510953; Thu, 07 Oct 2021 12:55:10 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 18/48] tcg/optimize: Split out fold_brcond Date: Thu, 7 Oct 2021 12:54:26 -0700 Message-Id: <20211007195456.1168070-19-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633637573622100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Luis Pires --- tcg/optimize.c | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 266787957f..786d46ed66 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]; @@ -1628,20 +1644,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]); @@ -1724,6 +1726,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 Mon Feb 9 17:54:38 2026 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=1633636803; cv=none; d=zohomail.com; s=zohoarc; b=ChQZ+It1ZFI0lFCPV8dENdDCgEFRg9f21OcKBoVuinEJ7uh4niB+Kwd/+LRIwlIFYjGPHgJ/Mm8YpbJ5n70r9uIkX1B8c+Gqhpzbr6Odfa5MRFzWnVM2VyJPdrnMQ5bjUuiTx+OMAUWn+843W+rC7ZMlVsoFOLpVqOsldCGhx0M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633636803; h=Content-Transfer-Encoding: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=PRHLPoY02S4XZD3bq10a9ta1bGfUklUSCV+j3lP1M1o=; b=fDDHP2k//pJkfEIUCoZhVuFlR5y1ZYIKKJHO8Deq76yHCOM7lEk91hwnHNVohsHI0ExHq5xva5EZJKqJyHWzZ5GepzZhW7aqC70PPe+px7W9IVk8SaLXlpZ9aw5/TJhThJxU/jYhqcUWa4HI2sZZJrgV14ezG6nLgUJzjta6DoA= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633636803766555.0240862772001; Thu, 7 Oct 2021 13:00:03 -0700 (PDT) Received: from localhost ([::1]:35590 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZYg-0000cV-Ly for importer@patchew.org; Thu, 07 Oct 2021 16:00:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59942) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZU4-0000Mc-R7 for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:18 -0400 Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]:39434) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZU1-0007EB-Bt for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:16 -0400 Received: by mail-pf1-x42c.google.com with SMTP id g2so6237483pfc.6 for ; Thu, 07 Oct 2021 12:55:12 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.11 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=PRHLPoY02S4XZD3bq10a9ta1bGfUklUSCV+j3lP1M1o=; b=ViR7f0g+6GLxPKhy95sHBhgD0e4srHfiCHESXAdFbzVJDLnot7PNrH4JeacxGZuhSM m1rMofmjyy8J9v5cSI3V8O2qW57YDdWn4XC/8fxKaYzGSBWRXh3J5hkf5iThFvNazja/ SqUHMYn9kT/NJxsINrt/e4H6frivSuxs0Mb5nJ2A42etgZChnjAqtHH5GtRyb2TGyXLj wUg6aP8mzawE1GNYZbyXmS3urOSCdwbBZrmxpUbV1QiYdE1cvbFuXKa3prM5C0j7U+xH XyV6H4Nx/VBBo5KkjurWsM7GCxmTuKtK26VAcaTtX9R/Rrhbw6mMaKesfntobZzxsiiD wrxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=PRHLPoY02S4XZD3bq10a9ta1bGfUklUSCV+j3lP1M1o=; b=COq89gKf+EjZTuBuIVO5oGP/0dJDnfgkl1AomHnASY8nPVurMMocR0lG8i2dgq9zPM LZImbvqDqjMLv9l+n/FbQBl9k8iI+UB6EIgFw+mGaJXuXoyEgVPIeVOOn++PaINNnHcH 3ZXcsDF4zyeyTTFmfm2/FeKI0Ljjr3Yr2rhHeIzRT96If2rRNNHJuHXvhmNYFow/A5Pj xn7IIgIp0E1D/PQEEOWoHx7i1sApg+UDjwksGm5qZq5Nyew0NPAvv5yvSXtzyiJiESQY tk7YMWH5RJ6j5mcO8xPjwkEwiueFpE+lluLwjM4G5XfNSrt9MCFRCnS5r3KZsFJVXSnP WSRQ== X-Gm-Message-State: AOAM5336kW7/bBPALCEL7CHuD/+hgBXLV9rz4GD+kbwcx8GMYDqfuagy Yu8ajvCg9cJrCYxE5sDHTnbTt67+vFWsvA== X-Google-Smtp-Source: ABdhPJygXoD9ZgijKVF8h6mvzVzZYDDL+jNCbGkuERLyt6KsK7geONpibhi4Wswrt6ud9e0mXsPwCg== X-Received: by 2002:a05:6a00:15c8:b0:441:b4f1:652e with SMTP id o8-20020a056a0015c800b00441b4f1652emr6059288pfu.74.1633636511754; Thu, 07 Oct 2021 12:55:11 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 19/48] tcg/optimize: Split out fold_setcond Date: Thu, 7 Oct 2021 12:54:27 -0700 Message-Id: <20211007195456.1168070-20-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633636804145100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Luis Pires --- tcg/optimize.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 786d46ed66..6bb5e19e55 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -935,6 +935,17 @@ static bool fold_qemu_st(OptContext *ctx, TCGOp *op) return false; } =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]; @@ -1635,15 +1646,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]); @@ -1802,6 +1804,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 Mon Feb 9 17:54:38 2026 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=1633637886; cv=none; d=zohomail.com; s=zohoarc; b=Fj36AtbbczYEHy/uQ5Uk4RDJibAicGVLQWe6zJWNOJYb1LcnQ+R0/HU8X6ALH7EghfbDxzbeZmzueMZvmaTrQemVRBdEXswTAiJxq66hC7BAMbnd28jdM9BhvTPY1KWlIOjAGmh55yikMuaIRtXWpba/eIEOn7B9sjkne20fHY8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633637886; h=Content-Transfer-Encoding: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=95qg0iVCC4yKW1hO/4nRddX4+htlroVuYAkjBYfvk1o=; b=bipA2YqfCQPsrXWPyJcDduF6aYXt9yEp873jQh0iehP084SuMvCnLQsfk49e40+STSIz6LQWJgqZEi48+pKD4QCb3wLzRv96jwolo53S2i0gRunQvw/SHkYxrEaRb7+osu71g+2Q5QjVa7R6xmRZ+xQmDSFSoSvztGlj3fDh60E= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633637886569225.45156375012232; Thu, 7 Oct 2021 13:18:06 -0700 (PDT) Received: from localhost ([::1]:52562 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZq9-0006Ps-GU for importer@patchew.org; Thu, 07 Oct 2021 16:18:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60060) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZUC-0000Oi-Hj for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:26 -0400 Received: from mail-pf1-x436.google.com ([2607:f8b0:4864:20::436]:47088) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZU2-0007Eq-6d for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:21 -0400 Received: by mail-pf1-x436.google.com with SMTP id u7so6202667pfg.13 for ; Thu, 07 Oct 2021 12:55:13 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.11 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=95qg0iVCC4yKW1hO/4nRddX4+htlroVuYAkjBYfvk1o=; b=Vx6wJZdzs7FyyivsG5PDtt8LtdkEaB1w7X3wbaEZMWTWcad8QIiXliFfJXr+uPLftU BqlFhvLUyXaEFJrqAh9rdXmygfobHSB3xuF9O2B54PO7a5jLJt03LDwfidJ8JC2nilrn ae3enGfyBZle3aVhZfO3nP0CJq/lER64BPa57knOusU8WW0une4ExZEVuMVDdxM6woqi JmOLkKmyD9XK1n7gcZfkaCdz2MOIIRMHalSXRMXOk7grp86r9UisdRkPGSCJs7PKD852 jNs3JDh6yoaBqQwoC6glRog1sthvdxGHN9OAhgo3hAyQJMB3PTM/en0Az0BKj5awU3Cx ClIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=95qg0iVCC4yKW1hO/4nRddX4+htlroVuYAkjBYfvk1o=; b=ThXJkDMRi1jFFn+EjoHwOAAOsrx2SHKcPu6sd3ZjlLo4A7xzYfkKIGQusRT4qmyedJ wotdSbcRY9sG3Sh4I9vsuZ/z0UMkPuInAXPGJNXMEOfzxFq5YAttRqHTdsOrRAYaY/Tf 8dN7I0baEPSnA5FUJx9iitaI7dUFslBxjzuYST87thZsQeixB0cFgfPMOQgLFtz67wOL MNnEXcrUozSHUOloF4SsRnp0Gfa2Hv+zeV4x+/N0BuFAbm7W0mEXv47WN6OUdYrZMcMp K9Y03QZ3lvghVSSN6miSmtvgDpd7TjPp6P3le2Or+XT8rVuI7iDERy3bUOb8gEbPdClX VESw== X-Gm-Message-State: AOAM531AwsCDQOMkxhSDooM8DNJEcLzvU0nHEhKbyifJVj2bPTO7LAKI EjgRs3iF/RbWK6tKlpuhZryOxv3a3iMQAQ== X-Google-Smtp-Source: ABdhPJyytn1ujP/Zeux0QUGkQP8USCG5LxMq4TMTMK5MPXFsij3VP4Ph07XbtflNYJjqxqBRDL+A0g== X-Received: by 2002:a05:6a00:23c8:b0:44c:d139:f3a4 with SMTP id g8-20020a056a0023c800b0044cd139f3a4mr2285535pfc.31.1633636512309; Thu, 07 Oct 2021 12:55:12 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 20/48] tcg/optimize: Split out fold_mulu2_i32 Date: Thu, 7 Oct 2021 12:54:28 -0700 Message-Id: <20211007195456.1168070-21-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::436; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x436.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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633637887546100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- tcg/optimize.c | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 6bb5e19e55..01a0925c89 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -891,6 +891,24 @@ static bool fold_multiply(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); @@ -1697,22 +1715,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 @@ -1766,6 +1768,9 @@ void tcg_optimize(TCGContext *s) CASE_OP_32_64(muluh): done =3D fold_multiply(&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 Mon Feb 9 17:54:38 2026 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=1633637250; cv=none; d=zohomail.com; s=zohoarc; b=F4xvnywzN/RfBNWeJmLZZEo0/DigYbcZOXxV/og2NO+ZRTmf8roCU8RFBDcuXEJYfC2edVkHMIITwVAiiO8jjRcip6mCMADizXWW7w31sBSOtQAVIyU7RXaV5rb0FcIamUpSwBTUJfiJWNCiAQpJ/3hrWECCe1StutcONc4FHuE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633637250; h=Content-Transfer-Encoding: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=X0u+P6N3QoO0mzhFL98YVpin8SoefjrzpBx/S+qocC4=; b=Ltk5njj0oKIt3+DYs2Rd31w7L75BTNofGoxb/zXVV3ZpusmSv/XOUh8147KGk/WFCl0fYQk/SrsqVkhsKepPvDoBKy3NaOJ6SpgnAfiFdVnhk61R+mgGPC4VfteHwALPFaJ0LdysZTt3cd0QB27UdiVnxzPMrWZPgpJVoJQGeVQ= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633637250110150.867828302828; Thu, 7 Oct 2021 13:07:30 -0700 (PDT) Received: from localhost ([::1]:55660 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZft-0005nB-3R for importer@patchew.org; Thu, 07 Oct 2021 16:07:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60032) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZUC-0000OF-5J for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:24 -0400 Received: from mail-pf1-x429.google.com ([2607:f8b0:4864:20::429]:38867) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZU2-0007FM-Jq for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:20 -0400 Received: by mail-pf1-x429.google.com with SMTP id k26so6243832pfi.5 for ; Thu, 07 Oct 2021 12:55:14 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.12 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=X0u+P6N3QoO0mzhFL98YVpin8SoefjrzpBx/S+qocC4=; b=zuBS/4Y4IX/wxUq3h19pjt7LGY6VL9bX0WtLgvuK+BsHXhQ9egMRQGWu4bqqz4JUuv 9HVMUq8EWPEBuM5jYrnjFyMMoX6juTzozMzf8Y57I+4vIAwxU3CMgKYnGikpfVVpvMaP suLYZ2/GxBHfdMRQQLNLAzoW5yx/zJsPJZOkJcleJNa1XAo4u9xl8CMQL2f3rmiCEDHT 7ij2NePjCZERvhvor0Ka4QTHCklEeL7Fkxajsn3fYemFW02oONsryyxQwOdvi/ACvjVH M34OcedLsShN4rvi16f3GDQQ2ZShCaK5IpFL7/C7gvbYVc4sX+ZReMCamIA6VihvZVNO s+Pw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=X0u+P6N3QoO0mzhFL98YVpin8SoefjrzpBx/S+qocC4=; b=C8cymJSdaZuX77UgcSyLozPu/L8KZUZJz0v6waoGLyiXQeqntnotWutvkUZBMEZmyG CvyVhu80oVVf6md4bBaqVSSs68AR233bwmHuIW8q7VXo/+e1CLejoPSZ0lC4KMjXOvlD K2BOS19DAn9Z3UDwkuh5HntHkJH9nbBpycKFjLnQRdPplsbSkJ7g8suW2AYu+iUeKhZp RzDd49eXeQ7Uu4ROmLuW3zRw25Qlx3lrp7pOPm/YxYRY3QEflg1bEmr+0ZwgOaRGHjQZ wGEMS846CYY7CTjgH/rf8i0irXo0X6EkYh1oCZsXLbA8wwURvxOu0749zuNPX5eYeAbt O4HA== X-Gm-Message-State: AOAM5311Agj3UG5SjKheoQXWG0cnFEfwg3LHRzrLgX/ltFw9X57twphB HPbG7WbBziawCUdV6Xg98L9/N/mF+BcG4g== X-Google-Smtp-Source: ABdhPJxmz86dYcEG/6gBqX43boDnQ/7V7WQ+tCfpNDDKiSKBkcK96hs+H0X+pjpW0WOe1//HPBnxfg== X-Received: by 2002:a05:6a00:888:b0:44c:c00e:189c with SMTP id q8-20020a056a00088800b0044cc00e189cmr4856409pfj.79.1633636513238; Thu, 07 Oct 2021 12:55:13 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 21/48] tcg/optimize: Split out fold_addsub2_i32 Date: Thu, 7 Oct 2021 12:54:29 -0700 Message-Id: <20211007195456.1168070-22-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::429; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x429.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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633637251262100001 Content-Type: text/plain; charset="utf-8" Add two additional helpers, fold_add2_i32 and fold_sub2_i32 which will not be simple wrappers forever. Signed-off-by: Richard Henderson --- tcg/optimize.c | 70 +++++++++++++++++++++++++++++++------------------- 1 file changed, 44 insertions(+), 26 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 01a0925c89..1cec06aa81 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); @@ -1043,6 +1076,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); @@ -1688,32 +1726,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; @@ -1724,6 +1736,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; @@ -1818,6 +1833,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 Mon Feb 9 17:54:38 2026 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=1633638189; cv=none; d=zohomail.com; s=zohoarc; b=H3aWAcWhGC9EcQdCkcct4DbsySgIzxEIKC29G3U64hk7xCfCUA6hgC1J7ay9TUcaCcYxqNUlWxXKbfxkAmaJGMy2h5mIDroj8sgTKuLFGbbasS846izFwpvTHCyNmwR1YpaXx58SgV57AvmbWIlWtrtbgNXcEQr9aQIxTS91K00= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633638189; h=Content-Transfer-Encoding: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=EHVDwnG6dREWQKRf227cIpmq7UBRaNolNQfJjNu7bOI=; b=ERFtt/9/Z/gcsvFHdijpqMwh+lS9YaOhUl4w6+NfVfptab9GzdkTbIEBCe1epsVgcixxqGvQXxwNPjh8cK06a9pFxT1zJ61JXHushUtO+q1RzJoOVGj1rQaqD30KGEKtNyQWu2Dh22IvX7dSyD3HbfRbhAuRc0DArm6nPFNvLAE= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633638189144340.01749885070774; Thu, 7 Oct 2021 13:23:09 -0700 (PDT) Received: from localhost ([::1]:38358 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZv2-0007M3-2g for importer@patchew.org; Thu, 07 Oct 2021 16:23:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60050) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZUC-0000OX-Hn for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:26 -0400 Received: from mail-pg1-x52a.google.com ([2607:f8b0:4864:20::52a]:33340) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZU3-0007Fm-4e for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:22 -0400 Received: by mail-pg1-x52a.google.com with SMTP id a73so876624pge.0 for ; Thu, 07 Oct 2021 12:55:14 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.13 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=EHVDwnG6dREWQKRf227cIpmq7UBRaNolNQfJjNu7bOI=; b=BpTeB0hUFx4G2LJ214aOxbui16oSY+LyBm0f/FKsSdjBg2qK43pNpOwmTYdBz6FtKj WOwLvgfQXavXCNzaBZluhHEVIdzmPvSWJLNU+XvyG0ldZBVzAnNa5wAED+V/RKv6ehqm aHJD+0sEEH6y0qb9aHfXHxogQVRNZemViRFLLZqliYspPHktqE0Mm/MRHOOPPNZUKI1a GRRsiQU89OMW0ENehSEZwNx/OW0CWSfm3FraO+mXpvcJzWUJDVvZvnanCKJ3Y2Dunl2g G5fwT2txZy2T5Jf0Q8uCimBizX2XzA54dWdI1oaVYSRtbWixAFB8icHflHJIpajb3XpW vlTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=EHVDwnG6dREWQKRf227cIpmq7UBRaNolNQfJjNu7bOI=; b=PowYUrDIOpgFpPiU3zQ7kcNDjxqysup2+Dcvbjd7qg/EDJmzvzstjslAuU0btSS1gU Jc9rXYUBLvR085xIZOPzHA7AXDIzsnEPe44joQ7N5vtFLsbmg6rjIo23KPPX/Ye7lLIR FXF8fStLWam475KQ+Q1GdrW02fhaeVJP8vrnoMuO9Gnos9irMJhPAtW5QdpqdhRkV8Mp uffJPlvn1R7LidQwX88vgM/bSdrim6nSkx5nygDihvtjHPGhfhH3N44HBPKplNuV9Adx cL/GF7S8jmKKGeX0DHnMU3Ub1N4sDJFOVXpPqnO8Jhpq9h6HaW9KWP4Hk9m2OZXUV11V SFxA== X-Gm-Message-State: AOAM5321eCs1LS3BCY+O+S20BjTfJP4ZrelStpJQlH3bT/gjyuxHlva+ odep5VOQbPTp7CwEtNT6uPmy6YAnAKvwFg== X-Google-Smtp-Source: ABdhPJxb+82XJE5MctQprUoME9NPmXzMUnNY4qG+WcsTmcw3p3JKBb2YCt7xda6XkCHppP/UsAW1UQ== X-Received: by 2002:a62:77d8:0:b0:44c:8618:1bed with SMTP id s207-20020a6277d8000000b0044c86181bedmr6278991pfc.27.1633636513879; Thu, 07 Oct 2021 12:55:13 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 22/48] tcg/optimize: Split out fold_movcond Date: Thu, 7 Oct 2021 12:54:30 -0700 Message-Id: <20211007195456.1168070-23-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633638190797100003 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- tcg/optimize.c | 56 ++++++++++++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 1cec06aa81..c8aa027a5a 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -919,6 +919,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_multiply(OptContext *ctx, TCGOp *op) { return fold_const2(ctx, op); @@ -1702,31 +1730,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 @@ -1778,6 +1781,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): CASE_OP_32_64(mulsh): CASE_OP_32_64(muluh): --=20 2.25.1 From nobody Mon Feb 9 17:54:38 2026 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=1633637464; cv=none; d=zohomail.com; s=zohoarc; b=DCtn54Tn1V0cPg4Mepm6Z+10Om2UxLIo4TjFTqjUxKkTzFUirNWBfB6MPm4WiRvOBJew50STOLRG5zpBOCGvgzfcgH5ZWvqX1WO5D+xq3PaCguVZO4VsdrFsG5nzjSMgtTuYOS1obhrpbVbl5mzSO+kENgsHl9AYy/XAUTsS07A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633637464; h=Content-Transfer-Encoding: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=GGGoLkGVm3XuJy/LLBpNptjDTMVJbB7q3LUXP3AL6AM=; b=QmQ1cEGGn0mxi0IVrbokRBLkzeVfXT+LWCAzaagrfaAU5T9+qMcw5efFXOppoZsTLyCZgkphCaWrl0K/XIbVMjZfE7ygvOrvyyuecRhGUGUwx9rq1/a0NfeCvDbp3bGIBVOENAbuNPXaEurUiW+gJDOmzkzn5779DNQb0HaWsWg= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633637464739588.2039310200483; Thu, 7 Oct 2021 13:11:04 -0700 (PDT) Received: from localhost ([::1]:35702 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZjL-00034F-O2 for importer@patchew.org; Thu, 07 Oct 2021 16:11:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60052) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZUC-0000OY-Gw for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:26 -0400 Received: from mail-pl1-x62f.google.com ([2607:f8b0:4864:20::62f]:36586) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZU4-0007GQ-DQ for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:22 -0400 Received: by mail-pl1-x62f.google.com with SMTP id y5so4645415pll.3 for ; Thu, 07 Oct 2021 12:55:15 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.14 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=GGGoLkGVm3XuJy/LLBpNptjDTMVJbB7q3LUXP3AL6AM=; b=zrCmRIT44zjw46hhRaQ/63/LQx9Le4qFylq1RZwgntVf5n2NurByDiM+xJZDNtTxAE dYYiUb394N5hKtl6QUED8z6KMgPll3ZkFawU6YQwIUByYj741FbJnyxuEVgu4F/l6Vym bvWfmxSL/OdfgwVACyWvEIWyoLyfz0OOBGXeFwjfaqWOpPXfMmhisQw6SvLDXJ/MmYt9 4MjOiXtl5mzljWQ7li71faoa3fLV9vdIDi6/A76zGUt36UEOU7XMMbKNfQhSPLsE42F5 L9ildimTa443jMTJT9tMFFl6NVxJrg6uBBsG3VCiYXyD46DdiLob7mzxpfvidWsSYvEF bo4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=GGGoLkGVm3XuJy/LLBpNptjDTMVJbB7q3LUXP3AL6AM=; b=xFfJssMAizFVtfmgIoThJFT9dBcm7JCZIFi9gXRMJF92/xN20BmKGJNKee2u474RXv qzbmhWuNPJmMQOMb6qKxsObQii8zvmpWaQszYziPv3A3+6Ngu4z6wslVdE6XM36TJRaq FSPV9IIuDKfDgC/fwUhkeSTJ5K5uU7qCaMHW9qVNGjYnaWPwBIYrAe9K8gQ4diKIFp8U 6KCwFYxT2udY8mfImQScujnvm2qAU8SuoWZXAD0omBDK3jpX30uFxNBcfsQDxXU0eFeO 4+h5H1gVQRhaEODQavgXC8cTzZnlVP/aPyi1BPWKRhnUlrAqpOOmkRYtSsd15dsiAfwW xJUw== X-Gm-Message-State: AOAM533BqipLlFSOoTMUlrgfE5AbGi56OV2Kiu+gOFUHFvXqG8OxZ1rZ 2Dgvx7SUVRvTI+ovf9MTxI8VhBa18dteTQ== X-Google-Smtp-Source: ABdhPJzxZsu6ojdEi5izm7ace5VKaz+6u9iH101BH22pHxmvPfmjvLBZofwMOVjdiHz4zQN79PBvhA== X-Received: by 2002:a17:90a:d90c:: with SMTP id c12mr7711136pjv.237.1633636514614; Thu, 07 Oct 2021 12:55:14 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 23/48] tcg/optimize: Split out fold_extract2 Date: Thu, 7 Oct 2021 12:54:31 -0700 Message-Id: <20211007195456.1168070-24-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::62f; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62f.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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633637467094100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- tcg/optimize.c | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index c8aa027a5a..8229a67192 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -885,6 +885,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); @@ -1713,23 +1732,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 @@ -1764,6 +1766,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 Mon Feb 9 17:54:38 2026 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=1633638317; cv=none; d=zohomail.com; s=zohoarc; b=Se8ZeOPXuNOX215jwYx0EN1q64EvEOGUI69/4WntYk97tLBt4aeOx7Gsys2ZqZhjYllyMs91bfu3rT1E+RRbTYQ7RGnlP9pLNK8qrdh7luIZsxNkZh/fqiyOA0gkpkDE30gQ69qM+VCu5yYxJ9OGV1a7RtWryfgDJOYYNeCMfi8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633638317; h=Content-Transfer-Encoding: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=k319WHbf4AosmwtYApMOY/BUNfnO7bTID5c1KU0/PGE=; b=RLtBdpD+RrMBEO3rGTImKqEVlxMk7jms5uwVrbYvXrx5yFhdXug+wVyeI+3y/r33SR7lLBYqbzuUqhcX3tudbWBVOcnPU7LBYGOJV4mIZunLeY5WYLl//21H9n7yHyTzjF+I0agzZkScAVP++wXiP+1Hxb28cj/kC/PZCbVvzxk= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633638317787206.85665611174784; Thu, 7 Oct 2021 13:25:17 -0700 (PDT) Received: from localhost ([::1]:45650 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZx6-0003le-Oo for importer@patchew.org; Thu, 07 Oct 2021 16:25:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60058) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZUC-0000Oh-IJ for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:26 -0400 Received: from mail-pj1-x102f.google.com ([2607:f8b0:4864:20::102f]:52891) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZU4-0007HO-KI for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:23 -0400 Received: by mail-pj1-x102f.google.com with SMTP id oa4so5016550pjb.2 for ; Thu, 07 Oct 2021 12:55:16 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.14 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=k319WHbf4AosmwtYApMOY/BUNfnO7bTID5c1KU0/PGE=; b=TO1ejXMmNc2jJQNgocZq1hKqfHtSxTFZUOYga3QTBV32OwNNbXawdavyWU7Wpj5bJv JmgdXFqlVk6aG9ct+trm0n+f0/Mb5bDqvCsSWPYumZUkhoGHhKAdZCb5cA0VfZ8fZm/q pz7dMgEKugvTAGope9/Ir9vSuiseTmGxd0sluVELMIxpw8EOOfASP3dJjO4qnc2SmAXa vTXm7iMyAHM44o3SlP6mmPwUos/vXzCaw3s3O8q18Cc/gTcxLkPgiOGtEzjzXjgyiPn3 DmvFPWWiwgOFbM7bVgLcqFo2U3wUHobD54e6t/KtNKVdVuRc4gAU8vG+B0ERd7Hl6tdX RO0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=k319WHbf4AosmwtYApMOY/BUNfnO7bTID5c1KU0/PGE=; b=EahSwzRMKa9XM8qOei+tNTSZx0/stS9K/PJyseN8iEJQRqWEUR0E4QocKBylWuyjYP 4uF0UHlJyjHwuz7rh5fO63HjfXdEhHk4L+jxkUYjEHMMOt/CFlJl1aqp910E1Svf3jPq /jHUEhd0bX7YI0JQKa0G896F0qoGrTKMyPQZ7EHNyzQhf22crlWqJ6XQBo/1SgCpuCmu kpeCw6sHo2EARV07dE6kzqNK0aDVspOni/LwZCRjkwzeCKISnt1QOnOHD8KyKzsC2VhS 6Tc+UbwuRb4jj1W26gohAyx4o1Oo7pcHEeehiUPB4YNQCzkV3AEzysM0qr1MuJf1PRqg ofPw== X-Gm-Message-State: AOAM530KDkUBhp4zO8Ae51qCazwcxzuOAdsNAcKcZNhWLlmjjekdkmUb NmFjcKbrJBljx34ali0XPOa9EYJw7bDyLQ== X-Google-Smtp-Source: ABdhPJxTRYKsghGJMKFR8Uk9KKen/UQn4t7qJUywb5+52AihlM0qELybS1TbRDgywywTVTLZD39TJw== X-Received: by 2002:a17:90b:1b49:: with SMTP id nv9mr6857147pjb.134.1633636515387; Thu, 07 Oct 2021 12:55:15 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 24/48] tcg/optimize: Split out fold_extract, fold_sextract Date: Thu, 7 Oct 2021 12:54:32 -0700 Message-Id: <20211007195456.1168070-25-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633638319592100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- tcg/optimize.c | 48 ++++++++++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 8229a67192..6020a678ab 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -885,6 +885,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])) { @@ -1113,6 +1125,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); @@ -1714,24 +1738,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 @@ -1766,6 +1772,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; @@ -1841,6 +1850,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 Mon Feb 9 17:54:38 2026 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=1633637988; cv=none; d=zohomail.com; s=zohoarc; b=JCBC+mihhjStVhbtmaihsRMgCLzieGMfotnvB9RqaWEnnLwzHkQZZI7t9Qz8u0O7JScSrpOYbRxggT5VV98IOeEBw+lqomEoFoXb9jMwpAjVuF2txm7l3O48TeMvSFV/1WKsDSSEtSSnJGNYmTu911uiRUVlzjVxiG224rQQ2LI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633637988; h=Content-Transfer-Encoding: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=O0q81kCYe/orfnkEuC1SCXOvUEuJWztV/bwCpN/GWE8=; b=lViicSYImRqmUAJv5oLxDGqPjARB4lut9ms9NW7Jj31JPUEVfK5YpZHk2yWeHYjX23GrxOXczIyqrXpD9M2OFVMilKSrHk3qdFxotCo0FL1kiN40g78lBsOwIsW1hkufmngCnHun5cDMSFyVoJ7Un9Mp6mC1x8YKH5+8odenROc= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633637988951123.32217423636371; Thu, 7 Oct 2021 13:19:48 -0700 (PDT) Received: from localhost ([::1]:57854 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZrn-0001Us-Qo for importer@patchew.org; Thu, 07 Oct 2021 16:19:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60054) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZUC-0000Of-GF for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:26 -0400 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]:44603) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZU6-0007IH-Ge for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:22 -0400 Received: by mail-pj1-x1029.google.com with SMTP id oa12-20020a17090b1bcc00b0019f715462a8so6009272pjb.3 for ; Thu, 07 Oct 2021 12:55:16 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.15 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=O0q81kCYe/orfnkEuC1SCXOvUEuJWztV/bwCpN/GWE8=; b=Oy09coFv/aSzO1RW7W11arg5fGUfjs8yLj2dHSW0J9seJI1TKWat2Cj5vPlwhrLEys 6LTnsS1B9HYKh071j133BEeCsochtthn0+v1Dap5bpc/Bc56p+/B4DN1Rm9NgaSvfOvW 8XqSmKsPuwVRHXv4A2IbuYlxsYxbvOSBsPbkBVtieMqVY3LaLzmpKp0juJp8ZMNIiZoe neFnkWo62XX5FUfUKxkx4r0DBYpgMMQpDfeyGaM6omM/VeBHQfxnAy1KIkhM8x4mckTK 6+ezGcodpTXieSPKAHmUli7B78sNfyb5Dl5OzIi9Uzo1shBRnzb1knsbGufKPgIDmdxr 1csQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=O0q81kCYe/orfnkEuC1SCXOvUEuJWztV/bwCpN/GWE8=; b=7T6pkM+rdx/1IOq7UkFuU8KVHlg+amjYKOmmuq/T1PAlp/FRGI84JAmhc+NTKPCUA8 IknYgsVqhHp2wFbx2yv676y7Xi/3fmvYCrePf3cOxY8rE8AsWYU0W3cD7UnaHoWthFW1 bxoZBe7PRN7fb90tXAYaVfFlafJbb/lRMeE5Hte0ODxIyzb/KVw2PPbm5Y/ziWqPvv8a ZDbi6rNGKFRVcJh+enXOoK5DcYFwaO2yPrsZeqzGcEJHMHunbYB4eMfAoKIZhSNLsctJ AX848JXc9Fvog3w68OShcw+MUUeswYJsgVkPwNPlEysvS63fjEoJpqDbS3DplrA4/TAO 612g== X-Gm-Message-State: AOAM533CZbCUlfmBI+bZRmPRezBACNMeGJhQ2hqAWc7/q3E+fSdTuEtc v8WBguXczoCbKaXcQ4aLN2zlLh9tVgspOw== X-Google-Smtp-Source: ABdhPJywKijx5vpxV2X9L1sgfSUD9tclK+0nw9CFiGLq92i3c5ya7ucNKrwNarZ3u1gWSQgVAvjVMg== X-Received: by 2002:a17:90a:b78d:: with SMTP id m13mr7588842pjr.17.1633636515921; Thu, 07 Oct 2021 12:55:15 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 25/48] tcg/optimize: Split out fold_deposit Date: Thu, 7 Oct 2021 12:54:33 -0700 Message-Id: <20211007195456.1168070-26-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633637990974100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- tcg/optimize.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 6020a678ab..dd78982330 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -880,6 +880,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_eqv(OptContext *ctx, TCGOp *op) { return fold_const2(ctx, op); @@ -1728,16 +1740,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 @@ -1765,6 +1767,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_const2(&ctx, op); --=20 2.25.1 From nobody Mon Feb 9 17:54:38 2026 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=1633638503; cv=none; d=zohomail.com; s=zohoarc; b=aI2iciA52kZwGaK935Utxyw8BFP5ZkBhxq2jtuwVxkfI7ZsjAY37dQ6RTdTwiXAinpTw8E77UeJzkkNelCrCLnPtlvdEpDTUmplO98IIRs2eNp8hTiIVJwIidvWcGCwWyKDHRlhk0IMwYJBQSTSiIqc5syfZJbArjbAjpYt7ZHg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633638503; h=Content-Transfer-Encoding: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=aWoKHX7GFhaLowzRN+ZxI6se6u5BkCJ7ipcZCIcNdKk=; b=nUEkUGGviTKlU3P1ffKJhS7RpVc5cDv2aaVxMF1ejLv9GXs6T2Io9J4YyfDYIl+n60Cfx6Gxtqwy9GCQJz6YGiheAJsWPH/cBoPJLDZsf3BNeMlS4zvsbkjeWjGKKo5nwumynAnwSogGDNOC/PSGG9l819relBSYlE5Xfv1/81w= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 16336385035746.161840186367044; Thu, 7 Oct 2021 13:28:23 -0700 (PDT) Received: from localhost ([::1]:51298 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYa06-0007aN-7v for importer@patchew.org; Thu, 07 Oct 2021 16:28:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60074) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZUC-0000Ol-Vi for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:26 -0400 Received: from mail-pj1-x1033.google.com ([2607:f8b0:4864:20::1033]:41587) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZU8-0007Id-Aw for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:24 -0400 Received: by mail-pj1-x1033.google.com with SMTP id na16-20020a17090b4c1000b0019f5bb661f9so6064209pjb.0 for ; Thu, 07 Oct 2021 12:55:17 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.16 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=aWoKHX7GFhaLowzRN+ZxI6se6u5BkCJ7ipcZCIcNdKk=; b=SjNjSsVn0QoPaAwdtx8r3HlmqBTpFJrZQY0a93OePfyl1An5E+C8kuR16gGtS/qEQ5 Pl21r9Lg6J4rP8MiSgW3AQQVIfSDRWCmEkU3i1al3FjcNE/aHxkVlghG8hJOjsEFhHEk eNeUC3zLSOB3+jrd+FPk8ct9L+yI2ELvCQMV6c94WGWX/On1b8Jv8GajbGS+eG2qInuN O9OZrslTsiQAV5CoJplvGJ6+ShbtwTAoZdImDajmfhdSTrWV0TGK9id5p1pMQemY2Cvp J+IJ+LQwiL3AU9ZMb1ZTzT4fr1+9tt3Poerep9EZuYWT35wEC42Ckb2TEphIzbxvFmTU XIEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=aWoKHX7GFhaLowzRN+ZxI6se6u5BkCJ7ipcZCIcNdKk=; b=WfjSEBKwdubG20gGtSZlJQ90Q8Bj+SlXDFah7d7ZBKC6kI9LOGOFAs45W5NtjlECNB f66zJmXICCGE8xHNuXdAF0aVdgc9TvbDKrtaxRwTbLcQUJB7GDbC5Rw27W2HpSFmPZy9 vds7P7qyxcnJ3nTErUylSzKDLNUdN/3Q/1Q5WHk3s8k5IRHbu+MR+gpnuwL1beqRjk/z TD2VHJTd0dGiPKwPmJBJmCnezVJ0wnAfhn5QPs8yyBlB2GjVEaf9NSb8S+3brBdmnTEx +DCND/tb3mjKCppYz0BZcdM/KK7aXW70cdoKYQWhNZhEFap7AxUla5MoL4gFbPxI1h5x hsGQ== X-Gm-Message-State: AOAM530ilZFcf1OMu/VOy/j2wlBtuWjzkxkpCV5N2iLLT5DxeMBzFLrk +ozfaVpvJJATLA8tNXQ/S+S0YQylfEbv3g== X-Google-Smtp-Source: ABdhPJzwzYO6S4oJon6aYPObaucWyeulZQ/yE/FaBQj6aTHALyOHkcqTY3WI2mESEJbBI5B/+TktUw== X-Received: by 2002:a17:90a:b795:: with SMTP id m21mr6880176pjr.143.1633636516502; Thu, 07 Oct 2021 12:55:16 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 26/48] tcg/optimize: Split out fold_count_zeros Date: Thu, 7 Oct 2021 12:54:34 -0700 Message-Id: <20211007195456.1168070-27-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::1033; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1033.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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633638505329100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- tcg/optimize.c | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index dd78982330..d2e5727662 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -875,6 +875,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); @@ -1726,20 +1740,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 @@ -1764,6 +1764,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 Mon Feb 9 17:54:38 2026 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=1633637653; cv=none; d=zohomail.com; s=zohoarc; b=iFM5c/0cgJA4yHRUmWZMWwYc632AGOYZjSSyxNUogDgphUYRJLv6OgIZ+Wnbvv9GZwyVFhc2H2kk6HjEGfEgyZwad6LZbe7ZS2tR+ZBtY7eLe8xHnvqsxq10CISKKX3jgPO8MJCsH8DWIMeGK2U+3LNfuR+6o7xq+lvLrjCAjWw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633637653; 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=JODdrPNj2PxICOEHDxomMCh1RXsgaITWJJN15W5s3LU=; b=CBvc2hsx3ZfWgb0BTU0x6LMtorxXE4LituooWa7kzkvsgAH+zTakN00MXKmV9l8Fk6+ssyEAx1qJb+Vb//twRQyXelkJ6RmHXQU1c83cjj3lzLK7BGbaZO+aZn1b0CgNlRGXmHp/98My2BP0zpozK5SGvwtifrOFQXCkdLN2d+4= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633637653041766.403488210824; Thu, 7 Oct 2021 13:14:13 -0700 (PDT) Received: from localhost ([::1]:44102 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZmL-0000a2-Ql for importer@patchew.org; Thu, 07 Oct 2021 16:14:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60056) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZUC-0000Og-IH for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:26 -0400 Received: from mail-pj1-x1030.google.com ([2607:f8b0:4864:20::1030]:39728) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZU8-0007JI-Av for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:24 -0400 Received: by mail-pj1-x1030.google.com with SMTP id ls18-20020a17090b351200b001a00250584aso7258246pjb.4 for ; Thu, 07 Oct 2021 12:55:18 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:16 -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=JODdrPNj2PxICOEHDxomMCh1RXsgaITWJJN15W5s3LU=; b=LpcOJUTWVHmUq9LPbs6lOtj7uVN712f0DuwnpJ7fj0+Hcd97yHpk/8kSGK+/egnDuT 9D1f0faZUbCHG/SpsUCSuqrxcNkr6LdGJpuArMlPFnUofE2tu9Q13OumUtoUG/5i1MTc bfeJQTL4Jl09mPa7/2gXbjQWidTV6QINHivQG0O+y8D8QOjoJglYxOtbtEWL0IvXG310 LmV39k5BmTwEZfRo0cv5z1cvQzH1y/TaIkwgajvOOgSEjvThmKNkDBWoPA9+XwTklOhy Mf5lEUSN/DJh0ZmHVr91Htg3NauR9F95vPOYsJitgfA5A1kah65qprFd/hQWunkL1Bk6 WYBw== 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=JODdrPNj2PxICOEHDxomMCh1RXsgaITWJJN15W5s3LU=; b=7xRymNpdwkgrPzJimYtO5OvbFWiONOo0vUjnFQDWrStJN5aMXd0ky3dHwRxMLEqDEn MzY97LIdwEGuN9ZOEXESHUaghEHSIBR6d+ywiApxoC5RaHNBAPCbeGgwKNthlJnqSsOb R6b2Ga8JnR+VPFKe8XZ1Xbf4N/eEllKtxLwu3vaA67wrp2sd1DMV7CY8eBymvAXUZVo5 My5aG7Oo+5y9EiK/QPc6ex2GZMyL3GkFBekvBKmxrHSmVqTn+pIsiqL0Sc+jLYXPLcWv fbV6UauIFr5NtQboEwoGyUPoCrkxISGo7YZNEUyIL5TiZt301VvBH81GJEWApSvj+XVW 1LRA== X-Gm-Message-State: AOAM5321EvGocQbd7wtn594ZtVxPrkM3uLqps3gXu4wNaz5xf2KYB7WW AXDGdgyPT9uj6i4KBPAXHoNxpWNXSOKzLw== X-Google-Smtp-Source: ABdhPJyAlVEB8qVpLYU5i/ctYr1LHNulXjqRA2FOs7PPaT1NysCRyGAQJbc8sAzCEh5opr846d6Ptg== X-Received: by 2002:a17:90a:1507:: with SMTP id l7mr6971189pja.141.1633636517323; Thu, 07 Oct 2021 12:55:17 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 27/48] tcg/optimize: Split out fold_bswap Date: Thu, 7 Oct 2021 12:54:35 -0700 Message-Id: <20211007195456.1168070-28-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633637654228100001 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- tcg/optimize.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index d2e5727662..7a7c3e25c5 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -843,6 +843,17 @@ static bool fold_brcond2(OptContext *ctx, TCGOp *op) return true; } =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; @@ -1729,17 +1740,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 @@ -1764,6 +1764,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 Mon Feb 9 17:54:38 2026 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=1633637184; cv=none; d=zohomail.com; s=zohoarc; b=FFrllSPKvDq+lEtzY1oHmJJp2CUqT4eiTpbb22T2I4GfhTGYqN8a9FiaCrPeqFWAFZrsrBhQ7jbYXMtmc1zKSh3wxSuoOR9hhdG+uLGNQfp37fvjgsiD35wY1rW5CDw13bAaW1wKlEREXWc4d3dxDw4HPEL7sT/9S4l7W2KH1UQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633637184; h=Content-Transfer-Encoding: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=E4ObmGNykxKaQa5VfLS5cuL/CVeOQKjN8HAN9xs9Ea0=; b=PBrZuQC+qe9nnju7L1wGUUcz7bUTHTtKoTZcBTlsObOugBfGfox4Zh/uNDRzPJq98azGaE3eNtnfUIGmHoBrqgQhlsmrwG2y3iJczgso1Bq2pfEXzVoxRMd+gN7UyQ4TeokkW/pCNbhUcZ3vW5xwpcGb+UdYxQyYrbbEFMm3eus= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633637184911299.95707212127854; Thu, 7 Oct 2021 13:06:24 -0700 (PDT) Received: from localhost ([::1]:52508 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZep-0003dO-Pc for importer@patchew.org; Thu, 07 Oct 2021 16:06:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60108) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZUD-0000Or-No for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:27 -0400 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]:43640) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZU8-0007JL-B7 for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:25 -0400 Received: by mail-pj1-x1034.google.com with SMTP id k23-20020a17090a591700b001976d2db364so6026919pji.2 for ; Thu, 07 Oct 2021 12:55:18 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.17 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=E4ObmGNykxKaQa5VfLS5cuL/CVeOQKjN8HAN9xs9Ea0=; b=GXn5EXbMLHFAWPIBOiq44NfJZZF6/BaFm6NCEwb6LJ9meFEvZy/nDLmAs8Udsd8hn4 Hj/6TxyRvWYxVcdZ82EwGc7Z5HQEIvVJcr8L1kuv5t74uBGYyQFenXflAh3sK5zWmDHT zNEShsRa8chAViN2wqvsq0lCar09OgifDKE+z6I124OlGaG/ZvR6yc4a2RbBromQT36m yCVUpMvDZZLUPMRYsvNZdaJls92P+Qk5pCMPjTd0r1aGD/9b+3jGFKySmoaaGyhfi+FH 23p94/OWZukyH4o+pEG2kmUKB6nKFhrAeKbwMgotYFj3W7K+I7DZkSGWmXO2xUGXoCJL 1kCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=E4ObmGNykxKaQa5VfLS5cuL/CVeOQKjN8HAN9xs9Ea0=; b=me0mFZrqpiT05+iqbDuiElxdxkrGttd+eUgyTzomqOGzwGAhwe3CtU4aGB/cWfRdlD mW6/2l1XjZvZLchSwkJaoGpHjpzpq7ulxpKvC0epmgUc/PJNnpW+iXjLJfodEXoBT84V Y2Z7sON0gusykVSmkq58l3YEoqL+cjPF8H/uyq9r/PBNhS+peFrmAfbOamKrP/xG/3KT F79hDjEKKqo79RdCuZZT8cP23U2Sdh0EFP7l8RWuUCGgr/m2IFqfFKbGZeHvQrsLM4UU ln6Ks5zcH39YpaKgUsgsYan4skcE6ubK9OoCHR0zts9UsS0FbjDfNc70FwS+B5A5YYN9 u2Vw== X-Gm-Message-State: AOAM533irNrPGSwOgjTauga36X3X/vWApYkgS3GiydsN8PlQ5BVeCMNu Gk78CvEN6Ak4JrfkenypAmNNckMxTITpqw== X-Google-Smtp-Source: ABdhPJxmy0MC+YUw1YV19GJWUlUIoTh95aSZt+eW3PCO3qMARrsbVVgLwfXgovaH8QSWZleW9PcgbQ== X-Received: by 2002:a17:90a:ead3:: with SMTP id ev19mr7521695pjb.136.1633636517896; Thu, 07 Oct 2021 12:55:17 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 28/48] tcg/optimize: Split out fold_dup, fold_dup2 Date: Thu, 7 Oct 2021 12:54:36 -0700 Message-Id: <20211007195456.1168070-29-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::1034; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1034.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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633637185960100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- tcg/optimize.c | 53 +++++++++++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 7a7c3e25c5..db50cf6499 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -917,6 +917,31 @@ static bool fold_deposit(OptContext *ctx, TCGOp *op) return false; } =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); @@ -1718,28 +1743,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 @@ -1783,6 +1786,12 @@ void tcg_optimize(TCGContext *s) CASE_OP_32_64(divu): done =3D fold_const2(&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 Mon Feb 9 17:54:38 2026 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=1633638187; cv=none; d=zohomail.com; s=zohoarc; b=Ypxqel+Err82ZUTBCC1rxtqUFIS6gzcCS8xOKpGpDhq8ATlZ12RH2w4Ordi1gnWo/N0zaJjEjvjFjR4Q22qVFlEkOJenc5mIHQHaboWDF68NmgpZdKGcv7K2lmmv2e6yBxlpY2tkJWCcCyGjxaXzoa7Q3rwLFucoUi6EcZ77dF4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633638187; 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=G/Pjl5+kFZRB+zzLoh9Xly2d8xwka239nWBklw8zSY4=; b=As226gzlhjqngvMv57LfANBc9PyS+BJjPP/Lpz1Sl5tPhTCSpOtNqVieuPaB2cTJ3rOJlJwN3xR9UrQSj/BTbzOQIjsMhSja6XHz0ARChunvB+7zdsKBl1hn+/dSM9nc37liWLjc7nOD575oRWGq7j+kBilpOs2cXs2kPaxStG4= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633638187799748.1800312432866; Thu, 7 Oct 2021 13:23:07 -0700 (PDT) Received: from localhost ([::1]:38088 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZv0-0007Af-My for importer@patchew.org; Thu, 07 Oct 2021 16:23:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60092) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZUD-0000Oq-9w for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:29 -0400 Received: from mail-pj1-x102f.google.com ([2607:f8b0:4864:20::102f]:56165) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZU8-0007JR-Ak for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:25 -0400 Received: by mail-pj1-x102f.google.com with SMTP id on6so5703287pjb.5 for ; Thu, 07 Oct 2021 12:55:19 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:18 -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=G/Pjl5+kFZRB+zzLoh9Xly2d8xwka239nWBklw8zSY4=; b=wvk10FIbgZh+gifZnY2xmMFxlRh5ukADShhAReIv16Tyz7AiOFJsKg5SedpjRUwzG8 9wZiPjtSplrrw8X0CUPRRCtfddWjH5nMvKwtKD6Kwxmc1jK9D3E7pFi9v+LNjURf0hKm iattPiYRWvlN0J8uXYHOzB7wQP3xE1Cqj1+q93oGlCJtF3GpHI9Bcxn75F13xhw6er0s /oyjqreV4pjp2tHvWH1BzhELecNLCDj9tzMBww4PyD1fchO+TtRAbfk9LG0qjdTwA+Bg xrVhYDBXG/XjA4vLe119CYTDw0tbJgXj3DJnHYHqVMJ55Sr/MyliS1SJX/wJoTv0IRgL g38A== 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=G/Pjl5+kFZRB+zzLoh9Xly2d8xwka239nWBklw8zSY4=; b=52nZIYUW/+o9rosLCY/BAMoCDaXvOv+puUyds1sYsoPLzgZhodeNDWMIU76gU5nQwD ze496spWV4X8/hZbtkP1p9z4CSdJU+1Q2ENQFXCCpeiGUlsI/yX7HKwoPgF6sMItdXf9 57FKKJEcyG7b1mWfM8mPKTutlNfSbEFAicyjgn9Bq/A0G5pmLYy7WhOe6+LZhJm0HCXK HnFwWN//+4UNhAgwJcI1LLK0rcYdLC8D06Glu03gO2oP+/Q13EBn0FP9eQOMHJWgqrhS yVwAYWf+DXkJMGfk6M8Fn799kWU3r64e2HBC/azl2Z7rA7l7QpAdtUgcF+0h6DIBY8yA vMzg== X-Gm-Message-State: AOAM530SsQXUmH6TKZ2ZIJcl3GP1MT00WW+kjvkKcdGZmopq25j9W5O/ Et+BavGGQi84klP4uT7z+MJFd/mV8HNq/Q== X-Google-Smtp-Source: ABdhPJwYXk1fcTDmt33mmoS4qhotjTRQjNY8u9ElUaxIxNAX1v+EeTWbO3reBGRuFeW8sdFzBrrXgw== X-Received: by 2002:a17:90a:7d0f:: with SMTP id g15mr7586924pjl.227.1633636518795; Thu, 07 Oct 2021 12:55:18 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 29/48] tcg/optimize: Split out fold_mov Date: Thu, 7 Oct 2021 12:54:37 -0700 Message-Id: <20211007195456.1168070-30-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633638188869100001 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: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- tcg/optimize.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index db50cf6499..3a923fda10 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -1012,6 +1012,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; @@ -1735,20 +1740,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; @@ -1818,6 +1814,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; @@ -1885,6 +1884,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 Mon Feb 9 17:54:38 2026 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=1633636979; cv=none; d=zohomail.com; s=zohoarc; b=KVsrYMCauokizhPUAdHL8yScKc8wjZjlug5fjggEEW0a24ZstsAwlyB27R9bPgkl4ijmjCLsokTlhyGnxrmO6cC6wEfDpjQa32WKiUm8pKYPES3UZZ/geN4sMF2KLS7sTPHEbd/G25Z7wVidnYAcgIm9R6omAPJhsvvzm71J+gs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633636979; 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=+iP7I5BctgXbBUvM9qfA2jzVAaTcAAgoD5ny2gP5iX8=; b=JA/u9BlALA1+4UZLmnlapxs9Erfelg+Kr+LWl46mUa2/5N7N5rOLNj1tjY/WlHu0Rw02pkTRbFe5cP74tyiyI4SoaUcYUizhzBLXsYrlwjCDzGz0jZoLaXYACe7t6BK7Clrrkp6XMRqM4IwFTLe9UepF4scqBeBQOG++yrgSJ74= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633636979613745.7840630203135; Thu, 7 Oct 2021 13:02:59 -0700 (PDT) Received: from localhost ([::1]:44114 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZbW-0006MA-AN for importer@patchew.org; Thu, 07 Oct 2021 16:02:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60118) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZUE-0000Ou-6T for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:28 -0400 Received: from mail-pl1-x632.google.com ([2607:f8b0:4864:20::632]:44563) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZUA-0007JW-7a for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:25 -0400 Received: by mail-pl1-x632.google.com with SMTP id t11so4586003plq.11 for ; Thu, 07 Oct 2021 12:55:20 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:19 -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=+iP7I5BctgXbBUvM9qfA2jzVAaTcAAgoD5ny2gP5iX8=; b=qTSlj1Cmg3/3QESXqvz3Nfqb44FinACsC5s/xELGUWtYz9qyD0ZvccDWou9eaBpna0 QyrzJY8UQ6ViGeZHQ1F4ttE6C3gU3GCHCAc4qHPi+eajjUZTGjIaIPG+v1C4tfxZc82C 10+bUVXggmRzd/iwFfMp7itd9a8sp+D7kJn+oz3LLEUf+vXeUOi/CG95PewBSRFJLTzX E4BaVShWkrGT5Ne2cVIA2iQvyOAb+xPT4xx2ztmoxfLTd9+z/N6fm16keDcO+W0vOzAY fDbgmqBnooxtLvjNbsSJdXkcJJg6v3UxlQgpfTCRyPZ6LrPBYVrM1yOTJb6nKTfMEHtL Klrg== 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=+iP7I5BctgXbBUvM9qfA2jzVAaTcAAgoD5ny2gP5iX8=; b=hHlrCUKbTfFIPcnar7bto8FSwRH/g9Kc+/K2458wQI/spQiU/0tM3d6FJuSDIxkn4b J9mqG7lvMMnLG7nUxiySEHUdXoRBfrZBzZCTPv5MkFDD8X4OKgL4EcwsZ4HoEN1aiUXu F/slPYWYt2cR5WRZ1GLjaIginsMtF9Uc5QxUCkvRi333XvhyEUm80L/8QBytbtGzHpwI GZtBfifKvXih8RzX2kyCKFLoJwLEstpCcgUCtAVNloI7+hIRv8Eif1hDa/TsJkPZNf/C F/h/qzEUQAkSJVrxXViHoqENR33YSCOSxK6UsN1diUAaDPmQxdegOngERwjsFyGJvk40 Qp5g== X-Gm-Message-State: AOAM5312jRyy4INzTQKaGT8gQ62Wg8i+8f+DCLcgwfB1QnH5BJmrj+DB 3hPDtVb0WZJUbjHXHMvQrYF34sYY0o7ENw== X-Google-Smtp-Source: ABdhPJzX8QBSpsticciqvi8NkFan4eymQ64VBVU5kl/3jiZeKBAWheOJt8ecdcNUBdxb7VCzAmL5eg== X-Received: by 2002:a17:90a:290b:: with SMTP id g11mr7517222pjd.35.1633636519412; Thu, 07 Oct 2021 12:55:19 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 30/48] tcg/optimize: Split out fold_xx_to_i Date: Thu, 7 Oct 2021 12:54:38 -0700 Message-Id: <20211007195456.1168070-31-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633636981111100003 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: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- tcg/optimize.c | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 3a923fda10..708fb850b0 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_ 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) @@ -1211,7 +1224,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) @@ -1221,7 +1238,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. */ @@ -1726,20 +1747,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 Mon Feb 9 17:54:38 2026 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=1633637362; cv=none; d=zohomail.com; s=zohoarc; b=IJuubidrzt3qI7Vfw9XoGtVBkWx+XmHSnwvRl1viytCp4OKDBIdkPIX4kj639D8NWpGZPiBheFO2kMbBZPXsF5H7nu0lgtyXx4pjSVE8LGOMR5WB612bvRjhH+EUG2zntVM2pUoGxmnjIXjHEt95/p1S0bQA04JVmFmlZ+YccXw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633637362; 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=twiCQpvMWsXn9C04Aryc+Xn7T8xJZQa9v2G7lJnelP8=; b=KzZ0N1mAsrP02/8QuM58K7sPBahscc3YUZYh2gvWFxZwL+ww9LnvrKWoDATziKOyYuR6r3MhhzmQr+25AM2FWvYSqtxPTvkZIgf+eAv2gnGDOaN8aZINWwTu4CApGArHF6ZMcAqRJFN1pwfmBgHXhtU2DU5op9QQRTjOMNCa5fc= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633637362969523.5907731000954; Thu, 7 Oct 2021 13:09:22 -0700 (PDT) Received: from localhost ([::1]:60844 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZhh-0000sD-US for importer@patchew.org; Thu, 07 Oct 2021 16:09:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60194) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZUJ-0000RS-PR for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:32 -0400 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]:40856) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZUB-0007Jg-Sp for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:28 -0400 Received: by mail-pl1-x62e.google.com with SMTP id j15so4636050plh.7 for ; Thu, 07 Oct 2021 12:55:20 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:19 -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=twiCQpvMWsXn9C04Aryc+Xn7T8xJZQa9v2G7lJnelP8=; b=lJ/TaxteZyed2tHg+zaBNQJwLdoHAXiv5xreHlaGGIxvm1mZ6Kxn/dJp/1ZEmuce9y l5VvjrahPUEvanm3POA9gXUwvUh+XIn/kpCyCAN+0HW/h0MpkZjnYFcVoLodruVXt6GL IhsVRvl8lg6FAQoH+NBV2qEPGvejPmAueg/7/fXSc70KAkNCUJX01b0B8wZ+otXsBE/k gAUNNWffyOImmMRwcD1OItjt0Z5LRzk2o9FR9I1RwgCD5+cAt0qeYfYUoIlRWIvXdpL6 wsn1D0n+Crsyp0/VlbaAgJiIcEijSXz9MPxDEbBCkhtsGRKFS0hh+4KVnn0tMs6sDtyj FLEA== 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=twiCQpvMWsXn9C04Aryc+Xn7T8xJZQa9v2G7lJnelP8=; b=DQkyS25zXK3/ORA7NAm3880j1Y2vc5K0N3TWlvkiuY80YWAq/rMlElcAuQaUrHCwxQ DJJ5m0+bEC6/md4Bdw37Ya4rAVEAu105qTc8foX2fItKZ/wqwREJDaE+34fijDO13Q/L YMbszezU63IImhKvv0S8xGl90uKZTrbfAPw0Ev8J+96wrn6bp3P/9fWF8parsco8asa9 fiFZ94pWmFyekBykN5uoA5y0J83ztxNqTWI1fmoMVcq9GZB7FC3fiA9mz2A+0iTNaCM1 rp6EoLeWAGP97608e1TMBqVJV+Tn61niq5RbADqlW/grU+Y1tgfovE4Vl0ERc6YkI+Z7 /APA== X-Gm-Message-State: AOAM531e0tbFx1/TO/YhtjRB8jSwuMv1Gf5z6DuNaVqG8kOzgNatwA9S JNf8bkb7hLMHuSY/nDzmlgwP9HbR7DK36g== X-Google-Smtp-Source: ABdhPJyQTk9eNmsWE5u8wzQ4aMp1dLchNu/CFBCApKrk5eZEgbyHEacuDHxAuuL6kYI2MtJUJb7iDA== X-Received: by 2002:a17:90a:d195:: with SMTP id fu21mr7647322pjb.67.1633636520082; Thu, 07 Oct 2021 12:55:20 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 31/48] tcg/optimize: Split out fold_xx_to_x Date: Thu, 7 Oct 2021 12:54:39 -0700 Message-Id: <20211007195456.1168070-32-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::62e; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62e.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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633637364425100005 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: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- tcg/optimize.c | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 708fb850b0..1ba3a78585 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_ 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) @@ -1103,7 +1121,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) @@ -1734,19 +1756,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 Mon Feb 9 17:54:38 2026 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=1633637786; cv=none; d=zohomail.com; s=zohoarc; b=j/211xTfP3Dsn7Cdjvpc6pawzVXovp87zg16BBGOveXQwV70MNzcDC/RDMUD1hdElZqW11co/nQBM8tiax0p5nVXqRZ9E0IKgre+JItk7jqWLXatjaahupY26OclvFubv7a49Rsqyd0ZAUCiB+gj0OiIqm9OAV7B0wSTu+PfaBI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633637786; 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=v/ruj9D2RAvl/WUBwZC73jxDYCJS59pO2tGcXETuKaA=; b=hKUSv09G+jdRs7tiogT/11i5MOS097ueV/tPXM6R+JRgIoC/1wfw+nN4MpdRrdTPYIVWxtQtBTJTwrMoSuNc5vgIgDCmqRDM/WHNgv3oRUCvoDCOLVITM+xZfNZkpnchVSx0x014I+IXaHcSIb34TN+qed95epTmVTdrR2wBr/A= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633637786311630.5416637980592; Thu, 7 Oct 2021 13:16:26 -0700 (PDT) Received: from localhost ([::1]:49236 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZoX-00048b-75 for importer@patchew.org; Thu, 07 Oct 2021 16:16:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60130) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZUE-0000P1-NC for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:29 -0400 Received: from mail-pl1-x630.google.com ([2607:f8b0:4864:20::630]:39671) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZUB-0007Km-TD for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:26 -0400 Received: by mail-pl1-x630.google.com with SMTP id c4so4637400pls.6 for ; Thu, 07 Oct 2021 12:55:22 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:20 -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=v/ruj9D2RAvl/WUBwZC73jxDYCJS59pO2tGcXETuKaA=; b=ckl+JZt+VpcFP047pB7xw8DjsgNemyHuxN1LB3Bkl66/qZBTueUOoQhybZ/2dqiRL/ GzVEsBC4TOB5lvHK/gJIRmw1cbO4A9oi/s3v+M6GBjYaJhhyoOiEQJV1L4ud49wGFg/M OmkVB7t4NqNzExZkYdQB6hcMj64IMAoSwqo43vFlkm6h0uK08W4JTjerz9gbkDP87Zgz JTefKblD81x4B6xZZwTDeX285Y7wRxdZrw8SWb+/0CPRZX8XMV2ZriJqjDnXpvrfBOgp iKx7n2QdKeyj5QG0a0aoc6mszBTxRWGGifq+2zEJ9tq8C63wuY7mBX/PP0b657CgscNt xeYg== 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=v/ruj9D2RAvl/WUBwZC73jxDYCJS59pO2tGcXETuKaA=; b=jCzyYt29EXhuBWi7r8tr5lxh2pyY9CQCEshSqpO5imj39fiLv1DHXLvX/639DRG8q2 5qHx+V825kHx/uZ8XQd2egjr3ijmNEmLuXLzBV2fcYPfOt4eRCDB3IXcaZA3fzZSYoZ3 dlmA2NNRD3/irdmWZ+gt6yt2mLM1rhEBk+oLm2GEDk6c7P2plkje64Bxc9Mtvq2kTXk6 FnmIT38Rra9TxsOZHXNgsYjalWkCCcSSvvlluUfph4ickDyLA1HD9MzaS4N3BTL/ZWDp OA9Ke6BG6XZYDpXUVsCaU+ZECyLHNNmModJ3ON2Xbyk8Pn0dSRYPIqFoUeGfQwJ9GEXY kqbg== X-Gm-Message-State: AOAM5331T8UeeqWcYT1ep3z2SPmbUts5OytZWalVd2O7nJw2blF3AP8j kT629YW9nOVMpLRTlDQxP1pesfpKEgl4dw== X-Google-Smtp-Source: ABdhPJzzE30dyhmLbRAagk6qX7oFmR0eaEzWgtzf7V5YfgUE7w0orLvH5uT30SZ9kxLd5j9imN+Wyg== X-Received: by 2002:a17:90a:9a8f:: with SMTP id e15mr7773517pjp.198.1633636520635; Thu, 07 Oct 2021 12:55:20 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 32/48] tcg/optimize: Split out fold_xi_to_i Date: Thu, 7 Oct 2021 12:54:40 -0700 Message-Id: <20211007195456.1168070-33-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::630; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x630.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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633637787175100002 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: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- tcg/optimize.c | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 1ba3a78585..0734bcb42e 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; } @@ -1078,7 +1088,11 @@ static bool fold_movcond(OptContext *ctx, TCGOp *op) =20 static bool fold_multiply(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) @@ -1740,22 +1754,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 Mon Feb 9 17:54:38 2026 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=1633638782; cv=none; d=zohomail.com; s=zohoarc; b=mQXUF40IlFvvkebGUPLq4C+58CzT2imtPheOxdmcaImC+R9t1WOQX2iskuiI+NHenpUgcKS+CZWSRk4a830eYEXb/FDLGoLmLksT/zWMAKcfW0lIfPeU6X/5PRetCT5WWikH6UpccAXR2PedG6v/zQ3qXBGAwGFlAY7c/c/7aVc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633638782; h=Content-Transfer-Encoding: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=NxFgWT4ru6x0IdGSyZDen0BhvRtc1g1hOUCqOyHF/68=; b=JRa/ct3pAPFCw1V7NLjfEVoDOUEylwbs8mIx69HwPrZp6OcgVRm3eVlOsAnqnY/WAIxnG3birDzYnQixnyDkHXJFhOujxFj/VsEV4ATZHUsOfIDwlKJoi5t1t9Q0ebH48aBULROaYIxMOUhZB5duKt6PJOwAgWHlGBv0LFyl1kQ= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633638781846822.6057767084923; Thu, 7 Oct 2021 13:33:01 -0700 (PDT) Received: from localhost ([::1]:33406 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYa4a-000675-KS for importer@patchew.org; Thu, 07 Oct 2021 16:33:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60192) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZUJ-0000RR-Oe for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:31 -0400 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]:36591) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZUC-0007Oe-7J for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:29 -0400 Received: by mail-pl1-x634.google.com with SMTP id y5so4645610pll.3 for ; Thu, 07 Oct 2021 12:55:23 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.21 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=NxFgWT4ru6x0IdGSyZDen0BhvRtc1g1hOUCqOyHF/68=; b=zZkrurEKQhCUEVfSlVlbcPaVJ4WnHZHOYdFePYdQ58zuxAB5PtHkkBuVTZoql0an4q HOXRv12PCS08/cosuvcrGfhsVGAD7dhq+Hv5DCOKPfJrEF7kVX+YzPaiFc94EczX22Eh Eqsuzuboqf71glJA0BZB9jGgXIUp1v7RUyWC3Ij+zrRjxDL4feLb0NxC1z0yKtysXL0L diINX9Fwo4KyATed+RRNxqt5MMz7eHXMEMmGjh61QZje5douZN/6PGS/bitZwyZMS6Z1 YDgt5VIUMiM40oQ42YX2tkRmQalB1oITfLlaA+7j0JpER3t5m0jQJVBlqHc47dKH8ZtN 4xSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=NxFgWT4ru6x0IdGSyZDen0BhvRtc1g1hOUCqOyHF/68=; b=aIFJ+u/ubUUkGrtvRaHIafv0FSQJPlT9xYYOI44ChPRZXwzyzaERj7VIiUOXlv8G+R I+8gfyxCH92RLbsCzZwAMUa9jwGgGDqaSE5W/3HDhQb6hJ/gzorzCNhadm/I8wLTxqOm cfLmiqfimJ0+GusTmPvlIybkCFx3UFcwlNaaPIPVdZeHypYBPE+RY4f0YFIEDIY1/yGC 5w5uzwe8HcNFMbZu13NtBADkhGViqvFmSAbJU7M5VXFc+M6HAp2eMg2kbROY0rquh+95 6ASxZ2UYBCRZv+JhBHdJVqnIr9VvPXEFfDh+xDh8ZtpUxt6kSZy3ml9cHYX1+7esxQUp kceQ== X-Gm-Message-State: AOAM530DJaoV2Kk8EnebG0gssCCftsLtbX7FkF+ixGCbGmqY3nZ0qkpg mfPDsHGY6uy2mmRpZ3Zo621odUDio2YIoA== X-Google-Smtp-Source: ABdhPJyzUDrkYJug42yr4r/Du6DonyRV9eZ9fGWHdsG/Zr6ZKb3JN+3yt1eE2ZvMMAxtfLO+DI+wsA== X-Received: by 2002:a17:90b:1b03:: with SMTP id nu3mr7125266pjb.76.1633636522128; Thu, 07 Oct 2021 12:55:22 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 33/48] tcg/optimize: Add type to OptContext Date: Thu, 7 Oct 2021 12:54:41 -0700 Message-Id: <20211007195456.1168070-34-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::634; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x634.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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633638783124100003 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. Signed-off-by: Richard Henderson --- tcg/optimize.c | 130 ++++++++++++++++++++++++++++--------------------- 1 file changed, 75 insertions(+), 55 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 0734bcb42e..324866cbf1 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); @@ -838,7 +837,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: @@ -847,7 +846,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: @@ -889,7 +888,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; @@ -933,7 +932,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]); @@ -1060,9 +1059,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]); @@ -1071,9 +1069,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; @@ -1164,7 +1171,7 @@ static bool fold_qemu_st(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); @@ -1203,7 +1210,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: @@ -1212,7 +1219,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: @@ -1314,6 +1321,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): @@ -1394,18 +1410,18 @@ 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); + break; + default: neg_op =3D INDEX_op_neg_vec; - have_neg =3D tcg_can_emit_vec_op(neg_op, type, vece) >= 0; - } else { + have_neg =3D tcg_can_emit_vec_op(neg_op, ctx.type, TCG= OP_VECE(op)) > 0; break; } if (!have_neg) { @@ -1459,15 +1475,19 @@ void tcg_optimize(TCGContext *s) TCGOpcode not_op; bool have_not; =20 - if (def->flags & TCG_OPF_VECTOR) { + switch (ctx.type) { + default: not_op =3D INDEX_op_not_vec; have_not =3D TCG_TARGET_HAS_not_vec; - } else if (def->flags & TCG_OPF_64BIT) { + break; + case TCG_TYPE_I64: not_op =3D INDEX_op_not_i64; have_not =3D TCG_TARGET_HAS_not_i64; - } else { + break; + case TCG_TYPE_I32: not_op =3D INDEX_op_not_i32; have_not =3D TCG_TARGET_HAS_not_i32; + break; } if (!have_not) { break; @@ -1738,7 +1758,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 Mon Feb 9 17:54:38 2026 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=1633638598; cv=none; d=zohomail.com; s=zohoarc; b=R1MUvum/ScRHGx8ktS0hzbuJPzHJLkAHwz6B9F6z0/Ijxiz2VG3FSjXqclCtLhIIOlgPtD8q05IPucG7AIIkmrm0g1NhNbT5roYN921+4RMQXsV8xdDaX+3bNS/eeUT/DTzD8KVunplqZwMvb/57y5Ifz6pkvPqbwhzipURJMcQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633638598; h=Content-Transfer-Encoding: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=GipdC9oOLsD+NYzRq3rz7fps15o9dIN62Mshbauq4As=; b=A73kDUrQjgYs9mp4ALjdSa+goxFwQQx9Ln7gi6BVgjmRT16t2HO1CtmJY3RuqMMdK+TM7XcNhcM6vmyY4cT/itNZGuFtreYBpOPEI7ATRLaBUfZINgt3KT2oPPuylfez9WS7m1JfsWLWk/8VrmFAOkIqM/BKwhDtxO4oWYN3aaw= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 16336385984633.6984577857143677; Thu, 7 Oct 2021 13:29:58 -0700 (PDT) Received: from localhost ([::1]:55618 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYa1d-00020m-BN for importer@patchew.org; Thu, 07 Oct 2021 16:29:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60158) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZUG-0000PE-Iv for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:29 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]:55008) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZUC-0007TL-B7 for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:27 -0400 Received: by mail-pj1-x1031.google.com with SMTP id np13so5713711pjb.4 for ; Thu, 07 Oct 2021 12:55:23 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.22 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=GipdC9oOLsD+NYzRq3rz7fps15o9dIN62Mshbauq4As=; b=vpsNv/TriQy9aJvzTqTOBp3TWMJ/959HqFKvJMFDBZ2zN4sbcOBJBP8A4sq/GJSojv MY6HUmJPjT3FMHyz3bd3GeOo7udg6W+E7jnrWAEDblwX4ysPPhK+lBILvjjwzUXUcp5t EOYugrVwgDSv4jWzEjFlDjaa3mRpqsQ9hT3GRCxVxtC1wWXuHR+ZE9pJOCHGDkPcu+aD x/MY8JWQqGeieiaoqAXPgGeJ16Mf4BNWHWTlkA9ylxn6anXIrfGlJnKZ0/bWXaFRWUes VXKXVbZFzaBqzDb33+16nj7U+lT3vNbfW1EaAY7v7ol89o8hIzUpDOSS8MbezpOXGFnz SL/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=GipdC9oOLsD+NYzRq3rz7fps15o9dIN62Mshbauq4As=; b=HWUOibchLZojdcGNwWl/Yt5uORrZCWCXRH7xiPEg59hhZRl4EoKVp5kmUnPOP/xeYP V7v2uTH4pw0EMnCwy39uiNSiVqdLH843mi7ZjT82zz7/ZuL+MwCL9BHhUGPSXYdZdw+z oS4XxT+1h0ocShIXV5StQwp5wMdFS0jJhsmCegZY45Odu4DYCMK/3WNBTV7g7FS+EMOq xJb+A1agYyszz0pHkJBgqGEHS5uXKuc3msuFnWNXsG1H8Pra745BSywhQH5KYG8U56hs 3dtEcBr0oxRYwBPOLZCW3k1SUl4ZBB+5sNQbayMAKOvPILBCIM6EkKJmD37DrWmlRzHV Wg2Q== X-Gm-Message-State: AOAM532kO5LCgAh+heEnenyrNsMeFP2woUgXs+z2RI/JfKGfKrZr1VQt YzmkrQPio44xAoe2hZGssNa73rWth69ZoA== X-Google-Smtp-Source: ABdhPJwj+Msvz3LH4ir1e8H38mV0II75vcXSYZCtRRoxfm+RhbeL1esV1hMKuuVwfHhjxWU/FRRU8A== X-Received: by 2002:a17:90a:bb82:: with SMTP id v2mr6496890pjr.57.1633636522856; Thu, 07 Oct 2021 12:55:22 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 34/48] tcg/optimize: Split out fold_to_not Date: Thu, 7 Oct 2021 12:54:42 -0700 Message-Id: <20211007195456.1168070-35-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633638599834100001 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. Signed-off-by: Richard Henderson --- tcg/optimize.c | 154 +++++++++++++++++++++++++++---------------------- 1 file changed, 86 insertions(+), 68 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 324866cbf1..1574954668 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; @@ -984,7 +1040,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) @@ -1122,7 +1182,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) @@ -1132,12 +1196,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) @@ -1151,7 +1225,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_xi_to_not(ctx, op, 0)) { + return true; + } + return false; } =20 static bool fold_qemu_ld(OptContext *ctx, TCGOp *op) @@ -1282,7 +1360,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; @@ -1436,67 +1515,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) { - default: - not_op =3D INDEX_op_not_vec; - have_not =3D TCG_TARGET_HAS_not_vec; - break; - case TCG_TYPE_I64: - not_op =3D INDEX_op_not_i64; - have_not =3D TCG_TARGET_HAS_not_i64; - break; - case TCG_TYPE_I32: - not_op =3D INDEX_op_not_i32; - have_not =3D TCG_TARGET_HAS_not_i32; - break; - } - 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 Mon Feb 9 17:54:38 2026 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=1633638479; cv=none; d=zohomail.com; s=zohoarc; b=TCicBlMUL+UdN02qlNChuK1SiJOxjoNvZcHmWfDTs4YVuSZM6CNG5PnMLrM/MiVnFk+RvAIWHMM3ensh7B1oB2QdY0Kc4P/+jmM26DCrw7rRyfEoqnDTqTVyOEJbMOd0Y1W5XqBwli1gDUrX0cRJasd5Uwi9o5nYfMQYTm/omTM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633638479; h=Content-Transfer-Encoding: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=NJiP9E9UTrwkSex6qRTi4cqhNeIGM1dhrJ93PMdgdnM=; b=M5wkn8XIlZz4ewqHmBfsZkRDj7aEZMwEq2R3airgTu0hIGofk1KlMXvE0Jk1KZfxtHV41GIHrh/Z+ww1pXt4Jconf4PgZzT6fsX/CR8dxrwAJI0OLRRBZO+JvaqEkXgOoRSYQYXpFaB0eGlGAnuebVd/jg5snMuc2/5jZ9CYBwU= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 163363847996771.92266605887869; Thu, 7 Oct 2021 13:27:59 -0700 (PDT) Received: from localhost ([::1]:50964 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZzi-0007Li-Ql for importer@patchew.org; Thu, 07 Oct 2021 16:27:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60196) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZUJ-0000RT-PZ for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:32 -0400 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]:52886) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZUC-0007YC-Us for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:28 -0400 Received: by mail-pj1-x1029.google.com with SMTP id oa4so5016821pjb.2 for ; Thu, 07 Oct 2021 12:55:24 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.23 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=NJiP9E9UTrwkSex6qRTi4cqhNeIGM1dhrJ93PMdgdnM=; b=t7IWdWhQZ7dxZDYE0pEk/9kikjEZS8/8Izyst2GE3h6Fe7suPQiL+eX1C6CHG2QrIG CqbZ9h8LrARExWv7yIZy+rtejsJB+f7dXSTRofcaFwxCDItZJ+NvyYstfw6fivxKlg0B 5Is/Ai4TIuKIFKublp1+phfbLwyE2gw4RWw88Cm9GVKe2BeVy7i9SSSDGXzYdeeO45fg dqLopQljqHPcW5skRFP7zb+sanRGQ3K2XH3/dq+q1xtr8MUjwtx15pjMa+lwKWgqrLOW K70XX75SPcZqUH8I3FTNwrjdfUbfmsgQsQMIqmC3CmTHFFx0u8z2BaIQcyfkA293BMsd POMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=NJiP9E9UTrwkSex6qRTi4cqhNeIGM1dhrJ93PMdgdnM=; b=39ZPAe0kCNcFA5SleT3JnoXPmvkS01eistLarxsM21jkxkEdF95qFa9VOUVAA4UIjN Ho1euzDkJVyOJWB1FYydH8H3kNWrf1wiKkvqMZV9UsXx6s6zTWJGdpydxDvWPJ76FZin oFkOtwYMzrICFBqyu0tAgBZoy1H/S2LCgWzVg1mFf/TVKg72QW+/qiuQpbYZtsABrRYo bj7GOYqswHyKgM9H9HZIgg+Pp3vzUHUgZUNKjiQWqB5JUiuAykfCtkUHC+xyCHzGnFHN E99h82+XJ4ruBVj0HBTl13bW8Y1kCO8lg5dLe7rGjFp6jBSln9pHD0tNe+GKpyH/QI8r +Y6Q== X-Gm-Message-State: AOAM531AkBxfs0KjHC+YJm9W2+XdcHDHZibhs9mcFPl/Q62J6g5zsfo6 9MMTSqqHOH0p6uw9C3NEH129bs4ppApXkQ== X-Google-Smtp-Source: ABdhPJy6tzf1YDm+Rp7obeF/bzre5Z33/j3VuVDGLytBbxUzzrcRDJ0M6tUCZdd6pTstJo2k2o9dVA== X-Received: by 2002:a17:90b:1bce:: with SMTP id oa14mr6850727pjb.191.1633636523625; Thu, 07 Oct 2021 12:55:23 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 35/48] tcg/optimize: Split out fold_sub_to_neg Date: Thu, 7 Oct 2021 12:54:43 -0700 Message-Id: <20211007195456.1168070-36-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633638481280100001 Content-Type: text/plain; charset="utf-8" Even though there is only one user, place this more complex conversion into its own helper. Signed-off-by: Richard Henderson --- tcg/optimize.c | 84 ++++++++++++++++++++++++++++---------------------- 1 file changed, 47 insertions(+), 37 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 1574954668..9d7b174443 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -1191,7 +1191,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) @@ -1343,10 +1351,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; @@ -1480,41 +1525,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; - default: - neg_op =3D INDEX_op_neg_vec; - have_neg =3D tcg_can_emit_vec_op(neg_op, ctx.type, TCG= OP_VECE(op)) > 0; - break; - } - 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 Mon Feb 9 17:54:38 2026 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=1633638064; cv=none; d=zohomail.com; s=zohoarc; b=bwEaZnUqP3bQycxtIA6VchtsEWuSXC24xUsZciDaS3/8OTG9BPcuJKFj9NDfkNPMehYZbtoTUJgfuxmHtpm7Zbr20VlXxCcRLP3BlAercCLINDZpZ/aYoZJUwfqjm3/IjA4s3LWTjvgUGGc5I5uQqSWAVy/ay0EEgtz89A234ck= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633638064; h=Content-Transfer-Encoding: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=i4kG4VWlj+Rxcmce4aIwEOwzX7nV5pr9aS5aMS82Wzg=; b=j7RUngqvNMY40z2CrQn4ric9Uy5oa0H/z3IgDOgeeoBpGQqr7PN210nVrjkfdSY9mk+Ct9A64DdjJBc/GJQxHN7bYy0B1f5Vjn1WhI/3lkySDi8Cc09Y7/dxb8tqjCBWNI3mMh5B+D2jYfGs4QoBAyDAuA6+vZ60ysCmq8i84gk= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633638064285554.6103667449293; Thu, 7 Oct 2021 13:21:04 -0700 (PDT) Received: from localhost ([::1]:32998 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZt1-0003kT-AK for importer@patchew.org; Thu, 07 Oct 2021 16:21:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60174) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZUG-0000PI-8K for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:29 -0400 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]:51879) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZUD-0007bT-OX for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:28 -0400 Received: by mail-pj1-x1034.google.com with SMTP id kk10so5738245pjb.1 for ; Thu, 07 Oct 2021 12:55:25 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.23 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=i4kG4VWlj+Rxcmce4aIwEOwzX7nV5pr9aS5aMS82Wzg=; b=fTmV5GY7snLHiFKCppM14nOIYQeKwZgVPIed0ar3380zCnonZoCmEJOxX1dJxeRm9i w62ExKvMsVvy0yKK1tTRxlWlHK799G1+cDx8h/PasgniQlpVcxMIY7CpqI0LimCdDv3j JE6Uw3YRru9nKSH0FWUqzk0cJEnyiMznfu5N6XCO9kDZvbJicmaoTnWwlIBgiQXMUIAe Le8CAQkQEp3deNOsNu29R3sw8aeLIg1j04w9D46ys0XVElEdLzMJQ8B5Vg6FDs1AzOco aHhsg9zMQcq9QaOel1jJwPsLqzINIfcobApaXBBlwlDAYNamFjTXdbCNjQm0dXbEUh4O h8bg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=i4kG4VWlj+Rxcmce4aIwEOwzX7nV5pr9aS5aMS82Wzg=; b=HdCsTZbGiZYsH7K162JwsexNes7WtwYqF7IY8XEfGWX5eDmodBEmMCxO9KH8qdmqoW 6wy7eVwmrl9PSNnn3e0NHCYM/qmDGp0akQ4nFZ5ImxVfltztPAVt/HV2Mwj8EFjM8i8M mmXqxZ6KkjNK2RUPJBjgWrxjVbk4eNx/XWKl3U3ghcRk7Sce8Gi7/C5nIOEtrFBzTGlP IUVZGmeoWEd6Jp9MbwBnetZJDuWziPw7i/dO4wAE5UpSqHk/Ou6ZUfhjQ/o2bPFZ+W8m RXc2ClJDhZKoU7xzJ3BaYadncA+44OAIEkqyi3s8pjgx3GHBmwkyMZPkY/VG4RUBVxHX M9CA== X-Gm-Message-State: AOAM530whOhoakNtjG1Xu+FrElmzKyTuK58jzkwSZfbcDWmyGnIfaE6A UjGdsL8PY6NTs/ux4P2KJjnN0baF+dqSqA== X-Google-Smtp-Source: ABdhPJzROKjWApgo00EpGMQmjegwx+jVmb459m/Hm2Cl3DIQIDDa1hx9B8RlOlei/o4ldPoI31mRIg== X-Received: by 2002:a17:90b:33cb:: with SMTP id lk11mr308201pjb.0.1633636524317; Thu, 07 Oct 2021 12:55:24 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 36/48] tcg/optimize: Split out fold_xi_to_x Date: Thu, 7 Oct 2021 12:54:44 -0700 Message-Id: <20211007195456.1168070-37-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::1034; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1034.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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633638066355100001 Content-Type: text/plain; charset="utf-8" Pull the "op r, a, i =3D> mov r, a" optimization into a function, and use them int the outer-most logical operations. Signed-off-by: Richard Henderson --- tcg/optimize.c | 60 +++++++++++++++++++++----------------------------- 1 file changed, 25 insertions(+), 35 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 9d7b174443..d1d0f3f60c 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; } @@ -1041,6 +1056,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; } @@ -1225,6 +1241,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; } @@ -1348,7 +1365,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) @@ -1391,6 +1412,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; } @@ -1406,6 +1428,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; } @@ -1529,39 +1552,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 Mon Feb 9 17:54:38 2026 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=1633638780; cv=none; d=zohomail.com; s=zohoarc; b=LomjCH/FdLk9TY1CwdHewYFQ3NA92ZYQCguolA5rmF1SqtTRYVfv5JUisFuh/CLD49Xg511FQm1xY7FGHAtoa1xEo98MCYQIfRx9g9Kbqz8TTQxkrR1cm4MiA8AWLKSrKvxCcRVjGtxVJ9zP8I5J18kQrZtCYvkTgV0oiDQYBt0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633638780; h=Content-Transfer-Encoding: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=FKjPxxZrMAI7AMd/AZiwwZRBfwrFfQz+fcb0OfyR6bQ=; b=lMSbUYRf2DQnTJHKjMLCS0D3UQebV2U0YUnm0iUYmTggzZlIdqfE11N0FDK3SVAq0wwfIaMhBeoN0amj5KcrXtPfIScBsas5Nrk2rI21hn104MnB8Y5SKKZ+8hAxCs0L1lmvz/Qz1Dwgy8YxdY282WUw4cVTMArMVEw6vnXrcfk= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633638780755828.5265852503701; Thu, 7 Oct 2021 13:33:00 -0700 (PDT) Received: from localhost ([::1]:33274 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYa4Z-00062O-J2 for importer@patchew.org; Thu, 07 Oct 2021 16:32:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60218) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZUM-0000So-Gn for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:34 -0400 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]:46656) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZUE-0007eA-Uj for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:33 -0400 Received: by mail-pl1-x633.google.com with SMTP id w11so4578790plz.13 for ; Thu, 07 Oct 2021 12:55:26 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.24 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=FKjPxxZrMAI7AMd/AZiwwZRBfwrFfQz+fcb0OfyR6bQ=; b=K+fqdO8qSREoZx0BVByXW5EzABtBo1+W6lJb5wLsQLWxMCeYkLo7p3kRxtRPyS/z9O Mdg6lsUtNmLI422ubq7LAj+49CTHMQsgSyd/uaCKCkvXt8whLv0SU6GMGhtEFBvyiX2o hGftv6oYoxS8OmmpMF/2pVxof78OtOVjTzw1t/fE5I1gfZX/L89Za/DAZsUQrLXzovzT FXZsMS1Tdd89U17JzWLS1uDcOT7LF483OSb1LPtJEOnfXDSzfPg3/rZBQWICxMi9IuV9 p1ZyFOV6STmVYl+jBCixrFZMy+pePTvBG6R27swYj9Z7hfrdGss9ro7PgEJe46VD7LCf 1ebQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=FKjPxxZrMAI7AMd/AZiwwZRBfwrFfQz+fcb0OfyR6bQ=; b=2vEaaQIrvX0WAsBC0zCQT/7TpjUsEKwxy/IfI3R/m869WfYLQ7fU/ZB87IPc52cp6f G+y5Q1m4AH4HfxM7MHwd2Spckvg5JZd1pgOus6qRm6Lc7kERMy9AARetXG38zoiAiTpg 3F88ay6dILtln/Ewzxm96pZgLPJJKr6Cot0C43TTDwg0AxVIjeyeawY1u+f69liV3EJe /GbcjcSmaStk8zH15SmrNTcPAMsY3fOampPlUpmJQ990CCP+DYOuogUH4a10DpwDfmGb PmJcD4EY95yy/O8yKhVNMgCT+cpg/KKEQcjjGvrUnjZrHyqJWEImMo2nCgbqHzrb3fSD 90rw== X-Gm-Message-State: AOAM533jTz5ZkbUY636p9Zi6m1usaObSXp1iSgR/o9OwO6DN3WQE8tBS oPa/FJ9D59yL3G1v7ZEJC/phpdI+uqlTXQ== X-Google-Smtp-Source: ABdhPJwdx7ubwhmkRa05q9AY0QqdFy2As1HRBJbgZAhd9LKtqm+ANjYJXpIafTGkauAJq/GxI5H1Qw== X-Received: by 2002:a17:902:650c:b0:13d:baac:1da5 with SMTP id b12-20020a170902650c00b0013dbaac1da5mr5656819plk.20.1633636525053; Thu, 07 Oct 2021 12:55:25 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 37/48] tcg/optimize: Split out fold_ix_to_i Date: Thu, 7 Oct 2021 12:54:45 -0700 Message-Id: <20211007195456.1168070-38-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::633; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x633.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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633638782908100001 Content-Type: text/plain; charset="utf-8" Pull the "op r, 0, b =3D> movi r, 0" optimization into a function, and use it in fold_shift. Signed-off-by: Richard Henderson --- tcg/optimize.c | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index d1d0f3f60c..ba4ad38007 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) { @@ -1366,6 +1375,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; } @@ -1534,24 +1544,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 Mon Feb 9 17:54:38 2026 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=1633638594; cv=none; d=zohomail.com; s=zohoarc; b=Zth2871xRF1jHtPWBRsE1SO0y55jlpPTDBm00W5qwaOipr9omlH5jsI2EoLv0rBEZBe00WJ4YbVSotaUp3RaxS4w5EGt3xXpED7FGP1Iu6/blgYkkukk6YrF3+7VFFlNc0Y6z0XSQN2oarsDkhnxPzTt30UN/kpCvs4uzRdc9g4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633638594; h=Content-Transfer-Encoding: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=BYnotq9PUK7JisC5u4Li5sEfBI+MReaDhalJ0KNXJyg=; b=BZ9cSvaBuySCrrk+3ZGsDmMA30TOyIn4aAW2cKDEzGiE8KZLePXSA5T+6ydTI8dDOHQQpilukE4zw2Kwq6xvSC1v1cOKxsY9vznJErP0S9Eu123V8kkwyWyhI/HpTyQdTEz5QDrt18WhJopxkqwJOAvnoTdFNXoV2NgnVxterzc= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633638594400429.24020243890163; Thu, 7 Oct 2021 13:29:54 -0700 (PDT) Received: from localhost ([::1]:55416 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYa1Z-0001sX-C3 for importer@patchew.org; Thu, 07 Oct 2021 16:29:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60198) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZUJ-0000RW-RB for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:32 -0400 Received: from mail-pl1-x62b.google.com ([2607:f8b0:4864:20::62b]:35692) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZUF-0007fS-DD for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:30 -0400 Received: by mail-pl1-x62b.google.com with SMTP id w14so4658729pll.2 for ; Thu, 07 Oct 2021 12:55:26 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.25 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=BYnotq9PUK7JisC5u4Li5sEfBI+MReaDhalJ0KNXJyg=; b=oGmkrEe3J9CTfjXijRuIh6/RF1OjggDjKqnjDeHaP9LHoud1xFLG9JyiBDjHV2VeRU fzzSUh2M8CkZ8fWh+PZ9E9/TL2b4BuHp7B5kr+QiqhEzajNEF5u6JAwxPj/5buLv2sMO KuERkpPWzaN4T0EghcyQ3gPY1eNUzzbfaPTMW2H0r022uS1RvZa6uwLn+Ugxxv7S6CFA nlMYZDOiMai8TR8wXhqhyqkZAxhHZ5h19jYeysbyIHsiNIvkH11TTC1qNicT8gm4Mm73 T0uRFFQVG0j2NJJS9kuW1ax35H0MYeT1GDi7w86jE6tPyaETW5wwEQPhEHachJr52fXC 0Lgw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=BYnotq9PUK7JisC5u4Li5sEfBI+MReaDhalJ0KNXJyg=; b=HqtWhnpK3fWpVVX1AgIkGemnFqVzb9wfL5XtTiLHeVPDnGs9fw2y9TGy6Dukc5k5Bg zPqG+h7ZI/6wzCytQmAiRcMuFEoGA8ZAvzV/W9l07lLaQJ5ilmtDwRZDf9V5jDCO0J5V EZVxmpxpzvS7bCOF19/w/jKFy2tjC9BaRUOTyq7hKrT7+h3OJjvTTxDXwsyYL7ShMAvQ xdtcnvt+m/kTX/RI2AZXNlYp80wsYRbQ+a8Yplh752pwSFYXC0ITisXna9GS814BHHX7 59+poofXu45cT1LQWypLHoL9rdgAJXITk9Tq7ON8mXB3exjkP6IPxtuEGobwPRwLVVKy MVxA== X-Gm-Message-State: AOAM533SPHUqsuDs5KWcskXM+LhUec/vFrK+KlBjFwekUeomMPAeyvi8 i3rP4UvzwTPw9qHA9dj02As8fkNBH2KbPg== X-Google-Smtp-Source: ABdhPJw04mxtv7/zbujwM14t2E+rwC6h8/T+Izu06IdIx3fpP8Oqezdq60JLzVXi9PdlXZN3bdcsTw== X-Received: by 2002:a17:90a:7301:: with SMTP id m1mr7037249pjk.34.1633636525821; Thu, 07 Oct 2021 12:55:25 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 38/48] tcg/optimize: Split out fold_masks Date: Thu, 7 Oct 2021 12:54:46 -0700 Message-Id: <20211007195456.1168070-39-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::62b; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62b.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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633638595538100001 Content-Type: text/plain; charset="utf-8" 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. Signed-off-by: Richard Henderson --- tcg/optimize.c | 545 ++++++++++++++++++++++++++----------------------- 1 file changed, 294 insertions(+), 251 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index ba4ad38007..d82d0f15c7 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) @@ -965,13 +1022,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) @@ -1008,6 +1104,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 @@ -1017,12 +1115,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) @@ -1034,6 +1159,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 @@ -1074,6 +1203,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 @@ -1081,7 +1212,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 sextract64(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) @@ -1105,12 +1244,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) @@ -1151,6 +1361,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; @@ -1216,9 +1429,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. @@ -1254,7 +1474,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) @@ -1268,6 +1491,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 << (mop & MO_SIZE); + + 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; @@ -1288,6 +1520,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 @@ -1354,6 +1588,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: @@ -1362,6 +1598,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 @@ -1369,7 +1607,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) @@ -1379,6 +1625,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 @@ -1434,6 +1687,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 0xff; + break; + CASE_OP_32_64(ld16u): + ctx->z_mask =3D 0xffff; + break; + case INDEX_op_ld32u_i64: + ctx->z_mask =3D 0xffffffffu; + break; + default: + g_assert_not_reached(); + } + return false; +} + static bool fold_xor(OptContext *ctx, TCGOp *op) { if (fold_const2(ctx, op) || @@ -1442,7 +1714,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. */ @@ -1463,7 +1738,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; @@ -1544,245 +1818,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. @@ -1855,6 +1893,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 Mon Feb 9 17:54:38 2026 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=1633638895; cv=none; d=zohomail.com; s=zohoarc; b=SyFWEAdAwF81l4fCHrRuQvEmEYiGcTfBsmLw6NR/pnovTR88qy4e3SPHNyhYGw4SfS42PNchuirFY61yJmp+Es22mHym4A11z8atqYBGoqImPjGfb+WxdaKuvDy/fGQhZ4kuN/T0MoGKWJVWham3lDdg75bY+yqLzXXpdvgarMA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633638895; h=Content-Transfer-Encoding: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=8nskxwkPEdtZ9CUJwGKk8ZbCvAbk0j+Jxy5B05St7jg=; b=KRaFSKfqd3XS7I4pvMX2W7ioAOX63TTjdEcLs2Lev9OtMf5G75IxpYSxmlSkSzYl+lDR/ZuetlvcVdU8lKmtBhnpz5cJT7BniUIL2g5s0M9Pl/tncJ4THEjoWGAginV3UkXgowVvXLL086bCBxqDvJzU2W90qd/L1Un2CaeNYEo= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633638895134790.2708094077907; Thu, 7 Oct 2021 13:34:55 -0700 (PDT) Received: from localhost ([::1]:38824 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYa6Q-0001Nc-0h for importer@patchew.org; Thu, 07 Oct 2021 16:34:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60210) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZUL-0000SH-1F for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:34 -0400 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]:39665) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZUJ-0007hs-GO for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:55:32 -0400 Received: by mail-pl1-x629.google.com with SMTP id c4so4637517pls.6 for ; Thu, 07 Oct 2021 12:55:27 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id y4sm216555pfn.193.2021.10.07.12.55.25 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:55:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=8nskxwkPEdtZ9CUJwGKk8ZbCvAbk0j+Jxy5B05St7jg=; b=Jt3K8i+NgZwuxjFtrFu+wUx9G5YHPJ70Nvnhk9kT0SX06FIsiTxFdxc49yWSvdNxdd YODVE/4fM8A5WODjUACLmdD9GqBaKdSaIE2XJxSu90cxlI8gKrl+bsiZxBNYdDpKL6Bj 88R81by00wBF+3zIzwveIyF6z5UJIuVDNLg0ery2tS1Jkt0dnXHXwd25aN0Mjxr8kjMM iM3+3tJhPaGcDuibpMJktuQL0uajJvV7Fuvh3F9J6PCg9rXPAZmjpXUeNbvXDoqxJjQa QDeGH/LvaTf6KAzYg2L5z0OJZeD5fNhTMwxLN3Uc8X4mVmnDPR3agHDzagyQhgvwtvUH Qsow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=8nskxwkPEdtZ9CUJwGKk8ZbCvAbk0j+Jxy5B05St7jg=; b=c7Zkba1kq4WTXMyEEOUYMe0MPunR+nB5Ez+F8AB7Nm5zxjclGkQi9p1O653eSuPFwS v+Z9A0DnQBuMQMIN9kmzxLhLGev8LZtVRpJLvEiwGI9sC8LKm7ZCFaZOVURUmgIdbVUH u41FTFzcu+FMcfVyntEfuabJbCOVTVgWxGXdGguSgXjMhFqZ/+euXWVjsMkqds/7Y2Bt MX9v/fW7QdecJfN8TqVwc+8PLDB/vbw+WjRFAnyOC63xhm3+5kaK3yBxyvFTXVGiBnIs F3qDdoolpRlmvqDSrhD00AP3UzWdpKupUD35laFUBF9e6+FkuO+GwzNc1GV9aLiaKUos CfHw== X-Gm-Message-State: AOAM533J0umvLhkK2jxcnH0S7qpS7nuh5+o6FuTG/IHq6tVqxuQnC2BL a+8tTJUpYhuJ5GrUVWdnZtEvY3hRX5w+Qw== X-Google-Smtp-Source: ABdhPJxm1quRGAKodWkpS7QnW5lzA5J60YIke9NkiZ8RnlX01gVUUNkICWBRuAJGm2cuXT/wStXeow== X-Received: by 2002:a17:90a:a60e:: with SMTP id c14mr7715444pjq.70.1633636526488; Thu, 07 Oct 2021 12:55:26 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 39/48] tcg/optimize: Expand fold_mulu2_i32 to all 4-arg multiplies Date: Thu, 7 Oct 2021 12:54:47 -0700 Message-Id: <20211007195456.1168070-40-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::629; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x629.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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633638896923100001 Content-Type: text/plain; charset="utf-8" Rename to fold_multiply2, and handle muls2_i32, mulu2_i64, and muls2_i64. Signed-off-by: Richard Henderson --- tcg/optimize.c | 44 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index d82d0f15c7..0011ac31ec 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -1400,19 +1400,44 @@ static bool fold_multiply(OptContext *ctx, TCGOp *o= p) 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; @@ -1912,8 +1937,9 @@ void tcg_optimize(TCGContext *s) CASE_OP_32_64(muluh): done =3D fold_multiply(&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 Mon Feb 9 17:54:38 2026 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=1633637575; cv=none; d=zohomail.com; s=zohoarc; b=HzW4ZSmHZtP7NDevFpq9Sednx0SubF9gePKQ1gFbmqLGS5HLHHSuaOi2+RN6NKuGndl47dwKOFho2MJhQTcnLJoZovUPEiy0LNe8ZfLaXiTCrqu/Al9G/gwIAa6CQTdM4wwo5R729g71f2YnfvrJ/UyjEGq6PgWFw52JxmAmfEM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633637575; 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=vXYOXdBBhu+PFiEaUei1HZkdWwxN5pXliAXyOtaR620=; b=IWw2CMDRlyxPMDLSWDEvd9aW/y8TqWgXfmLquL4oXlVEcG7pbPOkxw8ezAt2VTIAwX6IjVcf98h4BeLOcvMmcMouxHsa+49rRDUCCKZTPEibwsPBLwho6RY36wLtYJHrc6I0vXAeL3ZAoL6vcIcd8+mUpUA9+yyt8NuagBXuuBQ= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633637575408662.496736142645; Thu, 7 Oct 2021 13:12:55 -0700 (PDT) Received: from localhost ([::1]:41244 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZl7-00071d-U8 for importer@patchew.org; Thu, 07 Oct 2021 16:12:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60564) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZXE-0007Ux-9t for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:58:32 -0400 Received: from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035]:56184) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZXB-0003ov-BB for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:58:31 -0400 Received: by mail-pj1-x1035.google.com with SMTP id on6so5709499pjb.5 for ; Thu, 07 Oct 2021 12:58:28 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t2sm8995380pjf.1.2021.10.07.12.58.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:58:27 -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=vXYOXdBBhu+PFiEaUei1HZkdWwxN5pXliAXyOtaR620=; b=H+oxasSvNkKSEj6plXgulPfArKjXZubKZiJeqM5E9JrlGP0LhAgAmuKhQimDtwEGuk kTcS0Eo6mAfifuh/U2UAmO5sWATTfmzVXxemHVpA+njgfiniZOZXpn+W8xJ5A0Ah8Xgc VCfby6N5UOqfGB6R5VRf7I6I1k7SqZqMQ/HhlFuC3LwDrnmlsJdHJMkcIwoS+DeGhU8u 7xexGCb+BIN9GqXLCZecivC16IN4O//5ZlnFmPV06MUi9X3Pb+1IzTl7/Wh09qL8AjhP ic0PXDXtP6gKRnNYzDgnNVEAepirDGGGHFqoxV4FgladWxEBd5Np1Nv8Omu0UwXIxtp4 TrBA== 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=vXYOXdBBhu+PFiEaUei1HZkdWwxN5pXliAXyOtaR620=; b=Y00vaVjTBPCvtoYlDqnoPNg1UxleRWyjZZxU1cClQ/WqYMQU8jaltF/26twVo2cNca NepVwGK5P7f1ziDpCxbvlD38434gMcJI4baVIzMiQ5og2pXqV/YFzSd2Gbzzbaw23V+Y p1kFmp+ypRXHHgqiNc7tuqkg8Mq1/I5oV0thDnKfQl6Ph1XlonOeJt55PZAtnX0XaO7M a5etazuD7Y/kBNKHGQgxSc9EasfmpeWo9CffXrWwIESxJn3C7pebopPFB1NDDUsBUxBj okvsZdJiAUKksl+WhVh9QcWHKMdFv87jbBc/iy4M7Ykb95sw+oEIq2wZ10ZQPPFmCrza EzQA== X-Gm-Message-State: AOAM533zFjc5YPeh1/BKS/6IV7jBxlOETk3YYYbRXVDXHji5QVjuRsX7 /Cslio/znsUEn0k+WaeFdd8LCCVAc+uvPQ== X-Google-Smtp-Source: ABdhPJxoaNXiXYnchzCsp32XBxokkinDfG2qMt1bsOEGOfrCf8Y9/MXw5NNO12a89t3kMOvN/gX0BA== X-Received: by 2002:a17:90b:3782:: with SMTP id mz2mr7727606pjb.160.1633636707730; Thu, 07 Oct 2021 12:58:27 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 40/48] tcg/optimize: Expand fold_addsub2_i32 to 64-bit ops Date: Thu, 7 Oct 2021 12:54:48 -0700 Message-Id: <20211007195456.1168070-41-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633637575969100001 Rename to fold_addsub2. Use Int128 to implement the wider operation. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- tcg/optimize.c | 64 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 43 insertions(+), 21 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 0011ac31ec..5e662ad8f7 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -838,37 +838,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) @@ -1707,9 +1729,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) @@ -1855,8 +1877,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); @@ -1991,8 +2013,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 Mon Feb 9 17:54:38 2026 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=1633638892; cv=none; d=zohomail.com; s=zohoarc; b=cAesYSTGxDPZ1b4pNZFlniD2tZmUiZJeq93y6CnfvQtF/Z+4kmxRCnceR3+lP0+TbRfxKbHM+WkTP9Vkwoq0kyJUYhV6mIgd6OCNo+5AKHOKa446Fqf3ZsM3ahQQGlh8jv9j1oa8wdDszgcM57mb/ub75lel/5BJrscuGQsI7Ys= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633638892; h=Content-Transfer-Encoding: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=aloxE+R5K21eCAZdRVlkgeHfD6/SrlIOxi9rYRP75eA=; b=R80dFbhYtAf+ptW/I2wgFW1h0TBGSICC2XL22EzzSZTZcePENAHzfAVOgehCaF13DBYBJ8K8A/FWOXtieOVqjVOTqnlUiOYztQL3eItg37O0tRsqqHxtL5kZEPOIikKWy3gqTJNg/fmrQkEMFyD0zncJyek6TU2uv95QRyFXJ3c= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633638892322420.83088548521084; Thu, 7 Oct 2021 13:34:52 -0700 (PDT) Received: from localhost ([::1]:38528 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYa6N-0001C0-4t for importer@patchew.org; Thu, 07 Oct 2021 16:34:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60568) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZXE-0007Uy-FA for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:58:32 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]:46639) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZXC-0003pI-G6 for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:58:32 -0400 Received: by mail-pj1-x1031.google.com with SMTP id pi19-20020a17090b1e5300b0019fdd3557d3so6012349pjb.5 for ; Thu, 07 Oct 2021 12:58:29 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t2sm8995380pjf.1.2021.10.07.12.58.27 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:58:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=aloxE+R5K21eCAZdRVlkgeHfD6/SrlIOxi9rYRP75eA=; b=NB8djSsAnrxlRwM1ZCoKk6GmgloT/EVIMQugHlDqpjDSUZ+cpZpz0ad6DLqOk+1aMb z3CwB2MPceHGi0YepdKyl9BI2aSnlTBxdhjPR4Ij4jKotUsALsTjPb8Kk2ysofs+vyaT S1j3vgoKHHLU+jkSviSIc34denvBx4gMzqIQWG8be4LnRzATbf4LAaaHPIw3XEsLE5iU J+4UNzT4Bgp1o7kRB8hhgbUbAGlG+MFYvrFEIrb8Jeddsc+GJw4NpuFSshlhueQLY3e1 XD5SmZFYEkLJwLbmv8KfiLT9Do06kZ9aw81NM4ojbbPx6VWIpGO0JBnWwD/PHuoeQHIJ oIDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=aloxE+R5K21eCAZdRVlkgeHfD6/SrlIOxi9rYRP75eA=; b=GmmzxocCWg1gj//H6Qbr86mB/yuqU7GB0rf1YOZjXfJcaiQ/o9JhcQfdCbgDRCp0kD aqC+Ul2gXZ01+EMhHwuQL7qXYzWrQbZ10/cfoGPlkQNlBEPa80PKJyxo08TjrtfeKmhq +TjGQwn7N7mn0vYcYxjQJ4gSGh3BRzXa9FZYxLdgzAsLAqE0ZeXfc8qc3OqrT3PI4f5l HvFx+Pme3hxjH8Y1UIAPNPk6PkdMdJdE1j7iC2roCp0OWQme+oEZISk+3vjjOxmFkGUe DnjINl9Q04WOSduggyndob4ym5MKDFJm/mF9ICGM8dYTJTVGsPXEUwuUUamOOZm8P73/ 84KQ== X-Gm-Message-State: AOAM533tKfFFcW+z+uSh2VjesjS0EKxkcx+DfTJnqRoHwbJT2f0Qzi/M FG7QKAC8rdixBbeCVDsjN5od4Ek7MfF9ZQ== X-Google-Smtp-Source: ABdhPJyh1Ar3h7NnVm1KTOHYm6Y1pxEVHc/WAUSSqKEy4BHKX8vFLooaN7j5vuiIiWLAdQsSHp4eqA== X-Received: by 2002:a17:902:a414:b0:13e:45cd:1939 with SMTP id p20-20020a170902a41400b0013e45cd1939mr5825039plq.54.1633636708789; Thu, 07 Oct 2021 12:58:28 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 41/48] tcg/optimize: Sink commutative operand swapping into fold functions Date: Thu, 7 Oct 2021 12:54:49 -0700 Message-Id: <20211007195456.1168070-42-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633638894288100001 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. Signed-off-by: Richard Henderson --- tcg/optimize.c | 128 ++++++++++++++++++++++--------------------------- 1 file changed, 56 insertions(+), 72 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 5e662ad8f7..ad94f246ff 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -695,6 +695,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; @@ -831,7 +837,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; } @@ -890,6 +896,9 @@ static bool fold_addsub2(OptContext *ctx, TCGOp *op, bo= ol add) =20 static bool fold_add2(OptContext *ctx, TCGOp *op) { + 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 @@ -897,7 +906,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)) { @@ -949,8 +958,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(-1, &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; @@ -965,10 +979,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=3D 0) { goto do_brcond_false; } else if (i > 0) { @@ -1215,7 +1233,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; @@ -1377,8 +1395,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(-1, &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]); } @@ -1415,7 +1445,7 @@ static bool fold_movcond(OptContext *ctx, TCGOp *op) =20 static bool fold_multiply(OptContext *ctx, TCGOp *op) { - if (fold_const2(ctx, op) || + if (fold_const2_commutative(ctx, op) || fold_xi_to_i(ctx, op, 0)) { return true; } @@ -1424,6 +1454,8 @@ static bool fold_multiply(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; @@ -1467,7 +1499,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; } @@ -1496,7 +1528,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; } @@ -1516,7 +1548,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; @@ -1562,8 +1594,13 @@ static bool fold_qemu_st(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(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); } @@ -1575,9 +1612,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; } @@ -1755,7 +1796,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)) { @@ -1808,63 +1849,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 Mon Feb 9 17:54:38 2026 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=1633637788; cv=none; d=zohomail.com; s=zohoarc; b=BmxbAGfZ1JBRw5+ADyIYrlxDyMuMd9USPGjS2KH+J61AOhyxhO6ag0lttgBUDQW5a0GL3p/dRelL8CNIY31koJN4K8gsJdvpkr0vKV0nnIm+zYxbLhixxndoG9r5qj4lJNtijvNr6BVvCgLb7g/Mlb7BYn6q5r2JriCyeDC4iKM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633637788; h=Content-Transfer-Encoding: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=b8yIT3KaJZYt5gy5TyzFmTT/EtPGhvDZ/H5CgGbMauM=; b=C+SGiPiv7vMhn4xWSMBA9XmZVQnYuMR5Ut/d2dWBicEMTdd4EiQo7Vq3BwlyWdrExaNNXfB2lrjQDUmRRyHH6jD4DxkRkUD6EluyeWK0uzKJy6pK2/uXK9XgNb3moOXm2BPxxbHoZYlqIkCLeg4O0uOtzF7kUxNM7MlOBYiWa/A= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 163363778850652.098694001648255; Thu, 7 Oct 2021 13:16:28 -0700 (PDT) Received: from localhost ([::1]:49352 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZoZ-0004Cz-Er for importer@patchew.org; Thu, 07 Oct 2021 16:16:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60580) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZXF-0007Vi-D6 for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:58:34 -0400 Received: from mail-pg1-x533.google.com ([2607:f8b0:4864:20::533]:34676) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZXD-0003pu-8I for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:58:33 -0400 Received: by mail-pg1-x533.google.com with SMTP id 133so851085pgb.1 for ; Thu, 07 Oct 2021 12:58:30 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t2sm8995380pjf.1.2021.10.07.12.58.28 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:58:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=b8yIT3KaJZYt5gy5TyzFmTT/EtPGhvDZ/H5CgGbMauM=; b=wqJmIrBAe00fNIO30IGVx901g/Ju6u1wjqsWDURYS9GkMDZosjlE3IcD1JaxNbgFzT zDNgwKgFCX5APSbCyFV9moPG69I4l/1cee/A1nPxDjgA1EIhlzXCCB+I+RYnfTUVpmPV zHpM/VUciZKabVebTsWkcHyKPxZ+volL/1Gt7swlUxDkjDnLDVugD0BugpaX2s8gJOe6 gES1ON9GsNmviyN/xL5hSHbZOst25PDeUrYBejvYCETxqCCzpmiOWh8nNAw75lUN1Ob7 8oH9dYQCHD32FzXkXcmIXDFE/QEypruhsBV7CpTL+OM9bdJUrwSu2GdS4OAwI3KlpGZO 9Lhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=b8yIT3KaJZYt5gy5TyzFmTT/EtPGhvDZ/H5CgGbMauM=; b=K4MCEVDKi1z6YTEPzOTXr/3LqSyE+bTDivovofVCrjJyXDzfpwvjRRsY3KJRHuKOLT 9mcCeF2yGQGgudbwR02INTJYxiYuLK9izZIO7Ps9SVAyRUuNLO+qOX6HPZh5flKiFczu DlL8wfST+jEXyt/A8OI+xIBzaeVBWSarOns4+rY4l9ji7+ZRLwlhXvLb/5h80WIM760q e6k+9iRkvbzDw+Z8pT7nm2LSkOUJ+FJZPwA35LF+b2WydZb5vqldJk3ajbokrVEJqFnw baRv3XKO2ntaMaHXHkyJLWJ/G1Qg9X7igVD/UNZctRcNim5SnX116rGGBp/KEelV+5jn AJNw== X-Gm-Message-State: AOAM533L9VLnRRSigrIkDDaAf56Da1mCl41PYuwJ7rzdf3e7P6csADfk 5J9pvGuLjr26uRe/3I/BTp2S5QaWvwho9A== X-Google-Smtp-Source: ABdhPJxuMV5JNKvZqOlPsf4bsK00Dig1yX7hHN/G+evaWCrAMcl2qHyW+He9oDfjizN+Pi1k6TF61g== X-Received: by 2002:a63:230c:: with SMTP id j12mr1246192pgj.1.1633636709406; Thu, 07 Oct 2021 12:58:29 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 42/48] tcg/optimize: Add more simplifications for orc Date: Thu, 7 Oct 2021 12:54:50 -0700 Message-Id: <20211007195456.1168070-43-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633637789253100001 Content-Type: text/plain; charset="utf-8" Two simplifications that were missing from before the split to fold functions, and are now easy to provide. Signed-off-by: Richard Henderson --- tcg/optimize.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tcg/optimize.c b/tcg/optimize.c index ad94f246ff..9c11f83a4a 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -1562,6 +1562,8 @@ 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_xi_to_not(ctx, op, 0)) { return true; } --=20 2.25.1 From nobody Mon Feb 9 17:54:38 2026 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=1633639101; cv=none; d=zohomail.com; s=zohoarc; b=V8xysG2rVF/V2ALnx2dgaXPr48T72qHCKkGJgYYfYIG4sgaC0i40JntIQf2+2SNatK/+dyVEoR6Ln4ldlHe8maayg5hwB7fKwNk6pX8I7/G4egPBHQyXXD+W3O3iw25tPdDyzR+lK1uioWnv89eC0Bo2WoFXFR4MdIDo2cD01yE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633639101; h=Content-Transfer-Encoding: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=dnSe3962IT7WFzPUDJo4zPb5duwUCMvhH1e2c+XS9Mk=; b=KHoOkdjkIieZRQKlc6ALhdoSe0Oa4KVb2mOa/KLBaJ04rX7EjfiKjO3jRfH5l9UbEa6fJbEmge9aAUuuUpxgnQ+p2XIKlvkDdG+tPUu4EimgTfBdWhP73bXnNxtZFuFNNDVh6Xdzx1onWZ521eRN6oC/2Ib+wBUll9bUA0u4UNE= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633639101057859.8013030567871; Thu, 7 Oct 2021 13:38:21 -0700 (PDT) Received: from localhost ([::1]:47788 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYa9j-0007PX-Nu for importer@patchew.org; Thu, 07 Oct 2021 16:38:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60610) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZXG-0007W3-KY for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:58:36 -0400 Received: from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035]:38557) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZXD-0003qT-TA for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:58:34 -0400 Received: by mail-pj1-x1035.google.com with SMTP id g13-20020a17090a3c8d00b00196286963b9so7734449pjc.3 for ; Thu, 07 Oct 2021 12:58:31 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t2sm8995380pjf.1.2021.10.07.12.58.29 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:58:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=dnSe3962IT7WFzPUDJo4zPb5duwUCMvhH1e2c+XS9Mk=; b=ShOu3QrH35Lawj7HcuhharPGWvR/bjeGjoB83bbcteaRpP9MUk3tUsWFiwXe3cCuI2 Pby53dEAfAscTnYLLhYlUDypz9rAFsbbSafJDqTtlitJ5R7MLTSQEkrvjZkKeZ4vTdy0 +F5ZZLX9ARB7MBjqUcjcCOlEj6UetxhQHyb0dXE/WigfQv3P4Eg/6ctpKJm4ADS8S93j 7fgyaGv6X8HgrUHA/iCuN9l4z4iHk/ZzU9YWEnCkvZ/xw0xZfc1SgXtja0hLuWq1C+hG 6AgrhizXb87JOCavWu0GCV8HaTTlPir6qRWGiexqGauectNklluof8im8gK3ySP9T4AI s1eA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=dnSe3962IT7WFzPUDJo4zPb5duwUCMvhH1e2c+XS9Mk=; b=PgWnZtUqem/nswD4ZT0+8TLraozZbuDz/R4nLMIFfuJf5ITe+eBN0WqkLUMIevBvwC emiOoqFTbaYjY467oqWaz1NJuumb6Zd7DFFSEnRM0U7FMSbkIqfckiu8VEdeR3huGiyU 8WcErWVLM5Dl2uqh92QmGgZy3bBuWYj9u8MyIhXWg6Bdgaj+0B4pN2SHpgAq7Drmk3k8 d4mYgWQSwJyhhEwejfEE44mw2nO7+lyx0O9aTDdQBl4324igX+DB4fSK77OIdIDuAyiO sTZ9Z37qZGJfP95hNDmkt8OkuyL8ZHbejExh4mUIAjcfnSVDa5ZiIUQOpij+iG71i0GW tAtw== X-Gm-Message-State: AOAM531ln3JrbMRSpa+5dLcmAHx22Lc8BLvB3jldjSpYPrZQB/aBP9XH rRich/PQ2vA2FYaYIgAaYB81QbCfNyk/PA== X-Google-Smtp-Source: ABdhPJznnjoDIZklZ3an/PGKzcSaGoq6oMet2W5k0LVbL4qqGYnxVqb4t2Jvy1SjejeloX3Kj8LFQw== X-Received: by 2002:a17:90a:b288:: with SMTP id c8mr6962595pjr.67.1633636710687; Thu, 07 Oct 2021 12:58:30 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 43/48] tcg/optimize: Stop forcing z_mask to "garbage" for 32-bit values Date: Thu, 7 Oct 2021 12:54:51 -0700 Message-Id: <20211007195456.1168070-44-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::1035; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1035.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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633639102802100001 Content-Type: text/plain; charset="utf-8" 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. Signed-off-by: Richard Henderson --- tcg/optimize.c | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 9c11f83a4a..5ef41e2769 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -123,10 +123,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; @@ -191,7 +187,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)) { @@ -223,12 +218,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); @@ -246,9 +236,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)); } @@ -707,14 +702,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 Mon Feb 9 17:54:38 2026 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=1633639056; cv=none; d=zohomail.com; s=zohoarc; b=fcTIo13IbRvJKUEAo/4VHisEYVZll3K6erg+srV7ScMowtOmKd335aWnO5vxXRKB5KCcUudCT2YDj2OZ6Q57GKZ/rXabvq1JrUTFnHjfb+xHi0Pqp1oK2VePr/QNv7ND4192CY10ygHlbAZVqcVzjbAeCal0mCjlBfv8T8Jd4ns= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633639056; h=Content-Transfer-Encoding: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=83IcPD3sEjLAMh7neKFO7FQGnXUuSkl6iYLPda+bmdU=; b=O5/xjuC1IET+HYb+SaBSGvGrNc+3Vw/HTqrBKC1B4WWLxUir2NSFMVFMyh3SVJb5rzKqToixTR8/mG06A+SFauqHb/e2JiMFONQSl29yNDObDGHUQ4vfOgKWjj9RfujH/DxyRBaxCEJqCTvPzgXoV9W9UxcrK5Ey05xTl/Wh4QQ= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633639056840470.11612211558975; Thu, 7 Oct 2021 13:37:36 -0700 (PDT) Received: from localhost ([::1]:45774 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYa91-00063s-NT for importer@patchew.org; Thu, 07 Oct 2021 16:37:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60614) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZXG-0007WJ-S5 for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:58:36 -0400 Received: from mail-pg1-x52a.google.com ([2607:f8b0:4864:20::52a]:33362) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZXE-0003rv-ON for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:58:34 -0400 Received: by mail-pg1-x52a.google.com with SMTP id a73so884661pge.0 for ; Thu, 07 Oct 2021 12:58:32 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t2sm8995380pjf.1.2021.10.07.12.58.30 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:58:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=83IcPD3sEjLAMh7neKFO7FQGnXUuSkl6iYLPda+bmdU=; b=kI78ituul58hyq4Wxh6mXxNr9hdmoWRt51Rf1bgnQv7n52QD2e/LExqfsM6HqFDrwb LnSHXGwiV/M0hHwqVXPxscYXm//qqtUpn0+n2Um+CV0w+rbAc8NpQlHZ3THxPoD9+gzk NyPcRp2j3793LOHUuzub2vVLLQJ8z/0jlqWm7Du9P1BfeICu/48Vn5bP/R/ZdMSbdKsA QRpfPYjC1y6nVF80RYwkdpSEAVyaJQpf+X7zKKS1h7DcA2dvyABE/chsxQNE4NEOO39J V5Nd/B6uaUO4qAjGq3R116cCQNhsM6tghCNFKgHQGHIwtKyBRV7amfdtXuE0hXNOEcC2 rDlg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=83IcPD3sEjLAMh7neKFO7FQGnXUuSkl6iYLPda+bmdU=; b=RskKEaRBM25LjEczsMCiItCJXLoTi4PAaNsfKdEzYVaPCo9RdAR50RKhZF3j6NhwlR OXewJ5ertX78ogHXqI1NTcaZb5HjN6GoikNXjCsqduXeQ+dsED/YFTnCPzb7yU2SdNNU 8FMzXHCbVjbyK86tWcSq+A8irl3Gl9ldLsLqriWWWJZgsBKmNMwDVH2dxNya9+LcQCTz B+f37JHfypYf5fEcWSjQF+vLtecFKthqyn0ngDB+LpC8YfzRXuKIMfungC3FhUYNKind AtQWX5+oPmyiLX4Cklm0tiBn94jZ9iMcuvrqWhO7oW8rrcshKgfVkbTtw8dgPkTNWJRi SUgw== X-Gm-Message-State: AOAM530pmGjo+QIDafCfqjTxfcPw7K70oaaJpPH6sMBtm6qBTuIqDXXi tTWwmFszrKDeU2jvhgxljrxP1cYHPxSbfQ== X-Google-Smtp-Source: ABdhPJxnYTszZEVofAE5KGozQlBojByQDHfeuAlk9luDiRAiwrO7Rrqtcxx1wKF3ncij30ViI5Bryw== X-Received: by 2002:a05:6a00:ac8:b029:320:a6bb:880d with SMTP id c8-20020a056a000ac8b0290320a6bb880dmr6252359pfl.41.1633636711296; Thu, 07 Oct 2021 12:58:31 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 44/48] tcg/optimize: Optimize sign extensions Date: Thu, 7 Oct 2021 12:54:52 -0700 Message-Id: <20211007195456.1168070-45-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633639057307100001 Content-Type: text/plain; charset="utf-8" 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. Signed-off-by: Richard Henderson --- tcg/optimize.c | 129 ++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 105 insertions(+), 24 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 5ef41e2769..06b178aa4a 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -42,6 +42,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 { @@ -52,9 +53,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; @@ -93,6 +122,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) @@ -123,9 +153,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 @@ -219,6 +251,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); @@ -644,13 +677,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; } } } @@ -700,6 +735,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 @@ -711,7 +747,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) { @@ -1059,7 +1097,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; @@ -1069,6 +1107,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: @@ -1087,6 +1126,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: @@ -1095,14 +1135,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); } @@ -1241,21 +1284,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 sextract64(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); } @@ -1281,14 +1327,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): @@ -1312,10 +1360,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); } @@ -1354,6 +1406,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; } @@ -1574,8 +1627,12 @@ static bool fold_qemu_ld(OptContext *ctx, TCGOp *op) MemOp mop =3D get_memop(oi); int width =3D 8 << (mop & MO_SIZE); =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. */ @@ -1685,23 +1742,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 @@ -1778,14 +1843,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 0xff; + 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 0xffff; + 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 0xffffffffu; + ctx->z_mask =3D MAKE_64BIT_MASK(0, 32); + ctx->s_mask =3D MAKE_64BIT_MASK(33, 31); break; default: g_assert_not_reached(); @@ -1848,9 +1925,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. @@ -1923,8 +2001,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 Mon Feb 9 17:54:38 2026 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=1633637989; cv=none; d=zohomail.com; s=zohoarc; b=nQbUbJPocuPHGy43uvyH+hX/DmQTfCH8jg9dWLx7ZE0sNKDLNIxL7UavkRN2qREPQVtviH4Xl8ZqWeP8QjTjwdsn07vUEl8TqTsjLYyZTHNXL1bNLajgqJ77z9Lez+fSZnKnkdrpKhmMc5CSdbqkO6Li4pCHgrAeAmFtWrh1O54= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633637989; 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=UC2LKFhrfkUzhjx+eZIdhiCjTmdbw5drcvc+w7sedUw=; b=dG3gi49Wh8LUwOTHJdOrrJfcWakW4StcOvJuRC6zi+c/h+IgEAZJOEpoozb/lTZM5x+EfpBadTpnoNUi9cGAQBdsG0Qf0jghuFPDgLwflPHRunqFVk6LhAkHw6tZHOImCkccBmd9fu53Y7AarcPzJyzOGjJWntGRFMpDBSjhy3M= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633637989325956.8178172253542; Thu, 7 Oct 2021 13:19:49 -0700 (PDT) Received: from localhost ([::1]:57802 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZro-0001Sa-9b for importer@patchew.org; Thu, 07 Oct 2021 16:19:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60636) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZXI-0007WL-BV for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:58:36 -0400 Received: from mail-pg1-x532.google.com ([2607:f8b0:4864:20::532]:38848) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZXG-0003se-5k for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:58:35 -0400 Received: by mail-pg1-x532.google.com with SMTP id s75so833523pgs.5 for ; Thu, 07 Oct 2021 12:58:33 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t2sm8995380pjf.1.2021.10.07.12.58.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:58:31 -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=UC2LKFhrfkUzhjx+eZIdhiCjTmdbw5drcvc+w7sedUw=; b=WpXuoM+tVzBCTBZJ7eis9c6395hkBGxMomRUjP/XdkL2hlXAt8aILMz5aMc40yaa4N T6iCB6wpdtqSEaTSGeaDEjoSgDskTy/fb3gSp8DM34QTOMnTMTzPdOXiBmD6vJQuxh+I 04HX+k01pZtEuk8aUCZPqLOT8t0rtgiUHu4BPD9tOEiV+jkhEErOKRf0BiE42m3DDICF ZKlJ2yX7iVljwO3M/+su9Hx5gEYjNAN+7nWDUvNZYu4p0KTNopi5i30urYjJyxizxzCK T6NBiu9LOMn22uXlAdn/gMgpLwINeZ6XMViGYpeFxnNiBuJAwAjPzqxsRxkTU/q7scOQ lhNQ== 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=UC2LKFhrfkUzhjx+eZIdhiCjTmdbw5drcvc+w7sedUw=; b=H4wqp7I1Q6QgKp9DIDusgEj2SGPh5oXZ7bxLSdk5i2t/xQyhw3thd5uCE5+oQ06ecH 3p9xCjWzC7lW4O+wu+1N6229+zmI/j01PwoHNYfiQzJj/K8M9t5tneL2fnb+D0UCoNgQ T25ajjPIgNaa8+/EbWvak1Y+5sFdnz4BKOMFqicasOZWyYt2T+YDVXvSAfgUxaOaew9H Bku5y7qhJd90do32cpGmqlS+zE2bz2QVynrQxUoFn2ElDc3WNX3e2GygpoBQot7vQZ7/ D84NghFQcNq/x3Ltpue6ufEaQVOm3btozNVgzraN6d8FY3aimqfBSKOFWKmtnW805Bd+ VIxA== X-Gm-Message-State: AOAM531+sIMUsk6wGywV3EhIcDI82F7gukwswjb14211Rj83Mc5oc4uh dh+51bzSZzMZynJ0UZ56K3ATv4Uh6zKv8Q== X-Google-Smtp-Source: ABdhPJyR5G1SpkoD24LdaDSg9iDbv6YQe91PNLFaoQALj/srMWvNKh6odThRBJGDKa5q6v19T0DwEA== X-Received: by 2002:a62:dd84:0:b0:44b:b54a:c2a5 with SMTP id w126-20020a62dd84000000b0044bb54ac2a5mr6034408pff.11.1633636712717; Thu, 07 Oct 2021 12:58:32 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 45/48] tcg/optimize: Propagate sign info for logical operations Date: Thu, 7 Oct 2021 12:54:53 -0700 Message-Id: <20211007195456.1168070-46-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::532; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x532.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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633637990980100002 Sign repetitions are perforce all identical, whether they are 1 or 0. Bitwise operations preserve the relative quantity of the repetitions. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- tcg/optimize.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/tcg/optimize.c b/tcg/optimize.c index 06b178aa4a..71e97ccd99 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -952,6 +952,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. @@ -987,6 +994,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 @@ -1278,6 +1287,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 @@ -1465,6 +1477,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; @@ -1553,6 +1567,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 @@ -1582,6 +1599,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 @@ -1591,6 +1611,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; @@ -1606,6 +1628,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 @@ -1617,6 +1641,9 @@ static bool fold_orc(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 @@ -1881,6 +1908,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 Mon Feb 9 17:54:38 2026 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=1633638263; cv=none; d=zohomail.com; s=zohoarc; b=RMa/OZgJ8ONkQDSJ5qOORdRrAWDyOqRqtkZ1p+78+zjp1QXp6sIjO9unHEysMMaqQ6s5CbhWTcMOFg+UxiqkkpVbJ7RZZma0ZbYV3q7gJcJ1KbJwdMxGNUZ6BHONg4j/9riC4CdzGQLt+fSboTP8gzT5G+iiAlP9sh+FuNBcZiY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633638263; h=Content-Transfer-Encoding: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=V8FaT5wh45Jchl4v6/n+w9IMnzZef9SRdxsANm8+ru0=; b=JMBMIm80JSnH/Aq4IIW76cCDVTmYytnMNikH7+ucHOB8KshnGkT4gQwTYK4FtaouoJ6AGOtK7YLxiYhYvk/6aWMrKfbdaUoLlzZVqN4HBzbxzDdPDXwj0ZYY9nSQNz3l+w/OSs29lSbVLe+XtiLlSEbfbePO0sQCiqbr1B1JwRc= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633638263303224.21545413159538; Thu, 7 Oct 2021 13:24:23 -0700 (PDT) Received: from localhost ([::1]:41582 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYZwE-00015W-5T for importer@patchew.org; Thu, 07 Oct 2021 16:24:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60658) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZXJ-0007ZD-7i for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:58:38 -0400 Received: from mail-pg1-x529.google.com ([2607:f8b0:4864:20::529]:39523) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZXG-0003t8-PX for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:58:36 -0400 Received: by mail-pg1-x529.google.com with SMTP id g184so831259pgc.6 for ; Thu, 07 Oct 2021 12:58:34 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t2sm8995380pjf.1.2021.10.07.12.58.32 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:58:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=V8FaT5wh45Jchl4v6/n+w9IMnzZef9SRdxsANm8+ru0=; b=d1virIxInMYB9gHnSPcNwJva5WuRe0hkuzllw0y1CZjOYiVympb91mHZvPDlnIlRgx wzVRKk7ovL40JeOijB5h9GwDr5rRiQ90lzQjUuKy/rf2SdjFL8a4DWZLHtrXTq/hw7j0 pu4LrDw+B7QgOUBVWdODVuu4qo+wKFh8mh00WqmW676b9vJXy8YN4MeJzghIhaW4uFux 5WoHwYlIvJT+keD/gOvwo0didytAEEPWE/qvC7lLxHEpHwb3x6oxwePR8izTu6BjHvn5 XQIHskcTK31Zz6AclNnDzHV87mASoYDGeqL3mMI1d8njfQtABmaIdZv00ZFDIfuVJK/7 tXdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=V8FaT5wh45Jchl4v6/n+w9IMnzZef9SRdxsANm8+ru0=; b=C/Ixd+km0ltJE3VLcq1YTzdS9Gm+BSNPMvMJZlHP9EXiGsGsWUpC7esmbNm7O7hj7S 8yKKfcxCSu5xfSr/++I6IGb22KAOlbSu17v+CrCrAIVdSxX3DYpqxv8m+BFlLZoD3OYs gjE6i14fJ65R36X/8z1IbkbXiMhfIBWlQtW3Jemhk/kiTuxEg0vcJOd4QvXZZCmZzysc rtAgJzdrFM94eHahT214UTb0CXAXlxlBZvtZ3/BL5FrGcNWbF586EGmrchgXZ26emfae P1xhSd9ng4O6Ho//FiXWj3yFMfyJwXfo1cLgk1t74b+U+eKndE0z8I/W+J8Ha+SCoabi GuMw== X-Gm-Message-State: AOAM533/orp49Bo0V0/FT/P/nL2ubCr3Jj7f40bBpX0cseoZ8N8i5eUU /t07a/qVvWTN/f1K59Ycym+9UEUvMst5rw== X-Google-Smtp-Source: ABdhPJx3MMn7h5SikITX6LDKr/SwpcqbB/KT6p8Yl2RWWuXQ1zkI2YelV0j2wUSnhST0SrMmtRy0FA== X-Received: by 2002:aa7:943a:0:b0:44b:e771:c7d1 with SMTP id y26-20020aa7943a000000b0044be771c7d1mr6002093pfo.42.1633636713413; Thu, 07 Oct 2021 12:58:33 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 46/48] tcg/optimize: Propagate sign info for setcond Date: Thu, 7 Oct 2021 12:54:54 -0700 Message-Id: <20211007195456.1168070-47-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633638265098100001 Content-Type: text/plain; charset="utf-8" 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. Signed-off-by: Richard Henderson --- tcg/optimize.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tcg/optimize.c b/tcg/optimize.c index 71e97ccd99..1c106bfbc3 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -1689,6 +1689,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 @@ -1761,6 +1762,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 Mon Feb 9 17:54:38 2026 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=1633639229; cv=none; d=zohomail.com; s=zohoarc; b=mPrRiLhGgEZcUZEXVDLxzIqryb4SUYQI9bt/aoJ6E9wyRKpzFcfHsYsgXTSSctI7pSP5iHCHqj26+xoGY4RgiaA0cgCqpsTk4W4sTmGoN6yh3YbAdItcrGk2zjWXzSQ3hwAg7GK5sGk6YIfQaZqw4CSBNtDWM/hq60ovh9vIKuo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633639229; h=Content-Transfer-Encoding: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=NCnmxC0/EB26lNMO55xRTDlo+OZH62QpEouvYYVySyw=; b=b0x4xLeDuAjY9zzF9Wr1n6dBLa0uH439WjPL6pJIq3JzJlYlh8sbnNnCqDWA4VtW8S0rXu9D8v4nDAfzv4tODA2Mjjfrron9MwUXU1YgRiPzne0GIfsabfvy6O27H4/kdGBkhhXEkgN8EC3l3ZMH9uSYcZ01EzxOts1Lk5RPuUA= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633639229472914.7919807513246; Thu, 7 Oct 2021 13:40:29 -0700 (PDT) Received: from localhost ([::1]:52016 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYaBo-0001oe-Gh for importer@patchew.org; Thu, 07 Oct 2021 16:40:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60664) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZXJ-0007Zo-PK for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:58:38 -0400 Received: from mail-pf1-x42d.google.com ([2607:f8b0:4864:20::42d]:36650) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZXI-0003v8-9D for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:58:37 -0400 Received: by mail-pf1-x42d.google.com with SMTP id m26so6259564pff.3 for ; Thu, 07 Oct 2021 12:58:35 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t2sm8995380pjf.1.2021.10.07.12.58.33 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:58:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=NCnmxC0/EB26lNMO55xRTDlo+OZH62QpEouvYYVySyw=; b=oGwwBVyd45SkJF+tL8UNcUK7bm5D+5ry2Piqj9Hry2WZgmu7Gg8elZdMl2i7VO0dXq HC+81/99SBunKz23TaSAnOzVSfPnVf03lRNRDbVFQBMz3igCYiHRdjYJV7GGFr/11Y+z dbl8XaTJHJZXhWTvsD/03MZyPk85Y7Gt9bAlpvyQVTP/OKT5iPDEsWRD6ys3nA2fe0O5 LdvSmlam0arMwHj9JjZasEWJrJQss6OREhUTL/iOiEffs9dFjkWFNEf3W2rvHxMn7ZrA el/i2eBmTOdtsKMRCpK0Pfp+O6PkXuPVDs8Nk0EBEcanvxOgJxKizzLpJbBRg6FCo8Hm XDGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=NCnmxC0/EB26lNMO55xRTDlo+OZH62QpEouvYYVySyw=; b=DDwX8bEFDM/KFJZpwjKxbyMKIhLeUDqdl+qRfATJiNIge41lbUXojdGvAfJNCmieRv spT9soahkxI/E27Tso0Uwpaub/YHlDfOaC75aj0dvABa+1sNfiNE07kE/S71CtBCRaOX y0kP7dexHWfP4jGt1vmNqtMWh2nKo6I798waxCYikgcLTmqLogFvc1ade0on80Lq7MTy g3YnBFtukEy6fqnaPDypXcZiUO4Kt5tNKo6yYMMgnPj+l4AHlRKmgAmKBH92D4ko5P2C +DS3ME+FmWF/lpdHH2ZMZg1tPGbu3mIHrz5fRHCvBrBiqFUIStm91f4KjQ/xPf3cHvPC pJjA== X-Gm-Message-State: AOAM532Memt2w/GkkviApp92dRoJf49LOm2EmKuFLZX0JQoQAU1vs27Y uLx+JTNUIGrXVKFNuwRk17HHpcvoGR0J3Q== X-Google-Smtp-Source: ABdhPJwyULXEaeTOh6QqeJqgI+fz4nGWwkDwDLRCejJHmPWHxwCPXaob6shSlcuk8uQvDnpG5vhyqw== X-Received: by 2002:aa7:9209:0:b0:44b:e5d4:d8cb with SMTP id 9-20020aa79209000000b0044be5d4d8cbmr6028853pfo.65.1633636714936; Thu, 07 Oct 2021 12:58:34 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 47/48] tcg/optimize: Propagate sign info for bit counting Date: Thu, 7 Oct 2021 12:54:55 -0700 Message-Id: <20211007195456.1168070-48-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::42d; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42d.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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633639230181100001 Content-Type: text/plain; charset="utf-8" The results are generally 6 bit unsigned values, though the count leading and trailing bits may produce any value for a zero input. Signed-off-by: Richard Henderson --- tcg/optimize.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tcg/optimize.c b/tcg/optimize.c index 1c106bfbc3..678e7c1983 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -1216,6 +1216,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(z_mask); =20 return false; } @@ -1236,6 +1237,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 Mon Feb 9 17:54:38 2026 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=1633639201; cv=none; d=zohomail.com; s=zohoarc; b=KqO1VHPwPLw2WUZCE3wD5gL1gnpNdJ722q9FlYHtDgxUPlf95DZt3XF0gY5dHHrbEduxQ248V5x13FYf6q7DM9nlDLF+caS0o3hCsvOPRFW+7/XsIS8y88tZZDPYelFOGQQew9Tjdty2g8H+AjZA9trvpLETCaRpI52aCUaHahs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1633639201; h=Content-Transfer-Encoding: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=epe236pamFs8HqTLej6afRtr8fW/Mo+eZnFk8gPaXO0=; b=O2mxBTaf5gv90RcEffbKin/ImeMsf2scYDS/9H50PC+XogkA1eCVC9vQY+lg4foCM36ymcgVsOJRBm5wrlRKy7o+hpZ2V5x4Bn12QbRTNrDYkTmflCzYx6ivjwDB5sMoj/Z2Livup33WbaKsO16y2UbB6wG/8QnV0XLhp1fi8+Y= 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= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1633639201470243.38226673859504; Thu, 7 Oct 2021 13:40:01 -0700 (PDT) Received: from localhost ([::1]:50724 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mYaBM-0000x6-7S for importer@patchew.org; Thu, 07 Oct 2021 16:40:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60670) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mYZXK-0007aP-HA for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:58:39 -0400 Received: from mail-pg1-x534.google.com ([2607:f8b0:4864:20::534]:42946) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mYZXI-0003vD-V5 for qemu-devel@nongnu.org; Thu, 07 Oct 2021 15:58:38 -0400 Received: by mail-pg1-x534.google.com with SMTP id 66so822938pgc.9 for ; Thu, 07 Oct 2021 12:58:36 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t2sm8995380pjf.1.2021.10.07.12.58.35 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 12:58:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=epe236pamFs8HqTLej6afRtr8fW/Mo+eZnFk8gPaXO0=; b=YBGG4MK0MKphI28Mop0I0cCFo594qT9Z039hDVgIHIVdR/00eW+xL5k+yAZDz9ATwx sMicamUweYDhBmfWy36741v1FAWfQu8uyDwKk7z3kLK3Rn3ZhwxvkOEzg5g8ekjvBNVD TUHevIXgl/ioZQTM5fjAQWytkXC8WipHCEHn01wlVPqvwNrWl262OA7uHpx0KFz8sVKE ux6ksVJw1bmAX+3DMiyg8ISn6Ti2BaH6m5MrnrF1zvwtLuSO7185HeRn8rq7T8V4Yy8C 9/VuqVNQ/ax+UpZ77+X6E7MBNQXNzZyoNbsrc7pQJ8FLdwgq5l12euX9OovKkilci83B WdXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=epe236pamFs8HqTLej6afRtr8fW/Mo+eZnFk8gPaXO0=; b=JXm7bAU5zNs5tJbcul99/imo0ppX/A8Usq3hB5IjRHq5SXAwAu05LUEcPuDB7ptKZy XyGNPGjsyJ8YKfqMTTSOG06KaK+abdwe0ruvHY/T+lWhFOMRG/KFn25FPLb6A+m8gwpF O0Y8Lr+qYHDQRksP36VMU4Nb3jk6FgkxeaEIYv3zURuKu52FdKqpRVpHV9V210mju4Tm dhUoehWgAtKLYIQCb/6QCLEiIjKCWLptPXa//fIEV1doKm8Yj6dNcjxb3KotkIfrkRwn +SOPjNObI3QJFryKk+ish9XDzI4dlcjacMq6pSzurEwDf622LZ9T8DmvJ0KP0mWeOgIf NNbA== X-Gm-Message-State: AOAM5302y6YE/FtgTNUhMqbz969phNrtmY8qjD+BGTY27ZvrbwP7BuWy bsVjYbwlFdyLPOG25SmBpHBpjJ97qjPMdQ== X-Google-Smtp-Source: ABdhPJwu7ajdyMi2DOYtq4NngejthBq8n4SENyrN1MQBZT4IO0MFIP4tWbYMqX8bbspOULkc2w6hfA== X-Received: by 2002:aa7:9e49:0:b0:44b:2a06:715e with SMTP id z9-20020aa79e49000000b0044b2a06715emr6300267pfq.78.1633636715563; Thu, 07 Oct 2021 12:58:35 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 48/48] tcg/optimize: Propagate sign info for shifting Date: Thu, 7 Oct 2021 12:54:56 -0700 Message-Id: <20211007195456.1168070-49-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211007195456.1168070-1-richard.henderson@linaro.org> References: <20211007195456.1168070-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::534; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x534.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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1633639203596100001 Content-Type: text/plain; charset="utf-8" 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. Signed-off-by: Richard Henderson --- tcg/optimize.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 3 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 678e7c1983..92cfb644bf 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -84,6 +84,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; @@ -1803,18 +1815,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