From nobody Sun Apr 28 03:50:56 2024 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=1630304808; cv=none; d=zohomail.com; s=zohoarc; b=iIOLHgu6EvGKsbTmg+ORFL/5tfPtZZfwakr1QacF8CvQ+AK1G1b+whL4q96smhBkiawopQtp2gUFePqCzF6zhlonuYowEexVrevG4XNVjiQCsulXaMjND2TRnRNQ3nUwkM97suZ/4vyhtP0C9Hzd7vM12PZKtvJ/Uh0gcBgn1rc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630304808; 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=LK7AmLFSY1ToCjPOE+7gR/8ticEGolKTb1yvJJVuTUo=; b=aTbtCgGn+lDDOKh9oN+FsKM2Y2CssBdnL6uuF9t1+xUrqA1IQSK72HL16wPqclnMY5QIonoQju8yKnzIXUBvDm2MtiX5AVb6bUqSno02OaB7LqCMt73B/+K/rbRD7KUxqdnuyjrGnzdD403oro7/yLmVym6OtsCPcYFToRqquhg= 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 1630304808896934.9530266939288; Sun, 29 Aug 2021 23:26:48 -0700 (PDT) Received: from localhost ([::1]:35008 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKakp-0006hY-Nj for importer@patchew.org; Mon, 30 Aug 2021 02:26:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46108) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKaj3-0003XQ-QI for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:24:57 -0400 Received: from mail-pg1-x52f.google.com ([2607:f8b0:4864:20::52f]:47075) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKaj1-0007N7-M7 for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:24:57 -0400 Received: by mail-pg1-x52f.google.com with SMTP id w7so11276254pgk.13 for ; Sun, 29 Aug 2021 23:24:55 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.24.53 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:24:53 -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=LK7AmLFSY1ToCjPOE+7gR/8ticEGolKTb1yvJJVuTUo=; b=PUz4T+E+Dr1sTe+H31Mizsi/pOU594HW24D52BM2PbZNk6iIaNwXNF8Fy7OcA0BZ5H x5bo2g/97GiKXQDsdyQU/AtiB9cllyjqxYGyHcfwp9MIjUzHEHzcKc0K7IvtZiKaQ7/y zDmnQcrMY+fsyJynPn7bz7DiTA2jm98SFhVCkvF83ciP/MIascNqAp6SClGzx8ovsTVj qPtIKufEkdqbmpbvM6aWFx3Ee2ArJdtOXBEcT4K53S3UBRJrPkoK2+3g1oQXVQe5i1YS qzva3LgZNczPDRa9QK6YWWZoAA2dTMSfQOrT3h0u9vZNwe2jmGHF4oYn6No1pG+YpAZU X3rA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=LK7AmLFSY1ToCjPOE+7gR/8ticEGolKTb1yvJJVuTUo=; b=cbkh3NXUJXWs3yoNbgFeVD/gJnpE4wGdybncYjn/dnTVR2mAjeNzmJygF8RAIrZfU9 F+Rr7TmKdwGLIEMyq5/HujNIqVeTzuiLUAGbE/Qu0nwwzCXl9qGPp5ECnDdPpzzJOQah 4br+OskkuI9XGMXjfIrcBI51tZz0anwpUsTQvH/KYS7oDHsfdksjyCVAX5rDHztlHUWc +GwF/evJdchTdUyYwsDXY2vtEezK6S8NtE2vCpw0c0cydb4uPjFTPwtE32MkzohSWJC7 QjzlmaFP0hnEKRiQhmIZS2GpkKUd7JZaNlZfwiMi9RkWMjgtHKmPbSByt3QZ99nCO4dC wUzA== X-Gm-Message-State: AOAM5339KfoGCb57Kb1KtYsIV7lvgth3UcTziXlFPgPgec6WCG/p4Rau 6BS+QKnKCjEe6NUmkdFKARB0RnCGKpEGCw== X-Google-Smtp-Source: ABdhPJzeqQNQn5n02azlA24UlamHZzAQhq8mcD3whK2Mu/BqsDCE7YsI7RFuyhu0kGy+g+Jpm6MCKg== X-Received: by 2002:a65:6393:: with SMTP id h19mr20448352pgv.64.1630304693697; Sun, 29 Aug 2021 23:24:53 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 01/48] tcg/optimize: Rename "mask" to "z_mask" Date: Sun, 29 Aug 2021 23:24:04 -0700 Message-Id: <20210830062451.639572-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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::52f; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: 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: 1630304809785100001 Content-Type: text/plain; charset="utf-8" Prepare for tracking different masks by renaming this one. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- tcg/optimize.c | 142 +++++++++++++++++++++++++------------------------ 1 file changed, 72 insertions(+), 70 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 9876ac52a8..254f0b1b71 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) TCGMemOpIdx 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 Sun Apr 28 03:50:56 2024 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=1630304967; cv=none; d=zohomail.com; s=zohoarc; b=ZVsfH31XWXCM9BAdcfbB80pXNRUxfcouEHPa7BFaIjvSPr+fii5bxmt4xThuTuli0nvG1j4e9iANROgnXwY9tIFEQN1NDmjLjb5wRzW7nF7DSZ9ECTwM5Bj6v8dxxpJew3p1OOcJ2lHz76humswy1wcWI8oALq3dlKzwkwWJCEA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630304967; 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=L8iZIESA4E99wkHpwQ59xznrqxj54q8TXcl6nmJJi8M=; b=CtDC5T3AoXeE/BKrIJ7/qF+tOq3l4gMxXnQXoSN/AeQYedidB4O0B7lRTO71L9rdunQr0WWB4z7SwSMKeM2xeTUqoYjKErfmIwJibzcaR+ZkmgwTZd02eZHU6v9VmNk8Adf0t7Ic4fF3w+J7tc3zoKx3EnDKhASMbbc/SXvkmz0= 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 1630304966744762.8909346546706; Sun, 29 Aug 2021 23:29:26 -0700 (PDT) Received: from localhost ([::1]:43242 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKanN-0003y6-NL for importer@patchew.org; Mon, 30 Aug 2021 02:29:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46144) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKaj5-0003Xy-2Z for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:24:59 -0400 Received: from mail-pg1-x534.google.com ([2607:f8b0:4864:20::534]:39602) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKaj2-0007Nw-4D for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:24:58 -0400 Received: by mail-pg1-x534.google.com with SMTP id g184so12423160pgc.6 for ; Sun, 29 Aug 2021 23:24:55 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.24.54 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:24:54 -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=L8iZIESA4E99wkHpwQ59xznrqxj54q8TXcl6nmJJi8M=; b=FFg7sWbXA4u2jaD8wNh672WMN36lh8HQHtltXujXocOoRcBkmXF7Rw7eKuiGAmElpZ z5AAA8rHWOTPWpfWJECeII/X3+8TjfNLiP+tKu2/DCPsnltJnUGlVMToL2HQ8Df7Y4uM r2A84BHdBwZJnyarlAZxj114x9CbQKZO2zgvMCTPyv0CqNGQtE1sq5IqWKeUSXgXqbIT C76v8HcD7IgTHmyg+vJ4O46Zk2C302CRAfGRijaqtUPyUyIZ19x0Kl1EjrRyIA2AWCXJ 6EsJbjg8Sd4nKWDpX5O5g+It7DHq/uoNcNExKYQiNM2ZyvgoNb8CH+P6BVrt9mQJEvei g7/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=L8iZIESA4E99wkHpwQ59xznrqxj54q8TXcl6nmJJi8M=; b=NOFUIjH+fqOdXD3oNDekn274Z54DJN/eNWD5S7z7LbORvJzDuIDrcGJfWYbubOL4xb 89ERB/cbnHpCvh+N/TlYswzAI9vwdMZFbc/JGXUxR91KoyJZ1Cn6bsCwyD8RHtUZ95P9 DoTw4CRx3Uuzy/wtm/UzFd7kfi6vUu9rBrlUowVtQh1qCkoKwpvPbc4uzRghzmuUz/je sMwmAwiKAicRYF8OTtsmSGSfZb4NYvfQIHMT5/u4Qn3q2muErimfid6ILtp/DsTwb5Uy LpPnQFfmxEp5zCJGKk4rxO2BrujMKFnm78CUUN7YfmxADj7MomLDuu9HQBIwxThpixmy TwBw== X-Gm-Message-State: AOAM531xRiR1Xxe+xsVeSIuVgCBfHni3lI3noAUImISY1TKSRBWM4nNf oqAHlx6dYiC6UAgWpa5TstGpuJnbi0zdyA== X-Google-Smtp-Source: ABdhPJxnylBndNuiVy3FU7QIIH/lR0hjHunK4qhkMSHPG5C6aVee/9G0MGefS9LiseI5UakTsabneg== X-Received: by 2002:a63:1717:: with SMTP id x23mr13507962pgl.182.1630304694630; Sun, 29 Aug 2021 23:24:54 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 02/48] tcg/optimize: Split out OptContext Date: Sun, 29 Aug 2021 23:24:05 -0700 Message-Id: <20210830062451.639572-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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: 1630305398177100001 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 --- tcg/optimize.c | 77 ++++++++++++++++++++++++++------------------------ 1 file changed, 40 insertions(+), 37 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 254f0b1b71..bc0e6f14d2 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 Sun Apr 28 03:50:56 2024 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=1630305166; cv=none; d=zohomail.com; s=zohoarc; b=lxye7LJ71/3+lwGTd7BFPJrXMazOH9PUdK6RrDNsapXbKupm6QOy0HlyzYTwF5JxYisJinQcrCzwQq2IPPADdq4P0Xzfbb3wRwHYp+R0QSrMLWv9NY1R1D2Xv3P59o3WPr1B/+YnhXg7ubINk+v9Hmf/1x7eFnahtyBn3hw04V8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630305166; 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=F58SeAxGB7PKULQSwHHCAVlZK8XKIUVE/QzEDGWTyVQ=; b=HzXHswA/6UMoJbAh+eZpCNZ56Ck3WspOZF+/0NDNiIjHoH1HQOo21y8G6GwsWSCdA/ebDvHEoiRQnwzHHhZ1Z2CHLGSclyj4YFJpEk4g1+WTxTxxJIqR6MjxsfiO6Gh7RzeHglxH9iKLRbkB/k3taO//s7DDo3mP/ac4Wsr6ybw= 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 1630305166743841.4248654069642; Sun, 29 Aug 2021 23:32:46 -0700 (PDT) Received: from localhost ([::1]:51988 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKaqb-0001lQ-7T for importer@patchew.org; Mon, 30 Aug 2021 02:32:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46146) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKaj5-0003Y7-5N for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:24:59 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]:45976) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKaj2-0007OX-Lx for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:24:58 -0400 Received: by mail-pj1-x1031.google.com with SMTP id f11-20020a17090aa78b00b0018e98a7cddaso9237599pjq.4 for ; Sun, 29 Aug 2021 23:24:56 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.24.54 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:24:55 -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=F58SeAxGB7PKULQSwHHCAVlZK8XKIUVE/QzEDGWTyVQ=; b=kdBg05Fh53vwLVapq/YArP71nagkqT7L82cPKQqvTrQR2HKYQn3kVK6VC66B78VNKb OhPr2dnheYLKXyJ/BKBItuS9CPRdcb/On7BzDIHE3kzHqViwNbHSvvLEZqIKNhXWKs+o hpNcpKr7fNwolEJQb7g825yt0bT+7pzbIe0PV3CPrxKg0134ktPmkzzQgJA6zXAvNEmj +H6P5asWXbsnWoo1NO4drkAqlUmhbtuUfMGNO+sCXDDsVm5JFCU0/xV4m6c/tv+tSbBe CFbkpOcUK+Ak0PIHFbOlNO9EoKR3uyQzcE3UlQCbda55t2c7myVFxwM+SbUnhbaX0DQN Rsqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=F58SeAxGB7PKULQSwHHCAVlZK8XKIUVE/QzEDGWTyVQ=; b=jMu6H41Ief80u5fOMNtGu6cDuiMNAcLNNEiUMUBxGj8cz5ImYZkLwwHmnDJXLBfmGz DN+0VFH/YZMONM0TUkvwYGpaO/kMadDB8HkrRMoaLI4X2ymyERJfKe6JLFoYsws2T6cP wapuq9jH02iaIOepJhg/8pByeMxlBqVkqdlFjSKEoaEki3b6G8uJkiPvjxjz9SNkHvyF tCalHimkbgNINznhB7pHUOfVzc9/MERDxwFpSKywKpMiI00LnEK9pcyCgnhXRK0jeTrl eqzPRxeIwDG3XGoBbzlryBLADLy9PVCxmvi+HNR+ScrpeZT8Uf0UF/IR8z3V1OMkol38 6wwg== X-Gm-Message-State: AOAM533uqZq+xpbIGULMV+zKuFjNWumlDB4kAaEZ4ajCah2Hksps42RY 1f+545uqe1v3ThG5LtmP9JYmkECR/e8+9A== X-Google-Smtp-Source: ABdhPJzMSpRBiiE56TJCcWhSxBZt7zwzIUX4OHSyRA6CGyC8l5bapHhjTCAeGqV+ddvxi1Sqbfu2PQ== X-Received: by 2002:a17:90b:1b44:: with SMTP id nv4mr25230135pjb.192.1630304695238; Sun, 29 Aug 2021 23:24:55 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 03/48] tcg/optimize: Remove do_default label Date: Sun, 29 Aug 2021 23:24:06 -0700 Message-Id: <20210830062451.639572-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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: 1630306016031100001 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 --- tcg/optimize.c | 190 ++++++++++++++++++++++++------------------------- 1 file changed, 94 insertions(+), 96 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index bc0e6f14d2..e436be7b48 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 Sun Apr 28 03:50:56 2024 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=1630304816; cv=none; d=zohomail.com; s=zohoarc; b=TpOcmprSJpB0I5oBHwTvxyDlDGrC35+jei4Yl2FCYtiIqD1PhJ/OImUmCKiQ6h4asMPh0ExVFoqPmgG4ctwioZOdxyh9t97TsLZZ/2Nxf+TW0+89+1ALJHhsM8OvPiVYxFYrPge+4fJjTPXDtAEoumvPrWHrAS1qrTO5vfqt4v0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630304816; 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=/PPfbK60Drd8QlsH2JQeVFlibIdpe3jswrSDrzUqXLE=; b=MFHojhBBGozg2Z6fGwdlf3Pg2/Zk2+tf+e6yjxi9BhRX9JLrJV5b60riATbt6NV2e3n3fEPKxRBiOgUs1YHaVQmqS+RL6/udnjgMeU5XoKbciR0Ixm2UIDnDKLp+/NsKZv/Z+Gwgx16/FAdDT54R4QIh1L3ii8muaO8TL8dGEZI= 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 1630304816949698.9711684595557; Sun, 29 Aug 2021 23:26:56 -0700 (PDT) Received: from localhost ([::1]:35296 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKakx-0006x1-U0 for importer@patchew.org; Mon, 30 Aug 2021 02:26:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46216) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKaj8-0003fu-4R for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:02 -0400 Received: from mail-pg1-x535.google.com ([2607:f8b0:4864:20::535]:39603) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKaj3-0007Ov-Dw for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:01 -0400 Received: by mail-pg1-x535.google.com with SMTP id g184so12423200pgc.6 for ; Sun, 29 Aug 2021 23:24:56 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.24.55 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:24:55 -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=/PPfbK60Drd8QlsH2JQeVFlibIdpe3jswrSDrzUqXLE=; b=pAtGeC8JcaYT5oma6zHo+9YOfvDAbRg3+yMtkTeT4Vl6gUrPD+Ks9qRKTqoLhIyTvJ UkTA4pyyW7yG+hNqFpEzgbFRBTEAfow5js2fMc89aH6nDIflp03NAwFVk24RC3OhF+gb O474bCtTvvR+WcWwbvpcEF6oMtEIBP4//vaVNGWXhHYcuueBin45a2t828LclzpDrLI7 j3LuVb7IGMY4C93apFyyvv4JK4AiDciWGAMBYVoPQClhLOFoKx7a9xNyp9arTOhkvchv sxemsFgX/R4f6tQ++7RbzlOJTSgn1YF98B4DENcerCf13LROIUpiIfwaMhYXAzryXxU6 NZEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=/PPfbK60Drd8QlsH2JQeVFlibIdpe3jswrSDrzUqXLE=; b=JjvDbFt1sVjCR2nOnAs7r0WKfcOCcwqv+/nGTP+9SlMNqvElvGJOqUkn/iSxzJ8GJ9 9NkHOiJrw3L9RnUP1e91/XEU1XTTGc3l+voKmOr03L2DbgiKwcBTEjUZfXy41ThJhE/4 vqxtdmSxVdR3IxvddVqzVCF5AFRTYOeK4DHemA29k7efIdjzwnkAsAmKtFCzX0Lk/lky HfJNdUpIErLKnTGWWdHgAm42ZIf/DT9hCgsP+zaSwpWm4EAO6jR9zp5oh2lM4DpQC+op uZUfDEudHTmocWRQwoXFUyMRcAmV/KGXbrliHAgKY7MmrV4iDs69vzEyC0a9/CYZ95o6 koLQ== X-Gm-Message-State: AOAM531y1y5scE3+W9LXqMm6bvU2J0yP6O0fjh/dPjlpa24dG+ieNAV5 XObdeKlmAgt8zgdPFSSKzWi1b6bSvVcbsQ== X-Google-Smtp-Source: ABdhPJxIetBekqvcYTuyBWYlqIq12xaHJTB7jL3ej1QnxoJWyHb4aRQ+tqjV5Z8NJQ0+6wHy07zAiw== X-Received: by 2002:a63:4c1f:: with SMTP id z31mr20391640pga.50.1630304695932; Sun, 29 Aug 2021 23:24:55 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 04/48] tcg/optimize: Change tcg_opt_gen_{mov,movi} interface Date: Sun, 29 Aug 2021 23:24:07 -0700 Message-Id: <20210830062451.639572-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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::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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1630304817964100001 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 --- tcg/optimize.c | 67 +++++++++++++++++++++++++------------------------- 1 file changed, 34 insertions(+), 33 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index e436be7b48..c73ec384f3 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 Sun Apr 28 03:50:56 2024 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=1630305053; cv=none; d=zohomail.com; s=zohoarc; b=EyFOzYap9HN0+jMiLUO88Qrcj4tUbCis2gHRy6jCl6smR0lrcfvgH2uR6z0Kt/ZP88GfJXem7FHmSfTKfM4at9gJr8CuX5UxEFwrhRsWshwBcQFBMjKu9drHfNbB0364pR6TOtCB57jChnnfjp7hSAwNV7XRG1FFzVQUx40G75s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630305053; 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=bl5RK4GarrGI3jKzjeoPfPKsN8c22YUTkuysQ6ecu08=; b=e8Ny2+b/9pIz9tvECmoI/1lGq0aZdfP6jSTY7+6/cW8LYmcSmyy1nkGm84mVL6wk4r//ZdviIrrFZ/XMkGnQG6s2jEuAlYm/Jpo971CfoFu14flMImt3Gcn/uqez7e/iD5CTlRjrNo01qadqkZtePQTYTB1MRPG4U3FhGeCTDyI= 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 1630305053669785.7388448640179; Sun, 29 Aug 2021 23:30:53 -0700 (PDT) Received: from localhost ([::1]:46808 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKaom-0006Wx-LB for importer@patchew.org; Mon, 30 Aug 2021 02:30:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46160) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKaj5-0003Yv-Jt for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:24:59 -0400 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]:38816) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKaj3-0007PM-Uw for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:24:59 -0400 Received: by mail-pl1-x633.google.com with SMTP id u1so4138422plq.5 for ; Sun, 29 Aug 2021 23:24:57 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.24.56 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:24:56 -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=bl5RK4GarrGI3jKzjeoPfPKsN8c22YUTkuysQ6ecu08=; b=b5QlFuyXbPdAjXOI2E9XFE87xlVMLGI0DfYW0OnXPg6e3xigkTTNVPdUSaLVrxIo2V 0VQRzCE4sRaBvVszGoQppmcGKI2Vu2QFOMs0kpqJG66SR8MfwcUxss2iT9vnTwuFoQ5o 7IKe+hNkRH1/9U2EY73xfo0JRMPNGRFbbZ4O8Ao5gxoixCd9xgA8yoUX2+URpY2l4cb7 uiKf+JP3htKuTTB+ynXWqCJ4BL2/OcWJ7icFunCfgyz+L+yfj+PFavx9a7/2JYh8JVCf sGXvnL3DAQ0pp5b4hCmJBJCtfez3vUdAb1mY22DhLbYtSsqPXdS0rlF2altNerV3wwvg r0sw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=bl5RK4GarrGI3jKzjeoPfPKsN8c22YUTkuysQ6ecu08=; b=EfqrZjd5Uekp43oTE9XcAFoiyiTkw7drgVRrmkuPlgAonzVuH7Qq1/odCC/5fJb96B E/J6TcmIefN+v7FoprP3J1g59Mouzz5xlXC8K3RaO22CdlpC6cKGCkwZCAc3rzobQH7p U9Pp1Z1vPwCMqGdfWL1iImgylzdFFlEzNCUrWfYS4iCIGqBwZ4ZCWNhjJZONvM/y+43Z LxyQuGvCx4lhmJak+ISsRcI6O0SrGMp5ixlT7xatYyRkwiDXHXrLAAANarqtTw56oH31 MebvCmsMirQ/MiKpzsf0cI9hs09BzPtFjQO1QmIFHCFvTuRnf18/vxki/QTIziYVV0lE 9isA== X-Gm-Message-State: AOAM533tJc/uIQiD9NX4grIWifS0I45F9HzZ/Larn9bnFCpFqNC59FfX kl+5ncR13RCXvNvRGctPeAwT2Ar8IrCqaA== X-Google-Smtp-Source: ABdhPJyLQVNrKcjbSOTrg+p6/rO5FSHybyI/dTS0KE6bzG9EBk7qRhAtmviaoCoOXA2W0ePUf7WrMQ== X-Received: by 2002:a17:90b:a48:: with SMTP id gw8mr38011542pjb.145.1630304696629; Sun, 29 Aug 2021 23:24:56 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 05/48] tcg/optimize: Move prev_mb into OptContext Date: Sun, 29 Aug 2021 23:24:08 -0700 Message-Id: <20210830062451.639572-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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: 1630305465067100001 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 --- tcg/optimize.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index c73ec384f3..87f33521ad 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 Sun Apr 28 03:50:57 2024 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=1630305386; cv=none; d=zohomail.com; s=zohoarc; b=Qqlg8QqCSvRK1VdAx0CZuuvJyU9NZTQqCRDVFNFOTR+WrVrlIqwG77yZNtgYZu/+od/Urq1Fh8A3M2ejlcnZTJDktWxNde1QQGSdRpobtRPKxMc6UcR8bRNe7eaVoJiuZKjPOPeHFAZ4ofsl24ezYWGs6LfI6ydzBx4OkIphLIQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630305386; 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=2EfP401+oKK/BT8GAuF1m4dvvh+53+sjFVE7rzdniuM=; b=Ujff7Fsg/sIytuPATgG9BxTn5GKNVKNQEVEQ3C4ME0Z8+NIJAYKUAwc2uwuzxtU10Boitjf22sPHL21YCFhrAHhteezS9xWsJnp66YHt7HcmK1QoSDT2wGHU42WjM56/jDBmKS4MVE6/yiwHDJNTKveQXTNKP1/UPy/g/uC0uNo= 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 1630305386245128.37208329134342; Sun, 29 Aug 2021 23:36:26 -0700 (PDT) Received: from localhost ([::1]:60518 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKau9-0007bp-7Z for importer@patchew.org; Mon, 30 Aug 2021 02:36:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46182) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKaj6-0003aq-Cr for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:00 -0400 Received: from mail-pg1-x52e.google.com ([2607:f8b0:4864:20::52e]:33782) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKaj4-0007Q8-Kr for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:00 -0400 Received: by mail-pg1-x52e.google.com with SMTP id c17so12473066pgc.0 for ; Sun, 29 Aug 2021 23:24:58 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.24.56 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:24:57 -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=2EfP401+oKK/BT8GAuF1m4dvvh+53+sjFVE7rzdniuM=; b=XdGE+iOfoH3j289/MCgqmsHGUcjO9mCiqbwkQyA+i8o+joavIpFJIGJcht4SiWqVUu qw6pRMATTTso++zB69wmLKBLCId7AIdeZTjCOquT8p5sB+Xs26qClSzojULPHSWaJxrN hcNPr9bG184r5i1bXg3RRpwmv3REP/Kz4Sxv2Kjc0Q+2WSj3lS41QokHocFbu+ev0rcr Y4y+1vaF2lHAt0jDS4GDEwRBqLqP9OWbvvwbnSt6huXuaED3mjnox/g6rNjDa/RmSbY0 U8lROgPQ/7xQyz5p0ngFxLz2TvEq5ukFXZi9x5xLru8W+XiV2m1in9niq1tSUwTQiOit QmGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=2EfP401+oKK/BT8GAuF1m4dvvh+53+sjFVE7rzdniuM=; b=r84lobc3EvtRe6xKZ2c5S4oexw4RIBMK/HIXcS1D6T/wGoYK/nvf1xXXVVwe/FmrWy upu7haXBxTxojeSMdF3P5Ijz4P52mNWPlt4YryolDWG4KuIZRhFumA/fj4vrGsV5Ryr0 2uoeg5lyj137Vx1HTTqcDZWaPL9bheXYWIM3rAQ1d2HP3S4jqS3d5Mw+7/EECLCuTrF2 GLHVn+nW1jQEAQWp29OLCGLmHk9s/zLX/jzg5ivVN/eVhmtZB4Y6b06zoTKXuoqjnfbd K6D7EpHqepLYVbU9WqgEWmleZ0le8oxCWId+ek/OZAgtpxRAcx1gzr+j1WG+y4B8KslS FnMA== X-Gm-Message-State: AOAM531yiy4m/1c20qk1m6Qq1+7o7vfXQcZaw5yEcYmABN7nreX415GL Df218dkgnv5QxBehFxWn91p5R61qjJR/Ww== X-Google-Smtp-Source: ABdhPJyvgvk0+qS7QjnadDcxVC1H0Fwjt2mQ0o1t7q7jgCB890hqbWnFFpOhCUQwSdxqN9Qqx3gAJw== X-Received: by 2002:a63:1309:: with SMTP id i9mr13245489pgl.192.1630304697271; Sun, 29 Aug 2021 23:24:57 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 06/48] tcg/optimize: Split out init_arguments Date: Sun, 29 Aug 2021 23:24:09 -0700 Message-Id: <20210830062451.639572-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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: 1630305488268100001 Content-Type: text/plain; charset="utf-8" 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. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- tcg/optimize.c | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 87f33521ad..b1b5096a9d 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 Sun Apr 28 03:50:57 2024 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=1630305568; cv=none; d=zohomail.com; s=zohoarc; b=GDFBTD3b6zE7rFIVP4Gi/fjAPOnA9Zpeei9XNqHdDn/YNE9MxFH3eBScRNCAPeyW0DJ8N+aBJpzDZSsx8uEqUlEO+ywhV6IZdG4+7lE0X8E3wBNKVQ8e6GuSAp4ASqGLUfu/43u8HqXP9gmeDRZ3PtYNZNZV8XD3Byk+mxnUOr4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630305568; 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=EGSJJ61X3FkAvzFRiCSr9bHCfCMYIoiBfLCMNZS+yck=; b=KZ6N1YXtn90suHjz4jY+SjCanTkKSPKY8Ob7eoB+rr1k1D9+1s7Rz0KagJkqgGephrE7UOGjcxURJ3uYHIpWrV0BOvZZYEjATDoK9u/aAoUYY8HcbUGd7Fd2JfrlvmP+kXtPj//2IugQVVYvRytlI3B4CurWvpMnwO5lcQkkpq0= 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 1630305568038564.3199245927746; Sun, 29 Aug 2021 23:39:28 -0700 (PDT) Received: from localhost ([::1]:40566 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKax4-0004ou-RO for importer@patchew.org; Mon, 30 Aug 2021 02:39:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46194) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKaj6-0003bW-Lq for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:00 -0400 Received: from mail-pg1-x530.google.com ([2607:f8b0:4864:20::530]:45002) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKaj5-0007QU-79 for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:00 -0400 Received: by mail-pg1-x530.google.com with SMTP id s11so12390804pgr.11 for ; Sun, 29 Aug 2021 23:24:58 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.24.57 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:24:57 -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=EGSJJ61X3FkAvzFRiCSr9bHCfCMYIoiBfLCMNZS+yck=; b=hC9xeXaTlJG4g3rn+/GDLXnI6j0SKXtwIxCGO60FHMmuzP62cLb7ldck+wcgRJ/oOq fmDkOxro6DdDAxQtY1dVs02vdBNNHqzb9OV+kEXHKJ8HDRBP0/a3ghzD5AhnBdvOP4S6 pIzz5mHSuB3W60nudPUnUFhn5ErtELAx8W2BZX3sFt0VxDG1BMER2mtWSV0SIX9SwtPE Z2POqOxROnnryjQQ/0aENqCbdntPq7rZeU+8pWWbTX9ncT09L+OvPvMHjDdk+nmCXng5 hYinjexMLMVhsdwzgXhkLpG7t5nmu9tjG1Sc3GV4J0F0ZKX/9tBjCsMDZivjxtJfH8uS wCng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=EGSJJ61X3FkAvzFRiCSr9bHCfCMYIoiBfLCMNZS+yck=; b=Ya0jBv7bopvi9qKRfM0VCTcZS8U3wejgJUTOT2LAOGmbRKXnV9KTiJzKWbEEnKdfJA U9sadJA+03gdGisKX0Fq/fkQvTMDRXUef5NhIBaMLv6i+syccwQElN/6fzBlYIfwqCEZ dWeVRp9v4uAhJPxegjzBdY/uF8eMVJBuH2pxYXXH1eIDsf/jyr53HMDmxilewYSy9xXP qZf2Z8gvGF0HQmAbz1uo/jGtwuy2tjuC9Qr8Xl4fwLtID7EpP6W1Def9S4Iw5WCJOnWm sKTZAW6El63xenmZKT8CArvaKrAfD/smY84MkCMLaGzTdLCBEbSFpWYmzviRGa0u4Krj OWJQ== X-Gm-Message-State: AOAM531jKUWl9j9Cp4zSTp/qi8v1V+nS5pjhDMDm8B8XbVqkQwJAnI0D moNMCPU30dIyFOfzvK2akOVNU4jA4a547g== X-Google-Smtp-Source: ABdhPJzpHOX9QZjsZ2B7VhVCCUleCKMh13KP07MXylC2hfTa1AYlw6HSpWxrkQg9xlAoKFvMFnvzkw== X-Received: by 2002:a63:ce0f:: with SMTP id y15mr16282354pgf.249.1630304697876; Sun, 29 Aug 2021 23:24:57 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 07/48] tcg/optimize: Split out copy_propagate Date: Sun, 29 Aug 2021 23:24:10 -0700 Message-Id: <20210830062451.639572-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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: 1630305613710100001 Content-Type: text/plain; charset="utf-8" Continue splitting tcg_optimize. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- tcg/optimize.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index b1b5096a9d..a668c5f0df 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 Sun Apr 28 03:50:57 2024 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=1630304988; cv=none; d=zohomail.com; s=zohoarc; b=Y1N2IbKiyVWEIEvzH1KIIDrrZ33JMAoyb4DfiMvWxX93mCjAcwarq6wPLh6gEF22hbnmDdUVXeWXRsWbZ3tCXHcMDIpPAMM6DKwC+S6F4b1aNDmnsOjhPrXx+M7auahRX4I5h/YeYy+a+9WIlr+Ef2cXmQMJtYH6oiY8lpn0dAs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630304988; 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=lXZM/5jYXScEjt5M/i1wW+ywq3nz+BwjDuI5NM59gwI=; b=juKq5uzIMMrviXHbCGkDsXAmF12lp01AVVW6LaH8eOnBUAMQD7xX7zUceV3daEhU/9R3EPlcFlhv93iVw+F4l3mbnsEwcYfI5C60NdvCn6L8tRdnNf6RAMGkraVItbQImsknb7WzeaOnYe1HjCW3YNMuZGsUsr2UJjBjF6l/ZOA= 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 1630304988413136.88409911083124; Sun, 29 Aug 2021 23:29:48 -0700 (PDT) Received: from localhost ([::1]:43840 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKanj-0004MO-DH for importer@patchew.org; Mon, 30 Aug 2021 02:29:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46210) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKaj7-0003eO-HH for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:01 -0400 Received: from mail-pj1-x102f.google.com ([2607:f8b0:4864:20::102f]:37668) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKaj5-0007R2-Qk for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:01 -0400 Received: by mail-pj1-x102f.google.com with SMTP id j10-20020a17090a94ca00b00181f17b7ef7so13103224pjw.2 for ; Sun, 29 Aug 2021 23:24:59 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.24.58 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:24: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=lXZM/5jYXScEjt5M/i1wW+ywq3nz+BwjDuI5NM59gwI=; b=ahfw6+BE5lyvqQVC1uUDyc7o/Foj/ahiYTmoE8I3HOWYE+wmqcGIPJUB4QAMSTx0LZ t97DRjZFsBl4eALi8DiEvAI3zXmL7xU3LzQvXXEdah9sUE3E1OvO/CLZopXEwjvcPROM g2FaGDQrpEL9GNWXWzECIZriiJMwfgbHxxomQu1OziOD4RJnkeHPtfoBr5luHlWDFzkl rzvRvETufYqaWTwwLEeMNTkiavunF25ut1Dh/nPu3vqBe5WrOMoK9KEf8U7HvGea3qty ZZ/9zvBWU6vPsW2mJYnNjErIEbICpD5EIlSuE9tE6R7xa5mb6iW0/fbIssqO/b7fjUIC AQ8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=lXZM/5jYXScEjt5M/i1wW+ywq3nz+BwjDuI5NM59gwI=; b=m2GYbERs7UvPNgR1Pg5tUy+XD7J57hsTVXRwqCs5FYiLSznNujYSB3X55TpSTqpBBY enJRED25HkZbCCajdz8shKGisgB794yVPslFXcQ61aoPS24+YTwpRFpz5hd5D1Qmp9XF PzcAasgf3K2Pjt8zf2iSu1mhBgI4EbCnp16HC3+EBDGq5S39PG8jkhAXlbRLoWaJVa/+ Oye5J7bXRrIvnp3u+zQ4jwMW94fMmYtMCZqKy8nTxeCU6lvVun6Q6Ev1WEzZ2vOx35Ef bfvA2Ql6NqtDtwJ7iHnsrpI8ETuiLgEfu0Pk4VbLXK2YXKiARes3RJr7TWvR5OKWcU0P C5hQ== X-Gm-Message-State: AOAM530ZjBKiUESe05MJqfL7VgQ/RfZyFdsFqGUAGxNYrb8hLAjWBw6q U9nA/BO/4Hg44d+WBub9CXNHDEBgNtclMw== X-Google-Smtp-Source: ABdhPJywKn92Gbw3GGqRrjql7aS6PiWRCGhN6oNeD+Bj8OUqAZuEaX8UNnjKXFABasXegZmgNT0fog== X-Received: by 2002:a17:90a:c293:: with SMTP id f19mr4474190pjt.106.1630304698477; Sun, 29 Aug 2021 23:24:58 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 08/48] tcg/optimize: Split out fold_call Date: Sun, 29 Aug 2021 23:24:11 -0700 Message-Id: <20210830062451.639572-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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: 1630305409812100001 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 --- tcg/optimize.c | 63 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 41 insertions(+), 22 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index a668c5f0df..4a0949d1c0 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 Sun Apr 28 03:50:57 2024 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=1630305253; cv=none; d=zohomail.com; s=zohoarc; b=eE477dkE5fcw3oighUbh/OhfA7UVgDp9XAYK1CCAWYdFUsMruWUqLrCYTMmJcPELL9cfmlLgLlafh2ADjo3vIvszhuzt+uozSHoLldmKVsWVIsQAEU9S+31/TA0lTOJtECEs3RQ91tfaA4ZSCDkvvOM+WUWGHohgcuTglLd4Yd8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630305253; 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=PI8aDp4ig85+pYLUGhK9PJCZ2fmihYb1XAo4Ckg6K5o=; b=haB1av9wtQFc06vBVypfXCl95W345apOqzBzfcQ/TWdBP2pAYcIJRBi0V9IuJy/ngXtuWpjsAFd3nHrLIAW1qa/AWSN8NGbMw7wNVtlV5kmrC4e/an8Emv/+D3MFraRhy2KGgTImlrbIVUDkKleWBhi1h3pGc3wLrjdOg2JALvs= 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 1630305253672307.1668549287913; Sun, 29 Aug 2021 23:34:13 -0700 (PDT) Received: from localhost ([::1]:55316 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKas0-0003zg-GZ for importer@patchew.org; Mon, 30 Aug 2021 02:34:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46236) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKaj9-0003im-5b for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:03 -0400 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]:39455) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKaj6-0007RW-BG for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:02 -0400 Received: by mail-pf1-x433.google.com with SMTP id e16so10955318pfc.6 for ; Sun, 29 Aug 2021 23:24:59 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.24.58 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:24: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=PI8aDp4ig85+pYLUGhK9PJCZ2fmihYb1XAo4Ckg6K5o=; b=oE214MegMkQjjS2GUsV1025SxtATDdBqI5tQgBU5/OJMwMNSCna92TqGytqWU4hx5z JwmEEicLHpuH1mSnqTSrysQxnA3PZ/8qUvPJtegUx6VmVCgJ8cZnibiPY27ZMKL/Fn2Z qhZt51In8p2ooDlo1EO/kAKVDGiMNGWg6EPfG15inciQar0In4n+doGEu5vXYaEZMVZL aJN/Dwm+Gi2PcSrvqVQ7FwztVQi5yKWQx2S9IyPrL5jnhCQJBqvyMo2l6HAucARLhB9s 2trdCsuLhE2qOsT9k0C2J0YYy048CccGM3Bhj+x8Hj3ZyoKV7Gp45Z8/1krK66yYPINd zeHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=PI8aDp4ig85+pYLUGhK9PJCZ2fmihYb1XAo4Ckg6K5o=; b=lHf1sgtGAnU0fS9bNtfSi31WlmjYiOs7SmLHZALqqRt3mOsiI+oNwmqm/S0438FMWg mrUD4LCJCU+fFwAhyMdpjD0AYVPN95xdF9N4lPLTMRzIs2BdRUDvPV9ksj1hpnWadMkM PVs13E7FpJtK0NkIpWBjoHjL0Q2pfKqlATR/S0oimG70c9S2OgT6hmwPoJy61EbbYvN3 gfrZU895Vkg7i+y9vWPjE/UGM0NCr/YquoYc1caJZXJkcuWXVebhaNwkeOOD0yjX+BgP DobAbOP/jcLqHH31vGiDUMyqEtkQ7UoaGa4zJi3r0oH9EzrJEsoMzxuDFHX6/2Ld1Udt nxpw== X-Gm-Message-State: AOAM53006a9eFPxk0JeiJLS75OOnqZmJvwitg4BVPojtHH0Vlt6NSZz7 NIPAya39vJfEdovPLGtGjmKw1HnXjJ/7Ew== X-Google-Smtp-Source: ABdhPJwVSdZVqw+7aP5jgwGgxB4dKqJ2m7gyaM3sdY9yBB2v7oM28HcJig92cV/fgY61ttuWSq0ksQ== X-Received: by 2002:a63:504a:: with SMTP id q10mr13216994pgl.37.1630304699095; Sun, 29 Aug 2021 23:24:59 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 09/48] tcg/optimize: Drop nb_oargs, nb_iargs locals Date: Sun, 29 Aug 2021 23:24:12 -0700 Message-Id: <20210830062451.639572-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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: 1630306058070100001 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 --- tcg/optimize.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 4a0949d1c0..96012a6da8 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): { - TCGMemOpIdx oi =3D op->args[nb_oargs + nb_iargs]; + TCGMemOpIdx 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 Sun Apr 28 03:50:57 2024 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=1630305449; cv=none; d=zohomail.com; s=zohoarc; b=mpiMJo2+HFDB00xgCoWTuSMiu0gq2hg1dBGufBF63nuD0Y3FGZn/jy6hLm7IAfOGvIM4XZ9E2b0XrndtwPtPY1fFCP/6r6P/0gVDi6+GgF7cf5FEMTaEkWmI3Eg3i1BzXgZGddqUKDKPfS01a0llmLrWeFx0Bx+Mc8MYFU3hRag= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630305449; 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=sVAi5UeOLefJqLrSNChcY0bnCMhNkQQoOmcIIsLoO0A=; b=C9ouRC3tdoNN29t8tWL0ifL4aR9EBOLIoXGKO9KHawsR9AQqUeVdJubFec5aPX3GQBB/w6oVPLjfUzekMvwPXlxrxY3/h6bj2bYCJOlQsDfdAP28RRVeRodwArJ6w5EZWfthV53h+PJZijTC2SN8KX1EFmQaKKFHekqpGDIL2r0= 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 1630305449136611.7119770399488; Sun, 29 Aug 2021 23:37:29 -0700 (PDT) Received: from localhost ([::1]:35474 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKav9-0001Kt-TC for importer@patchew.org; Mon, 30 Aug 2021 02:37:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46280) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKajA-0003np-MO for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:04 -0400 Received: from mail-pf1-x436.google.com ([2607:f8b0:4864:20::436]:36641) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKaj7-0007Sc-5F for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:04 -0400 Received: by mail-pf1-x436.google.com with SMTP id m26so11413273pff.3 for ; Sun, 29 Aug 2021 23:25:00 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.24.59 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:24: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=sVAi5UeOLefJqLrSNChcY0bnCMhNkQQoOmcIIsLoO0A=; b=gDN6YAyc13QwYo8Xf8vy4fhcjuflWeyMfoUinp3jytroUcaTSphe2rIGNEzKM8B5zp 6Cbf1tf8qVWq0HAKmfqnHCx0c2DROQeBzPFXkvhPF3wVDkhGT3YAsyZ6k9ZGePETw18/ Dps3pQSvhGWRoaClc1VXoVYTeaGMC5kk5cbcw9a2tAktayObxj5WD9aPz5wARTQgUi+b L06btRZLVLRRpCALXBmhyiyifwRjHkQLOlUpmtnJkS5a10RiF436CElbzCzotLYJVncc uFbBanD3GIthZY86KpEpk2vAUFCLtHbmELTsmYr9f2vLb3TZr6CQ6Pomw/evrmMLZijD ghUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=sVAi5UeOLefJqLrSNChcY0bnCMhNkQQoOmcIIsLoO0A=; b=EdAlZoOeytcBQsxnCXdkcECcYA7VUI9nTEed82FBfoLRvyUVZhpnxl6u7Od9xUPx7j 7JKoqJDg6RgInX49CVp4Hajjxd7v8Cn+qq/Ul8ObammeUjpj6jBZdPmFNZrWCxWebDg/ 6n86EWbTpSsRLL3VlI///DH7EFfhN7deMxIOFSD2TIdv6vvjNOoo83L6uFyvX8qxLHmd FS0fd//brKu1Sv8zx3bKBdIDizJ+rBwotyVPsQv0OQYKI6iiBvkO9Qf1o8iIG6DsxBe/ EWb/jNb0N/sm43f1NWQHEN02acaD6aai1Z2WlmK5DaN/6rUUHVUuXX2PnKwvAQhu0+oR naDA== X-Gm-Message-State: AOAM530YAvfxpxI1rqKJIphsleXMAVkb7PlL+pUUF6+MszzsPwLrwT8n ibzWMyzdUiTbi8cVPEAwhN+HanwR6GBQ5A== X-Google-Smtp-Source: ABdhPJxsV+o1RD+1+xIFPb4CvV1UFp/7RTYFOpDl5Z06VjfTV4JTrbE0NQ0QGSj9nhDIJATpQ6oKOw== X-Received: by 2002:a63:798f:: with SMTP id u137mr20212047pgc.321.1630304699755; Sun, 29 Aug 2021 23:24:59 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 10/48] tcg/optimize: Change fail return for do_constant_folding_cond* Date: Sun, 29 Aug 2021 23:24:13 -0700 Message-Id: <20210830062451.639572-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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: 1630305528746100001 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 --- tcg/optimize.c | 145 +++++++++++++++++++++++++------------------------ 1 file changed, 74 insertions(+), 71 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 96012a6da8..39a65d305f 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 Sun Apr 28 03:50:57 2024 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=1630305170; cv=none; d=zohomail.com; s=zohoarc; b=jZP8jypQczAmWjy/YH3Mp3cCZX1g+NIM9mBIQtz7oo0LBKYSg5Q7CJGAnBnFJKyt0/oXoKMFR8WsefQE8XtxA0CV7mJH0BqlKC+6/fZZ2T3YdAXkNRpRdbu6R5AMKCg6KuIdGOHXy5TXDv9O1VbRdcHxbmppqKQETBy3d1+2IQs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630305170; 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=/gLxdxuhis4lF5Y8nsFl8eRzcFmtXgy72e0rkfcmU60=; b=GZL2TJRTazq2uqyQ1UblEu+kpqpj4VdMMA6LW4jl3MCIlSZEInAunEhbWvPKj9PifRtQ0laOM4XlGXuzE614PR4wtxVVKcUWIjV4ybYaLPHRIw/FXMwOm0KAOJjeK0Nux3gcjgHGgb4kgcuJGSsXWTHPFnlSIDwK3oIKuRpmNYk= 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 1630305170121280.36270933312994; Sun, 29 Aug 2021 23:32:50 -0700 (PDT) Received: from localhost ([::1]:52338 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKaqf-0001zB-02 for importer@patchew.org; Mon, 30 Aug 2021 02:32:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46242) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKaj9-0003j9-9z for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:03 -0400 Received: from mail-pg1-x536.google.com ([2607:f8b0:4864:20::536]:41953) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKaj7-0007T5-Kp for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:03 -0400 Received: by mail-pg1-x536.google.com with SMTP id k24so12406733pgh.8 for ; Sun, 29 Aug 2021 23:25:01 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.24.59 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:25: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=/gLxdxuhis4lF5Y8nsFl8eRzcFmtXgy72e0rkfcmU60=; b=DXK+/RcN+KITCTiOkWKf/BqblOKpDbCtJ+gkIbn6psKLyQAFa1J4PcgX22IJRbdL12 xoA5lANq0gVLIV00JYUDENjznkChNOOzsoQd9DIumEzAo3oivrbPobnQzmQwONwhu4Ow Ci+RuSRHka24lN2uZgIO8okkmGljtKAArHbAhh/W+tT87h8Bw8AT2KQ/4PjXzLAEQE3r EtDnBYQhjdl/tfhVfDKri5Ce1x19BVsxUWSVGGx0ZOHdXyd1dWOKL90mT1wPhO7MwXFf HJf2/k1/EFIRKBDLlLC7lLcnqAs0Mj2nx73hkkBl+oqSAF+AfPEwWR5d315F8Kbp1Oi3 GYZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=/gLxdxuhis4lF5Y8nsFl8eRzcFmtXgy72e0rkfcmU60=; b=hLavnTQ8dbbBH+0s2PISlK5l8zZZIpCvYvT/e5G2XTeFWGj61+WX2fiIX0Hcw3zZ5y /NVICJqcaPkSG5hsbj8d69hU1WqyAtyY5Th6JeJb8vhi590enGXtBuGvlpiT9xc5hxRN e8gn48GIlxyc/EahZlZ93s6JHaw9lz6ejv8kr/oJ1F4F+v3pvQsNgBRxYbVl3UMNlOoW 0TeNOnJSJFueBoHXBn8EJC3OnRfIG6yxvJUVYR05ZGxvsh6xFRDTfUqKKmsgxhquJdLb xKo279UusrvL7PHJ/qiMAe6HwIL5+9ltcpA+K3EDhPJSfnC7L89aiiZ+eKUHrDUS5zmn 2e+g== X-Gm-Message-State: AOAM530HhZPxn8eqskVEi0Fdaxfeqazlxgc7QhOiDxSBhgo7vmGRtDGI bV8sYtB4LOkEzZvcvUBhaIYuusnFatAgbw== X-Google-Smtp-Source: ABdhPJyc0ZTudeXdJqFGbdhG/WxBy5w/LJjtoCDPo8XCmJ/TvuuiopNi2HnuTzrqkVFKROeVT+tyVA== X-Received: by 2002:a63:4e65:: with SMTP id o37mr20221613pgl.202.1630304700324; Sun, 29 Aug 2021 23:25:00 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 11/48] tcg/optimize: Return true from tcg_opt_gen_{mov,movi} Date: Sun, 29 Aug 2021 23:24:14 -0700 Message-Id: <20210830062451.639572-12-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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::536; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x536.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: 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: 1630306018943100001 Content-Type: text/plain; charset="utf-8" This will allow callers to tail call to these functions and return true indicating processing complete. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- tcg/optimize.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 39a65d305f..c4559d32be 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 Sun Apr 28 03:50:57 2024 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=1630304823; cv=none; d=zohomail.com; s=zohoarc; b=Tv9go5VRWb70SiKudHb2C+5MpOIKEMpw7rtci5eKRs8BbBfsIrnZvyvSWhJeq9izllWtVKJ740C9+lLk/kDt/J9VDqL/FZ97rB4azDQgq9TQgl2C5Scr35u2DvSCXEA7rscmTs9Er7xtwQrRnGTprMAJ/7x+Fz+DTVXb6mpn0ac= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630304823; 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=liy2IxUxYk4Q9x1eucfRtbE1W0cpiKHniKE8oZoSFNA=; b=Eud62/HYMCosbkGN74ay+D8++m8BnxhkZ+SKFkVb+ntZAynOi+ph8PHuji9pqkBOl38ikmbW6RhnqQsm4TMaR5eKlQCS33q0FY5lGGWLhVPiTuhFvebzTECTLiECAOdn0uGMrXadCF8P/TGDm6aRt2LWHKnwUi0z1QhOtyms+Zs= 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 16303048237192.750246577598432; Sun, 29 Aug 2021 23:27:03 -0700 (PDT) Received: from localhost ([::1]:35492 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKal4-00075h-N9 for importer@patchew.org; Mon, 30 Aug 2021 02:27:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46266) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKajA-0003lT-2i for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:04 -0400 Received: from mail-pl1-x62a.google.com ([2607:f8b0:4864:20::62a]:42988) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKaj8-0007Tr-C0 for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:03 -0400 Received: by mail-pl1-x62a.google.com with SMTP id n4so834375plh.9 for ; Sun, 29 Aug 2021 23:25:01 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.25.00 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:25: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=liy2IxUxYk4Q9x1eucfRtbE1W0cpiKHniKE8oZoSFNA=; b=IKnLndzdedR5YHvGL6RJon0e+RknnS6zFHiNQNUaSNBHxNMNTtQhSaGs09ZcaY6Rgo jssl4sS5LfhuriRM7DxhrI3mZntCq9hgF9T+RBezoYwdMNvuZwaCMnnx5JWOjMgfFZHq J88vvG5TEWJYw49L551rRRgfW49qhAQgw/luNqwicZx/BN7gloMSB5U+3kqM/4oefimb NQKo58UJySmHFglKepOhWg3mg7bZZivN/9CUVTOCrqG9WUcKM7Vn+M1iXVOCYB45zRNV gosyrPv6DTwm2VkHVnC3Xk70FYo8qL8rqh/jiEUxFZZg8G8d8SjBjyQ0Ey0GjbROoAHU /7fA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=liy2IxUxYk4Q9x1eucfRtbE1W0cpiKHniKE8oZoSFNA=; b=DqK3fGbPbxomu8ir1bW6PUz4ccJ7TuQARAOnSlQQheZyL/+wy+cQ5owymPRxb314VQ YlemPa/ryS0s1PGUveT77MLe+zVTYePZ2YOcACeF+nE56nuH5n6zxHuZEajKMPK4536f 7/61B6BZoh2CBM6ekTi+aL8IXy/BJUQRroFxJ2a6LSpwWtG5BQ6oOI7lK4qWRuIOCRvn 1/5I5c1Vbsiqho0heK4V/0d1WzeJaMBP+3+c1cG1fHUwPimrkjyBfcwi2UkYfnAIBAo4 52EWL8QTgWai4X9q0j2ksndHQvJIFg+HLw9FRGeQcyc7UxC6HGyyUntTUm2y4TG8lbcV ECZQ== X-Gm-Message-State: AOAM533bYyLw3QHTbAgfgKketRzBKIYpZb/5a00KaHkJAHJ9sVwKR8oC ALLcwyh3E6dt2S9dQgcIbtqUFQ3QWvYMpA== X-Google-Smtp-Source: ABdhPJyDaxwgmjnC8U6K2HKFzl0Hz3zyq3SscskzpuMdqD7D2egZ0KPMYztSzDEfYxPbrswBu1aR6w== X-Received: by 2002:a17:902:7803:b0:138:c171:c1a4 with SMTP id p3-20020a170902780300b00138c171c1a4mr7006897pll.48.1630304700960; Sun, 29 Aug 2021 23:25:00 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 12/48] tcg/optimize: Split out finish_folding Date: Sun, 29 Aug 2021 23:24:15 -0700 Message-Id: <20210830062451.639572-13-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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::62a; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62a.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: 1630304824913100001 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 --- tcg/optimize.c | 49 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index c4559d32be..d202515369 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 Sun Apr 28 03:50:57 2024 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=1630305771; cv=none; d=zohomail.com; s=zohoarc; b=Ba7n7AIc9K5TOpMurS1XBr/oGdXtigiW6kXvRyxXGvaKW1HeD5tj15cYIMwV58pAZd83Am/HmhyA/vNCuZkaAyjuUB2JxO7XBXFE/guqrqdAmVRl9PL5vzOJ9mXZQpki8NQwQIG0cc4/fZAx/UgR6kbg+3IVtPwypMOvHtiamy4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630305771; 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=iscoqGqYO3xbXiSWKEGOsSLJvb+F5x+TyO1DAWvp38U=; b=fB73YPUANmfKLGDM0RQhI4sPHCtYExckPQMnjWf+cwXGN4RYsb9BHhSsEKGDEWDPsg5Flw/TmK1fbrWxLBSshCjlmRX970Hmh3VPTtg/9b/Yt5Lp1pR1BjdQ3YPqwGVRVCdDmsKboKdeLhigHkd36xFg8J6VMOehaBE0v/c1kaY= 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 1630305771248291.5988926200249; Sun, 29 Aug 2021 23:42:51 -0700 (PDT) Received: from localhost ([::1]:48830 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKb0L-000241-S9 for importer@patchew.org; Mon, 30 Aug 2021 02:42:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46276) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKajA-0003nP-Ju for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:04 -0400 Received: from mail-pl1-x636.google.com ([2607:f8b0:4864:20::636]:35336) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKaj8-0007U2-VY for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:04 -0400 Received: by mail-pl1-x636.google.com with SMTP id x16so6280668pll.2 for ; Sun, 29 Aug 2021 23:25:02 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.25.01 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:25:01 -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=iscoqGqYO3xbXiSWKEGOsSLJvb+F5x+TyO1DAWvp38U=; b=rP2LWICwlctzDAgJhaJkCu6rzaGT8ouBdV5sWc2LXp4DTd3+i7PiehNGeEukPL9qpF bvdNn9AJ/+WY4LFlidomV4pGvXhr2f7nNyC8mVJUCkeeWG1THEpwNUqdvGij3YAZOha9 BuVQsfhg5yCaoNCJXNlqHIjXNLGS6H+avIcmbBrxdKCkMhomqPAfFOywR96Y+vW7Bb+m 3awrftm4vAZ5EKSTrAPlw5nZSNH79R+p2O3VktzTPnTG+klTnhNacCPYCMiHme0mczbZ rRQjHDydP8MSsZlT5w1GyVUhVQNNx7/vnqc9himAm5JASrQ9HC8HhAHNlzBoX3kXz2Gh /kUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=iscoqGqYO3xbXiSWKEGOsSLJvb+F5x+TyO1DAWvp38U=; b=uJD8P+X/r/kz/f6gdvBe4JfnRU8Ru6CKHPvfeGZLAtJtD0U9qO9tSu6X/voqu2wl4j zt1NmGTQOz29atyYwSjtdFgCDLLR863xdZ12cwJzSA3ap73cPS0njudjz7r3p32F1rjq wpB+/Mmi01GrPf/k0fGN/+PbwPsx6SRbwtvtV3bsRBoIi25n9vC6OsxI+bSi37yKhFTp 3MVofluz4dJNrMXbAHmDX6YxpwcHWHNRo9gbp47oiXGDB2m0lJdRK6nopOoI8GmQSMp4 qRYYqooKcpkjtytrG9XePGqanj8SdhifMWJvqh2E2FE4J9uYLeFk8QKECxgMSn5Wz5Rs tc/Q== X-Gm-Message-State: AOAM532tIHdNilolVwqbKKK8zIr+HD+CS7WsYPQUjerpPnx2SsqSlpIu EY1JQTk+L2f52OncJGqyRQDkvZw8nqvPgg== X-Google-Smtp-Source: ABdhPJyoFvXhxdHBkh656wXZcUzvFEKn0Ar+U7lTARLUrDOml3JyEb4rsX0evcfKu2r2OMqsx9qnKQ== X-Received: by 2002:a17:90a:598e:: with SMTP id l14mr37190244pji.28.1630304701532; Sun, 29 Aug 2021 23:25:01 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 13/48] tcg/optimize: Use a boolean to avoid a mass of continues Date: Sun, 29 Aug 2021 23:24:16 -0700 Message-Id: <20210830062451.639572-14-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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: 1630306137606100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- tcg/optimize.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index d202515369..76f9772648 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 Sun Apr 28 03:50:57 2024 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=1630305387; cv=none; d=zohomail.com; s=zohoarc; b=Ph11viFzOoaU+OaBw7kle7yuInjLUUOhQ5n3Vc276TWgD69JUCBUserQsj8wtaUPsB/8E2SSDbV8RecRvY9C+RMlKVaAKpb9wnFkZYqUKjSW/YHspm44ehFL+gHXwaN7jnclKvl5JbiANQiTT51FXOhusmCXi00CJfC2RUxQyeE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630305387; 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=pU+TfWaNabr7baPocO4XBLVY8gDQ0e05DOYx5MFcfKU=; b=mMgykPAYJMtHetUZVaYF3ItZDySOh0lflpSx8Tc2upJ+JUlTR7+UnJrW5otVN9aXm9RDi4tsGPLy+JrYh8mk+L4VazY7kwHTYQd82AAdq2zttUFB3EfVpuWKOzgJ1S5qAEBgpaQewpI0rT7PIG8iJZyWza3rtgWNXnaQCieZRtU= 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 1630305386820127.1346716665879; Sun, 29 Aug 2021 23:36:26 -0700 (PDT) Received: from localhost ([::1]:60664 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKau9-0007hP-MF for importer@patchew.org; Mon, 30 Aug 2021 02:36:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46322) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKajC-0003v3-Lj for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:07 -0400 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]:34416) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKaj9-0007Ui-JW for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:06 -0400 Received: by mail-pl1-x629.google.com with SMTP id j2so7949117pll.1 for ; Sun, 29 Aug 2021 23:25:03 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.25.01 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:25:01 -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=pU+TfWaNabr7baPocO4XBLVY8gDQ0e05DOYx5MFcfKU=; b=bMRfYiqsjaV7QSOY/6WNEQUb4sUceIhzg/lwQ4ieDLV/OsyHR6nuK3bcAc0nf6Z3RB uCKEeyXqEBkNRMtojNfGjbOZ+XgmcJx/HiMlORqXDAeQ85vQQZz/A9azo/uCTdU4ORlP ijH9hFUrGUuVpLKUxfMAQpnVAuvhvzeu7zMXXMjjALJfnVOkIujfKillAv/+BncTl9UU IwBTflnC9JyTMtS7Xn1Os0et2E8hW1TbF8qB7e3vuyY/jxETWUTPWsrNRgNxBHhQSIU1 nqkNP2ysSOFE6rS92OXpYrOsADc8GuVzAWOwIvYaxxXgTLF4FhTBwk5wcbtm0HaRYpyG JXYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=pU+TfWaNabr7baPocO4XBLVY8gDQ0e05DOYx5MFcfKU=; b=P3uXHG494aqa70JrlSth5cE7as6Yar0R80J7wIOQz9IiH2QycbrDJelg353sl/h8iE hHn/d9MmqEQLPVVhLd3oSn9SWvwINFsKiTCevjiVzPuV8DWrvh5RLj8LPCpM0nhh7CIf 939+raYh6iYK67YffZ8hQP2xMFs8xeXEwumvD90+ySpMnJXD6bChj5Kl00xvyADDOzqL rXl8/ZQvGgdbpFmNuIxG3efGZSq+4hcPRcM5TekDKBme4hp3RosoWE8WPHpZW7elXooH dNnMZYQ4zbjgzg7G3knYP7qbb9lJggJkDPcSK9W1HSX1WOMg6Gbog/Y58WVAdkrb7p7o NMKQ== X-Gm-Message-State: AOAM533iTquVCzDRTQlbrs6+4jnaYNMIN2Z3VS57/C2/buPuhQxmIHSD 0PA6SCLu+H0yAs6NBvawqD94Ia+NEN+cww== X-Google-Smtp-Source: ABdhPJwrerGRcanKR+yJBnPxSL+UAAbcKW8q1LrO/ULf/nGOPzzXGSY82IBEr94hv2+oZrWeJRMRpQ== X-Received: by 2002:a17:902:c40a:b0:138:a82d:3aa7 with SMTP id k10-20020a170902c40a00b00138a82d3aa7mr12243432plk.54.1630304702155; Sun, 29 Aug 2021 23:25:02 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 14/48] tcg/optimize: Split out fold_mb, fold_qemu_{ld,st} Date: Sun, 29 Aug 2021 23:24:17 -0700 Message-Id: <20210830062451.639572-15-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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: 1630305488943100003 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 --- tcg/optimize.c | 89 +++++++++++++++++++++++++++++--------------------- 1 file changed, 51 insertions(+), 38 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 76f9772648..a3780514e5 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 Sun Apr 28 03:50:57 2024 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=1630304996; cv=none; d=zohomail.com; s=zohoarc; b=Yu2Q3V/V9FTqhRTXk50PoYnX2QQub2oJktFXvsYzdw6vpSkJLbM4AN4re0vns4EkvSmr16Zl8hcr2gaR9L8dNRbA2h/mxXiZNxPs4aCP/r+zSJEzGy1TzLP/VmiXI61CKNUqn3OHrdlDx9xJVl1nQyCtZnpR3aYLnXMYsMPoBZU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630304996; 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=Ccx5AzXxSsIcY6hQ8fBoKCVwOyG1Wy2tldYYTSJ/shU=; b=YsxPuNtZ1i+p71saPFNZT+PsDehoJIx5/rOLrDF76HICWV1mljZ7q9udaex92pGbdkzK/AJx31XAw//1UFwsIRT7ppVdqaz4aeGARj5iQj9B+QS+gx43cZ19pMru/HVvuI0XdpWuXH18cX8cUEtbVuypWsqlaRIuX6+hDc7bUao= 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 1630304996199834.0318687565572; Sun, 29 Aug 2021 23:29:56 -0700 (PDT) Received: from localhost ([::1]:44052 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKanq-0004XF-8Q for importer@patchew.org; Mon, 30 Aug 2021 02:29:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46318) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKajC-0003uo-Im for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:06 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]:33541) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKajA-0007Uy-77 for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:06 -0400 Received: by mail-pj1-x102a.google.com with SMTP id 28-20020a17090a031cb0290178dcd8a4d1so11493633pje.0 for ; Sun, 29 Aug 2021 23:25:03 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.25.02 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:25:02 -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=Ccx5AzXxSsIcY6hQ8fBoKCVwOyG1Wy2tldYYTSJ/shU=; b=Vbqt+BYyRztL13tn3IvuKZPYv3bp9b0h5qIwCkWkkbXBrA/DSjK+DTYHGUFVbRDhK6 3mYLGOBG664MR0yWmtDqs1jTpSc3ZLqo6PPi6pyKsE2Sy9VFV2AyRp6niNQNwk+hgv2O zKjIaSm9T1J7CnXy2xI3eZwRclcXmdQsRU0uNA16l2UsE7pL24dk2pTD0UMhi0aYCjKR ojMLcU6meUU0FkvsOmG3OCba6GpJIYpHHGkWLfXMm2GJ+yG1Qv1FZvYAjuAxytloL1HE HBs59h91vbQC0+ClrOzCuzkobYjKkyTo/kR+wskMEbmmUdZkJaYNjR7E41Fc5uNu1qcp kwCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Ccx5AzXxSsIcY6hQ8fBoKCVwOyG1Wy2tldYYTSJ/shU=; b=MEQ8W00y9iWqnk+Ex8JdVtSD9xvR27RHyFTjFx2Khenf8d4anbezNLezZejySJMIqC NdpPGEq0T2sItm1gtIz6peGVdL0ux1UkxhjeesblE+0MJLwRisSaqb2+RA/dNuLASuka buNzN3POnY881zOE/ZkTsCoDKkuDa6Nbyb68BVMnRPmxQ2l6WQy0Hq48cagqXUo7b9/G KxPqaXj1F7q4oeqEynfbtRpsRTEEYoViLPp1exSE0eWn6Ll/lbsNXUYob2N3l/4Zh0bU AafT4rDy/rU9Rme/F3bqWCeP49wfjce6ReWseP6Eu3AePF9aQJiiChbYfQd15jax9RH0 kTtw== X-Gm-Message-State: AOAM533nUyyLDsn9jldtMPjbi4Spjkv9RE37+cVQx5j5Hc3DcnRCUzVX rXILO6vpyUg7Uffxk4+/R5WCgedLDmZ2Sw== X-Google-Smtp-Source: ABdhPJzpHgjEeERhJMiLIzAklwOX6EoIGki/VSXApiHoTeVEEPb7VHnXzggsTR6rZrFtNNpsuNeP1Q== X-Received: by 2002:a17:903:31c3:b029:ed:6f74:49c7 with SMTP id v3-20020a17090331c3b02900ed6f7449c7mr19907014ple.12.1630304702849; Sun, 29 Aug 2021 23:25:02 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 15/48] tcg/optimize: Split out fold_const{1,2} Date: Sun, 29 Aug 2021 23:24:18 -0700 Message-Id: <20210830062451.639572-16-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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::102a; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102a.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: 1630305414044100001 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 --- tcg/optimize.c | 254 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 202 insertions(+), 52 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index a3780514e5..05de083d50 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 Sun Apr 28 03:50:57 2024 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=1630305569; cv=none; d=zohomail.com; s=zohoarc; b=gDgvaqVGll9bboEpllH+4HBoSVBvlSvv6nzZZThsi/UfSBcyx+GIh8Of9qwqqQV1RyNZv4/KvHK2HjFdMACbpNGzx+F1YEIkZRGIi7oVj3vqUwLAaQ2+ZUbRSppiZk/AmjiGjG2MnPWJyXFol7IB292McWhkAMPbABPr+Q57XTQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630305569; 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=NHt8cYm8EKeBALKp+ZROcv2m1GndeyHCLq0Etmcw7us=; b=C/IMYVDfCK3bJwUb4pSNdsgU3pMo/C+TAwsj9/Y1OJIBANHgavrCqlN6RW8ZdIIj26KDqpUUMautFAfDsfU9DGtbaWllbxHSN/OCi/PRyquyTXXJC76xSTLt312STVH5MUul890HvkNL6DhwRf88DLMEuBau9NcCcDg1l8u1EMA= 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 1630305569794675.6390549240264; Sun, 29 Aug 2021 23:39:29 -0700 (PDT) Received: from localhost ([::1]:40686 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKax6-0004td-MS for importer@patchew.org; Mon, 30 Aug 2021 02:39:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46338) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKajD-0003w7-9L for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:07 -0400 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]:42992) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKajA-0007VM-P1 for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:07 -0400 Received: by mail-pl1-x62e.google.com with SMTP id n4so834422plh.9 for ; Sun, 29 Aug 2021 23:25:04 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.25.03 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:25: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=NHt8cYm8EKeBALKp+ZROcv2m1GndeyHCLq0Etmcw7us=; b=HGAWA00B3c8DjyChhA6Ay8B003NBQh/iYWP3KrqV3CjmGdRWwfaAlaSmIJ/V/LIMQL j2I539VB3tzOymejCLJR4Qn3gqBl4LL6WkvJPth5VnbgFbSpoOZg97uAMrfWdpelHpck /Ves87G3Q9aU5SHt6rPT9brvIoVacg+xAkz7JE1wrsKG4YirAzf1H0RtFBlITJUI91wx DiX643EJNnFFBuXVmyfryJ/ysQhkVpm5yPo/q9JPUY252v8jSudJDKgp+fDI4yMbiyBN htt/oSJpeMInzZeMUPURCY3zUDxqUtt6OJrx6giNFlz5/2aRSl6PuYDQ2HS1XQVsyFuS T9VA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=NHt8cYm8EKeBALKp+ZROcv2m1GndeyHCLq0Etmcw7us=; b=dUIP+jJitvb+9allSq/m3HiM1Wz6EqPPPBmKKELm9Yvzn9pGuVsEhb53WhAlYYJ0Ra gamYBE9cF43eJ/2BONxGNOIbsLg9XY8XIPi/8FrmZtv2jmkTdzngSFxS1UGGh1Y/LWsF dE64h6jXXcw7vWtH46GkBo/HxkboOOPDnuNwPzkL9GfSqDKwZiebcWMxpLLcvL9Q71TV s2mxzCVV1THwJ+f1LzMeufDCZJ/jt43OmlrA9kR6kNJmDPcnvN5GEj+m2ej2hQ9swN/0 kim3WYuSp7P0gjEXwFMvQzxNFMZi7NteNYb9ec3vmbrjbfiTzSktZq8P5EK92tl6TK9N dvFg== X-Gm-Message-State: AOAM531WhXTy5iDTBHyWJSwzSnfj2p3SBZ3GXCPDM9fPkQWOI/HsMqY7 Lei4mxPeJobnXvfFhcR1WLn2bAOPigsXnQ== X-Google-Smtp-Source: ABdhPJxqC9pRUdTUwczGVwxuiiT7VoK1Pjzzhw+8vtymtylwbZ0BzUtkCE8MfZzTjwLKmzQo22YV+g== X-Received: by 2002:a17:90a:44:: with SMTP id 4mr24609140pjb.130.1630304703415; Sun, 29 Aug 2021 23:25:03 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 16/48] tcg/optimize: Split out fold_setcond2 Date: Sun, 29 Aug 2021 23:24:19 -0700 Message-Id: <20210830062451.639572-17-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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::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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1630305615211100003 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 | 145 ++++++++++++++++++++++++------------------------- 1 file changed, 72 insertions(+), 73 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 05de083d50..7de76b6de9 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 Sun Apr 28 03:50:57 2024 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=1630305993; cv=none; d=zohomail.com; s=zohoarc; b=DJMshW1OGmD75h9yUJAFGa93wkPGXPkHvXFPPZgJIT4c4WSbCMfyL5pU52RMWybU4vWtAQT/X1L/QrzfBnbi5qFcSIUGMQ/HNUYr+moYrCK3ib+M02C3namBTlSPsBXH48bmg7sJu2lbKirwylqp4XWGU7sC0WQyu9+A1HS1+TI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630305993; 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=P94Y5dxSBpEMiLv8AoX01K+FSXvmiAd5JT5hA1ZV/Ms=; b=Ua5kyuu5Vx5H714wqj2/ohmpxy9VFFcUyrZfVTLlUXIwnzh8yjuhqfNwbPFghiVb6R7G8SlKLphi1STL7JWyjMvwc+5vfqDnuUTCvgdfeC4iJMY3M18IZjqwSdG8ZomsQYnD7r+5oVptqMO8WHJ52QpSQ4SjQqRcu5werYTYZRk= 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 1630305993883131.64162377864932; Sun, 29 Aug 2021 23:46:33 -0700 (PDT) Received: from localhost ([::1]:57156 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKb3w-0007qX-Pt for importer@patchew.org; Mon, 30 Aug 2021 02:46:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46366) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKajE-0003zq-CX for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:08 -0400 Received: from mail-pj1-x102f.google.com ([2607:f8b0:4864:20::102f]:45975) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKajB-0007Wp-IU for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:08 -0400 Received: by mail-pj1-x102f.google.com with SMTP id f11-20020a17090aa78b00b0018e98a7cddaso9237800pjq.4 for ; Sun, 29 Aug 2021 23:25:05 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.25.03 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:25: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=P94Y5dxSBpEMiLv8AoX01K+FSXvmiAd5JT5hA1ZV/Ms=; b=IFbaa++c9L1wLfJZCb1bFwUNy/NtQjGetF7oOOINx7K4ea2sklBqZ69UgsobSodBTz 8Jaknr/FEko6S8PyZ86EglmWx1QxE0hORJ7fPW2ZxSdTllYPTdu29XYDFCrdP7TKpVDY qE1urRMiak/w1wABzy0QfJT3bTVZkxBjy3buCMqX7a6uiO6fNAwmfA8BT2PS6jxF0but vkVZUnEG1dt572LpEnWFwPR1BcWFtBIyr3CRF7nyjThxl3Jlw2+GoE6Z+hvxcaT10v/I SKjXuXYlEQHLP9/hSCjK7fxb9Ci8RRIMtTBuLWPWcELeolbaaX8QlNvkJlgjXcvjSyv6 hiWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=P94Y5dxSBpEMiLv8AoX01K+FSXvmiAd5JT5hA1ZV/Ms=; b=iI0NV7T4L3UMCA1oc2pnpTXqKmv//+EuwjGtHJi2b+yq82uxP01ButVfxHO9Dbh7Eo HWNDEH9pu5DsTmGd9YKYnqmBY5Pad/eNposUtS3uuOth9B+EbYb3gKzIK6MfXMaAkCWS +aUYQ+xdwmOx7rkTE+XgjIwohkaXXUMeCoCHI7BiO+w1lVBYwXzZIA9tLHroj+KpII5s v9n0aLik1iEuX4HliudtNmg6RLJEYFhmWsENFWlTcM82kQdCWiV/EiLXjZnRR4pSFdSx dQFXBS63lvKx+jJw4sytmE/bW2frTBLws2LCeZJrP8i8jf3fwVoHo32WtFq23Gj0+amX TELg== X-Gm-Message-State: AOAM532JGcVFCNGZJgcw5KhXg4sR7fEh8M9sbKtnnHfYPbDCMecy9oey hrWttDKUEJfG2XQSRhq6c4rPicpGUTJEWg== X-Google-Smtp-Source: ABdhPJw4EmlyE+80BIqDAeqC3YKqK12HmcbfcPgHG4320/aX0kAQpRJijhVBrgD1cBqsXKF3OB34yw== X-Received: by 2002:a17:902:7ed0:b0:138:d64c:7c4 with SMTP id p16-20020a1709027ed000b00138d64c07c4mr4553919plb.1.1630304704040; Sun, 29 Aug 2021 23:25:04 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 17/48] tcg/optimize: Split out fold_brcond2 Date: Sun, 29 Aug 2021 23:24:20 -0700 Message-Id: <20210830062451.639572-18-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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: 1630306089129100001 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 7de76b6de9..0ddeaf7e4f 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 Sun Apr 28 03:50:57 2024 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=1630305615; cv=none; d=zohomail.com; s=zohoarc; b=VYFC49mH4tMnaTyfoJSQSnH+TViKw0fCd4w/nwLh2V68db6FsrGrRpZz4TGNtve7pEjptCLAHuTxxTtjWzAhWD4Uom5xadeFhWn2v5WUbmVE39z7ijGQpjea925gTt1t+wGCZYHGA4Jf67Mux8BoDvn+js1caRZKuWc5lbFjxpo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630305615; 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=qbW4VpjE9MbutpbgnWYnm2S01dHzMdGYJQJnh5A4i/Y=; b=F2yVV7SIQsNy2gqu8RiqbvZtNaF0eWB3J3iLbtnGGc/uQshGM4dVj5ZHp2JUgwlqPaoYRysKJ3x0l9Yspb0CXEM/83OdpkGQrrpvQUWIqBhxVNf5pa0hHeQjsYbgLNj+3Seof5TDCZD3fZVwgl2p8A3iE+OwB2Kol8d/Kp0CHo4= 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 1630305615781415.20803322023403; Sun, 29 Aug 2021 23:40:15 -0700 (PDT) Received: from localhost ([::1]:43850 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKaxq-000727-Mc for importer@patchew.org; Mon, 30 Aug 2021 02:40:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46352) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKajD-0003yL-TK for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:07 -0400 Received: from mail-pl1-x62b.google.com ([2607:f8b0:4864:20::62b]:46026) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKajC-0007XF-B8 for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:07 -0400 Received: by mail-pl1-x62b.google.com with SMTP id d17so7915921plr.12 for ; Sun, 29 Aug 2021 23:25:05 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.25.04 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:25: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=qbW4VpjE9MbutpbgnWYnm2S01dHzMdGYJQJnh5A4i/Y=; b=lFp62LUZ+/Mm3QWL+0vcReiEFOh6vc6ZAmEWKAHVbXCPZIZ85UBIPsjLi3l+clw7my 4C2qx0LVSOw+A9FeQDdwwdG6KNk/FP2FKcl6pxEv7lI0pHxOufHOBA1+XfOX1TZVTh0m kRTsOsHSxuwI5rPT7sLxzIM7CC5f8SglumDxG2TTMr/erOTlkMCBmaSgWAToBfGR9eU/ 9sgbnR6AsnLCf33ieo9DaJoMo2/5uyADGudqnx1iyKRYmqOaa+LSWTU7Ve1EeCi8YBxf Uoqoil5/U/7WTmqBgYIp81B+D0RxujL4xS+m6UZJDLJp1LGV55aEyFZXNlHdwScI7ZII bFUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=qbW4VpjE9MbutpbgnWYnm2S01dHzMdGYJQJnh5A4i/Y=; b=V+BDwRq+dCE3eQz+IADP2G+8gm/0mPJUTQL5QWgeAHBtBcYN9YeO2ushRYWrIB3cQL 73pHRirQabh9OqRalSMH12/v3HMM4zflDp+hTH425ZYN+TAlQ8cedxjiDlXsZdqXa+Eu Ie+y9/U5C8zgAXasXWieRWLtupUL01sz4zIkMoMNtCY1TP3VT6lYHpi+bUtgF+z0Hk6j XXKgDwYYKlwFWCdStrzMWoN9cqdfSujbTh03WmMK/ps7Ir6VOMuyzbS5WPCEsaaup2pZ OAdcS8mRPhlSaeabQssM9ItYyiOZFcMnVoL4rWddGMleP4ZsBmRVhfE8ajY84JZnIEO3 NQ/A== X-Gm-Message-State: AOAM531C1V1ck87gKdVmfzKmwpWjeqteQ1tUgUpQwRyZAbYwKHjVN6EC qr9P7+ty1EI/Bqm+k2TS5QxzUCRLcJX4jg== X-Google-Smtp-Source: ABdhPJxzuLbWNY6JTOG6TRS4TqYA1B2g/Jt3Yz5pk4Q5P1F0p/Mxy2HcfOq09KknHYksgg/83+TXIA== X-Received: by 2002:a17:902:7882:b0:131:2e12:c928 with SMTP id q2-20020a170902788200b001312e12c928mr20475939pll.74.1630304704917; Sun, 29 Aug 2021 23:25:04 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 18/48] tcg/optimize: Split out fold_brcond Date: Sun, 29 Aug 2021 23:24:21 -0700 Message-Id: <20210830062451.639572-19-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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: 1630305725005100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- tcg/optimize.c | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 0ddeaf7e4f..9dfd172a34 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 Sun Apr 28 03:50:57 2024 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=1630305873; cv=none; d=zohomail.com; s=zohoarc; b=n4uFrbAYhSHFf2WQtE0KitzRvhhf9COTreUw00f+2GYTSpkwN0NOsFh5hiYBHzkZL5QWNB58BX8bgl8byQS9EQms/xGrTQlyeHCl/LkkLRCop3FN/2+nqJH+D0h3ZHu3l3OZuOTM6t48glgyex/oKFsHDh3N6xermYaFy43zCoE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630305873; 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=0DoFoew0hKEmbikaFApG2+9yC/XMW8EHMmAnrdKl4KA=; b=G0GsjhU0BjP/OPPqV32kwvZZ8CtLJB1VGoqJr6pDWBEXVraSw8qVEVibjwPGo3h0vGbaFqLI263faOlSXiYr67VV9fvymwLTV4PK+pKyfF9hXWWTAIhSNFhJNrds1ygl7axaLA/4u37Edndf0ujVHAznt7sl76EcJBanq8eu3nI= 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 1630305873540280.88294818976965; Sun, 29 Aug 2021 23:44:33 -0700 (PDT) Received: from localhost ([::1]:52202 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKb20-0004Ne-GT for importer@patchew.org; Mon, 30 Aug 2021 02:44:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46364) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKajE-0003zX-8N for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:08 -0400 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]:40893) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKajC-0007Xr-RF for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:08 -0400 Received: by mail-pl1-x62e.google.com with SMTP id c4so7921481plh.7 for ; Sun, 29 Aug 2021 23:25:06 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.25.05 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:25:05 -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=0DoFoew0hKEmbikaFApG2+9yC/XMW8EHMmAnrdKl4KA=; b=oyVEH537hQWAh9QSiwrdGQiP6s+mo31f63Whrul/MG58ikeUa0BfVGeDDw+xp4sIls jRZ48tlV+7xwpGvGscLnZfOMNd2+hrG774F05ufbTHGDaiwAq8TwzuLvaK4/gdGKxU7y z56fTMaCLp/2jUYPlWaStRfXwvK1mu0HWH170Ija/st6Lb5R8Uwl1s/6p0ttyO9wncv3 j998WAZnSTfk9oBSilnAYij8V/G2m3zxGdzfEAMTpBepwRV90h8/qpOXxuMeAZsWs8IL i+9oUrZEcviWLXv7EKaV3vw46TG7k4LTVQcqqnbteYbmzsl5dk8TdFtXw2yf0P7zCkuV +d2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=0DoFoew0hKEmbikaFApG2+9yC/XMW8EHMmAnrdKl4KA=; b=IW8e9SAnbYsgbjLEbXBClviyk96wSs6QqIbyDYFNfmHUzfaTaj3WtffXrqqG80mHBS 7Nef2tVZ3K0ggFihaXQRkIw4PKlFVoM30+k8xoaEXIXPF7wx4uQ+jlPf+LjrsijKiGd/ rFVbp1C4dsXRMh2/1hecP95/aZOp+N0QuOXkibfeBOMF3zamuoB8lHThLfHvRDvL6gt1 YvagfbMO+ba6vF0JTvGX7kEShAKxlBN4bvAUld/42FqedN2/Ke/9BCp7f4hMgNmJXgUi O4sNLZqWCg+WhihyaW0SPkRMUMAJHqT3H7qp3ckb+Ngv3j03soEQf55G87h60WW8kJlL sM7A== X-Gm-Message-State: AOAM530Ja+ZXfEBvimLJkItGy7o/aZwPm1JPpwjMhEl0pgR8BOjfCtkG OF8laDDlRuDletIiOVxFMfauv3VhwaLXeg== X-Google-Smtp-Source: ABdhPJxuW8oq3yUuSQDHwusHs7C3xbbWkFNKD4g/fY2LrBQ2fAMasbv8Qk1T+39+3dDFWTmivE7MSw== X-Received: by 2002:a17:90b:a4b:: with SMTP id gw11mr38372490pjb.227.1630304705448; Sun, 29 Aug 2021 23:25:05 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 19/48] tcg/optimize: Split out fold_setcond Date: Sun, 29 Aug 2021 23:24:22 -0700 Message-Id: <20210830062451.639572-20-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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::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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1630306173139100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- tcg/optimize.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 9dfd172a34..58f03737d2 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 Sun Apr 28 03:50:57 2024 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=1630306066; cv=none; d=zohomail.com; s=zohoarc; b=P8sd//wxh52oy4II4AV0OxHKwdxgRdFcLwUytwXBzGsr4+/Y5FavAZREto880bJzjUAYQedk7tZjEsP6EB3LSCxaSMu675R+x24HhbiVWIDhj/h+heXPRPNQWCoFoNNWwEQmE67fG7/f1qrNOkA1ITAwhOedx/Er6PORcBv25m8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630306066; 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=fSv6smAwvoecU3iByhei9EwDSG45D2jhxFvytV+nznA=; b=VVYU/e+eSBD/Lpx9ia+GtX4iRSMq/9PY6ZwJPU7lIxfDDLslEQ15x1Wx9aspDf8r2se6pLJRLUp65lLEIlfAUpV22Za+sAqzpaDIkDECcvH0xwslHZ7oriMZnXm4v221abxt/PePBIkIaoHIzI70hko43n/Px6F5sUW90tYI2BI= 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 1630306066793613.922111064334; Sun, 29 Aug 2021 23:47:46 -0700 (PDT) Received: from localhost ([::1]:60516 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKb57-0001eE-Mx for importer@patchew.org; Mon, 30 Aug 2021 02:47:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46378) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKajE-00042A-UU for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:08 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]:39639) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKajD-0007Y1-AY for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:08 -0400 Received: by mail-pj1-x1031.google.com with SMTP id mj9-20020a17090b368900b001965618d019so2981372pjb.4 for ; Sun, 29 Aug 2021 23:25:06 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.25.05 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:25:05 -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=fSv6smAwvoecU3iByhei9EwDSG45D2jhxFvytV+nznA=; b=WSoh7df00dpEjHjVFrDgLvZeE3qIKeupl+0CAUEjvU6Oo8xqy6JBxZUT5mPEd9VR4y H5wLZHqOM6O1mmIR6bNMbWzPVRcoVs9cnYrklGEB2vfZX8MmNmEh7bQ0z48hnEMuUzXX GC0j9ev2wkSStmnQm6avTlfD9wK/h2TiOPEawXkFtxsFCvSRHfZtX5EY2lR71zQCPScR wkIegDvBQ9Vv6SkhxLdju4QfQ1stDyV5F8ZVVwfMwxdc0hXp7dwM8N6HVf0kgUxD4w7i A/3LeipdW6/FtuOPhIfyQsMVM05pxIYkFLfxfXu7lmI/Y8DEnT1TVfSqIx4SmdRJ5AH7 u6IQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=fSv6smAwvoecU3iByhei9EwDSG45D2jhxFvytV+nznA=; b=Z6PMzrRE5H2U7LD4aH5tKNVbrMxnEwHU9+T6QtMynGyfoSgMvV2LfndutWTOEVwa9S 5Y92qzbN0elJFwCq4TwZZzjzg6y8u/PuyYb3Q6EgUIhv8ha1A5OvA5fRKbNlW5eeRnbt 4MTIpbGzsB4ozKEuU3zSBXxHj7uptNRqEFxxl4hfKyaQ9XEYnRRKUxBXlYtpcB39BXEx UQIZlGsaFaYsbBfBlKb0Xsr9OeSo1gm4eRvG2y8l87QXtDJWZoUPigpMnJEhUIAgfJX5 UZDLYzJ2+ncpw9f9G3HuDNczSFMesWjD/SAuaLMSprsSG7/xe3V8q3yhTqBk1rGIfCvi mWOg== X-Gm-Message-State: AOAM531DR+MQ2uo1pEzwusQ7OaMf0ShJKifUtp7jDVL3OkXV2eJh88dt 7SYgjksYedljUZrDUKCRv8VNbEnB/hFQcQ== X-Google-Smtp-Source: ABdhPJznnjHmajZWMlQwh8PB4XqpEHQAnEW5om6SDovb0tgeYxFrhs4qvf+V2sbP4dt16l3Nqy8CxQ== X-Received: by 2002:a17:90a:4093:: with SMTP id l19mr25127419pjg.118.1630304706078; Sun, 29 Aug 2021 23:25:06 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 20/48] tcg/optimize: Split out fold_mulu2_i32 Date: Sun, 29 Aug 2021 23:24:23 -0700 Message-Id: <20210830062451.639572-21-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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: 1630306132268100001 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 58f03737d2..dbe283cedb 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 Sun Apr 28 03:50:57 2024 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=1630306134; cv=none; d=zohomail.com; s=zohoarc; b=CclFVcB71c6390bBSsBbM0F2kJbyynVyX2JuJQXW8o8SYwmOg184vcvimkH7u+pE3eS/9O+X3B9LujYKVUAi5PEQz6zbr35sptT8KOhloibv1hYRV0+kaQ5Jjn0QdvN6/rp5nmicLj6s3vXLb+PpDKR93zT1WJFS9TbuBbX4B1c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630306134; 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=0dD5yz6Ow9JmpIBkAzWLptNYpU84K+Wyiw4/8TdlkO4=; b=j5dvSg8l1GXATm/ZRRk1PeD7mDGwG9Nq1CaMdv017ACcvRdzXSnfKIQzfaC1FyFxSmDMTppn7oEctiSUWplDex3K52DT0QlSoqTQao1qi6Eevu57DVvnNS+/YRumy64u8loo7g2B/FrNyFOwYcLULvz+wlS8QHZIxPhsidiu4FA= 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 16303061340371016.5781570595448; Sun, 29 Aug 2021 23:48:54 -0700 (PDT) Received: from localhost ([::1]:37466 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKb6D-00053T-0u for importer@patchew.org; Mon, 30 Aug 2021 02:48:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46392) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKajF-00044W-J8 for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:09 -0400 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]:35413) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKajD-0007YC-Vm for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:09 -0400 Received: by mail-pj1-x102b.google.com with SMTP id mw10-20020a17090b4d0a00b0017b59213831so13129991pjb.0 for ; Sun, 29 Aug 2021 23:25:07 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.25.06 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:25: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=0dD5yz6Ow9JmpIBkAzWLptNYpU84K+Wyiw4/8TdlkO4=; b=LN9XlWEKu2R+oSzQ8YUGpYqOWFDyRqGhKTT8813PHX2gD9MiOcyqp5/MSxb1ipu+lj 3it9XSQm1C33h3uEFSq06+UCMA+ajosnSTSKemMTorMJm/uv4TFgfFV22LfQwUrONJqz E69CSm4w1x7d88ErzVgnrtr2Uie0xTE9zxg/La6xb33N5PsiEbvjMP4zpu19U1aNknXF zy+4EA0UqoVn+oM2tMJmmXHTZsEwiM4F854IapDCwqKF6b6APlG7oHeeOZL3sNR0TJIM Q5UL9VWIO+n4oeay6srN+fv2vP3skUgUPvgPryG1kN4PsytFrdLs9/9RWJJ7Xvcw64+W Yn2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=0dD5yz6Ow9JmpIBkAzWLptNYpU84K+Wyiw4/8TdlkO4=; b=f/zthnavx4yhEIigoPGHKvu83sEFcQN+CFMnt3FRiW8ZjTty7DAGaCU0jDMU8Qng+U 69Es1kny4ndDCfdfWQyPTGfb68jrCuD60YSWHd4t5/5Q5D8ypAdu+wiHLoNlbC7OFjSh gAmXd/+v0f8j+YX2a8BhTrbqByYHoyueKwA6SkEhU7WlsWu9WsLHw7dUYtO+esW9jUY5 MqlIy2rLGhFk495oS+V5KJ8eDYjqfnxcU6AP8vmpoA1DYJKqLlXMPx8GJGNTE5n9gQua rmaa4yXRPP0k0lVFqr1WyhtiQKncNi0qOZzwdcww72tFgxiKTSSa9K8JsTbameH/yTfk 2aRA== X-Gm-Message-State: AOAM533dlKDrj9Uscr+H15xwbFWlLj4tlp+5Uw6J0Bh6Tlii3xorZ9sI ycIm8EO6acI0+UespbsOMq024cUCeNEZyw== X-Google-Smtp-Source: ABdhPJwtGLYjrzqlo4RJLEKyOJhTxf+0Wb21wsv5bq0pkh70n7NtxEfHd/ExyQUjiVCo83iIRJk18Q== X-Received: by 2002:a17:90a:ae12:: with SMTP id t18mr13137106pjq.211.1630304706700; Sun, 29 Aug 2021 23:25:06 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 21/48] tcg/optimize: Split out fold_addsub2_i32 Date: Sun, 29 Aug 2021 23:24:24 -0700 Message-Id: <20210830062451.639572-22-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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::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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1630306164673100001 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 dbe283cedb..b72fe6e847 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 Sun Apr 28 03:50:57 2024 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=1630305781; cv=none; d=zohomail.com; s=zohoarc; b=SxUr4ltc3szNPFx6lg6gSpRlIzii+CcXknd8G9pO5mKhH1XRfWXiPXfXjnZECLls5UYROk1Ipakho+CLoFtp2VXmf9IgHjD/4uBgCPwnCSyNJxDlpIBMUKWBYQzDa1twPPDy4wUkSg8w5RSTTFYByVL/BLwbquwYeyAtvVxbbyM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630305781; 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=/vdSltFmm9a0bjdpwYOIscnkkdf2FFQGP5qIRQELjPM=; b=gMb30WzT/UWWph0N/POGrlIMyYRNaUSe2Jj1I80Xgtofdr/m43y2E6ry5G5vMzRyVqi408WAYqlwmjyDr2GYRisBHP8pdnTLshfPa4wrU3OK6RSDT5U0JvM0nabZViOBrZpKs3TTdz103M7Y/G4Z1HC85CN1Y5c11g6joEJ7EzM= 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 1630305781662785.3178548620579; Sun, 29 Aug 2021 23:43:01 -0700 (PDT) Received: from localhost ([::1]:48992 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKb0W-0002At-Mv for importer@patchew.org; Mon, 30 Aug 2021 02:43:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46404) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKajG-00047G-DB for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:10 -0400 Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]:44025) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKajE-0007Z2-O8 for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:10 -0400 Received: by mail-pf1-x42c.google.com with SMTP id 7so11359264pfl.10 for ; Sun, 29 Aug 2021 23:25:08 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.25.06 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:25: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=/vdSltFmm9a0bjdpwYOIscnkkdf2FFQGP5qIRQELjPM=; b=yy4Xy+VgOYOVilVDTLRF17y+Fp3YsCM7kuvIUAiIUz0/7BbqBXkRpwkL8eQ25PNk/M OykSSRT1YOlOq+y/fREYJfZGlK0c0+28M+CBZ0lPEnQT61mrBZK6gj4ZvmbIbdpqm9Jg hMRhLPvtaotf5KKKbTpizZgFkO6CC8XGzfV6hH7Xp8zIqrtmURUZNTnKauBHcazdu+w7 qwOQLG8suwY/Hbo5NdWSfUyV7bsEjsYuvOQYl6AChofShp0ajmsgCE3SsFpB03WDJjmK mqTPAE4oMClTeTf16NImi3ItlrsvKZt7zfLPTiEVP8z02czoTO0j0D4QFZCyAfgP7Rw7 P+tw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=/vdSltFmm9a0bjdpwYOIscnkkdf2FFQGP5qIRQELjPM=; b=YoXmP33M3sFYHOVcKl25r314d/ncSHrU3dd/k+lNmGCn/QQ12/WZStQr904y42Vdyy iDK0vlvZebbbbN/Hky2pShgzK+YbP+SL4w4eurST0RT56mWi8I9E7cz9NjHz1kD7ovvu tsUgYus2HoKzwPOESQhdHMvwF+kwh7CIgJRnbaQRkhytkaJBcvA362bypnRZdyRtK+8U Ft6kC45W1e3f9fJZPhGOthPV+sCO15SG6iGWWfcrDjeKV/6CjrPWEXV0EHAxX4ir0vHU 05F/p1aC3nNO9OvXTQ+OmS46k/D1q+K0zVjChNdIjkGBEaf05mtIVJ4wGZrYTKD0TsP7 +OCw== X-Gm-Message-State: AOAM531LD3wiip7KuHQAqwQ8mP63U1lHUm4f7sTr9B2QdKMBaUA2ao9H 624HPI+TTySYBT6jt4QZNWLWatYsaG8yvg== X-Google-Smtp-Source: ABdhPJwklPxH/zrxEcl35RA8F1v9EezYlKhR1qhnmjgqQbR3Bks/WD4mF61LNn2il4jjxDLwKNnjFA== X-Received: by 2002:a05:6a00:b89:b0:3f1:af56:8697 with SMTP id g9-20020a056a000b8900b003f1af568697mr21604456pfj.58.1630304707304; Sun, 29 Aug 2021 23:25:07 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 22/48] tcg/optimize: Split out fold_movcond Date: Sun, 29 Aug 2021 23:24:25 -0700 Message-Id: <20210830062451.639572-23-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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: 1630306142410100001 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 b72fe6e847..d9592a039c 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 Sun Apr 28 03:50:57 2024 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=1630306329; cv=none; d=zohomail.com; s=zohoarc; b=kiQ1RQ7jkDQ25eyw1WCa6EwKHCBm9/WS2TkF5blOU+A2CrA0tiP7cko1M4hyMo6fr6XBJoGZIUplODUnDgamByL4j0rMaxieeFoKMkn/hVpgf2JAgi/W+PTwOFszFHQ9HjnLWor8UH9H4xUx7x7+sq0RWf5IaB5z/2INgrG7hqg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630306329; 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=eFn8VYNy5JB8QTntlTx/kL2yqILva3xhQJXfO7PIA4w=; b=iVuH+Qef5yFZMHYpeJ/sktLbdNf2JCzObhQQRzxzbnfRm0cshOu52CP5T64SvgSi//JfuUQLsH1E+AqHnGYkwNId0WYDq8d3u90Gl63YG8sUnMnGDdG6XC/24Pc7sGQ63z0KyRnVAalxK1u2JIzg/M83ey+Qh0D82zEXuv9YBuY= 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 1630306329195439.4955505381316; Sun, 29 Aug 2021 23:52:09 -0700 (PDT) Received: from localhost ([::1]:46070 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKb9M-0002Na-1m for importer@patchew.org; Mon, 30 Aug 2021 02:52:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46426) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKajH-0004AL-Bk for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:11 -0400 Received: from mail-pl1-x62c.google.com ([2607:f8b0:4864:20::62c]:43877) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKajF-0007a2-7A for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:11 -0400 Received: by mail-pl1-x62c.google.com with SMTP id n12so7917416plk.10 for ; Sun, 29 Aug 2021 23:25:08 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.25.07 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:25: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=eFn8VYNy5JB8QTntlTx/kL2yqILva3xhQJXfO7PIA4w=; b=QdcSUalCp+pPjQBR2Ds1qAW0050W+i5FIDh4uXGp4J7Wkq0yeNKJvgkJztWh6r9Zep 8U9vYvMg7T1/CJ6J2inkVUM6fZY7XbnENg3va3i8dyfKgOb6PapLe8BHyop2ZBx4z1ft QdWW9UOw0eCKvlHfzrW+h5cWfaKqdVZhA3bKHE7MIntJRYyK2cOYYvWU8WZ02t2cVoOP RbMhvV5EA1GJyfg+HR+0yrClIcDGJKOKeUsENw1pBt/WZGk31kTrW/DxPpDop4o4mJkX clTNAmVn1cc+Ve1r8L8Je2t0kDkjeUZfjkzbbrGV28HulECpp1NsAfrH2xxyAhCWORvW LxTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=eFn8VYNy5JB8QTntlTx/kL2yqILva3xhQJXfO7PIA4w=; b=d8Br2UW9JZHSkiNFkpHpMRuMy4koG/xr2+S6ykHMGmD5Yogv2fpZH0Oknx/UGJeyZ/ 5CuaYlPTcBmyt/R8/f/bA/nYQM3GLlw9kQIKxc1bJEl96qK3mk6IFydUqHuMHNC/Wkg4 hLbiRFvljTnNGwqth4TkWqc3s4oTAAxBKl/NCComWPfEnk5hzHSyE2ISPvLRE4ccukxh U59mmjfzoI0+OGSCSshOAtfTeHdr1jeji092nKTvJGDz9PSy64O8j7oi2UjZ3FgF9pUw 6g2yaLXwNfFjl8gkNpLVOwFdsdFuOtb0oAmNyUC5nyB+mY15M3uSiHc+gU74YyaQi2VA RbNQ== X-Gm-Message-State: AOAM530EIqgOx5BKd5p5lviJWo2eanqCPgePKr0CYKI1Z2EtsNPfSDhN iu6e2JCYlUMR7M0g/TlILPaYVBAXpo8itw== X-Google-Smtp-Source: ABdhPJxP7zljKvJKyo/btbQZ9DAkif/cZU1HfwYY6q/Wtzd3Xea2UrwTqo8OJkIXdh54iKkBZNZf6Q== X-Received: by 2002:a17:90b:691:: with SMTP id m17mr5498516pjz.217.1630304707887; Sun, 29 Aug 2021 23:25:07 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 23/48] tcg/optimize: Split out fold_extract2 Date: Sun, 29 Aug 2021 23:24:26 -0700 Message-Id: <20210830062451.639572-24-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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::62c; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: 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: 1630306331258100001 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 d9592a039c..866b77dad8 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 Sun Apr 28 03:50:57 2024 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=1630306199; cv=none; d=zohomail.com; s=zohoarc; b=m3J5w6meIXXHOigGdMa/tN0qahPGub4AiFatfWZVJjrxqolpWqscWg9SAZDvx77a+r7ia/GgNy2Rf4iQd3qHPtVEIAAQzQp9hPRE/kCaktieeN3k/pOnmFd+UsDw3VtO0k+gFU+VYLH6zdGsNiKu2q9ZApyFURr7nMvxzPtMEYA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630306199; 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=f2QT45/ZsA0r+h9boohgTz+Sf/VySauzdb86Sejv5n4=; b=dbL4hunVy5QcVO4rtNQ8KoZ3tenKvTn9nT1NtBiwWVfFJl3/WHzi/TT36hhV6bkaVKvdLxOlM4t5bETLXgaedA+dNiVNJ/rr1uQBWp8tB/XWXZBndy/w4eVrORO2jnC8ukMDa9P6IkLKqIZH/dFHbMVEQUs5c45rQQFRZCwPj3E= 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 1630306199548556.5980752170622; Sun, 29 Aug 2021 23:49:59 -0700 (PDT) Received: from localhost ([::1]:41006 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKb7G-0007NK-IA for importer@patchew.org; Mon, 30 Aug 2021 02:49:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46450) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKajI-0004Do-BB for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:12 -0400 Received: from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035]:43977) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKajF-0007aX-QP for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:12 -0400 Received: by mail-pj1-x1035.google.com with SMTP id d3-20020a17090ae28300b0019629c96f25so6355310pjz.2 for ; Sun, 29 Aug 2021 23:25:09 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.25.08 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:25: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=f2QT45/ZsA0r+h9boohgTz+Sf/VySauzdb86Sejv5n4=; b=Pu85NODNSjqxzJfVKxTTecrRR89YSEtFBFOA9fPLsFWxPFkMcs2FqBYbbSE2yA2wj1 GoD/s8E3idiA7HOATicmlkIKY9x7vueYEgBvoVepVlm6Bc/matZMq6zZo/HzDwHA9IEX E7RDWsyzFS0sDXAWfQTN5Z3KBUw8wa8YNdPp1jXQyhZwHi6oqNX1CIEnUo1OzGu8yjD3 tDYK8mV16yi8zv2Eb/FNtRPz8MDssWxNPQxBGk33diBqncBow+p2sATRv8EMGuEmXS84 K0LvQMH+G5dp1I55xkYtEVLJ2QoXVI8D3XK2+vpkFZcJ4cMqCTU/rl37mEMS57l9zqwz HW4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=f2QT45/ZsA0r+h9boohgTz+Sf/VySauzdb86Sejv5n4=; b=J3rYMUAKLhZKPenDIboAfNSkfIpASLrSE/C9oSLjl+LeSdDiwJQsNw4qGkV8hzvMNI kv8+XLnIfIDX92N0eNJrtqv+5AGJYLLmWWGgVsLATyUI87IFKYek7/IxWQL9BUAHgIJ6 517E06OKaq9q+iSebvikBDnyDfzb1j3zWL/C6p04wl1zNqEBQKA7/+NU2AvooWrZvGZd NhFJUj9YhNE9vGAj+1qganlu9L/LHYiNJfwUoWqjRnZQ+N4WDUO012HlJx4N37xxyfeS 7Z8Ei4NQxcIqjps7TjhwhjV5IGf+xmdBC45WOoHO3WTQ1x+nRMB1okzOoOmpeibDIwMx iRvA== X-Gm-Message-State: AOAM532L1OjJrPB+eq/FRco/xlJHMCdQ0GlZcxyqBM6V67kPaUtKttkT PKBPIqgOjiE4Vg/13GghQeAvGVmG0Q6UWg== X-Google-Smtp-Source: ABdhPJxcVcRxihNQd+qQ7UVWOQu+0DZqMcsEfp5c/CL2d5A/Rhw29Xl723Nk60Yv5WzKjx4JKh0TmQ== X-Received: by 2002:a17:90a:6b4b:: with SMTP id x11mr25290498pjl.157.1630304708537; Sun, 29 Aug 2021 23:25:08 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 24/48] tcg/optimize: Split out fold_extract, fold_sextract Date: Sun, 29 Aug 2021 23:24:27 -0700 Message-Id: <20210830062451.639572-25-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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: 1630306201605100001 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 866b77dad8..c3c66a949e 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 Sun Apr 28 03:50:57 2024 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=1630306524; cv=none; d=zohomail.com; s=zohoarc; b=D06NWpS8u7YAX9zFyhZ7yIKQ491veI9HcQSCjzhXn8Cq+XJ/nGeZiPaK8OqGrDaxoVVYKJSojpAY9INy5t3aZa+aJ1bN2c+QN0FSo/H8bg9u7QJFwny3T3PZjBQXj8IfCj0dUsA0hbcSBCM57eJKh4xSK1U7iI3FwdXQoXq9wDA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630306524; 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=nbGo5fQpM+/mWg/WVsbE+2YrmGc9JnbK/yBEl1yT4PI=; b=brAjK3H0MiemY+u7yWOLikjNnW/fACcJPEY0wkB2aeK7doiLvRtjoScJPyOkoCFr0ev5d/VW9wEAM/S+DVodMyv6l71C9l9sFiXvP/WfUf5gTluLozJYP0hxAoaXXp91FIfRrG4K7bGH9yGzAcEsWUPKS/XXusWM/VHMkzrAZro= 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 1630306524876974.3660516892418; Sun, 29 Aug 2021 23:55:24 -0700 (PDT) Received: from localhost ([::1]:54570 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKbCV-0007z5-Ml for importer@patchew.org; Mon, 30 Aug 2021 02:55:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46448) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKajH-0004Cj-WE for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:12 -0400 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]:37727) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKajG-0007bE-EU for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:11 -0400 Received: by mail-pl1-x634.google.com with SMTP id q3so7935943plx.4 for ; Sun, 29 Aug 2021 23:25:10 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.25.08 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:25: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=nbGo5fQpM+/mWg/WVsbE+2YrmGc9JnbK/yBEl1yT4PI=; b=d7LVAVsGk88ARxIKMmA3Tn9PjVcfK9ON2wVZ/pmwAnaBaa4v8WKlJMr9POFRm0X75H XJTrKD3lBUoM5DeV5JW7xHtrs62F83KJjrrUxywYkeUkGOpaJkOprhApQe4lCo594q/O shJDyuewaFCcuEGVmU9ielS2ps3kmGo0hmi2k5NclceVJo+tGOF942CtEQalXVIlKSXL 2Ztq9bFshzS4tym328epbQZp7NSiLLhzk5unBw1lOTLdhMpWLARgFQ6r/oecafxDSPpa HlzrRT19juZzljN4agxjLuHwPvqpcG7D+lKOza34Y9yInGqG9BFbq4opTuChud8T/hmV YgUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=nbGo5fQpM+/mWg/WVsbE+2YrmGc9JnbK/yBEl1yT4PI=; b=lXhFGBl++dILWrWpBpSPiiYjZsq18cL93zXHz3qsAaTcBnOrzkr05BVXw0FAGF6i4L KWAljWE+3skLt5PV8v3nQS7lBqLBtVE8hdJFv4cOMzYnA12U13+D8RQFQv8cM3bd/fDZ uB0ti04gdEFn3DE+g3zEVVb+hTHtegrOmvTQMdtK6eVTtBTguoIv4u07z/PqnuiD7zVO hcL5AGsOEfKgogcRO6EGxJss6CCtzd2crTh5tWth1oLGoeyAsiPzc4hfpc/DcxfFT4rG PJDRVzrtuCj8FBbx+eV/a0Ldgl8Zkh2+PeJEvTDVVkxNBFsztpLXmhaEFAql386Y65BY BF7A== X-Gm-Message-State: AOAM530dP0kAMKtqMsFzCoKa7IhdqPciyq0JHmvnNFILQIdDihiOVRQ6 UhzrKVYqx1zQndW5fE068AzOgx58Um72Vg== X-Google-Smtp-Source: ABdhPJwgg4w4J5mfIlZz1fqa/ILVQDyxTUFiOuHwn+QtU6yBGN7dVYs6ZRaxh7o93kKgTIyDaHNikA== X-Received: by 2002:a17:90a:9292:: with SMTP id n18mr37531807pjo.120.1630304709121; Sun, 29 Aug 2021 23:25:09 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 25/48] tcg/optimize: Split out fold_deposit Date: Sun, 29 Aug 2021 23:24:28 -0700 Message-Id: <20210830062451.639572-26-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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: 1630306525525100001 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 c3c66a949e..74c307951d 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 Sun Apr 28 03:50:57 2024 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=1630305994; cv=none; d=zohomail.com; s=zohoarc; b=O+4AiINbL1/kJm6h0vWxTmfVtkgdbSyFOqHA3Jcsl3hgZb1DzHto6ptZ05JniplRRJsmhc1SLOithdFjNQF1AQ7P4RfpsZvUAdDHX1Lnp8h53dGiLbx6YxqRtZjhwFWRy61APw1E4Ny0l6NOVjEb1YCA1ggHmaWCIlP1wz0kjPU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630305994; 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=qT3pJpxm/CMR3B4sc8UdNVvz1rKuoODGYwGab7PwTiE=; b=dVQ3+YGoZmZeN5VGDXQl+hib3woGO7r6Mpj36s8wswBqiotz8k+5eVAz0TuO4x5UhAnG71Y8P3H2vD71klK75IHxBLcOo/zp/MxiuZWuAVeAtMQa+tneaZemb49lwnkeuHS43XxWh2Dr1SQAaMSBTMV5v6f2ql2ZYp3auf1x//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 1630305994448324.89524068940557; Sun, 29 Aug 2021 23:46:34 -0700 (PDT) Received: from localhost ([::1]:57226 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKb3x-0007sz-Fc for importer@patchew.org; Mon, 30 Aug 2021 02:46:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46460) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKajI-0004F8-KB for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:12 -0400 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]:39770) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKajH-0007bN-1I for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:12 -0400 Received: by mail-pl1-x62e.google.com with SMTP id m17so7933827plc.6 for ; Sun, 29 Aug 2021 23:25:10 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.25.09 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:25: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=qT3pJpxm/CMR3B4sc8UdNVvz1rKuoODGYwGab7PwTiE=; b=zrvJ0pS1XyWGP7RZUGwQHdfP2rfh+DKezcq5NYoQKXLN8j9yolITAXSgOC1RqJi9e4 6r6vKFOcx27w+CqOOLMy7tBDU+HwHHLfh8rppQoI1B67+ZT9dkpDZ5nghEX567aNpoWk bYHaBQrD4vU9G5jIT3KignAScF+vLw7ywr7d47+erkMof/BLbWpaNynnid0HUI+1Wzau S7ZDfmGBi7GEH0UvKDu3y8KxiA0GlbeFMzULey70fOax/jO4XyCLsPT6Fa1Q7jGDsRS6 18N/No7yGCi6YSngxHxuH1FQr+vtnQfyq32px0Sq9IUZdgeKUHhHH7KHCQwpKYC0TDgM zpbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=qT3pJpxm/CMR3B4sc8UdNVvz1rKuoODGYwGab7PwTiE=; b=CQ8aJBogIWOvFcdBgAG7VHCiN2jpgXuIfLuD/TMH+1/ytIhotkPt7vnMSnfbhY/UO2 9FCr2RkSX/x9VRQuAIAvT3M+zgpbo/ycF/ZjctrWgS84V804f4SM9bH2YwahsrHOejJQ fJR4kGgUmu9Z8jIIvjvcjjTHx3XUdXeJgC/VDUdTPLBHH4od5qyGpkk6qJibqTXmJoXy gllErxPOnrDKDJ0V7Iu1ZcK8BbSVjrUvQWCBe1chslfHtwCFbDVl4pylbHGxi/0vuGI+ kc3sJUjPJpyylUD86BJLU1h1OeVOQwrJxQ3SR+yZwN6kY3aHKHKwuk3oAieKkmS/UJSD wX8w== X-Gm-Message-State: AOAM530QmI+Ou+e0ZXTvEzOrCGWfEVxEgWdpwnfhk4zGiB+zw3qpGNv6 GdxAGLWYeMQTAjKWsKqwtjivVsVZa9PFgw== X-Google-Smtp-Source: ABdhPJxCoxljn1VL8RVbHSblNxrRFob3JIqKOxYaqiu4YmrKVcUjZ1PiLW2S5Ar9/bNntJNyxaOvRg== X-Received: by 2002:a17:90b:a48:: with SMTP id gw8mr38012348pjb.145.1630304709748; Sun, 29 Aug 2021 23:25:09 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 26/48] tcg/optimize: Split out fold_count_zeros Date: Sun, 29 Aug 2021 23:24:29 -0700 Message-Id: <20210830062451.639572-27-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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::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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1630306089264100002 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 74c307951d..79e46fec23 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 Sun Apr 28 03:50:57 2024 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=1630306135; cv=none; d=zohomail.com; s=zohoarc; b=WYs4mb7PmEI4tBAYLPzfMRNq/h6QNdKCS8nrUo8prJxJx7mllxDXlTj/DnvGrvoz6UlCMy5qaLG/MBK0b25vc4VnQMvE3R+LBCrH8t5RW4waayWoAkNxsuTI2XfNMtmriUi6Wrp3nEfVtK7fm61Gujoc7jW1TlG0jCm/lDyOvPc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630306135; 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=Kn4VA0Gfiy2fMT/+j/7s6nwywXz5CecsdEcFGy7JPD8=; b=OxpfO/ZNzMdZo61B6euGlauv0vzldG6dYSs+afZxoYS6HeaLlsZzJpXBgflf00Ymh0Z/VzHClivPRVtK6XH1U+GPrnarNIDbzFSZEtzZnV/L+vsH6J08ndW2ITHnwu2P8z/rtcqT68DBHVlmNNtFkHIS7yuRdpMndBne/HBfzS8= 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 1630306135044577.6790617098281; Sun, 29 Aug 2021 23:48:55 -0700 (PDT) Received: from localhost ([::1]:37562 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKb6D-00057e-Tt for importer@patchew.org; Mon, 30 Aug 2021 02:48:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46478) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKajJ-0004Hg-CW for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:13 -0400 Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]:53866) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKajH-0007c7-MM for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:13 -0400 Received: by mail-pj1-x102c.google.com with SMTP id j1so8746262pjv.3 for ; Sun, 29 Aug 2021 23:25:11 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.25.10 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:25: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=Kn4VA0Gfiy2fMT/+j/7s6nwywXz5CecsdEcFGy7JPD8=; b=pVvsADB+4ng/k7U6ZSCRxFCc8/tX16PDK5hV+bXfspy7y4PXq13aETxxjAcb3/v4+U W+gHYNgwWp2pxJ1/etvix+AYV3bUlxl4DZgZSrUoI3/LhFGZv7yEaSPu3g9zGpFJIy0v OukEv2fbgrw3lDgtmGCs9psOW5DRsMBaLyEGUjq1z0B0ZRX8DKLnkPTgMacnjR5acMi3 wF7zipIbVD1bgQ546dWAPWHglfub+BP2kvmQTyNEJeUbg0mV32i7OAaQcBd8vf7mr2h7 KhKR3eFCHO3Pl1pstFR7GzctF6SlPiJSlAYYmTL/dtC51NnfHiAxAvj7YaUZGioDSmnw hFkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Kn4VA0Gfiy2fMT/+j/7s6nwywXz5CecsdEcFGy7JPD8=; b=QbR/jKQuz/CwjCn2IHuIqK4FDQGGP8OnaE1ci7WLYVnVyZ+7XyCP9cIZXqcnw5Z8go 0Eq6xQf0wQfCdknUMeOo0c3E2QXzUGJNpL2MKDs/UeULVIQpg7G9Bb58ceFK6NaN/NAR HDLDhNWeIPAJolGP6ee4aPUa701JTHsN5mzCG9SlPC+y9NfDIBoiSAD3zy0AlhdCtwQc OcABNSokR9Y0UOIoIAA7gVt+HYs5C+30ymDZ2T/VJ8P+/pJQTPIFGzpEBKaqTSZoUdLh x5LlMbge9304BovolU/+SQyKHz+8uZVSF8Odibgd8O7pqpzeFtRUDfjiSLWzf/dLS5Sm ebug== X-Gm-Message-State: AOAM5334bOQTv3jdvMIIR1S6MSzFmc29BycDLaRZS6hVDasBAGIwv/iQ 2yfS6t2IAz6h3pXjPec8Rf8Y4TZ9umNf8Q== X-Google-Smtp-Source: ABdhPJzn8SPYOBNJyqAA53t+a16ZBKiMTUEbI4CZmqF7HM+fnRIClonxWDkGjLyS9KXhjh2+121toQ== X-Received: by 2002:a17:90a:4316:: with SMTP id q22mr37787512pjg.151.1630304710386; Sun, 29 Aug 2021 23:25:10 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 27/48] tcg/optimize: Split out fold_bswap Date: Sun, 29 Aug 2021 23:24:30 -0700 Message-Id: <20210830062451.639572-28-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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::102c; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: 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: 1630306165468100003 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- tcg/optimize.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 79e46fec23..1366bbaa17 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 Sun Apr 28 03:50:57 2024 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=1630306714; cv=none; d=zohomail.com; s=zohoarc; b=X5sFoxLXoAZuXLnIA5/Z1UwI5fc+KdRXVu1A8xsO3Z06/PT1QsHducMm5PgHSNCbtRitFasEhLk4SMPpo39mpTU4KMOwR3tTiVxJIXZ3XABj34wRPnlAwl76YzDzsuvomxvjsJ6sC3oWFaamM1wb/Y9poh769b8Y9OfsvQFCRqo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630306714; 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=HRy9ECrCXomzAwAjSMZ0wo8n5E+QDPpcqNFOCgo836E=; b=b+hctp90pdiX8XdAwyMGQ+hWDeFIHqnCCiMq/j2kRllTDBcJ5kVYEcL1/5djVn/gmshurXVRtipjmVW5TPqwpFkqEtTEpljNj89CCt8Q2D0Bbqm9H4h4oNdgJqPQYy80JsJGkeGl3/JWyQBiHH5sOwwk2Bz9FDdgNB0oM5SS1tQ= 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 163030671467718.11761983623512; Sun, 29 Aug 2021 23:58:34 -0700 (PDT) Received: from localhost ([::1]:34994 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKbFZ-0005W7-Ia for importer@patchew.org; Mon, 30 Aug 2021 02:58:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46492) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKajK-0004IS-2M for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:14 -0400 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]:43970) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKajI-0007cl-B8 for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:13 -0400 Received: by mail-pj1-x102d.google.com with SMTP id d3-20020a17090ae28300b0019629c96f25so6355381pjz.2 for ; Sun, 29 Aug 2021 23:25:11 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.25.10 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:25: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=HRy9ECrCXomzAwAjSMZ0wo8n5E+QDPpcqNFOCgo836E=; b=PGJF6B0jcZcAPRkfFOmo7+QdT+XjTILJ++/V4IV2r9TyWDM8/oYWhVyU2l7yEn7Frd oRlPtOFmnsofsqV/KFFO/mO39EiH07ipppNwKJpXcGwcgHMjLyL/xw2RZvh/AUS5cbBt qRzb5/0t+N6FPyK6b+wlDEzi3k3CJpvpsZ1pqv8sXqYpReJnwdnebq5yvDDDGmsZtdBH b/yyHo8DrNt9X7uVZ3Dc6QcZAiwhIZyHjNQC3qP8phQXHuRFlBuisEpMgh9Gx8tw3gdW PtZojN8oijbhGQzKLOxDU63GzyOteRgmEwlKwOt2CX0nf8kKzjrVyE7owL109DUQbbQh 2VfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=HRy9ECrCXomzAwAjSMZ0wo8n5E+QDPpcqNFOCgo836E=; b=VwtjWZRTiKgyLixtx2vZFpRQ6I0Xdg9xV6zus4+s/wSzJw2UvToO3/o5cgnTWab4/8 XZd7GRabTG6sQhz7yqDm4xBVbZiO6AUs/8uSAHtGeszgqSsotknXoiZNQcP06YZiR+XI 6gGHlmbS0AYUJKeoVizoSOiylw7rLE/jFM6eGtz495gN9UjExP/BbpIJEPNZ4if4BY1T b544g2+MLFhTIqBBrUdOpXfsv9sDSG2ReQJVk8GW7+yHx3gV5gMG+pAE7wxtDkps3Vvj sK+5PFe8pWNweVptwNt7yxpM8hiSRDtSl4Q3iNV+aFBJsEkEyjuLCd1N6oPR0oeYWtvX QzEg== X-Gm-Message-State: AOAM5337o9XzdmSZXMRmZiVME8doRwF88xTo5ndCYsN1V1ob6MR6lJOF PCThKXUOtdAYXvfbDRaRIkb0EFBXVllTgg== X-Google-Smtp-Source: ABdhPJwdIX6eyZl0eR7bQh/yhXxNivd1e+zseRq2ALkWLsUuH12f+ovZQyyvQjFs9MQ4n6uDY/Kadg== X-Received: by 2002:a17:90a:c293:: with SMTP id f19mr4474970pjt.106.1630304710970; Sun, 29 Aug 2021 23:25:10 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 28/48] tcg/optimize: Split out fold_dup, fold_dup2 Date: Sun, 29 Aug 2021 23:24:31 -0700 Message-Id: <20210830062451.639572-29-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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::102d; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: 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: 1630306715343100001 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 1366bbaa17..1361bffab9 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 Sun Apr 28 03:50:57 2024 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=1630305257; cv=none; d=zohomail.com; s=zohoarc; b=iJgL962UA0q1EayDI4ZzaoDrq2QHTbDCdGBGkDyg4QtBie6QztlUCvxijArMEwU4T2vhfCBBsu2k9hlZE+ITtlcAc6ZfTpYp5KAFQoituGQtnciGMu1iX/ksW+OLKoG1tWYdrr3HbSSrPIAiF6AKP1xn+NKlbZdEVyLkUIN/ijs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630305257; 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=bFEHXckoWLl6WYBVU2oMHX0JRAtxLHgwzzCcXri0wL4=; b=PKYMRi8UvKI722J5fzmoOnGTCHzWGjlLYvQ6vh2XVkr6mfVi73se4jJE2/gURnms4rL5HcxILMZQ8SY2y9I9N3hA6cQc2GrQBLMLqjrSjKwD3gOxNXv07VuwJcRb4wW9GBx2GcnFnVls29y9bQTGhrkCHMKRugmtODHHxBELm5Q= 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 1630305257523280.04624950828736; Sun, 29 Aug 2021 23:34:17 -0700 (PDT) Received: from localhost ([::1]:55642 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKas4-0004Cl-Fd for importer@patchew.org; Mon, 30 Aug 2021 02:34:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46504) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKajK-0004KF-GY for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:14 -0400 Received: from mail-pj1-x1030.google.com ([2607:f8b0:4864:20::1030]:38573) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKajI-0007da-UJ for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:14 -0400 Received: by mail-pj1-x1030.google.com with SMTP id g13-20020a17090a3c8d00b00196286963b9so6118566pjc.3 for ; Sun, 29 Aug 2021 23:25:12 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.25.11 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:25: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=bFEHXckoWLl6WYBVU2oMHX0JRAtxLHgwzzCcXri0wL4=; b=LnrVPABpn12NqnW/VqN4Lbv2TlrDROhJaRi8yAUmmcSl/rP3RpyYZFbW1N6/hkDxGl s4RdcDYlzGDnqEQYgianK7WKbvaaI/S64AyV6/eEAZF4bIxu9zCs3xPAnuNl4fvQ2EzH WhBopTTi3oZK0ZEzcNunpsBI07KaOuK14C2OpGA3bRNqVj8uAOW4Yl+NQgae6X+uCtG+ VOM5RqjC3ROvfliV15nNIXc/1Zoeagto7xFDrxtoaDmCkW+ZtU9G/L3Jyhuvz2yhupw8 FGvM4b380gXXrqBeJXYrymv7tjojoX8FzdOQU0wDkmzlhctrvsjGaNBAN4XLxEBVyk+f nVwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=bFEHXckoWLl6WYBVU2oMHX0JRAtxLHgwzzCcXri0wL4=; b=UYMNfUzufLQJNVMEgwER+uIGrRvgR5F2zYUwYZdWPOg0yY++U1+JspghJJDdtTpZex ynTLyjlMcaQiQ945lgh6X1f9n61WtHgvDBLXzDE7tUo+zqip6okKsfIQXiYXseFGMS/K d/euIcgHTIwsZixNxbNQHpncCL/DAQgEe9vt9lWr5nF8taa8tYYLcu3o6VMBehuLNpLN gbmTr+XI7VbSJpcbf7wsheHiNvktT9/1HwkIw2xCitf9evi2LnEaJ2O1sAEaM1Q77Qu6 jSLPu5M7+J0Mre6mVZtutYmrOOpJ8AL6UKIjTNbYhviEXkIhmzOK6jkAQGWPqfRLo9/l JJjA== X-Gm-Message-State: AOAM533dU3dfMm3jIlLYg97nubigvVd4U4umAJ9lqQPHMvrUJSFCDxgU 73NP8EnqFu0eKxsgL5Llwd0vm+PvO6FLDA== X-Google-Smtp-Source: ABdhPJypPXZ5uA6HeiIKleN2VNaaqLfWnmL7jgVEm1rlkR42kW7eyyTp9TnsC680YjaeUSyTJxxuLQ== X-Received: by 2002:a17:90a:598e:: with SMTP id l14mr37190867pji.28.1630304711587; Sun, 29 Aug 2021 23:25:11 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 29/48] tcg/optimize: Split out fold_mov Date: Sun, 29 Aug 2021 23:24:32 -0700 Message-Id: <20210830062451.639572-30-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1030; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1030.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: 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: 1630306060041100003 Content-Type: text/plain; charset="utf-8" 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. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- tcg/optimize.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 1361bffab9..ee674fe623 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 Sun Apr 28 03:50:57 2024 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=1630305450; cv=none; d=zohomail.com; s=zohoarc; b=kLjno60ss+m6ywOee3RLAYuVQIDMTDGnPjadU6TZISItGsyP/7FcgCznZr8KRP/41MetMvfMnArDomaJBbBVZxxM0lG6W1MqhOWZt8gu/3G7aILBatP/k5KE2nBX3gEGY8krPpjhBQPD7R1qdKvznaqjkI6PSYWdxdrlaELlaPc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630305450; 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=Dk8TGNQOVNzQn8cwlm1MaEPrVhLuKdgx7sOHdUet68w=; b=ai/XhvexG0SLgXp0tFKbTCLTWwqhRDREbqeQt78oOyWLDlxdjXSQPKNSMsCupWy6H1dYyZNvUJjB+i/QssSquZRJWKFNZQsxVBWSAcV15waQz62k6LaVpwuSufcLgo9GB2JyYmNkzVIodyBBSS+8fqMcdf4Sva4MlkD2YjMPmD4= 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 1630305450787125.84696414575069; Sun, 29 Aug 2021 23:37:30 -0700 (PDT) Received: from localhost ([::1]:35772 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKavB-0001X3-QC for importer@patchew.org; Mon, 30 Aug 2021 02:37:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46524) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKajM-0004Na-2M for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:16 -0400 Received: from mail-pg1-x530.google.com ([2607:f8b0:4864:20::530]:40624) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKajJ-0007eL-PT for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:15 -0400 Received: by mail-pg1-x530.google.com with SMTP id y23so12414618pgi.7 for ; Sun, 29 Aug 2021 23:25:13 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.25.11 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:25: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=Dk8TGNQOVNzQn8cwlm1MaEPrVhLuKdgx7sOHdUet68w=; b=qHLA0FQTXvedK6h0BU9XOvS+oFEnmoCv874Kg41AdiAI/ZSOTCNlcteQkfzYNBfuuD 4SntmMPYG92y1f03OXDRXEuaNfKvzf7GXUnDYLwmUK91jzGUc1rML+mwnl/zMWdR7YaR U1sO20G7reXW1xSf8wmcCY4m194KSAL6PhnJ/HQ8E9XRmV2dlsJefJz+fWfQRo0s020P NvqDBZrcl3CTA0an+pczBuFKtFiOynntfkyAqINr1f5DisZfzymQ2SscMwG3JhARPwST 6kcAV/OvbMU2Lz8sWEWpAH/Vjg+PgXQqgEgfiRM1VHaOM/FB/IKEZ7Muz9lGrtHHmXSS zkrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Dk8TGNQOVNzQn8cwlm1MaEPrVhLuKdgx7sOHdUet68w=; b=XwpLvltl3Vm5nk+YorOwKjEFqr6k2HJGYOmiWnFs4/OYiWgrngfTY4yTgwKRXk9T5u rA3CJCfkO6Sn2CtN9K3ZO8qbM3UCfx8BqhhvKd0j/I4eEZoXP34Op4DhRxu6quavadRx UxGRZ6JJp5GxJz3tVLFBUOp/KenDO/5rjMoEw524WI0ENwSmeyCjOe1fJy37bxEv2oLj QVezZlvhjMaFxKpHpgcl5k/BFHF1pXL1bpy/AA1JrLW9O3LpBJil91SsAy8CMQGI656r mggU/BMPN2DkBLaEGxHeEozEK2qmTI7w3IA9Fa9H0VcWBTGu/yBFcEQZsFYcMbu0PVjF I/Gg== X-Gm-Message-State: AOAM5308bVoOHKHLQL1uXT4clahhsG5wYZDK2U/+V3zi8OojQ2j0jHT5 1Ab9Iu5WZZk5IzZ3Eb2pBZaGq/fTS7DWMA== X-Google-Smtp-Source: ABdhPJzQM54LSV8K+iDqHoHFP4F77OsB4Mm39Uj/vydZAKxCAinWd0ZUjptBX5dvqX7Jvl+f94kIaw== X-Received: by 2002:aa7:9ae9:0:b0:3f5:e1a7:db23 with SMTP id y9-20020aa79ae9000000b003f5e1a7db23mr14282965pfp.42.1630304712224; Sun, 29 Aug 2021 23:25:12 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 30/48] tcg/optimize: Split out fold_xx_to_i Date: Sun, 29 Aug 2021 23:24:33 -0700 Message-Id: <20210830062451.639572-31-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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: 1630305529846100003 Content-Type: text/plain; charset="utf-8" Pull the "op r, a, a =3D> movi r, 0" optimization into a function, and use it in the outer opcode fold functions. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- tcg/optimize.c | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index ee674fe623..f48d0bc52d 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 Sun Apr 28 03:50:57 2024 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=1630306633; cv=none; d=zohomail.com; s=zohoarc; b=QMxqDkBo31qCPbq1PH6XNkK9HS589sPUnktscVg8dr1tlwX88DWpxU5tyN3/LIftkYG8NxAgPR0JcxYT2ejh7uKV7hNiLyYLtehpyehn6A6nMrPEmpO1NQi+L8o3/zKOvmKrh0bqJJk6AqcdXEXSMvVx9y3FEugCjLBXEthTnu4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630306633; 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=uRn4oZx0R2inY58Z0L6HjLhCbVRsyKo+GkaJcQcjclE=; b=iSCl/rOD6ZTafFvyTXSClf0AV1GAx/zfU1G4ujFHL/mhMcNv17V3XyXw1jiVXj2mLotnj0dnI6lAHyrbi78fGSy0+xdQSXuH0YQstAyMPNAoLqmAUmEbprvOq6eSyKwPw8FWFY+4OY6bqxkF+xTuIgV7TvSH3KNE40Y1gAB3xIc= 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 1630306633601963.7299492453172; Sun, 29 Aug 2021 23:57:13 -0700 (PDT) Received: from localhost ([::1]:58070 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKbEF-0001wQ-T1 for importer@patchew.org; Mon, 30 Aug 2021 02:57:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46562) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKajO-0004RR-2B for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:19 -0400 Received: from mail-pg1-x536.google.com ([2607:f8b0:4864:20::536]:33791) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKajK-0007eW-3d for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:17 -0400 Received: by mail-pg1-x536.google.com with SMTP id c17so12473542pgc.0 for ; Sun, 29 Aug 2021 23:25:13 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.25.12 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:25: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=uRn4oZx0R2inY58Z0L6HjLhCbVRsyKo+GkaJcQcjclE=; b=Wz9HSwNoPlaTM8Ng+52gPh8S+JuYQIGZljbZ2ai2tHZneHuhBhdEweOj3eiw4BJtZ1 9EwxxV9nWc7iGCH0BgG60SRzYR7hvPt32zkmGFe4UOEKDBrlvx5OYyotnTG6P6X679+Y 9Njo0+agmfk3CIGA3Wrr8fv/2TRH+DjBvRR6348+b46XbAWX5VpVUOrr6hizB2frnYR1 i0yj4VBUp+XDOC3RZmmWO3It5Uc8/4zKtLriwrrney4rkgqZyOgLvILBfxqhE5kBbG7M vYlmQLAK8sN1yjFJOK0HzoW4BLbfNYphWu2fUD3z46Q35FYvBbQfV4Bb3vyl4l6veG29 lcog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=uRn4oZx0R2inY58Z0L6HjLhCbVRsyKo+GkaJcQcjclE=; b=LauWRwga3+/C0Slr+ID3XLW/9OSo1uBCPu3e4NA8kp4eWP+QUGAZ8sgkrW2TDGo2t1 aYh1AdsxefuUSDhCEA3Uzk5FxfeIRdkWkudlaqPOYh9DEYEfNoQeaAmjmIU+SPFkqJoF gGK/p2TyzmOrmr6CsUJOcTZXpvHtxlYYmLGpUJbo5nbOMs+bTBPglkaLRXhVLRyYEBia V/jJd22MV1RcOY4ccJhYkFviI3TkoE7uoN0l6vE/B7zPq3voWjwbMhmViV059gPCJtPx 9VOis9qtYN7+UIHvVC9isLI55q8pCNXNSsezKOf7bgDxgLmsyaYhgw0W8kVeMDwdaWz7 GfTw== X-Gm-Message-State: AOAM531XzUOMPpj5vaH9ImfBHTfupEc5lP3Bjlcx1Cu9hG4MT11OrazB EdtNFMYih1OLjL6rlQoiLJNbwZdERhDISw== X-Google-Smtp-Source: ABdhPJyeGnghilLRWTMlC7F0wrYjFjS5pL/NmVGk0F65cVgCnA6WJPeHBF+R+VI+14pLDKVZYkRJ4w== X-Received: by 2002:aa7:8888:0:b0:3ff:1d90:1864 with SMTP id z8-20020aa78888000000b003ff1d901864mr4582206pfe.54.1630304712805; Sun, 29 Aug 2021 23:25:12 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 31/48] tcg/optimize: Split out fold_xx_to_x Date: Sun, 29 Aug 2021 23:24:34 -0700 Message-Id: <20210830062451.639572-32-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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::536; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x536.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: 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: 1630306635178100001 Content-Type: text/plain; charset="utf-8" Pull the "op r, a, a =3D> mov r, a" optimization into a function, and use it in the outer opcode fold functions. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- tcg/optimize.c | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index f48d0bc52d..cb05da7b39 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 Sun Apr 28 03:50:57 2024 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=1630306405; cv=none; d=zohomail.com; s=zohoarc; b=FqMeR/zJmsme4RTDTXc0AthzOEPdGK8almIUvnyFzWzReOlmLw1yrbdG39KWWZq9n0QmDV8oUl22/qKJ6QVxRHJTsTFgg9mnmSjF78MCgiBuQ1AwmS2oxR5MjLmXDFWIicKiO0qxzEWMefCRYD4J5LRC207hFYqWOW8cHA25lhc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630306405; 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=8VyjiCk35dVBOAey05f2F0yRnc6SKld30EqhfRoEcOY=; b=Bi6Yg5hpBFUoHWVmLtm1A5RkDAR2BrNvCUlIQXQVFmEwoWSdtNen7sdthPpxOldLNHpmP1c9eFV8bsULoC+nSMLwyjGHkvZ7e5LANZ3YNV8zhPwcc8ej7VZO1WX6vtSGIMD3miBgZLNLn8ZngtVYSdeajdeaSP+nPAkEDmts0l4= 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 1630306405569895.0945244496043; Sun, 29 Aug 2021 23:53:25 -0700 (PDT) Received: from localhost ([::1]:49542 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKbAa-0004h2-IH for importer@patchew.org; Mon, 30 Aug 2021 02:53:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46530) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKajN-0004On-8A for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:17 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]:34809) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKajK-0007fB-ML for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:15 -0400 Received: by mail-pj1-x1031.google.com with SMTP id ot2-20020a17090b3b4200b0019127f8ed87so11459483pjb.1 for ; Sun, 29 Aug 2021 23:25:14 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.25.13 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:25: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=8VyjiCk35dVBOAey05f2F0yRnc6SKld30EqhfRoEcOY=; b=eOmzO6muFOnocyf4wX9qzJjP2XmAUdlY1aUiqPLuO3qu9upDxaUx96p0m5NvNE/OZK Dkby5ci7AWSLs3bRBuRlfEWLqsnnQiTHWekmEf8DLuIr9JfkJGaU8/otuVuFK3cHiPx+ +Vn2g7I83/eaVEWhtFevQ5ps72ehfqY7lvl+i8eS0uF11oLVxq2hJwtu1qbqdqaitpPU Bl5RXfTNfgXo4Nbrh0xXWWdUEydutQbUmW6wixlkfypi7jXeoiy0hnGTyU2bthg+6sMl Kl99u1DKmG7I9Uy42kAd+ICLFdK0+/42rAgW915a92Wnsx7Y4DyKTOzWBXfVaHdSJwVk eOew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=8VyjiCk35dVBOAey05f2F0yRnc6SKld30EqhfRoEcOY=; b=GeaS1ehqPO7S7nB3NgCW3UmTO7PBf1Sbs6R+Fa/6MzmE/MgRTr/pEaA73MrXrm1y5F tWS8N4SoltQHm3SRrDKs60jlOe6M1jgmG8E3xAz5BcDNKW8kEldJ4ionG9rvJoxKMNkG AcR0p9hLZqELkO3tf4o3IptlA5jbtyA0FxBE80wmKsWm5DPOC64WOM9/bxPse8OE7MBw gzMNml2AuVGoNj1wTFUxe86/nmujffI0LgO53Hkb1XTB4UDi6/z7UtYf0/6YMSA+5gOf XDBXERxRplICAoFUxa6WCIf8/P1cqoZEHV3pv7xMgxpJw7jHH5oMt2FhoaThEDO5tNeD v+gg== X-Gm-Message-State: AOAM531B0ZeLreEfzR1pQYUWzTRelnax/k+3ksxIfZVRuNsTfdKVLZK/ MDZw7GkatrNwQ/LQash1qxVQA6GnLBRRzQ== X-Google-Smtp-Source: ABdhPJwn2JV3tWweng0isN1yYHz1CNO3pd8jjHNXi9Ph9vo5EXUL5y40VIJIrO6Qc7eDUhuLngslxg== X-Received: by 2002:a17:90a:5411:: with SMTP id z17mr37453580pjh.67.1630304713445; Sun, 29 Aug 2021 23:25:13 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 32/48] tcg/optimize: Split out fold_xi_to_i Date: Sun, 29 Aug 2021 23:24:35 -0700 Message-Id: <20210830062451.639572-33-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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: 1630306407151100001 Content-Type: text/plain; charset="utf-8" Pull the "op r, a, 0 =3D> movi r, 0" optimization into a function, and use it in the outer opcode fold functions. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- tcg/optimize.c | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index cb05da7b39..343fb7590a 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 Sun Apr 28 03:50:57 2024 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=1630306336; cv=none; d=zohomail.com; s=zohoarc; b=BwdcPSM29ukm9CIHbzSzub2o/CjMHYkMgEkosJ2EevOKJMR+l9C79qClCi6uV99u1DKhCL1Sq3VfeaJTzBf1ClLdaA2NHBS3cG2f1izUnyjmjnGQ5kfA2McnzmXbbax4hZTXRmEaJup/+GM84GZQgtWw7SnNEjpbWwlO/Aer9Ao= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630306336; 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=cCbr9tK1h8A5k23fSbJ9gDahhE54C+OeVS7vPLo0I+s=; b=db/U4lUQhon3HxaOM8fSgSZEREtibRqN1CjR8x0LDEKGyqDSXxSZLaPYwpIbPxbNHOc9pt8MEtweVp4RJw7xcEbpcmKP/ce1eA9nXkTcpdGOdZ6jSF2yCkbv5/qU21eKW7ApmYTnNIKdysB78BClODeV12ACysHThTrbGUh0qso= 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 163030633626322.97988069514929; Sun, 29 Aug 2021 23:52:16 -0700 (PDT) Received: from localhost ([::1]:46186 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKb9T-0002S1-5J for importer@patchew.org; Mon, 30 Aug 2021 02:52:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46592) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKajP-0004Ry-21 for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:19 -0400 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]:41594) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKajL-0007fS-ER for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:18 -0400 Received: by mail-pj1-x102b.google.com with SMTP id z24-20020a17090acb1800b0018e87a24300so9280754pjt.0 for ; Sun, 29 Aug 2021 23:25:15 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.25.13 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:25: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=cCbr9tK1h8A5k23fSbJ9gDahhE54C+OeVS7vPLo0I+s=; b=aXnk2zTYf6SPOKP/Tz/I8NzL9sw/rR5qAOYRSg0MBxegymNt2gY0ca0lwPIchJ/qW5 nCBRfVeuDiXIUKeLVRpXmpPdNinw20J+1e9CybBaFlEZoO2GOvTbThEf5iN/i5eQ5tFr lSGHpemgu/572V90Y0ME31t31bhj1sF+ICc2ufw6jusXZRXkFchGaaXt3LzGq92HRodt BNMNeXOpxIkRgwD2+Sros+Yes+4KVFXw9j/ZWvipBib5FpsmYH/fpZ2+0hZLoHyjAcDc oFwm+DpxC7yxH8A0wRbnb/U07LEPk9RJHL2vdsswR/LFLNQv3iTV8Mxo6pWZ60uS7cvS iCmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=cCbr9tK1h8A5k23fSbJ9gDahhE54C+OeVS7vPLo0I+s=; b=tsbwxSNWPH7e31vv0N+ZgFpPBs8fFlp3cgn0QjNn3m8IiT1a1J8grdkwqNEXklMNZH zB7j+mbI4/21GyCDMO/MidWzEBVig68KM+YSKIJvvPa/45Re5+UYxrZXtnCUEd6r3cCm XbmLU7kp7JjIzE0D5rN/vUrXdAr2raRQ8Prtjzs/JQEWsScZjapvyjm+U58Z6Xv1adFS ZeLObYXvL59I1Yii5ZGnUGJBCnrQ2wpdzRHaHX2ig1iv+rZo8zwHY51BeoQHNmPq7dno 8Ce9uJYqhmOKwnaEqVKksJeHdnFxfJ1uLGcEO0R3oN0vCVQmsyAni9s5MUvouU247xDS WjyA== X-Gm-Message-State: AOAM533SzI5BOTs30uoBqGab4WEZOs7auwqlYoGyuh0VV5VXu+TaOGPn powUnCl1ZBJXt8NsZq4W+j9d4CZZ50ymxA== X-Google-Smtp-Source: ABdhPJybxSX4ohs0S8wWBM8iUvS6d9QJwDIDMTCWixuqvj8c07rjjdTbTKJK31K6PTGrZCDR6+h9+g== X-Received: by 2002:a17:90a:19e:: with SMTP id 30mr4937231pjc.137.1630304714103; Sun, 29 Aug 2021 23:25:14 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 33/48] tcg/optimize: Add type to OptContext Date: Sun, 29 Aug 2021 23:24:36 -0700 Message-Id: <20210830062451.639572-34-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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::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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1630306337653100001 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 | 108 +++++++++++++++++++++++++++---------------------- 1 file changed, 60 insertions(+), 48 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 343fb7590a..f08afdcb52 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]); @@ -1314,6 +1313,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 +1402,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 +1467,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 +1750,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 Sun Apr 28 03:50:57 2024 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=1630305617; cv=none; d=zohomail.com; s=zohoarc; b=C8M6JxgLvAuwcHyBCbVY3FErATUy6E09bD/OB6B3N/7XFF3P4SH1Tu+nPxEuSwULFsSBjhO+dw9fveoU6PKOmM7BmdD4VvCLlGb40zXSciOX2k1ZUaEfmybK4Vq61tw4AGWrT0BbZ6E0uuZussjZFR1ZIv+IHkMqSPln/R1Vj6A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630305617; 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=V5PmVAb4ivNsNvtoYskUNMax5pc+QK3d8WJflZpnrPk=; b=HTdADwj9FMk4HNKCXQ7O/N85BTA69PZas7LsWsbJV34KRSD1yaWPk01iXhJ+6rSPyl2xBDsqAjC75FxMy00VZXERTEllTOw1HHihIEF0k5mJzA26bhXozdkh5YQODWuS69w4WxLcOhfEJeKRcgRl8K2qvqY/6C9MwPVXi6zE9DU= 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 1630305617170346.6304994367514; Sun, 29 Aug 2021 23:40:17 -0700 (PDT) Received: from localhost ([::1]:43980 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKaxs-00077E-4x for importer@patchew.org; Mon, 30 Aug 2021 02:40:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46556) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKajN-0004R8-PI for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:17 -0400 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]:35422) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKajM-0007fb-3W for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:17 -0400 Received: by mail-pj1-x1034.google.com with SMTP id mw10-20020a17090b4d0a00b0017b59213831so13130167pjb.0 for ; Sun, 29 Aug 2021 23:25:15 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.25.14 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:25: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=V5PmVAb4ivNsNvtoYskUNMax5pc+QK3d8WJflZpnrPk=; b=UTumljSf/DMDa882lVPMn3h9V1yrYgN2rLFopHJ3ZIAjrlyy0OUT6vzck3agsNCKn5 yeYaP3E4K1HG9MXWedJuDk8LuojI1BEtAfGPFJYjCh60MYUGQkBlJykKd5tjM9cuq4V2 fcRR67o0pHaM5ctqZ1GK1EMPyI+3Rr3bxSD8suydN5Y9RSEt6sb94T0vGSQpRFJxx9KL ts5U98zObrn9Zrn4bV9Snuz8m6o9Y7Y1GwonwVVCwU5BpZ/d6uE0vUJgx9ykbqHszS1j k+FK4NLrXBHeKAPCp0gMGo6ShYlwvt4R3nQ+X7kheH9aEiJd64tUC6Nn5wf4u8htG5z0 U2AA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=V5PmVAb4ivNsNvtoYskUNMax5pc+QK3d8WJflZpnrPk=; b=qAsHm95Jhcr0Siv/pilWcwwQcXurqd9p4ylTw/+mnrof/z82s6FciXeaNlIHl9ks6y gSXiUG3i0Kg68xFyeQjkPQKH7DWzjFcn11zZHtK5iGvR4mn6ib7X5vCPcHR+f1Hu++1Y p50T+eaHXKWxJOVzLH+vlpJKIrJ2j/Zbepx2vjyikPmKwAUYxO5wTRuqEw+UtVCPLrtx vlDeAuHJ4Fn2ezDvr/2a6XqUBcDIFJeyEjqABt6T0+MIBbXxdUxStdOvjLBPA4lH9z/p 9w1YBr5TzYhckap82OWhb5h8IznzzO7zW+AHndQlJztJW7RlpOHhB/xq+eaonrbg79UV o7oQ== X-Gm-Message-State: AOAM530PacnGTJ7Vv36QR0lUBD99SSWwc6bQHMW07It3C/3LrIQY03uk pPBScPUOv1VyO8+LsCyGEypG++yZ+hXvRg== X-Google-Smtp-Source: ABdhPJz1Y7GlmZDeIdaKF7L36PFpWOicDYbtHP0mlltO1EpwY+UODRD+BkmPBO+XbCQ0F4udGh1Weg== X-Received: by 2002:a17:90a:da02:: with SMTP id e2mr38644219pjv.89.1630304714679; Sun, 29 Aug 2021 23:25:14 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 34/48] tcg/optimize: Split out fold_to_not Date: Sun, 29 Aug 2021 23:24:37 -0700 Message-Id: <20210830062451.639572-35-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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: 1630306062982100001 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 f08afdcb52..aba65fdbd3 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) @@ -1114,7 +1174,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) @@ -1124,12 +1188,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) @@ -1143,7 +1217,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) @@ -1274,7 +1352,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; @@ -1428,67 +1507,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 Sun Apr 28 03:50:57 2024 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=1630306897; cv=none; d=zohomail.com; s=zohoarc; b=b5zuj7zm8E0hXsqt16o1W1UWDhgL+w+GpC/cQo7b6XOpXNmaoTsHyvAKULFYJWHF4NqhWzcR0NvfHGTJ1vuZR8/JTgN6FbZcf9PhNEldsXMIwRLaFVUn2gZFYvJowoQ979+WmBCC9wjygve3QTGq95omA/JYP7JvbFLkCFBu2rQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630306897; 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=RiX0h+LZeFsC/CB7zg0i2+qNE9Z0TV/acHiKkwOyOgI=; b=YPiz3flqNGqmBykpbZ0Fed8zg5Do1sucstsFiHh2RiH6VcNk1VxBUKpt+z/AC/2u/5Pf0SmM+0Dhp9tvtLe77l90bWJm6EnKnkgv8H9RNQ6P5C4jImfE+T8vfCOn+/fB+e+blSlkvzgJ2bMKKNzCQrYvCSy59LEUlXzLB5JZQXg= 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 1630306897621183.31608965368434; Mon, 30 Aug 2021 00:01:37 -0700 (PDT) Received: from localhost ([::1]:42186 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKbIW-0001tH-G4 for importer@patchew.org; Mon, 30 Aug 2021 03:01:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46600) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKajP-0004Rz-CC for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:19 -0400 Received: from mail-pj1-x1033.google.com ([2607:f8b0:4864:20::1033]:52752) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKajN-0007i3-TC for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:19 -0400 Received: by mail-pj1-x1033.google.com with SMTP id d5so2966108pjx.2 for ; Sun, 29 Aug 2021 23:25:17 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.25.15 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:25: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=RiX0h+LZeFsC/CB7zg0i2+qNE9Z0TV/acHiKkwOyOgI=; b=mdJs2dKLGgL2rINaF/vCJUuXn6NWKgVM1AvHIxOUCiPs0setjBvidm0Mr2lStQD1XV VA6AXHS7K5NNTv9lfHGD+en/cYarx9cPojH7HqmThpJui215rpYUc1fsAkkTDSwzYSqU 5qvR0Jhz1QvGGlcTo5cAva+01FUOlWPAQJBD4rImMRDzydcXV+1Bobemh0MEBO+AP6sS kq3RhHAsKJjb6EjvdGTbshYcsF9vj9HlgrSECHkNsqeSaerrvD49w0cpFBDZ4xdNPDzt 23icTQ8FD0pxSTOBVs4q01M9+aQo1O5m2vpJcvz1HG6ublKFTOu4sOGZfxoLlS44pCaV jJcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=RiX0h+LZeFsC/CB7zg0i2+qNE9Z0TV/acHiKkwOyOgI=; b=gtipbnxPmxNkb1yHpAp5zs9MrygapXO9qBf1mZe/fajNhTFuoeu2zhKc0p488ItkqY E4dGLwgiaxzf4xwDzIUV2PxeP897C0SA09zd8DLOve+ygdqRL2sF20o/04MxtnEw0qAS Agbzo+mOCEzJkx5g5Ctr2x5lmfdef8HAK4pV/UcaJ/EJPgN2X7D6rpumiZYN0Dl9c3aT 8ElQfcSIx1oqSNOtIS/P8LVhe9FX//S5J5B4EsZaJaoXvNVDab1XkIbyviY1/Tz/H045 72QC73BEfgB8iO1GQ839r0ImcPD6/DOwPEb1WfTn29hm6KmFvfyFSv4TwAy//khLFcpV uc0Q== X-Gm-Message-State: AOAM531Jr13h1Af0vi/y55GMQKbj5oIEt0MLXzE0wWlHoCIz/hlhI5PP seoE8KHXmRUQmBRVoPg++p1bUcQtHWj3IQ== X-Google-Smtp-Source: ABdhPJzIqfRliZ00u5aOD0lvrayF/3UV2LgSDx6MiH4DdIPYfEqadYMDmWCD/zxCcGWpakl5rRku0A== X-Received: by 2002:a17:90a:7f85:: with SMTP id m5mr36007998pjl.185.1630304715504; Sun, 29 Aug 2021 23:25:15 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 35/48] tcg/optimize: Split out fold_sub_to_neg Date: Sun, 29 Aug 2021 23:24:38 -0700 Message-Id: <20210830062451.639572-36-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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: 1630306899620100001 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 aba65fdbd3..23594e1a03 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -1183,7 +1183,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) @@ -1335,10 +1343,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; @@ -1472,41 +1517,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 Sun Apr 28 03:50:57 2024 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=1630305879; cv=none; d=zohomail.com; s=zohoarc; b=eLD+EwHNGSaPBY93e+3OffPwanPIlgpbMbvCq3PDqjoHlVBK89WJBxDAnEzayVOyM96Y6+zmo4k+zryAj98PmbmRWrdZE2RmVeG5eHqdc6LmJMy98DYB31iIDD/eyX5R8RQf1AgDHzBzCefvOPTFE70FSDUicj9sedypK8+KY1I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630305879; 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=I7oNavD7wRA/u6mTbBY5YtK34tMDTw/5n3Es5YrcfuQ=; b=gkiVyp021ctIgzv8WEV2onGoGMHgA8X79dvOHkz75/bSjiQ5kUGqit2soGx7U5UqZNKXfc0QfU4pEVQCmM3dtcE/c+I+mp1M1FGd6x5qYUQAzBVh9CjI69v2ow7uicrKRtzSsA7tbrOMmwn7AmFJBCqxBnI1xyyRerRexVVjASU= 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 16303058792501022.9222161332392; Sun, 29 Aug 2021 23:44:39 -0700 (PDT) Received: from localhost ([::1]:52314 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKb26-0004Tv-6v for importer@patchew.org; Mon, 30 Aug 2021 02:44:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46618) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKajQ-0004TC-Bj for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:22 -0400 Received: from mail-pj1-x1033.google.com ([2607:f8b0:4864:20::1033]:51782) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKajO-0007hV-AE for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:20 -0400 Received: by mail-pj1-x1033.google.com with SMTP id oa17so8765043pjb.1 for ; Sun, 29 Aug 2021 23:25:17 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.25.15 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:25: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=I7oNavD7wRA/u6mTbBY5YtK34tMDTw/5n3Es5YrcfuQ=; b=L20WMVz6TK3CVsvqnv9YfhGw3qs0gUkmfneYSZQw4JuAhxNmg/zQssHcATkEQamVkq 0UziAMQ5AcQEpfCxGeoUZwXvdxTUNdZxPSr36uRxr/6/MEvC6gK6/PyPa9g3q1geIfIR c5XiIc2VpQQ2A9ZEZdd0zMKf2NLl0jQnfEzBrRB8Unp/jVFzMYusFTBy5cVNu+2jv1w8 qK2SyjMnT3wEydRDiLbIBfo6Vc6smZry/WMtNhSZl0p2JYXBgfHOqVTB0u1Y7srpY7o6 E1SdJw57T6sOj7x6c0L1up5UYRQj9e8M4PsHHLsag7OhTZI898Z1JjUtTqzgwgsb34Dm 4uSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=I7oNavD7wRA/u6mTbBY5YtK34tMDTw/5n3Es5YrcfuQ=; b=aab5l/u9SCAU3Uwshk8Bn7B4EUQQumOc2y3P30uKtwEl2W9rYqkcir4Tji/cC+sTmt 8ipiL/v3RLBaruzrhk6soqMpVEsf0T/zMnJgmxwQEZSgZcgnSVjqDgBlEeNHFRG0gmEB LuK8M5jHYD+vvBVWCdUDjSKVOPPiYc1GrFchi7SpElo21tY4Vxm0oZVLFpV63Sh+WTOO 3lRu6M+GSPmZCJpZnLyM+OAuPL2u6IhdiB5pkoSSS0RHSAPvAJEWFg6daqhO3UL6uKck 6FHCfXTbjPBOWwm2rXgis68U5X7GayB09OB0O2OCb4OJB+exN7HP0aUALqlueGhfXCWK fnEQ== X-Gm-Message-State: AOAM5327EowElO5cWcztKYxoW7yMprpQQTHKQvjX7FMzNtINvfK8l4NU ioBD9tAz20uqbjg6IXt9NkIv1qbpcoHHrg== X-Google-Smtp-Source: ABdhPJzCxzcjwyNyZbwLGz/uyz8XnIxnoss9xzpsZWZ1ezejcdQXcpa9M8NGUtMbRDQkNXoOwX8kig== X-Received: by 2002:a17:90a:4a8a:: with SMTP id f10mr18712348pjh.195.1630304716068; Sun, 29 Aug 2021 23:25:16 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 36/48] tcg/optimize: Split out fold_xi_to_x Date: Sun, 29 Aug 2021 23:24:39 -0700 Message-Id: <20210830062451.639572-37-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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: 1630306175797100001 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 23594e1a03..3b0be1c4e1 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; } @@ -1217,6 +1233,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; } @@ -1340,7 +1357,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) @@ -1383,6 +1404,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; } @@ -1398,6 +1420,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; } @@ -1521,39 +1544,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 Sun Apr 28 03:50:57 2024 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=1630306781; cv=none; d=zohomail.com; s=zohoarc; b=hizi8xn3zUWFem0nqDlQ1qL/4O8mvbM38yUiSCCpMnsWMgLuoLa2gpyTmkEupKRW9AVWoU7GYJUDs1yJ7pUQrPM2lp9a1qfEUBb3ykEuHfgmSwvuL+ryNW5vvdyj8zFtO4DV95i1eBKQiRIoiEcRZT84FZuBymuHXbKRfk66PhU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630306781; 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=JMN+jgjbqzyFfx1kKgY9/hqg7NPVZxlqOppkdWbMcfE=; b=JLkvnny6GtbKDtoEpgjJZQ70iquWNKnB4eVKcX8QzUasuB2mldPj6wZuaffV1l0FpPnrSPxa0k/8BiaBnXQoccut93/q/sQ7NosNX6oTDTp+CWsC7jcseqjUNLdnuz6iNF1fqmRImTss7LAQjgYfwr+JKkCGkAGttqZR2EpqnIo= 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 1630306781391667.4603320021508; Sun, 29 Aug 2021 23:59:41 -0700 (PDT) Received: from localhost ([::1]:38424 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKbGe-0007na-4m for importer@patchew.org; Mon, 30 Aug 2021 02:59:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46616) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKajQ-0004Sg-9P for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:22 -0400 Received: from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035]:51784) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKajO-0007i5-37 for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:20 -0400 Received: by mail-pj1-x1035.google.com with SMTP id oa17so8765058pjb.1 for ; Sun, 29 Aug 2021 23:25:17 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.25.16 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:25: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=JMN+jgjbqzyFfx1kKgY9/hqg7NPVZxlqOppkdWbMcfE=; b=T0LZ7+Eol6eEgWRp3enpHKJp/eoPHEy9TjGiG5H+DnAFeR50i+zHVMstQu2quUeylw mgreptkcQHXZueqGSNF2eMKzBj3BljwZCpNIXZydtkazfUpXWI/THyY47/ErnzjfsVIx /eK3lNDLYVeUg8mhjXLvRRTmkOKd+KvD4+cP5a0GOd0qTGQUUVLG7ee2bDjbWVTNWGmr 3xfMBIkQsOcRsw1TNsui0Ems1P6rRpaV+xJMBVoEh6y2rW/FTzPYb1BIap29Yehqx2T3 nZvcEFkNPDvz8flJXb7LjzWlWG81Y9nLBNPT/L4gcc56PKW2sp/bDmoyorRQ1e0ZhDD3 bl5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=JMN+jgjbqzyFfx1kKgY9/hqg7NPVZxlqOppkdWbMcfE=; b=BJyZXK4p6V34MXwU+eZj3q6zzhqdADJBnqOVrIWJMw9JQ2cLywdYTBt/FvQ+6FRrQ0 CZi2GLOckhKETDGQH+/fr6SODyl3LYla0WOH9DUYKiMn27JOGn4EhgB7YSIRsMc5MPvS uIZULyRjmGAsShM2VIGyBgjLmq7bTgdFqaK1/6AXoWGQxc97TEKq++PgEbgbH6ThML84 iUZuhSaH3Xr4I78SXV9PrF0uPnGCAwWXn0S+8mvHU3OiMlrkZFLSp8MoBZ/d1cy0DHJl T+SaCHkI1zXqAK5aJRuJmuuDvXWArsp0MknouSQnIP5Fz3F+D/DSHeUVoJDs0y2giIoa iZyQ== X-Gm-Message-State: AOAM532My2mv4+XJmIyyKfCofaJOQQ4qRWWRVwlgMjRhDllRr1Gu6ajj sYW3g4yxAeb+f/jTbHCYUx0ZaXJ2qjGbEg== X-Google-Smtp-Source: ABdhPJxxwK5q1dUoCFJzBjmM856FjFIMJiu4xf5fEz+aW1V0yAqj2LFmu5ObQEHntGbFORViHxKFCw== X-Received: by 2002:a17:90a:44:: with SMTP id 4mr24609943pjb.130.1630304716712; Sun, 29 Aug 2021 23:25:16 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 37/48] tcg/optimize: Split out fold_ix_to_i Date: Sun, 29 Aug 2021 23:24:40 -0700 Message-Id: <20210830062451.639572-38-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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: -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: 1630306783630100001 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 3b0be1c4e1..69367ddc8d 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) { @@ -1358,6 +1367,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; } @@ -1526,24 +1536,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 Sun Apr 28 03:50:57 2024 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=1630307112; cv=none; d=zohomail.com; s=zohoarc; b=CQHZaHtSC30++savpE4gLxYOEAAQfLFdSAd1BA4WpY4RZYemJGok12QJoJbhXwk8ItnCV1tG1jqxJeDa28RiHSdavpQhXUlBfbT3Cq9pd8g8wg1BNh/BCYLCQc2NhIDnYfmmuLUtKNVqJ90wUSByShzYG9lA4179VYDxAU2Ny+I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630307112; 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=sC8qyEYzgtR8x8aErC1FvGhshr3Epi70be46yOwZ4vo=; b=Yrup0uyiRU6vebnKSVoIqkKppwlRTKEAbdzriI7Tg1pczF2Vz0VRzwvsiwT6YhxAKEykGAjI3ucG8O3SRMNRdMzsOWDuv4NTZskpvMRUBoDJWgSSNTkX1HjytIt0N0wEQDkGyWagKxXwUrPXr4AGRoWU4AL2tuS9UQ0qEXTFm0M= 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 1630307112138635.4312272867348; Mon, 30 Aug 2021 00:05:12 -0700 (PDT) Received: from localhost ([::1]:48360 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKbLy-0006EK-Ns for importer@patchew.org; Mon, 30 Aug 2021 03:05:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46630) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKajR-0004Tg-J1 for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:22 -0400 Received: from mail-pg1-x531.google.com ([2607:f8b0:4864:20::531]:33787) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKajO-0007iO-Tl for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:21 -0400 Received: by mail-pg1-x531.google.com with SMTP id c17so12473685pgc.0 for ; Sun, 29 Aug 2021 23:25:18 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.25.16 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:25: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=sC8qyEYzgtR8x8aErC1FvGhshr3Epi70be46yOwZ4vo=; b=Oc39bRfW0Cx1tVh7UWgWIGgPpaYneGFO4pFiZ2X17aE0LBAyHSNwLQzUeF1j3mZ6rF Vc3dbUL/6k/qB48RZlqB47aIWQXbWi9FSJM6cn3MAnJs0mS/pOTt4JbKsWOZNrWVkn+N ctovL72Q9NqXDLJ22TLHQ3JaLC5V/pyt+jhWfKRIIHMxUWIWSA0aLPhNX5nmeMxVYlVY hFpq17ZUbGlpZHYeOUsxnwsGet5GmIPILkJFBhVFFHFohKpsymMIeiSpSCf9fcZ2+pK3 KTOjQtDOYzOXzfQPMHPzRHTxgs22KEC6YQiEZtQEYVjyO30Ym2kkH8BF/uTrmqesj+ic F20Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=sC8qyEYzgtR8x8aErC1FvGhshr3Epi70be46yOwZ4vo=; b=eCe3Xg5pVSTdxKlyMkGr8XvXT2QOqfq5MdprhH62SSiW5bkjQIUlkgzbMEQWodmj4o DRfeU9LJB12Wg+h6pnpUemlTO68VhYwT4AvlfHJ0EC75UsbQeKC9yd2O+v60nF4pHcJu yU4kOT0OFRuSAHJYKTB4k0KcZe+MpFHgqndEj6Djj0xdor71Yu36hO8UwWGLrZ/4bTWZ V1pU8gGowDkfpyqbLc2b4c7QrkCWN6/9fz8PVwMyJ8hCMr/ded0tBwS9Py2LXcUFVGhr yUWFV+jVwKGrvrX8kKWHAlM2P3dn9MpTNnmZO87qAgU1as62HIsRkdsB51BeqxawRQcM Q4yw== X-Gm-Message-State: AOAM531KCWbFROINnCF1baO39a67MOeNumJRWBYmCfZLjhPXBJRYtpWx 4mY9gYk+nF9Yc6ThQyx8Bfr4n/eLhJTa6g== X-Google-Smtp-Source: ABdhPJx0zaGMeWGOGqWJ7LSa/0zqLTiQvOojmluqC+JtKCIjNrSlQ+CIznWgyBywp2qVHv3441N5bQ== X-Received: by 2002:a65:5a8e:: with SMTP id c14mr19892367pgt.125.1630304717407; Sun, 29 Aug 2021 23:25:17 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 38/48] tcg/optimize: Split out fold_masks Date: Sun, 29 Aug 2021 23:24:41 -0700 Message-Id: <20210830062451.639572-39-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::531; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x531.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: 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: 1630307114390100001 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 69367ddc8d..735eec6462 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) @@ -1152,6 +1362,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; @@ -1208,9 +1421,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. @@ -1246,7 +1466,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) @@ -1260,6 +1483,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]; + TCGMemOpIdx 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; @@ -1280,6 +1512,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 @@ -1346,6 +1580,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: @@ -1354,6 +1590,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 @@ -1361,7 +1599,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) @@ -1371,6 +1617,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 @@ -1426,6 +1679,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) || @@ -1434,7 +1706,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. */ @@ -1455,7 +1730,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; @@ -1536,245 +1810,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): - { - TCGMemOpIdx 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. @@ -1847,6 +1885,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 Sun Apr 28 03:50:57 2024 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=1630306537; cv=none; d=zohomail.com; s=zohoarc; b=SQx/wIYQcd4UCLLV/5ELWzRhWUUW9/ecoqRmHt4yPNg3O2remth/0G62NpXghrhcMFGApDDaAQeTSifmgKePn+KOsP9yxNRvn2nUfpiS/jhbf2wh8p1mnM+d3BmaaaOhAolQbkqAV1Ff8j11nMASv+DN8ZRZSTCva9bThmnVrdo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630306537; 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=yfpZ/fdkPfR6dqyP4UUc4G6qa/1YFyufh1SETcM1ayE=; b=T+pb5tXi9M4LagOWZzchACh4Dpu56u/MbU7Lc1ihvKeX7T5bX07F/CFfDAFcRucq2+YCKlfsvTW3bPWmOT12tEy1Ny7oxd+TIMGgklNJlG59keEZk3TuVrPV2fT220cnmG0Pl9EUDGXcYGuTWPXcQdliQWgKXIsC8cyzEUet9q0= 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 1630306537364495.7851459339962; Sun, 29 Aug 2021 23:55:37 -0700 (PDT) Received: from localhost ([::1]:54868 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKbCi-0008CP-AB for importer@patchew.org; Mon, 30 Aug 2021 02:55:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46628) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKajR-0004Te-87 for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:22 -0400 Received: from mail-pj1-x1030.google.com ([2607:f8b0:4864:20::1030]:39639) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKajP-0007iU-1Z for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:25:20 -0400 Received: by mail-pj1-x1030.google.com with SMTP id mj9-20020a17090b368900b001965618d019so2981621pjb.4 for ; Sun, 29 Aug 2021 23:25:18 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id b12sm13942084pff.63.2021.08.29.23.25.17 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:25: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=yfpZ/fdkPfR6dqyP4UUc4G6qa/1YFyufh1SETcM1ayE=; b=isNYICw+VDadWzuZfgUV4Zv445sRHS7VeO//04wzSvAeopnB82jGOhawTwUr8MVT91 6PfKr+UWqUJiSaw2XLdF+b5QEBDpXNt/yzAqE4D2rqjWba0xrENyQNEMNn9s/NBcOyel eigZb7RlsXw5zmqVxVEOodHM9tKheLXNRZsEbmCcIjjWKv8a+1ihc2z8ma57IbZTMdlg mIWOHslmzkb8R0RR6Lpl10boNVW0aXSsmfPHj3lNmob2E58yDdGDsmpqB3CBTEP+hxKH 3DrPDHkVTOfAwMJBFPh15ViDKnL5Q4W+JjA08EO6knUexIuKDySrdxmLvj1ZLU1HqXSt QU9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=yfpZ/fdkPfR6dqyP4UUc4G6qa/1YFyufh1SETcM1ayE=; b=HKsyMq5Ls67uMAtyrw/earq1fg5LYLAVmRhUG3TPk8CjQo5kupzBIHosgBmEzORb/N fvsRBPDBehgj8L2sMqvQ03UYGCEMb2eIMf6ulTBaQAM7riY72qFsQYvg5rRwtsneoJqC n4M3I9qSc4llu08jMziY4XjVseEdh038xcnHx7zsACIC6PP2GIQIumH/3uNsELpCB4Oe vqYh6ptW3ZrPHQIZNPyUQCLhCcO4i5ncW8FX7aazbM1wXUrphrreXRvcLINYEByegsx4 9S8O+TtXWaSVIhzJDwF4tu/Uby97hzRLdpXih4XASUIi+FcZXB9qrbtw077Qz/g8c7eM Nykg== X-Gm-Message-State: AOAM533/KSmp4v3djJMRiFUoWApqv0QBnqrm4VgBYh900elh+GKTPf3Z iDSQu5dE0wwGYlLkkECDgM7upCJ91+MVZg== X-Google-Smtp-Source: ABdhPJzT9/lBRaDgMU78DpII0KdhparPWnQ0dU2/zZbPObqWZvnO9PePgAYLp5bRThiIJetmuMnbmA== X-Received: by 2002:a17:90a:8905:: with SMTP id u5mr24801677pjn.95.1630304717924; Sun, 29 Aug 2021 23:25:17 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 39/48] tcg/optimize: Expand fold_mulu2_i32 to all 4-arg multiplies Date: Sun, 29 Aug 2021 23:24:42 -0700 Message-Id: <20210830062451.639572-40-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1030; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1030.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: 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: 1630306538078100001 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 735eec6462..ae464339b4 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -1392,19 +1392,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; @@ -1904,8 +1929,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 Sun Apr 28 03:50:57 2024 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=1630307311; cv=none; d=zohomail.com; s=zohoarc; b=PzI0YLVWjgHjmCEOumQRnvQOIna+3FQhfmWEr09SyJxTnELZC4/Ok1Y0nvU3NT+kX/nyNhghzR0jsf+sT2VOGSNlq9ivOngcegAW/ZUDkUNNqx3UKdb7m2++pKp+QNM50bkC1zt7FWm4UUYgHhOD+asTkoxh/4RRrwMUJ6O5nWs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630307311; 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=x5jnWfhN/K9yOEcW83E9baXKTpTAHwPLi+iPqdmm7II=; b=RjptPjxHvnWr9ZpIaUCMrxE7xs0e+ST9Cjc+d2MaKu1OcHumfNk2MQNNkpiS39zHsq7n+E7qHje/B5EOwTUveEEP7okx4IM0F+3Sa9ByFWd7gjU/Libs3VAOu9tBx7tdpCjf9MZm3VtYiuZjyYeIQcZjARw+6vcSraw8iUpyxsc= 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 1630307311143811.7053963680356; Mon, 30 Aug 2021 00:08:31 -0700 (PDT) Received: from localhost ([::1]:56992 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKbPB-0003px-UC for importer@patchew.org; Mon, 30 Aug 2021 03:08:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47094) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKamO-0003BR-6I for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:28:24 -0400 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]:36437) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKamK-0001n3-Aq for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:28:22 -0400 Received: by mail-pj1-x1034.google.com with SMTP id u13-20020a17090abb0db0290177e1d9b3f7so13106836pjr.1 for ; Sun, 29 Aug 2021 23:28:19 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id o6sm13337072pjk.4.2021.08.29.23.28.18 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:28:18 -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=x5jnWfhN/K9yOEcW83E9baXKTpTAHwPLi+iPqdmm7II=; b=TrB12MssT84swJMXb24XpVu+YGX1Pj7fj1ATmhGcYcS2ZWojtoANi2bsoTuYeFqTa/ UEA1Ly/nYazZ2W5OkqobMGFNk/bsr2SksVMWP+ttWygnuLxkBxN7gND/73wpbb7CniTS HbD8WyeQNBpdMqci99sEIdHy7X4ryHtDBhIJQTxsyUIVONtcQEJ3/j/E7WEzox1W5lG/ EoGerUlknVMnuJhyfpk9WigGFxnxBmNl7BOI5jgc64m9og8hq8UlRwPt/ZHK1sTf/Gvg v4dSXyvKxThmU3k1qa+vURL6AT6bC97k/CrS7nj6hcE06s9Fhg4ca+ZfzWCELwXLwhLu SkeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=x5jnWfhN/K9yOEcW83E9baXKTpTAHwPLi+iPqdmm7II=; b=iY4l1M7ZxC8twalfMrmyofm/D3eABsR8ID3GM0gWK9JFEKJgsQWviXnGuUigF+Zq33 2C5aeNoTIswqmVDgOejTT8SmPBzNbJ+IOY58UNSmqtkqRWoFD8IIyG+CHqHP55+acHed A5RaWYEg15o55+YnYWP3AAM7Gc16UK8VL6ryQTpTcv7UwmuJkT2Gffw9/2QVd0lhJ8cL esJAA6x2Ks2QGfKH8LH7I4pVExJOBnM8m/0WxDgYluy650uLkwUKexGYnOzgs4AD7MCr oaD6aBDDbgYCuwJMIFBv18zFZuDr5nVlR8QZVgfkdIj6lOlAPK9dZ+RKncaxhpTJaOQQ bdog== X-Gm-Message-State: AOAM532wEcMR8dL9EPQj2C3Xf5+F0PCL/XO1srh4MiD1RGsjIJwh+y81 E1VbsXOus0m75b0khY51tIs8q7m9J9HDvw== X-Google-Smtp-Source: ABdhPJwijg8GG7/wzWb72lOeB0Ztaw/nvz1B/ZsEDnFQJW+J8ycWNHxpuvZHAFWXlmFR5I88rth58A== X-Received: by 2002:a17:90a:49cb:: with SMTP id l11mr18478783pjm.142.1630304899027; Sun, 29 Aug 2021 23:28:19 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 40/48] tcg/optimize: Expand fold_addsub2_i32 to 64-bit ops Date: Sun, 29 Aug 2021 23:24:43 -0700 Message-Id: <20210830062451.639572-41-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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: 1630307312677100001 Content-Type: text/plain; charset="utf-8" Rename to fold_addsub2. Use Int128 to implement the wider operation. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- tcg/optimize.c | 64 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 43 insertions(+), 21 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index ae464339b4..ba1e5631c3 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) @@ -1699,9 +1721,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) @@ -1847,8 +1869,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); @@ -1983,8 +2005,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 Sun Apr 28 03:50:57 2024 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=1630307183; cv=none; d=zohomail.com; s=zohoarc; b=JgCMrRrzauA5+9akMPAGPYDD3n16N/n1AcaEooUaSRfb8veZC/gHn+otZMKDthCGRUKy+LFr/zWPkN0Pmdd3NC7DmfzYx7B8lRFhxcEGaEJMK5nHLbyafAGlhnUBdaJSp4mx79fKEZ9JxyQ9s6jG841AFrD+mNc7qDt/iAo6aCE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630307183; 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=cPB1vFuAJW/mlwNBh5B1GVBi2EgabM0ZzuDf5t+EDY4=; b=JR4R2Iwgbof42l1t9Ivyhi1ksrbFjgIqrZTb5ktLMXwT+gSJcBsgcX6TyrdjfkL36OvhuYojzrvAfwvfSSCE5H+wGykXSmuv/HeMTmDflVwxQlbhhP1Gwv1h5HQ9SxB22JqojKkpWceC+72acFJRS/uag8qqVL+dAT408DgsDFI= 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 1630307183860450.4656028936878; Mon, 30 Aug 2021 00:06:23 -0700 (PDT) Received: from localhost ([::1]:50518 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKbN8-0007uj-QW for importer@patchew.org; Mon, 30 Aug 2021 03:06:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47096) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKamO-0003Bf-4B for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:28:24 -0400 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]:34428) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKamL-0001nh-72 for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:28:23 -0400 Received: by mail-pl1-x629.google.com with SMTP id j2so7953506pll.1 for ; Sun, 29 Aug 2021 23:28:20 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id o6sm13337072pjk.4.2021.08.29.23.28.19 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:28:19 -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=cPB1vFuAJW/mlwNBh5B1GVBi2EgabM0ZzuDf5t+EDY4=; b=jxN/sQ3ix3WGPWIfUeoQZusk/63OE589dgHEjyVLCMUXvufGktrX2wHaHxUY6oGpkZ avNZFxmDatbHf9HlI7HFltEtnaRQcJ3ujDn7XFlCyyNwHQIqkdWyJbS3zlHNMS3jpktY 3KEqXr4wU/U1kwWcCSpUMUXILF8G1xuPG9DBc8+HiqixSD+qDP/ShW/ojdnE+RLuKVMF YK4kM8EvxihwC9Wg/EQCcdrSHZ0uqIfkZ6eIZXpuysLb36QP8lTBccLN6c3JWd4HsEfy /JBCN+/E89NcjvBH6aH5l/3dY4egCyC+94CVU6wdBEBnRKadcJ2mMfMXNsBBpa1oJv15 syaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=cPB1vFuAJW/mlwNBh5B1GVBi2EgabM0ZzuDf5t+EDY4=; b=rY/aCN7/YyDXLCrXQea/hMiPmC8vShuxRsdeADTvX40CUIU4NT8Aj5EA428y1CmCHV YVrM9obM/MOMABiBMzsaJx32aItxUZcFSH2G23GkkNNwKHU0FXMtaMht3M8iZC/+anws xWlu/2yHuytDv2i2xBBogY6zKfZlSaFxUdGFk5Hc9puWnQgnKKfGhpMq6PXUXcn5gptk dPHbEsmtBtgE4X25AbyrpLtjPq6Isk5XtcsjRzi2Y1kjWBhwStK0vLi7rM3dFiZv/eCQ XJEYRtIlXHgo9YstQaPdBOmfJbGMEiQToQ1AfwSIFWPWQDG4L/SebgM4fk/1c2g0efms s/+Q== X-Gm-Message-State: AOAM531rztNCn6IpL0glYEQD7TxEdcUFePsV3o6a9JX7x4+FASafymeA JYmr8mKfgzNEhaaQrWVpFtdBZL8cD1bs1A== X-Google-Smtp-Source: ABdhPJxJ2/9RiocuHooo58Fh1sEQh+PMoHANT7I1G75duwGP4jv/RYL4DIh84npbbpd60l6Cl5loyQ== X-Received: by 2002:a17:90a:8042:: with SMTP id e2mr25267889pjw.47.1630304899753; Sun, 29 Aug 2021 23:28:19 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 41/48] tcg/optimize: Sink commutative operand swapping into fold functions Date: Sun, 29 Aug 2021 23:24:44 -0700 Message-Id: <20210830062451.639572-42-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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: 1630307184574100001 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 ba1e5631c3..a66ac77c29 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; @@ -1378,8 +1396,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; =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(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]); } @@ -1407,7 +1437,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; } @@ -1416,6 +1446,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; @@ -1459,7 +1491,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; } @@ -1488,7 +1520,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; } @@ -1508,7 +1540,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; @@ -1554,8 +1586,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(op->opc, 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(op->opc, op->args[1], op->args[2], cond= ); if (i >=3D 0) { return tcg_opt_gen_movi(ctx, op, op->args[0], i); } @@ -1567,9 +1604,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; } @@ -1747,7 +1788,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)) { @@ -1800,63 +1841,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 Sun Apr 28 03:50:57 2024 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=1630306932; cv=none; d=zohomail.com; s=zohoarc; b=TES7M0dym8hj7BhN51j1N29eP36r5nB1uRIVxu8oIpg6kFq7FuZ/EjmaCmLCwrCgdefTtGNeWP242qAz26m4yylZR8UV/Pl2N46zWYugVF9rwLY/+w9Wp15oOsHqKh+o0v129KqfTRV7I6NpFQnTNUkSbSY2d94riZtMs39b18E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630306932; 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=LV58SddOWnlnFKtjz4i6HF8Dt9vT0aWd1Tsy/0qkamg=; b=f5Ci0KFTgiMaB2BGYlcIdZ4zSEHCL/mDUNYwZf7glMxkYXO1Ex6N87HxEeKnGP6gUqw1NlJzSI0VZqkZQzFmKzfOfKI5p8uFUCQlcP9dbvLVVz8GeC6p7nnOi31Xew6XWXVGBbs176fgd+t8GJqTyO0mSpMs2x4EKvdL8JdHcog= 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 1630306932757930.965834236592; Mon, 30 Aug 2021 00:02:12 -0700 (PDT) Received: from localhost ([::1]:42400 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKbJ4-00023G-QL for importer@patchew.org; Mon, 30 Aug 2021 03:02:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47164) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKamS-0003EN-0T for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:28:29 -0400 Received: from mail-pl1-x62b.google.com ([2607:f8b0:4864:20::62b]:33656) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKamL-0001nk-PY for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:28:27 -0400 Received: by mail-pl1-x62b.google.com with SMTP id m4so7977107pll.0 for ; Sun, 29 Aug 2021 23:28:21 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id o6sm13337072pjk.4.2021.08.29.23.28.19 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:28:19 -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=LV58SddOWnlnFKtjz4i6HF8Dt9vT0aWd1Tsy/0qkamg=; b=DNDpdfwAyZx2VkGQJiz0cQ0eUBRo6jSvXElkV3peZhAq252+UB99OJLNIxSXY+IWrk olnHeTaf8wmWETH6lLSiXeCSj4z0tXrw8SFcc/lNpHR+5IMb5Jz43OZviRUacXiEaO00 rx3CqAvvQPyMlPd3clztCeRK6xZ18uMReED8YlXdFuo4YyTTfuXAqgctLGvYfnSt3PhK vSVpP0bxfOKTWSZBqTJjjpxvjvryuYje4Tic1GsJb3w/5IuUARYnnfj0BdwabrOs0p8B /aaZjmGRovCV5m7n4AsW1sdkF2d4epqc2dTxq0alLlzbKLERGd6P11zSOYuRqvJydt7H uqYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=LV58SddOWnlnFKtjz4i6HF8Dt9vT0aWd1Tsy/0qkamg=; b=Lq7slv5BREudF0QeU1pu2C83+Cc4AIR7J3D8mbkanR3t9tN4okXf7Q3btBoRYrosdE RBxajY7CY9tCjZn5CDfddvKNz9LLRNhe94roxKaYzslFsZ6heSTLOst/Cu0VLfH/zS4j Yjm3vYaABhZH0a0Re/7qO8KiKu26ekuiYmCFYwffq3nsTBF861O4fgQnG8FBBbSWQSNs CBYr1Qely1xxLEn90uQphKOsU0+6TUParT28U8969jkht6OX8cg9nui6BSiAYXzrq4GO JnPNu9dqd2eQ48zjltakiK+aenxkspnqu8h1CVGFKOzO9eglDq4TsKQ0RP706xG7hJAm FU0g== X-Gm-Message-State: AOAM531ShVFZjpcX6K2Ghms/SZ0uMbdJdFmCD6Mu4yEqeoLhM7fu8Efn /kjGWLQp3/WZTg1v35ay3Z5JZ47h6XkIWw== X-Google-Smtp-Source: ABdhPJwSdhTz1ZMcbyKgszK4APkRiJoq87XpP3fM+d1ldWhkPCFc40LPZTh+26SA10P25OHUcMFPZQ== X-Received: by 2002:a17:902:dacc:b0:135:7ac:b790 with SMTP id q12-20020a170902dacc00b0013507acb790mr20042223plx.5.1630304900207; Sun, 29 Aug 2021 23:28:20 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 42/48] tcg/optimize: Add more simplifications for orc Date: Sun, 29 Aug 2021 23:24:45 -0700 Message-Id: <20210830062451.639572-43-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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: 1630306933952100001 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 a66ac77c29..6feaf905e7 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -1554,6 +1554,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 Sun Apr 28 03:50:57 2024 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=1630306717; cv=none; d=zohomail.com; s=zohoarc; b=CKVi1DesFhnj8jHPCsh06ucrI8sRCBdS+LwpP6ZJFjKFV3arO7hdRSEQSSnV4R5tedw2oyNwVNba1fpvlGE3IFxRnxZAF1ZlmgDQdb9wZXcpo20XlcYWLCUxO1Vsc4gRZSzkTzAz9yfNaxa9wZ4A+6oeLWgrMb+3LirC2/NJ5r0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630306717; 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=BNq1ox8+rWVzst3iv6VIsSYBSdVmvqvfqZdAkCFh17E=; b=TaOSdEPybzTcLq2Ng19H/dURoZFu60N+BoZ28CkEDD0xikCgnmsDExiDd1ZfZlQfdWJA4EFpMiyjM62AYMtxw4OkCnProbG/wyRogMnIAAwyGD2swp+5Y8Cn3vTkdHPNvEj9t2O+2/I5LrJun/8Teypze++pCA1n0bh0ETwNKPM= 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 1630306717370803.3658438386093; Sun, 29 Aug 2021 23:58:37 -0700 (PDT) Received: from localhost ([::1]:35220 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKbFc-0005fD-Bz for importer@patchew.org; Mon, 30 Aug 2021 02:58:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47140) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKamP-0003Df-VS for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:28:27 -0400 Received: from mail-pl1-x632.google.com ([2607:f8b0:4864:20::632]:35348) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKamM-0001oA-7g for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:28:24 -0400 Received: by mail-pl1-x632.google.com with SMTP id x16so6285088pll.2 for ; Sun, 29 Aug 2021 23:28:21 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id o6sm13337072pjk.4.2021.08.29.23.28.20 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:28:20 -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=BNq1ox8+rWVzst3iv6VIsSYBSdVmvqvfqZdAkCFh17E=; b=zOKEbGjcZUKdtyWroSTOS9W8p/2XCePlrJtl/bU48rkWcIM8BnBgKkqzNrVTDLfq15 WfJ/HyMJakhtjtNXTEfhLbA26T0amxvmbRWCQQaiDJL2IQprRaUR2mtGh/uJmRxjgjmr iEaPun2JjcY/BMHujwWNjVuULyo19EcUMSCPPmW4r3pdadbu1xiHxZRxHcb2Kq89WR2+ 1UV11LMij05OcvM2m5Tcd4E2YZkuC175j1RZ8AcltL9IKGAW+UkGk39G8ChwA6hSES5w c7L+tzOMbrzqfLPP66TliEeCzcenQDdgvDX50VuHdIsqRZPbyo10qiPS7jf/HC9htc6R fQCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=BNq1ox8+rWVzst3iv6VIsSYBSdVmvqvfqZdAkCFh17E=; b=OsmmSZAYUV6Fsoz0eTI4wR7WMpfA98TH681pyhZjdIvzajO2F1KEOcBxXFDRKeCiGv vIkOhihGKDfTFuf0X3Z+Eg4Bn6XdM9F8y+KSJfSkZBXiCRyKWNja46i8jwClc98jOz8a GggGNIc5A12uzjy22J1VPBjeMKk3W/8IKGO0q8DYeY0wjij+OYM/rQ74c50DoGwuSpiz zU9LNsCRszyJ9Bqnat2chCR852nZhI/5qoUodvW3kbuJFlNhXO3h0PfsQFBAWPiruraq o0b+It9bd9G4pfaIS2h7St16Gu09Ty4L9cNP8Q2ix1P8RA7IjlHLnLmwRIjU0PzjGPZL hfMA== X-Gm-Message-State: AOAM533F8aRsaFag9bfTBBaUbOoyuwZjGuPbQX7X44ouCHFF1sjfhkvK jUXOfYEjSUDFVtpLznlRDlIyOzHJ72mXUw== X-Google-Smtp-Source: ABdhPJyFEX92Xy9y47LysBUzIa/QZZaszkd9STkpWXxoI3SZeNZ8JKA++I6P7MLNx27tV/TjZPHiow== X-Received: by 2002:a17:90a:9511:: with SMTP id t17mr38092884pjo.194.1630304900843; Sun, 29 Aug 2021 23:28:20 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 43/48] tcg/optimize: Stop forcing z_mask to "garbage" for 32-bit values Date: Sun, 29 Aug 2021 23:24:46 -0700 Message-Id: <20210830062451.639572-44-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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::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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1630306719519100001 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 6feaf905e7..334639339b 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 Sun Apr 28 03:50:57 2024 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=1630306477; cv=none; d=zohomail.com; s=zohoarc; b=RJqHiIJ7snSPmH8S9trKe+mTaU9sHsRAd6nbEqu4pQRlPQu2o5cgNoXYmK4xprqQBJ4aLIHKHait4TumOe/rYlq7Fw7xDNLSQH7oA6zJj+AGarqj88fQq8EIyDulsKpQetT9HxIeMBekWNo9iqjzqwd9HFoxnMDlwiR1OmHF4H8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630306477; 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=+Wwyb2RZh0dTNoENwmNMl6IMhek0eIp3hILVu1PQ3hU=; b=TXXD/JRuLVINRR3Uy9mPzi//77FxctNVd3QY8YdDsKVieI+J0ZRICh5dsQMWskYMB32QM917UfWoQhEXk4BYi9P3i4mF4uO6gFc7HW9xQhoFXJXCVaCYGFGpcag0mWr8faJi7XOSgla4mxuUZUXs++DDY0604wNdrk81ziehPR8= 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 1630306477144262.13781311545665; Sun, 29 Aug 2021 23:54:37 -0700 (PDT) Received: from localhost ([::1]:53200 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKbBj-00075S-Tv for importer@patchew.org; Mon, 30 Aug 2021 02:54:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47176) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKamV-0003HI-Vd for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:28:32 -0400 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]:44731) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKamN-0001p6-At for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:28:29 -0400 Received: by mail-pj1-x1029.google.com with SMTP id j4-20020a17090a734400b0018f6dd1ec97so9246870pjs.3 for ; Sun, 29 Aug 2021 23:28:22 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id o6sm13337072pjk.4.2021.08.29.23.28.21 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:28: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=+Wwyb2RZh0dTNoENwmNMl6IMhek0eIp3hILVu1PQ3hU=; b=m5XqSt/waiejr0klOgkq1kj2sc1Dn2OSEt5PWRvggNnwaT3u1k+bFcZN1KN7w9hmvv FMI1sixGe+uqhLvqsze7DvoxQZsPKqe6UfUeoHHh/Bf0/Xt/P+AqzPKYsjHvyDMq5r1I 3jlIt5U1ifYVd2dFN5rCMYtr2OtvHWyzfHvkH6GTJ/EkdfPjECG2Vi7N0aSGYIlFRixh srH1BtlRGvwzGKYCv7K1ksIZNxKsm/32CLcEdZYfsRQvvMp6zZZ+MhasmkuZDnZi9/E7 B4YKCqG4sjn9NRXdl7CKcUA830AhjwqQ07Ytd5WMaj/elGCAByPqynygrBix1kWSL+83 nt0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+Wwyb2RZh0dTNoENwmNMl6IMhek0eIp3hILVu1PQ3hU=; b=VN9eV4KjcuXRuwmZwt4WqHZ+Z/KwIB0B6mjd/YG+Azdr82L5N6ZXmN6ZRb8bBfATCO jH4zQqxttGihXPPxt/4K8SjSZgPWIAQpppZ3CSl1TjcCNf31kSMDGoEpVkMfJ1bzjIWf YpizGG/XG68Q8C2IFF07duRB0k5J02rmxpc/cXBqIFmTUaO+hA6NiaV0wyA04+peYv17 iUZtOWZswM2uFwsSjHGGTq6i+NKc2jZ5ltuw9jOO9uDsMnXOqYeUOr3dvg5UTg/FB0WN JLXC2Gi1z7KYWMo32sbLFB77ho5FpITuO26JAb4dcceAIfI5YT7UBQ9aYHr/mkN4Zb4T TAoQ== X-Gm-Message-State: AOAM532ysDu3zc1lCDGQ2SsiDy+P65Q07DVLf9XanFjeAT0Lm0Wn7Tgz RTTGg/L5nPQu7U/kLtBtT7d3opOdef+qgA== X-Google-Smtp-Source: ABdhPJyiKhwTQVzv+pRESlSse1RD8yhxRsXKggV85toHPopyblMmkdAokftH6lgtg4trYJx3ycfSTQ== X-Received: by 2002:a17:902:c192:b0:138:e2f9:7210 with SMTP id d18-20020a170902c19200b00138e2f97210mr1758933pld.79.1630304901475; Sun, 29 Aug 2021 23:28:21 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 44/48] tcg/optimize: Optimize sign extensions Date: Sun, 29 Aug 2021 23:24:47 -0700 Message-Id: <20210830062451.639572-45-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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: 1630306478363100001 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 334639339b..9a752fbe29 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 (int32_t)s_mask; 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; } @@ -1566,8 +1619,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. */ @@ -1677,23 +1734,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 @@ -1770,14 +1835,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(); @@ -1840,9 +1917,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. @@ -1915,8 +1993,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 Sun Apr 28 03:50:57 2024 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=1630306298; cv=none; d=zohomail.com; s=zohoarc; b=cKh284ST/LYIcWMWir7rDAeesQlNiId3hdBHWfu0LdHUCSx2gnK9Wq9153aw7kR0A6LBPySXEWDUZLq02aQSlCuTbHmsN29zUOEaYm1VoXZkGAs43mGLKoBt9No8lFTpkzMMzUatYi5wrIONUUJOsvyIRBOv2bSpiee4BJnxnGc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630306298; 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=EU5QVxDJXidEi6LSQvrHayoUBWhjiHDNI1Ev0O1Ed3c=; b=UR5rHnuVE1u+ybaBOS+s/4uJ36FqQvNlU0/3C88nvmCFL7oMaDPrQEeP4AtV3H8fp++b1HhmspmpRipAYdBW2RqDESbjXf2Kqhe4TWbMT1YS9gDiFFmK+d5tAOUYCiyhgOO98uCnPRbJi+iWEoIDtgj3MxQGLB3VtEyryheFRs0= 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 1630306298351700.9892663371248; Sun, 29 Aug 2021 23:51:38 -0700 (PDT) Received: from localhost ([::1]:44628 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKb8r-0001RW-5j for importer@patchew.org; Mon, 30 Aug 2021 02:51:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47144) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKamQ-0003Dh-0E for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:28:27 -0400 Received: from mail-pj1-x1033.google.com ([2607:f8b0:4864:20::1033]:38590) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKamN-0001pU-RJ for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:28:25 -0400 Received: by mail-pj1-x1033.google.com with SMTP id g13-20020a17090a3c8d00b00196286963b9so6122987pjc.3 for ; Sun, 29 Aug 2021 23:28:22 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id o6sm13337072pjk.4.2021.08.29.23.28.21 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:28: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=EU5QVxDJXidEi6LSQvrHayoUBWhjiHDNI1Ev0O1Ed3c=; b=a9UaUErIfpGlafHnOweUAAASzX4I4KY1EKsEY+exZoustWWC5AbFYtCF8riBk8yRtf RaWrYDo3+I48pffNfREIHJh46JH98JtEaMOxv95905CSXVkUGt5RGyUat/Bx46BK2XdJ FGKpyLvV51iqiMzOkS4M68cfOCry0MB1UAlfjYt+Mpz82IHqDe9wt7UNEp41uUQJZyVy zBNJ1CY660vOl1xlCY9soqbwMYHYtyn5ZOou17VXT10XYP0639c00Qh+hbX1FjfR0xYV 8l/nG1sjrWtKylu0KkXtWy3Ig5/2ZVnjjyvr43MTs1KK72Ephr5av5PzQO3YtRmKykAx jBAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=EU5QVxDJXidEi6LSQvrHayoUBWhjiHDNI1Ev0O1Ed3c=; b=M3oavTDUhGJvaE4sABHSFju6XqH49kckJ7ZU90nHyqHkyc1zRpgjNbrBgKe8B8leyA YLYamCzuJBjQwy3iQMOkG3pW+y74/Hgq6pATIdyjeTQBRHI37RrbZeeaFA/0LKX+3vvb rkt/8AU1QFVmhxiYCP/NLpKVwIz+krGuNoj/6QC50eZuOCwwtmDEbXdFl//JBu8qtZoU 7+Pn2yFBu71s324aXCzexV4SvXq3RN8bwmX1kMoqZUv60PKXtcxiQkZ6e9l3LBE1HG91 2zJbrn+eW0TBCGkCP5gay6+qjjMFKleej58hJ1VakootyWTsB2iC+NynT/ygGF5uYLu7 gHDQ== X-Gm-Message-State: AOAM531U17nTDbVBqXJB7yZAhVadIPdh5E+8TFCkXQQ5opvf4X/TgfWP LdRPAYCcwBox8mS4CqFmHLFTpVpTJLPxeQ== X-Google-Smtp-Source: ABdhPJzGZMIOsepc9FQeqwskxgss5rJvRMxaAZqVg2bPC7RNU+5SArd+Hk0VHLh6tvJatMppHt7OqA== X-Received: by 2002:a17:90a:4306:: with SMTP id q6mr36895113pjg.202.1630304901960; Sun, 29 Aug 2021 23:28:21 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 45/48] tcg/optimize: Propagate sign info for logical operations Date: Sun, 29 Aug 2021 23:24:48 -0700 Message-Id: <20210830062451.639572-46-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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: -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: 1630306299537100001 Content-Type: text/plain; charset="utf-8" Sign repetitions are perforce all identical, whether they are 1 or 0. Bitwise operations preserve the relative quantity of the repetitions. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- tcg/optimize.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/tcg/optimize.c b/tcg/optimize.c index 9a752fbe29..cbb5700f44 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 @@ -1466,6 +1478,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; @@ -1545,6 +1559,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 @@ -1574,6 +1591,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 @@ -1583,6 +1603,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; @@ -1598,6 +1620,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 @@ -1609,6 +1633,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 @@ -1873,6 +1900,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 Sun Apr 28 03:50:57 2024 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=1630307264; cv=none; d=zohomail.com; s=zohoarc; b=Y2IJSZ6uFfOt2I4VgayNdV7O2ppKW5iMyGpK5/403V1++/D4pgbv+1qGYaCFy4CfX7Fm2xW7rprrT/LeyQUCG30yXwN3zLbWpjrz2TmaSx8Isjb7ItK/OToyZL5hIQKvlH82fMErcWxK0ZaiC2o0cTpqx+BWvFNfkUlK0AMBZQ4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630307264; 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=rhqSCeqnPG7sF8R08a0zZ/mAbZa/eVctOehDgdTJw/w=; b=jCl2vx/gUxl1JYpDz3V67UYJY6dyJdnTrLP6IRn6IL0woi/kcqksIG1KRmO4n5fMpDekkI7HGTAEvqHWJm7cUlH7Ir0MT6Oip2nBsKkH6+emP4QsQ/VYada5DFNlkxbY15X1FliIeMcKzPKa9ln2QzEwC2oeTqVdoVMjt5Y+nYg= 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 1630307264435435.91591875311065; Mon, 30 Aug 2021 00:07:44 -0700 (PDT) Received: from localhost ([::1]:54886 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKbOR-0002OM-79 for importer@patchew.org; Mon, 30 Aug 2021 03:07:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47168) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKamS-0003Eo-2w for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:28:29 -0400 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]:33659) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKamN-0001q6-Ut for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:28:27 -0400 Received: by mail-pl1-x62e.google.com with SMTP id m4so7977163pll.0 for ; Sun, 29 Aug 2021 23:28:23 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id o6sm13337072pjk.4.2021.08.29.23.28.22 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:28: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=rhqSCeqnPG7sF8R08a0zZ/mAbZa/eVctOehDgdTJw/w=; b=RfS6pm5sFXTugoB+ps1lL1znZegqkMYi14jlIQZphtzPjMm1laO/ZYnQaoT2Y32mz+ EtKN56C6ZOT6bI5JpRoiD/pYn+2oLLpueVWwG8xihbaEPlsYXRzMS5UKAYyi1ggzubUH Nh27RK3ex1Twh5Ssvxp+zUpV5L4784xwy5x/MAfxaUgbNZZ3g/Fs1kKpMEefSPfN3TW8 96brYe1Ty2M9PvSb+7A1AzbcLGsfdZmcZw9HrIHgLCpbVPtbLEEPZUwRmw0iKVyE+lDm +EeRvEv6XY2jPMFWtCdl5oy1u/NNjtH4wgUYO5NocvbtLuHtjsBz4es3pExC/5H71ntM vnmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=rhqSCeqnPG7sF8R08a0zZ/mAbZa/eVctOehDgdTJw/w=; b=NgrZnGnuTLw0xURiVD7huzGzkCRr4Lth0HYNv5RmOVYyAuNZD4gM2Es2eOAJrzPjM9 1cP59LnndEyX2D9FAjDokwNj/Vg/KuDcfD8H72Fby2g5F2jILxnCFo2d/i9TMgrim11L arHO14wYnrzbUYj7r9x9XWpZbwZsGrN4s2iiuPPt2Xna6askn7L2AvtngRUNagsliJuy DKx16twooZoeC+w4o0UBQ9PhYjwhK1tiRNz/E5NPPbUv+75QRgcOSHFVmVbyqu4/hgXV haQKG9Nf+8dtFfgaAW+f8BVCIvDUAkCYBrWiwslpKy/tJ7nxD1aWqFBnp4xWaDPtM+3N +OKQ== X-Gm-Message-State: AOAM532dl8O38wZx2kenjBB9zT3jIP2iVNKuw9MjA1YFVT5xuyT8MTpG PB+Jkwyith1zM/+xoVOUNiriDKs/Bgtfsw== X-Google-Smtp-Source: ABdhPJxbt0zcTZQAijgU6ofhn5g33ZyKm57A3JabfEM+G/uHhZykJMpUMHTgeboSVLHJ/tOpUQKLRw== X-Received: by 2002:a17:902:9887:b0:138:d3ca:c36d with SMTP id s7-20020a170902988700b00138d3cac36dmr5054080plp.15.1630304902659; Sun, 29 Aug 2021 23:28:22 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 46/48] tcg/optimize: Propagate sign info for setcond Date: Sun, 29 Aug 2021 23:24:49 -0700 Message-Id: <20210830062451.639572-47-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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::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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1630307264996100001 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 cbb5700f44..788a5acf10 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -1681,6 +1681,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 @@ -1753,6 +1754,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 Sun Apr 28 03:50:57 2024 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=1630307432; cv=none; d=zohomail.com; s=zohoarc; b=Q4YvuOrpLPEOeUSWR4ccilAJEy+g5S10s/qgf2Wv/WIzOiiogzAx4W+2V5xTvcWvlGTFppRMgNJoId0Oz/K0FnCPRv9dPcIHWSoOkmcR/wz6+vBzSgcjLAfDpRmfxj3qaAxXIab2JLVGk3UrmKN0E0Cs4kEaoWPGdmM2XqrM8LM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630307432; 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=rvNuXyDgl561ih0UCNemc0yPl83Dln6iOUSP6pwicZo=; b=bSu9lIz2weP+FijoEhzsj6FeYIFQ9mClivzUp5M3JPqNyYglEwje6tF6kqwnKbnQqe1DT44f+TQEPrhpVCbujtTqlHNW1bKjBRu1HqMp02jhcrtI0lu105keSrMcC3cN/YVwj16vM5B4Zx/McouzayisRCs0EbfDffK7uk+pz2s= 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 1630307432304332.3035531085968; Mon, 30 Aug 2021 00:10:32 -0700 (PDT) Received: from localhost ([::1]:33450 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKbR9-0007E0-0y for importer@patchew.org; Mon, 30 Aug 2021 03:10:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47172) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKamT-0003Fe-Ud for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:28:29 -0400 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]:51787) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKamO-0001qT-Fz for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:28:28 -0400 Received: by mail-pj1-x1029.google.com with SMTP id oa17so8769727pjb.1 for ; Sun, 29 Aug 2021 23:28:24 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id o6sm13337072pjk.4.2021.08.29.23.28.22 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:28: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=rvNuXyDgl561ih0UCNemc0yPl83Dln6iOUSP6pwicZo=; b=NyFJ+B3q6VEeVb012HH2SkZhFgBclrgflDc+5s+SITCxjv2CFsuJ6uLkgi0tZFgIZn HoE5t5JOxFKFUxTI7SGiv/YjF3ZjSJM8cDDUvqwqyI0aq17FGwSmSanS2QHzqHo6s7NZ j0VvKACxThDa2UiCej3z+RViNxakybJPq0Mj4NeYOMF7AQhKUCJldukAer4+dycGQe7b y8dSnEc+R/8HyNav2ZA4t5VrNmRWpHxebCpLrpVf01toL4Wxb797QPU+pr9mY+O3Pi6n d8aGPGM6cCdfQTFI560RBnXgXpyr3aCRuYz3g2Ad4O0pgy2pQ+9qhnDO6ggSzD5fhYRZ rHmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=rvNuXyDgl561ih0UCNemc0yPl83Dln6iOUSP6pwicZo=; b=OO6nfuMHQRs7IIzJAsxqRiEyKz6DtkxVDhyk/S80bJv0Tslb1FcBhSkoLPCtiSr8Cr 1WX86yz7vtRZhZhADCnXQJctg2I1On9YgM2IByBW9F2nLQ9hOHbPWk5C8EbKVN7SmKwU d9L6xlgqoyR/EvZKYuMUHPOYsRcbsVZes53/sWqd+E3x+woWy22EMmW+ucsoey/Zb7C7 WOnEODudYVlRgKzQxqpzD2yrlazSI7pKgPsg3hQ1B7czM0bx68QP1haEDDpMhmvddGHv kmNqo4qMoga40bJCzRnKE9YpJLDmvHNSTe2ECxV7LtYmb23KN2kBrwf+UiaJsDz5gEOI wKVA== X-Gm-Message-State: AOAM533TGmv+sy5RUXAcX3c9LkRsoG3lhKaD11AZGUexq0z3mB6M3QW9 XBgvEoGb7C1eLihKWVx36zVEOz6+u+XxdA== X-Google-Smtp-Source: ABdhPJzzhuNdnAGWRRHmzvjQafB2ou3h1FOID+/y7C65PFACnPfSijwV+HBnZcpUIHlPYjwSTd6tkQ== X-Received: by 2002:a17:90a:6907:: with SMTP id r7mr7175283pjj.226.1630304903270; Sun, 29 Aug 2021 23:28:23 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 47/48] tcg/optimize: Propagate sign info for bit counting Date: Sun, 29 Aug 2021 23:24:50 -0700 Message-Id: <20210830062451.639572-48-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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: 1630307432796100005 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 788a5acf10..dad72b2ff5 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 Sun Apr 28 03:50:57 2024 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=1630307516; cv=none; d=zohomail.com; s=zohoarc; b=Mc5LhrEVHJVGyHfpIJya8n/xKwRyLCVNET3/O27MVVcb5F/aIQaecB0d/KH/s6edg+m6eysu11KeKntGTsYwq1XNxJbJEhQ4QcpJLMdg33mlLsukZklpDOXdZx83Pd7Sw/FuImI1NGACupGDbcKIIs+AkORPJ7MBnWGcW0e2YSY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1630307516; 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=p0it7vKYyHwg4t/yKbk7c6DB6PeidQgx1KIrVCB5r9Y=; b=EkODajQp/f0qH8+UOn9uXOFzFvzGZ65sIFdo+yeeVRKZf2/tAvcVxY65o0lwnaCO7mmwepCknfUqiQQasqZaIG93MgpFgUZun83Dfe++rl/3ih33ghFNj0D59o8tn77WpEx4pkDZT3thnpBKVwmgM0halzwKet7yewQbqRF1nDM= 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 16303075159983.182161343700045; Mon, 30 Aug 2021 00:11:55 -0700 (PDT) Received: from localhost ([::1]:37610 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKbSU-0001r2-Sn for importer@patchew.org; Mon, 30 Aug 2021 03:11:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47174) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKamT-0003Ft-Vg for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:28:29 -0400 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]:37688) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mKamP-0001qi-F3 for qemu-devel@nongnu.org; Mon, 30 Aug 2021 02:28:29 -0400 Received: by mail-pj1-x1036.google.com with SMTP id j10-20020a17090a94ca00b00181f17b7ef7so13107992pjw.2 for ; Sun, 29 Aug 2021 23:28:24 -0700 (PDT) Received: from localhost.localdomain (174-21-72-39.tukw.qwest.net. [174.21.72.39]) by smtp.gmail.com with ESMTPSA id o6sm13337072pjk.4.2021.08.29.23.28.23 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Aug 2021 23:28: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=p0it7vKYyHwg4t/yKbk7c6DB6PeidQgx1KIrVCB5r9Y=; b=KxZ0aXerzz1E7sUSGWyJWFZAueqzNzv3S6d6M6Estk2BFm0sx8L0GdFtySApbkYlQr TYE7Y5VFzqqkEGusHKwJk1Lbp4WLGKYqnQjZlf8svgvLJ7BDsNLmm7GB0lHAmUjVBot8 e1m9g49lRAqNHRR5NBridl0ozPs8pGxgR9Am58xsQ5ZHrhpGgp5QLo6dK4Isv/1uuWbe DlbwboZhgTyaUxNNxBUlz7HmmgXjP3hl4Z3UpgnRQD6xaRM7188UEzOFenjDGVmoiIyk 5T7BpODQVWzR5zdvBzYmq+4gt2wAeGr/FrB2dtu0EQXX6TNmE6s2S+sqWSa+oWw094z6 Hc8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=p0it7vKYyHwg4t/yKbk7c6DB6PeidQgx1KIrVCB5r9Y=; b=LAleLGu5GFkdiy4hsmgdiDYHv4EPMBD+fl1IyZ6X/JD6l/bHKT9PPYAOwFS6omt3tn Nl+kYPFh3fQZUYYRHv0yAllv7TvTA+g25Cy9erS05XchEWCT2K97uW6+JwZYJZ2lZtkT OmWAtFL7mi9XUB1romiHaSoldh1NeTcTI/eXODFvJZzJ3cGZB1aC0aF8mDmo8ZNidQp3 xIAWhnX5OaqpHFSnLOvo1BGzzsVSX7mgHJFoyfkSf+MFQam49qFcxs3hxvFgFuYCyRze iTL6M6HClkwNu9fGWNUSwwCFstcs2ltLxKEp3RKfucamsdrNyy5FdyXrMYHxDtD+Rxzm DNNQ== X-Gm-Message-State: AOAM532dIX8lkoGg1sKkCZ8bj3zTEixZ4Koip7+Q9bdUZzbAndqACUNY gdvVb2KLON4NlX3yw35ZrrszGfEsyBvY5w== X-Google-Smtp-Source: ABdhPJzdu0Sscl7g/Ft6Kt+IbtNPn+CKVYCZ7/NxnjYcauMtU1scjwHPnMlXvNhTanwIDbfsXwKGFg== X-Received: by 2002:a17:90a:bc49:: with SMTP id t9mr24852789pjv.48.1630304903915; Sun, 29 Aug 2021 23:28:23 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 48/48] tcg/optimize: Propagate sign info for shifting Date: Sun, 29 Aug 2021 23:24:51 -0700 Message-Id: <20210830062451.639572-49-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210830062451.639572-1-richard.henderson@linaro.org> References: <20210830062451.639572-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::1036; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1036.google.com X-Spam_score_int: -1 X-Spam_score: -0.2 X-Spam_bar: / X-Spam_report: (-0.2 / 5.0 requ) DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: 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: 1630307516733100005 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 dad72b2ff5..db3661c975 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; @@ -1795,18 +1807,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