From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635289964654202.41342395046752; Tue, 26 Oct 2021 16:12:44 -0700 (PDT) Received: from localhost ([::1]:56168 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVcZ-0005je-A8 for importer@patchew.org; Tue, 26 Oct 2021 19:12:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52692) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVZl-0002hk-Sq for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:09:49 -0400 Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]:54806) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVZj-0001u6-Qv for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:09:49 -0400 Received: by mail-pj1-x102c.google.com with SMTP id np13so613645pjb.4 for ; Tue, 26 Oct 2021 16:09:47 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.09.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:09:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=bT4qv4vEHBY6BlW0dUJLyD6oXjbPcXHkc7wIjavuU8I=; b=xXZtpuGJLptPyRCVhgnBaLY6YAOi55k5ougx3ANc0X2Kw5Zse6PmCzZLa62NZFZz9j 8kmGvCdgiWKz0Nc4xLNP7i2fOhgZ1rjRHQT2l0uEl5UZSnug+mFlfwoLpppneHW8/0R5 +yq82wi8TDPuvMLJH4qX8DpqSxsjLepN5RQN1cQrpa4VzKVQDxjUWHeDOo6uhJ1nD7mh ILxdKhHvIe+SvcKJrVh4KXrGOnhMzunyZrfEkWboXMPYoEwY5nnIxj9Wh6X9aBAeybNE JLfWHYtE1QHtkvjwQz8SmNHJ4q5ePU1rEPf5t/Y/2OTOdormdL9a/Ib+6Fu632MEgFTQ ru8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=bT4qv4vEHBY6BlW0dUJLyD6oXjbPcXHkc7wIjavuU8I=; b=PumJGeSequ6U8W0M4VHoKv8NgV8WrkKmWkTrsMNSF0n3z9H+GvD1UdFiWEXJci5aUk h96pdrtR8vPdyDbb6Bwwh3ZUZhly+iKpH7Gia3kJhGMfZ7KP5JU3zkI38ZZucCMO6uOP A8ps83wrS1766xnL3vOVlJGVvWpilwPAqT56A0eRawUqe3WEgGtNaH7np3fR8FHJmdZE k9ND+vVnLZPYFzwc8FveB74ggJFccgX+EzUQx3dEv3d6ipSDRFjFRbDf4thx/ZilQC/J FWObGCk1VnUKHOcbN16L8RqUcaAHyl1CHSs9ZiBsreRLEHwvnv0T4q7LvIMp0K8jWprU ewvw== X-Gm-Message-State: AOAM5307bEOuzs7yKgUJ0+N2/1gcqLqUKY5q2+2qzd7lyOlRXt8oJPl7 CQRLZ3nipBI1rE5V5JdfFdMa9R87vAApBw== X-Google-Smtp-Source: ABdhPJyYufFBAjhtqyPVGVjGL0I78kLosWUA0I3CizhmEZ+FlJBJBR7Jd/kLZfOTHyOwKLVamXenvg== X-Received: by 2002:a17:902:7001:b0:13d:d5b7:d06e with SMTP id y1-20020a170902700100b0013dd5b7d06emr25014406plk.61.1635289786157; Tue, 26 Oct 2021 16:09:46 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 01/51] tcg/optimize: Rename "mask" to "z_mask" Date: Tue, 26 Oct 2021 16:08:53 -0700 Message-Id: <20211026230943.1225890-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102c; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635290868295100001 Prepare for tracking different masks by renaming this one. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Luis Pires Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- tcg/optimize.c | 142 +++++++++++++++++++++++++------------------------ 1 file changed, 72 insertions(+), 70 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index c239c3bd07..148e360fc6 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -41,7 +41,7 @@ typedef struct TempOptInfo { TCGTemp *prev_copy; TCGTemp *next_copy; uint64_t val; - uint64_t mask; + uint64_t z_mask; /* mask bit is 0 if and only if value bit is 0 */ } TempOptInfo; =20 static inline TempOptInfo *ts_info(TCGTemp *ts) @@ -81,7 +81,7 @@ static void reset_ts(TCGTemp *ts) ti->next_copy =3D ts; ti->prev_copy =3D ts; ti->is_const =3D false; - ti->mask =3D -1; + ti->z_mask =3D -1; } =20 static void reset_temp(TCGArg arg) @@ -111,14 +111,14 @@ static void init_ts_info(TCGTempSet *temps_used, TCGT= emp *ts) if (ts->kind =3D=3D TEMP_CONST) { ti->is_const =3D true; ti->val =3D ts->val; - ti->mask =3D ts->val; + ti->z_mask =3D ts->val; if (TCG_TARGET_REG_BITS > 32 && ts->type =3D=3D TCG_TYPE_I32) { /* High bits of a 32-bit quantity are garbage. */ - ti->mask |=3D ~0xffffffffull; + ti->z_mask |=3D ~0xffffffffull; } } else { ti->is_const =3D false; - ti->mask =3D -1; + ti->z_mask =3D -1; } } =20 @@ -186,7 +186,7 @@ static void tcg_opt_gen_mov(TCGContext *s, TCGOp *op, T= CGArg dst, TCGArg src) const TCGOpDef *def; TempOptInfo *di; TempOptInfo *si; - uint64_t mask; + uint64_t z_mask; TCGOpcode new_op; =20 if (ts_are_copies(dst_ts, src_ts)) { @@ -210,12 +210,12 @@ static void tcg_opt_gen_mov(TCGContext *s, TCGOp *op,= TCGArg dst, TCGArg src) op->args[0] =3D dst; op->args[1] =3D src; =20 - mask =3D si->mask; + z_mask =3D si->z_mask; if (TCG_TARGET_REG_BITS > 32 && new_op =3D=3D INDEX_op_mov_i32) { /* High bits of the destination are now garbage. */ - mask |=3D ~0xffffffffull; + z_mask |=3D ~0xffffffffull; } - di->mask =3D mask; + di->z_mask =3D z_mask; =20 if (src_ts->type =3D=3D dst_ts->type) { TempOptInfo *ni =3D ts_info(si->next_copy); @@ -621,7 +621,7 @@ void tcg_optimize(TCGContext *s) } =20 QTAILQ_FOREACH_SAFE(op, &s->ops, link, op_next) { - uint64_t mask, partmask, affected, tmp; + uint64_t z_mask, partmask, affected, tmp; int nb_oargs, nb_iargs; TCGOpcode opc =3D op->opc; const TCGOpDef *def =3D &tcg_op_defs[opc]; @@ -855,170 +855,172 @@ void tcg_optimize(TCGContext *s) =20 /* Simplify using known-zero bits. Currently only ops with a single output argument is supported. */ - mask =3D -1; + z_mask =3D -1; affected =3D -1; switch (opc) { CASE_OP_32_64(ext8s): - if ((arg_info(op->args[1])->mask & 0x80) !=3D 0) { + if ((arg_info(op->args[1])->z_mask & 0x80) !=3D 0) { break; } QEMU_FALLTHROUGH; CASE_OP_32_64(ext8u): - mask =3D 0xff; + z_mask =3D 0xff; goto and_const; CASE_OP_32_64(ext16s): - if ((arg_info(op->args[1])->mask & 0x8000) !=3D 0) { + if ((arg_info(op->args[1])->z_mask & 0x8000) !=3D 0) { break; } QEMU_FALLTHROUGH; CASE_OP_32_64(ext16u): - mask =3D 0xffff; + z_mask =3D 0xffff; goto and_const; case INDEX_op_ext32s_i64: - if ((arg_info(op->args[1])->mask & 0x80000000) !=3D 0) { + if ((arg_info(op->args[1])->z_mask & 0x80000000) !=3D 0) { break; } QEMU_FALLTHROUGH; case INDEX_op_ext32u_i64: - mask =3D 0xffffffffU; + z_mask =3D 0xffffffffU; goto and_const; =20 CASE_OP_32_64(and): - mask =3D arg_info(op->args[2])->mask; + z_mask =3D arg_info(op->args[2])->z_mask; if (arg_is_const(op->args[2])) { and_const: - affected =3D arg_info(op->args[1])->mask & ~mask; + affected =3D arg_info(op->args[1])->z_mask & ~z_mask; } - mask =3D arg_info(op->args[1])->mask & mask; + z_mask =3D arg_info(op->args[1])->z_mask & z_mask; break; =20 case INDEX_op_ext_i32_i64: - if ((arg_info(op->args[1])->mask & 0x80000000) !=3D 0) { + if ((arg_info(op->args[1])->z_mask & 0x80000000) !=3D 0) { break; } QEMU_FALLTHROUGH; case INDEX_op_extu_i32_i64: /* We do not compute affected as it is a size changing op. */ - mask =3D (uint32_t)arg_info(op->args[1])->mask; + z_mask =3D (uint32_t)arg_info(op->args[1])->z_mask; break; =20 CASE_OP_32_64(andc): /* Known-zeros does not imply known-ones. Therefore unless op->args[2] is constant, we can't infer anything from it. = */ if (arg_is_const(op->args[2])) { - mask =3D ~arg_info(op->args[2])->mask; + z_mask =3D ~arg_info(op->args[2])->z_mask; goto and_const; } /* But we certainly know nothing outside args[1] may be set. */ - mask =3D arg_info(op->args[1])->mask; + z_mask =3D arg_info(op->args[1])->z_mask; break; =20 case INDEX_op_sar_i32: if (arg_is_const(op->args[2])) { tmp =3D arg_info(op->args[2])->val & 31; - mask =3D (int32_t)arg_info(op->args[1])->mask >> tmp; + z_mask =3D (int32_t)arg_info(op->args[1])->z_mask >> tmp; } break; case INDEX_op_sar_i64: if (arg_is_const(op->args[2])) { tmp =3D arg_info(op->args[2])->val & 63; - mask =3D (int64_t)arg_info(op->args[1])->mask >> tmp; + z_mask =3D (int64_t)arg_info(op->args[1])->z_mask >> tmp; } break; =20 case INDEX_op_shr_i32: if (arg_is_const(op->args[2])) { tmp =3D arg_info(op->args[2])->val & 31; - mask =3D (uint32_t)arg_info(op->args[1])->mask >> tmp; + z_mask =3D (uint32_t)arg_info(op->args[1])->z_mask >> tmp; } break; case INDEX_op_shr_i64: if (arg_is_const(op->args[2])) { tmp =3D arg_info(op->args[2])->val & 63; - mask =3D (uint64_t)arg_info(op->args[1])->mask >> tmp; + z_mask =3D (uint64_t)arg_info(op->args[1])->z_mask >> tmp; } break; =20 case INDEX_op_extrl_i64_i32: - mask =3D (uint32_t)arg_info(op->args[1])->mask; + z_mask =3D (uint32_t)arg_info(op->args[1])->z_mask; break; case INDEX_op_extrh_i64_i32: - mask =3D (uint64_t)arg_info(op->args[1])->mask >> 32; + z_mask =3D (uint64_t)arg_info(op->args[1])->z_mask >> 32; break; =20 CASE_OP_32_64(shl): if (arg_is_const(op->args[2])) { tmp =3D arg_info(op->args[2])->val & (TCG_TARGET_REG_BITS = - 1); - mask =3D arg_info(op->args[1])->mask << tmp; + z_mask =3D arg_info(op->args[1])->z_mask << tmp; } break; =20 CASE_OP_32_64(neg): /* Set to 1 all bits to the left of the rightmost. */ - mask =3D -(arg_info(op->args[1])->mask - & -arg_info(op->args[1])->mask); + z_mask =3D -(arg_info(op->args[1])->z_mask + & -arg_info(op->args[1])->z_mask); break; =20 CASE_OP_32_64(deposit): - mask =3D deposit64(arg_info(op->args[1])->mask, - op->args[3], op->args[4], - arg_info(op->args[2])->mask); + z_mask =3D deposit64(arg_info(op->args[1])->z_mask, + op->args[3], op->args[4], + arg_info(op->args[2])->z_mask); break; =20 CASE_OP_32_64(extract): - mask =3D extract64(arg_info(op->args[1])->mask, - op->args[2], op->args[3]); + z_mask =3D extract64(arg_info(op->args[1])->z_mask, + op->args[2], op->args[3]); if (op->args[2] =3D=3D 0) { - affected =3D arg_info(op->args[1])->mask & ~mask; + affected =3D arg_info(op->args[1])->z_mask & ~z_mask; } break; CASE_OP_32_64(sextract): - mask =3D sextract64(arg_info(op->args[1])->mask, - op->args[2], op->args[3]); - if (op->args[2] =3D=3D 0 && (tcg_target_long)mask >=3D 0) { - affected =3D arg_info(op->args[1])->mask & ~mask; + z_mask =3D sextract64(arg_info(op->args[1])->z_mask, + op->args[2], op->args[3]); + if (op->args[2] =3D=3D 0 && (tcg_target_long)z_mask >=3D 0) { + affected =3D arg_info(op->args[1])->z_mask & ~z_mask; } break; =20 CASE_OP_32_64(or): CASE_OP_32_64(xor): - mask =3D arg_info(op->args[1])->mask | arg_info(op->args[2])->= mask; + z_mask =3D arg_info(op->args[1])->z_mask + | arg_info(op->args[2])->z_mask; break; =20 case INDEX_op_clz_i32: case INDEX_op_ctz_i32: - mask =3D arg_info(op->args[2])->mask | 31; + z_mask =3D arg_info(op->args[2])->z_mask | 31; break; =20 case INDEX_op_clz_i64: case INDEX_op_ctz_i64: - mask =3D arg_info(op->args[2])->mask | 63; + z_mask =3D arg_info(op->args[2])->z_mask | 63; break; =20 case INDEX_op_ctpop_i32: - mask =3D 32 | 31; + z_mask =3D 32 | 31; break; case INDEX_op_ctpop_i64: - mask =3D 64 | 63; + z_mask =3D 64 | 63; break; =20 CASE_OP_32_64(setcond): case INDEX_op_setcond2_i32: - mask =3D 1; + z_mask =3D 1; break; =20 CASE_OP_32_64(movcond): - mask =3D arg_info(op->args[3])->mask | arg_info(op->args[4])->= mask; + z_mask =3D arg_info(op->args[3])->z_mask + | arg_info(op->args[4])->z_mask; break; =20 CASE_OP_32_64(ld8u): - mask =3D 0xff; + z_mask =3D 0xff; break; CASE_OP_32_64(ld16u): - mask =3D 0xffff; + z_mask =3D 0xffff; break; case INDEX_op_ld32u_i64: - mask =3D 0xffffffffu; + z_mask =3D 0xffffffffu; break; =20 CASE_OP_32_64(qemu_ld): @@ -1026,43 +1028,43 @@ void tcg_optimize(TCGContext *s) MemOpIdx oi =3D op->args[nb_oargs + nb_iargs]; MemOp mop =3D get_memop(oi); if (!(mop & MO_SIGN)) { - mask =3D (2ULL << ((8 << (mop & MO_SIZE)) - 1)) - 1; + z_mask =3D (2ULL << ((8 << (mop & MO_SIZE)) - 1)) - 1; } } break; =20 CASE_OP_32_64(bswap16): - mask =3D arg_info(op->args[1])->mask; - if (mask <=3D 0xffff) { + z_mask =3D arg_info(op->args[1])->z_mask; + if (z_mask <=3D 0xffff) { op->args[2] |=3D TCG_BSWAP_IZ; } - mask =3D bswap16(mask); + z_mask =3D bswap16(z_mask); switch (op->args[2] & (TCG_BSWAP_OZ | TCG_BSWAP_OS)) { case TCG_BSWAP_OZ: break; case TCG_BSWAP_OS: - mask =3D (int16_t)mask; + z_mask =3D (int16_t)z_mask; break; default: /* undefined high bits */ - mask |=3D MAKE_64BIT_MASK(16, 48); + z_mask |=3D MAKE_64BIT_MASK(16, 48); break; } break; =20 case INDEX_op_bswap32_i64: - mask =3D arg_info(op->args[1])->mask; - if (mask <=3D 0xffffffffu) { + z_mask =3D arg_info(op->args[1])->z_mask; + if (z_mask <=3D 0xffffffffu) { op->args[2] |=3D TCG_BSWAP_IZ; } - mask =3D bswap32(mask); + z_mask =3D bswap32(z_mask); switch (op->args[2] & (TCG_BSWAP_OZ | TCG_BSWAP_OS)) { case TCG_BSWAP_OZ: break; case TCG_BSWAP_OS: - mask =3D (int32_t)mask; + z_mask =3D (int32_t)z_mask; break; default: /* undefined high bits */ - mask |=3D MAKE_64BIT_MASK(32, 32); + z_mask |=3D MAKE_64BIT_MASK(32, 32); break; } break; @@ -1074,9 +1076,9 @@ void tcg_optimize(TCGContext *s) /* 32-bit ops generate 32-bit results. For the result is zero test below, we can ignore high bits, but for further optimizations we need to record that the high bits contain garbage. */ - partmask =3D mask; + partmask =3D z_mask; if (!(def->flags & TCG_OPF_64BIT)) { - mask |=3D ~(tcg_target_ulong)0xffffffffu; + z_mask |=3D ~(tcg_target_ulong)0xffffffffu; partmask &=3D 0xffffffffu; affected &=3D 0xffffffffu; } @@ -1472,7 +1474,7 @@ void tcg_optimize(TCGContext *s) vs the high word of the input. */ do_setcond_high: reset_temp(op->args[0]); - arg_info(op->args[0])->mask =3D 1; + arg_info(op->args[0])->z_mask =3D 1; op->opc =3D INDEX_op_setcond_i32; op->args[1] =3D op->args[2]; op->args[2] =3D op->args[4]; @@ -1498,7 +1500,7 @@ void tcg_optimize(TCGContext *s) } do_setcond_low: reset_temp(op->args[0]); - arg_info(op->args[0])->mask =3D 1; + arg_info(op->args[0])->z_mask =3D 1; op->opc =3D INDEX_op_setcond_i32; op->args[2] =3D op->args[3]; op->args[3] =3D op->args[5]; @@ -1543,7 +1545,7 @@ void tcg_optimize(TCGContext *s) /* Default case: we know nothing about operation (or were unab= le to compute the operation result) so no propagation is done. We trash everything if the operation is the end of a basic - block, otherwise we only trash the output args. "mask" is + block, otherwise we only trash the output args. "z_mask" is the non-zero bits mask for the first output arg. */ if (def->flags & TCG_OPF_BB_END) { memset(&temps_used, 0, sizeof(temps_used)); @@ -1554,7 +1556,7 @@ void tcg_optimize(TCGContext *s) /* Save the corresponding known-zero bits mask for the first output argument (only one supported so far). = */ if (i =3D=3D 0) { - arg_info(op->args[i])->mask =3D mask; + arg_info(op->args[i])->z_mask =3D z_mask; } } } --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635289964588482.0549007648207; Tue, 26 Oct 2021 16:12:44 -0700 (PDT) Received: from localhost ([::1]:56038 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVcZ-0005eQ-GA for importer@patchew.org; Tue, 26 Oct 2021 19:12:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52700) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVZm-0002iE-Fe for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:09:50 -0400 Received: from mail-pg1-x535.google.com ([2607:f8b0:4864:20::535]:40721) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVZk-0001uE-AY for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:09:50 -0400 Received: by mail-pg1-x535.google.com with SMTP id l186so1014164pge.7 for ; Tue, 26 Oct 2021 16:09:47 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.09.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:09:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=CCiW16Z93Q8GP5qo8+lTmLd72PtlWCvmdkPVOaTAXzA=; b=rzfM5aT+0mOgu6u2Y9R3mmT4GPdI3wH9hiAm24Mlk6c/JidFDDCUTyEQJqKUo8lDSt S7f2lZfsNnq12lXY9U/QuBWIDXdqgt2md4mTGhEST+pBZ6gwnsuS5XZJOQTUZukP0KMq g3ix34ivzgXDVZ5uz/j4HcJHC5pLLT+S7Tdo1TN76grxhiEK3JBnFBmhZj4TTklkOVvd olZeQfDkl5ngTXXFNlZFe1IHThlc559Pr5ZvvkaeCi7Hu7zfj3eMOS87oUrmW4AXTU5I l2yiEN8EhVlP1cVw19Ffxq7iQlTQ5c+s4fEGfPiWy/VktNiiL5yVKvm59vobg8SI+Zbg U61w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=CCiW16Z93Q8GP5qo8+lTmLd72PtlWCvmdkPVOaTAXzA=; b=LW1ykubsdIoN/nSSh/p1R+Czi49ALgnZhV/ChYsvZbQdfWBNBoNhfqR+89IFHKZMHj Kt69DUU4xueNYIFjyNUvTzu7pa6rRz0g0dFYUOwG9SRIGsLlqT/+dar0+RScKER1yrro dwKpXRQUX0QyrBgBnmifo3mv+/E18bcoGk+VvkAJFwZESv980pI6gSj4KZUByObV/BwV zGqvnnM+BZPlaNK5mS0aC5EOtgqXIVXpbiHCCIvbQJV+SEfAJySXZCMx5qPr+AFAH59i JOt+czpq6i7T2t5+hpw9F8w15s3txP3NpzLeIBY4zc6VQaRIbl65MwvXh5/jN4ZD8PDe hVAw== X-Gm-Message-State: AOAM530CSJzIGMiqXRsBQYLBjwcFD8ewMTughtT8XhP0Rv0mKFVLvGUp K2TO9UWOWlH4HfRPvS4RZC/i8MQXzrp16Q== X-Google-Smtp-Source: ABdhPJwws0xtakj5g/jbYzS9I3NjKxuvENNkkNrPN7fD3PzjHEWee2N3MTSjL0vDQp/przO4s1DKKg== X-Received: by 2002:a63:b203:: with SMTP id x3mr21467734pge.239.1635289786928; Tue, 26 Oct 2021 16:09:46 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 02/51] tcg/optimize: Split out OptContext Date: Tue, 26 Oct 2021 16:08:54 -0700 Message-Id: <20211026230943.1225890-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::535; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x535.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635289966113100003 Provide what will become a larger context for splitting the very large tcg_optimize function. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Luis Pires Reviewed-by: Philippe Mathieu-Daud=C3=A9 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 148e360fc6..b76991215e 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -44,6 +44,10 @@ typedef struct TempOptInfo { uint64_t z_mask; /* mask bit is 0 if and only if value bit is 0 */ } TempOptInfo; =20 +typedef struct OptContext { + TCGTempSet temps_used; +} OptContext; + static inline TempOptInfo *ts_info(TCGTemp *ts) { return ts->state_ptr; @@ -90,15 +94,15 @@ static void reset_temp(TCGArg arg) } =20 /* Initialize and activate a temporary. */ -static void init_ts_info(TCGTempSet *temps_used, TCGTemp *ts) +static void init_ts_info(OptContext *ctx, TCGTemp *ts) { size_t idx =3D temp_idx(ts); TempOptInfo *ti; =20 - if (test_bit(idx, temps_used->l)) { + if (test_bit(idx, ctx->temps_used.l)) { return; } - set_bit(idx, temps_used->l); + set_bit(idx, ctx->temps_used.l); =20 ti =3D ts->state_ptr; if (ti =3D=3D NULL) { @@ -122,9 +126,9 @@ static void init_ts_info(TCGTempSet *temps_used, TCGTem= p *ts) } } =20 -static void init_arg_info(TCGTempSet *temps_used, TCGArg arg) +static void init_arg_info(OptContext *ctx, TCGArg arg) { - init_ts_info(temps_used, arg_temp(arg)); + init_ts_info(ctx, arg_temp(arg)); } =20 static TCGTemp *find_better_copy(TCGContext *s, TCGTemp *ts) @@ -229,7 +233,7 @@ static void tcg_opt_gen_mov(TCGContext *s, TCGOp *op, T= CGArg dst, TCGArg src) } } =20 -static void tcg_opt_gen_movi(TCGContext *s, TCGTempSet *temps_used, +static void tcg_opt_gen_movi(TCGContext *s, OptContext *ctx, TCGOp *op, TCGArg dst, uint64_t val) { const TCGOpDef *def =3D &tcg_op_defs[op->opc]; @@ -246,7 +250,7 @@ static void tcg_opt_gen_movi(TCGContext *s, TCGTempSet = *temps_used, =20 /* Convert movi to mov with constant temp. */ tv =3D tcg_constant_internal(type, val); - init_ts_info(temps_used, tv); + init_ts_info(ctx, tv); tcg_opt_gen_mov(s, op, dst, temp_arg(tv)); } =20 @@ -605,7 +609,7 @@ void tcg_optimize(TCGContext *s) { int nb_temps, nb_globals, i; TCGOp *op, *op_next, *prev_mb =3D NULL; - TCGTempSet temps_used; + OptContext ctx =3D {}; =20 /* Array VALS has an element for each temp. If this temp holds a constant then its value is kept in VALS' eleme= nt. @@ -615,7 +619,6 @@ void tcg_optimize(TCGContext *s) nb_temps =3D s->nb_temps; nb_globals =3D s->nb_globals; =20 - memset(&temps_used, 0, sizeof(temps_used)); for (i =3D 0; i < nb_temps; ++i) { s->temps[i].state_ptr =3D NULL; } @@ -634,14 +637,14 @@ void tcg_optimize(TCGContext *s) for (i =3D 0; i < nb_oargs + nb_iargs; i++) { TCGTemp *ts =3D arg_temp(op->args[i]); if (ts) { - init_ts_info(&temps_used, ts); + init_ts_info(&ctx, ts); } } } else { nb_oargs =3D def->nb_oargs; nb_iargs =3D def->nb_iargs; for (i =3D 0; i < nb_oargs + nb_iargs; i++) { - init_arg_info(&temps_used, op->args[i]); + init_arg_info(&ctx, op->args[i]); } } =20 @@ -720,7 +723,7 @@ void tcg_optimize(TCGContext *s) CASE_OP_32_64(rotr): if (arg_is_const(op->args[1]) && arg_info(op->args[1])->val =3D=3D 0) { - tcg_opt_gen_movi(s, &temps_used, op, op->args[0], 0); + tcg_opt_gen_movi(s, &ctx, op, op->args[0], 0); continue; } break; @@ -1085,7 +1088,7 @@ void tcg_optimize(TCGContext *s) =20 if (partmask =3D=3D 0) { tcg_debug_assert(nb_oargs =3D=3D 1); - tcg_opt_gen_movi(s, &temps_used, op, op->args[0], 0); + tcg_opt_gen_movi(s, &ctx, op, op->args[0], 0); continue; } if (affected =3D=3D 0) { @@ -1102,7 +1105,7 @@ void tcg_optimize(TCGContext *s) CASE_OP_32_64(mulsh): if (arg_is_const(op->args[2]) && arg_info(op->args[2])->val =3D=3D 0) { - tcg_opt_gen_movi(s, &temps_used, op, op->args[0], 0); + tcg_opt_gen_movi(s, &ctx, op, op->args[0], 0); continue; } break; @@ -1129,7 +1132,7 @@ void tcg_optimize(TCGContext *s) CASE_OP_32_64_VEC(sub): CASE_OP_32_64_VEC(xor): if (args_are_copies(op->args[1], op->args[2])) { - tcg_opt_gen_movi(s, &temps_used, op, op->args[0], 0); + tcg_opt_gen_movi(s, &ctx, op, op->args[0], 0); continue; } break; @@ -1149,7 +1152,7 @@ void tcg_optimize(TCGContext *s) if (arg_is_const(op->args[1])) { tmp =3D arg_info(op->args[1])->val; tmp =3D dup_const(TCGOP_VECE(op), tmp); - tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp); + tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); break; } goto do_default; @@ -1157,7 +1160,7 @@ void tcg_optimize(TCGContext *s) case INDEX_op_dup2_vec: assert(TCG_TARGET_REG_BITS =3D=3D 32); if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) { - tcg_opt_gen_movi(s, &temps_used, op, op->args[0], + tcg_opt_gen_movi(s, &ctx, op, op->args[0], deposit64(arg_info(op->args[1])->val, 32,= 32, arg_info(op->args[2])->val)); break; @@ -1183,7 +1186,7 @@ void tcg_optimize(TCGContext *s) case INDEX_op_extrh_i64_i32: if (arg_is_const(op->args[1])) { tmp =3D do_constant_folding(opc, arg_info(op->args[1])->va= l, 0); - tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp); + tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); break; } goto do_default; @@ -1194,7 +1197,7 @@ void tcg_optimize(TCGContext *s) if (arg_is_const(op->args[1])) { tmp =3D do_constant_folding(opc, arg_info(op->args[1])->va= l, op->args[2]); - tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp); + tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); break; } goto do_default; @@ -1224,7 +1227,7 @@ void tcg_optimize(TCGContext *s) if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) { tmp =3D do_constant_folding(opc, arg_info(op->args[1])->va= l, arg_info(op->args[2])->val); - tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp); + tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); break; } goto do_default; @@ -1235,7 +1238,7 @@ void tcg_optimize(TCGContext *s) TCGArg v =3D arg_info(op->args[1])->val; if (v !=3D 0) { tmp =3D do_constant_folding(opc, v, 0); - tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp); + tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); } else { tcg_opt_gen_mov(s, op, op->args[0], op->args[2]); } @@ -1248,7 +1251,7 @@ void tcg_optimize(TCGContext *s) tmp =3D deposit64(arg_info(op->args[1])->val, op->args[3], op->args[4], arg_info(op->args[2])->val); - tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp); + tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); break; } goto do_default; @@ -1257,7 +1260,7 @@ void tcg_optimize(TCGContext *s) if (arg_is_const(op->args[1])) { tmp =3D extract64(arg_info(op->args[1])->val, op->args[2], op->args[3]); - tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp); + tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); break; } goto do_default; @@ -1266,7 +1269,7 @@ void tcg_optimize(TCGContext *s) if (arg_is_const(op->args[1])) { tmp =3D sextract64(arg_info(op->args[1])->val, op->args[2], op->args[3]); - tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp); + tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); break; } goto do_default; @@ -1283,7 +1286,7 @@ void tcg_optimize(TCGContext *s) tmp =3D (int32_t)(((uint32_t)v1 >> shr) | ((uint32_t)v2 << (32 - shr))); } - tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp); + tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); break; } goto do_default; @@ -1292,7 +1295,7 @@ void tcg_optimize(TCGContext *s) tmp =3D do_constant_folding_cond(opc, op->args[1], op->args[2], op->args[3]); if (tmp !=3D 2) { - tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp); + tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); break; } goto do_default; @@ -1302,7 +1305,7 @@ void tcg_optimize(TCGContext *s) op->args[1], op->args[2]); if (tmp !=3D 2) { if (tmp) { - memset(&temps_used, 0, sizeof(temps_used)); + memset(&ctx.temps_used, 0, sizeof(ctx.temps_used)); op->opc =3D INDEX_op_br; op->args[0] =3D op->args[3]; } else { @@ -1358,8 +1361,8 @@ void tcg_optimize(TCGContext *s) =20 rl =3D op->args[0]; rh =3D op->args[1]; - tcg_opt_gen_movi(s, &temps_used, op, rl, (int32_t)a); - tcg_opt_gen_movi(s, &temps_used, op2, rh, (int32_t)(a >> 3= 2)); + tcg_opt_gen_movi(s, &ctx, op, rl, (int32_t)a); + tcg_opt_gen_movi(s, &ctx, op2, rh, (int32_t)(a >> 32)); break; } goto do_default; @@ -1374,8 +1377,8 @@ void tcg_optimize(TCGContext *s) =20 rl =3D op->args[0]; rh =3D op->args[1]; - tcg_opt_gen_movi(s, &temps_used, op, rl, (int32_t)r); - tcg_opt_gen_movi(s, &temps_used, op2, rh, (int32_t)(r >> 3= 2)); + tcg_opt_gen_movi(s, &ctx, op, rl, (int32_t)r); + tcg_opt_gen_movi(s, &ctx, op2, rh, (int32_t)(r >> 32)); break; } goto do_default; @@ -1386,7 +1389,7 @@ void tcg_optimize(TCGContext *s) if (tmp !=3D 2) { if (tmp) { do_brcond_true: - memset(&temps_used, 0, sizeof(temps_used)); + memset(&ctx.temps_used, 0, sizeof(ctx.temps_used)); op->opc =3D INDEX_op_br; op->args[0] =3D op->args[5]; } else { @@ -1402,7 +1405,7 @@ void tcg_optimize(TCGContext *s) /* Simplify LT/GE comparisons vs zero to a single compare vs the high word of the input. */ do_brcond_high: - memset(&temps_used, 0, sizeof(temps_used)); + memset(&ctx.temps_used, 0, sizeof(ctx.temps_used)); op->opc =3D INDEX_op_brcond_i32; op->args[0] =3D op->args[1]; op->args[1] =3D op->args[3]; @@ -1428,7 +1431,7 @@ void tcg_optimize(TCGContext *s) goto do_default; } do_brcond_low: - memset(&temps_used, 0, sizeof(temps_used)); + memset(&ctx.temps_used, 0, sizeof(ctx.temps_used)); op->opc =3D INDEX_op_brcond_i32; op->args[1] =3D op->args[2]; op->args[2] =3D op->args[4]; @@ -1463,7 +1466,7 @@ void tcg_optimize(TCGContext *s) op->args[5]); if (tmp !=3D 2) { do_setcond_const: - tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp); + tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); } else if ((op->args[5] =3D=3D TCG_COND_LT || op->args[5] =3D=3D TCG_COND_GE) && arg_is_const(op->args[3]) @@ -1533,7 +1536,7 @@ void tcg_optimize(TCGContext *s) if (!(tcg_call_flags(op) & (TCG_CALL_NO_READ_GLOBALS | TCG_CALL_NO_WRITE_GLOBALS)= )) { for (i =3D 0; i < nb_globals; i++) { - if (test_bit(i, temps_used.l)) { + if (test_bit(i, ctx.temps_used.l)) { reset_ts(&s->temps[i]); } } @@ -1548,7 +1551,7 @@ void tcg_optimize(TCGContext *s) block, otherwise we only trash the output args. "z_mask" is the non-zero bits mask for the first output arg. */ if (def->flags & TCG_OPF_BB_END) { - memset(&temps_used, 0, sizeof(temps_used)); + memset(&ctx.temps_used, 0, sizeof(ctx.temps_used)); } else { do_reset_output: for (i =3D 0; i < nb_oargs; i++) { --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635290095657513.9016921453425; Tue, 26 Oct 2021 16:14:55 -0700 (PDT) Received: from localhost ([::1]:36562 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVeg-00031O-JV for importer@patchew.org; Tue, 26 Oct 2021 19:14:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52726) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVZn-0002jz-KP for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:09:51 -0400 Received: from mail-pf1-x434.google.com ([2607:f8b0:4864:20::434]:36666) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVZl-0001uP-9P for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:09:51 -0400 Received: by mail-pf1-x434.google.com with SMTP id m26so914123pff.3 for ; Tue, 26 Oct 2021 16:09:48 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.09.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:09:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=X2dX8XufD4c6BIfBzmh+p1LKROS4+CqBx2GlunzFftM=; b=NEraYKZ9UlKoRjI2IM404Oy3R8FVn1VeYjXuQsmMqwej9IIFNxp0LGl+fxAGsW7trM wBm2xBvBvpsAG8Jiv15VfYXivFQoNmEVyHZ+jVNRxHsSErZj4bVtt9GCHjKFBA8jUwOQ Jd2iQNKp34DPXzIpaaz14OBWKQygI+hR5rb38VGzwqiYE3p8EpZrJZPfzU04pFcfXC8S iheab4M1Kk53h1SQ9qBzcFKggReOsW2Yy0dwHfKHJpmVZjUx1eXBRRJ5OjDmwcndZXM8 04lXOnvf74fJTc9pvUSCA+6UA15v80+D/yfg6AtYmeO9zzp4kDApM09ubhk5jJQashx2 vm0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=X2dX8XufD4c6BIfBzmh+p1LKROS4+CqBx2GlunzFftM=; b=qzEJ0pkuGOoHml2Hvl/UFd6/fy9wvtmdrIWnMd9trPdRcvJB8LZuFvuT+nRnRL82xv CdAka1c1qFDOeO081VX6ICR0rnleMNSZwkuFnGVOBkbZM+5OumQqi4qGnhcDEgsoKOz7 arOFCOlq3MBQHFoF99z33gSDNAPKLQ4voJCVHnwQl6C2AfVKWPas2d+3espXOYd6eQ9F k71sAwRjrs4fLl+ZjJf7NsPGqj+I/3Ho/+ldg9HFxaboJcP/keDr4OJJ8cxbI4JysXct MbGBgfMx5HwzsJztledyc6TURGTNNPPoeMmdUdP/a0lD+TRtiL7ooToMON7a2RezGXyh 8XlQ== X-Gm-Message-State: AOAM531DMK70DVOP+EIq88KRWT2pfEHi9UbqQ1N38m08KZrGyQDtQIbN ya8qhrGIOjks0tA9+24LDkaYoo2vvGlCuA== X-Google-Smtp-Source: ABdhPJxhzZm9XCIIzUVYAfHn8vo+g5UCB6eFJhVZ4mQP4p9DdVPOcfQtq8ufMgtj/WzedeUqRr4Nxw== X-Received: by 2002:a65:4d4b:: with SMTP id j11mr21262936pgt.27.1635289787850; Tue, 26 Oct 2021 16:09:47 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 03/51] tcg/optimize: Remove do_default label Date: Tue, 26 Oct 2021 16:08:55 -0700 Message-Id: <20211026230943.1225890-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::434; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x434.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635290096441100003 Break the final cleanup clause out of the main switch statement. When fully folding an opcode to mov/movi, use "continue" to process the next opcode, else break to fall into the final cleanup. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Luis Pires Reviewed-by: Philippe Mathieu-Daud=C3=A9 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 b76991215e..a37efff4d0 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -1146,16 +1146,16 @@ void tcg_optimize(TCGContext *s) switch (opc) { CASE_OP_32_64_VEC(mov): tcg_opt_gen_mov(s, op, op->args[0], op->args[1]); - break; + continue; =20 case INDEX_op_dup_vec: if (arg_is_const(op->args[1])) { tmp =3D arg_info(op->args[1])->val; tmp =3D dup_const(TCGOP_VECE(op), tmp); tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); - break; + continue; } - goto do_default; + break; =20 case INDEX_op_dup2_vec: assert(TCG_TARGET_REG_BITS =3D=3D 32); @@ -1163,13 +1163,13 @@ void tcg_optimize(TCGContext *s) tcg_opt_gen_movi(s, &ctx, op, op->args[0], deposit64(arg_info(op->args[1])->val, 32,= 32, arg_info(op->args[2])->val)); - break; + continue; } else if (args_are_copies(op->args[1], op->args[2])) { op->opc =3D INDEX_op_dup_vec; TCGOP_VECE(op) =3D MO_32; nb_iargs =3D 1; } - goto do_default; + break; =20 CASE_OP_32_64(not): CASE_OP_32_64(neg): @@ -1187,9 +1187,9 @@ void tcg_optimize(TCGContext *s) if (arg_is_const(op->args[1])) { tmp =3D do_constant_folding(opc, arg_info(op->args[1])->va= l, 0); tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); - break; + continue; } - goto do_default; + break; =20 CASE_OP_32_64(bswap16): CASE_OP_32_64(bswap32): @@ -1198,9 +1198,9 @@ void tcg_optimize(TCGContext *s) tmp =3D do_constant_folding(opc, arg_info(op->args[1])->va= l, op->args[2]); tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); - break; + continue; } - goto do_default; + break; =20 CASE_OP_32_64(add): CASE_OP_32_64(sub): @@ -1228,9 +1228,9 @@ void tcg_optimize(TCGContext *s) tmp =3D do_constant_folding(opc, arg_info(op->args[1])->va= l, arg_info(op->args[2])->val); tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); - break; + continue; } - goto do_default; + break; =20 CASE_OP_32_64(clz): CASE_OP_32_64(ctz): @@ -1242,9 +1242,9 @@ void tcg_optimize(TCGContext *s) } else { tcg_opt_gen_mov(s, op, op->args[0], op->args[2]); } - break; + continue; } - goto do_default; + break; =20 CASE_OP_32_64(deposit): if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) { @@ -1252,27 +1252,27 @@ void tcg_optimize(TCGContext *s) op->args[3], op->args[4], arg_info(op->args[2])->val); tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); - break; + continue; } - goto do_default; + break; =20 CASE_OP_32_64(extract): if (arg_is_const(op->args[1])) { tmp =3D extract64(arg_info(op->args[1])->val, op->args[2], op->args[3]); tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); - break; + continue; } - goto do_default; + break; =20 CASE_OP_32_64(sextract): if (arg_is_const(op->args[1])) { tmp =3D sextract64(arg_info(op->args[1])->val, op->args[2], op->args[3]); tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); - break; + continue; } - goto do_default; + break; =20 CASE_OP_32_64(extract2): if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) { @@ -1287,40 +1287,40 @@ void tcg_optimize(TCGContext *s) ((uint32_t)v2 << (32 - shr))); } tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); - break; + continue; } - goto do_default; + break; =20 CASE_OP_32_64(setcond): tmp =3D do_constant_folding_cond(opc, op->args[1], op->args[2], op->args[3]); if (tmp !=3D 2) { tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); - break; + continue; } - goto do_default; + break; =20 CASE_OP_32_64(brcond): tmp =3D do_constant_folding_cond(opc, op->args[0], op->args[1], op->args[2]); - if (tmp !=3D 2) { - if (tmp) { - memset(&ctx.temps_used, 0, sizeof(ctx.temps_used)); - op->opc =3D INDEX_op_br; - op->args[0] =3D op->args[3]; - } else { - tcg_op_remove(s, op); - } + switch (tmp) { + case 0: + tcg_op_remove(s, op); + continue; + case 1: + memset(&ctx.temps_used, 0, sizeof(ctx.temps_used)); + op->opc =3D opc =3D INDEX_op_br; + op->args[0] =3D op->args[3]; break; } - goto do_default; + break; =20 CASE_OP_32_64(movcond): tmp =3D do_constant_folding_cond(opc, op->args[1], op->args[2], op->args[5]); if (tmp !=3D 2) { tcg_opt_gen_mov(s, op, op->args[0], op->args[4-tmp]); - break; + continue; } if (arg_is_const(op->args[3]) && arg_is_const(op->args[4])) { uint64_t tv =3D arg_info(op->args[3])->val; @@ -1330,7 +1330,7 @@ void tcg_optimize(TCGContext *s) if (fv =3D=3D 1 && tv =3D=3D 0) { cond =3D tcg_invert_cond(cond); } else if (!(tv =3D=3D 1 && fv =3D=3D 0)) { - goto do_default; + break; } op->args[3] =3D cond; op->opc =3D opc =3D (opc =3D=3D INDEX_op_movcond_i32 @@ -1338,7 +1338,7 @@ void tcg_optimize(TCGContext *s) : INDEX_op_setcond_i64); nb_iargs =3D 2; } - goto do_default; + break; =20 case INDEX_op_add2_i32: case INDEX_op_sub2_i32: @@ -1363,9 +1363,9 @@ void tcg_optimize(TCGContext *s) rh =3D op->args[1]; tcg_opt_gen_movi(s, &ctx, op, rl, (int32_t)a); tcg_opt_gen_movi(s, &ctx, op2, rh, (int32_t)(a >> 32)); - break; + continue; } - goto do_default; + break; =20 case INDEX_op_mulu2_i32: if (arg_is_const(op->args[2]) && arg_is_const(op->args[3])) { @@ -1379,39 +1379,40 @@ void tcg_optimize(TCGContext *s) rh =3D op->args[1]; tcg_opt_gen_movi(s, &ctx, op, rl, (int32_t)r); tcg_opt_gen_movi(s, &ctx, op2, rh, (int32_t)(r >> 32)); - break; + continue; } - goto do_default; + break; =20 case INDEX_op_brcond2_i32: tmp =3D do_constant_folding_cond2(&op->args[0], &op->args[2], op->args[4]); - if (tmp !=3D 2) { - if (tmp) { - do_brcond_true: - memset(&ctx.temps_used, 0, sizeof(ctx.temps_used)); - op->opc =3D INDEX_op_br; - op->args[0] =3D op->args[5]; - } else { + if (tmp =3D=3D 0) { do_brcond_false: - tcg_op_remove(s, op); - } - } else if ((op->args[4] =3D=3D TCG_COND_LT - || op->args[4] =3D=3D TCG_COND_GE) - && arg_is_const(op->args[2]) - && arg_info(op->args[2])->val =3D=3D 0 - && arg_is_const(op->args[3]) - && arg_info(op->args[3])->val =3D=3D 0) { + tcg_op_remove(s, op); + continue; + } + if (tmp =3D=3D 1) { + do_brcond_true: + op->opc =3D opc =3D INDEX_op_br; + op->args[0] =3D op->args[5]; + break; + } + if ((op->args[4] =3D=3D TCG_COND_LT || op->args[4] =3D=3D TCG_= COND_GE) + && arg_is_const(op->args[2]) + && arg_info(op->args[2])->val =3D=3D 0 + && arg_is_const(op->args[3]) + && arg_info(op->args[3])->val =3D=3D 0) { /* Simplify LT/GE comparisons vs zero to a single compare vs the high word of the input. */ do_brcond_high: - memset(&ctx.temps_used, 0, sizeof(ctx.temps_used)); - op->opc =3D INDEX_op_brcond_i32; + op->opc =3D opc =3D INDEX_op_brcond_i32; op->args[0] =3D op->args[1]; op->args[1] =3D op->args[3]; op->args[2] =3D op->args[4]; op->args[3] =3D op->args[5]; - } else if (op->args[4] =3D=3D TCG_COND_EQ) { + break; + } + if (op->args[4] =3D=3D TCG_COND_EQ) { /* Simplify EQ comparisons where one of the pairs can be simplified. */ tmp =3D do_constant_folding_cond(INDEX_op_brcond_i32, @@ -1428,7 +1429,7 @@ void tcg_optimize(TCGContext *s) if (tmp =3D=3D 0) { goto do_brcond_false; } else if (tmp !=3D 1) { - goto do_default; + break; } do_brcond_low: memset(&ctx.temps_used, 0, sizeof(ctx.temps_used)); @@ -1436,7 +1437,9 @@ void tcg_optimize(TCGContext *s) op->args[1] =3D op->args[2]; op->args[2] =3D op->args[4]; op->args[3] =3D op->args[5]; - } else if (op->args[4] =3D=3D TCG_COND_NE) { + break; + } + if (op->args[4] =3D=3D TCG_COND_NE) { /* Simplify NE comparisons where one of the pairs can be simplified. */ tmp =3D do_constant_folding_cond(INDEX_op_brcond_i32, @@ -1455,9 +1458,6 @@ void tcg_optimize(TCGContext *s) } else if (tmp =3D=3D 1) { goto do_brcond_true; } - goto do_default; - } else { - goto do_default; } break; =20 @@ -1467,12 +1467,13 @@ void tcg_optimize(TCGContext *s) if (tmp !=3D 2) { do_setcond_const: tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); - } else if ((op->args[5] =3D=3D TCG_COND_LT - || op->args[5] =3D=3D TCG_COND_GE) - && arg_is_const(op->args[3]) - && arg_info(op->args[3])->val =3D=3D 0 - && arg_is_const(op->args[4]) - && arg_info(op->args[4])->val =3D=3D 0) { + continue; + } + if ((op->args[5] =3D=3D TCG_COND_LT || op->args[5] =3D=3D TCG_= COND_GE) + && arg_is_const(op->args[3]) + && arg_info(op->args[3])->val =3D=3D 0 + && arg_is_const(op->args[4]) + && arg_info(op->args[4])->val =3D=3D 0) { /* Simplify LT/GE comparisons vs zero to a single compare vs the high word of the input. */ do_setcond_high: @@ -1482,7 +1483,9 @@ void tcg_optimize(TCGContext *s) op->args[1] =3D op->args[2]; op->args[2] =3D op->args[4]; op->args[3] =3D op->args[5]; - } else if (op->args[5] =3D=3D TCG_COND_EQ) { + break; + } + if (op->args[5] =3D=3D TCG_COND_EQ) { /* Simplify EQ comparisons where one of the pairs can be simplified. */ tmp =3D do_constant_folding_cond(INDEX_op_setcond_i32, @@ -1499,7 +1502,7 @@ void tcg_optimize(TCGContext *s) if (tmp =3D=3D 0) { goto do_setcond_high; } else if (tmp !=3D 1) { - goto do_default; + break; } do_setcond_low: reset_temp(op->args[0]); @@ -1507,7 +1510,9 @@ void tcg_optimize(TCGContext *s) op->opc =3D INDEX_op_setcond_i32; op->args[2] =3D op->args[3]; op->args[3] =3D op->args[5]; - } else if (op->args[5] =3D=3D TCG_COND_NE) { + break; + } + if (op->args[5] =3D=3D TCG_COND_NE) { /* Simplify NE comparisons where one of the pairs can be simplified. */ tmp =3D do_constant_folding_cond(INDEX_op_setcond_i32, @@ -1526,14 +1531,21 @@ void tcg_optimize(TCGContext *s) } else if (tmp =3D=3D 1) { goto do_setcond_const; } - goto do_default; - } else { - goto do_default; } break; =20 - case INDEX_op_call: - if (!(tcg_call_flags(op) + default: + break; + } + + /* Some of the folding above can change opc. */ + opc =3D op->opc; + def =3D &tcg_op_defs[opc]; + if (def->flags & TCG_OPF_BB_END) { + memset(&ctx.temps_used, 0, sizeof(ctx.temps_used)); + } else { + if (opc =3D=3D INDEX_op_call && + !(tcg_call_flags(op) & (TCG_CALL_NO_READ_GLOBALS | TCG_CALL_NO_WRITE_GLOBALS)= )) { for (i =3D 0; i < nb_globals; i++) { if (test_bit(i, ctx.temps_used.l)) { @@ -1541,29 +1553,15 @@ void tcg_optimize(TCGContext *s) } } } - goto do_reset_output; =20 - default: - do_default: - /* Default case: we know nothing about operation (or were unab= le - to compute the operation result) so no propagation is done. - We trash everything if the operation is the end of a basic - block, otherwise we only trash the output args. "z_mask" is - the non-zero bits mask for the first output arg. */ - if (def->flags & TCG_OPF_BB_END) { - memset(&ctx.temps_used, 0, sizeof(ctx.temps_used)); - } else { - do_reset_output: - for (i =3D 0; i < nb_oargs; i++) { - reset_temp(op->args[i]); - /* Save the corresponding known-zero bits mask for the - first output argument (only one supported so far). = */ - if (i =3D=3D 0) { - arg_info(op->args[i])->z_mask =3D z_mask; - } + for (i =3D 0; i < nb_oargs; i++) { + reset_temp(op->args[i]); + /* Save the corresponding known-zero bits mask for the + first output argument (only one supported so far). */ + if (i =3D=3D 0) { + arg_info(op->args[i])->z_mask =3D z_mask; } } - break; } =20 /* Eliminate duplicate and redundant fence instructions. */ --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635290306232923.7540338703607; Tue, 26 Oct 2021 16:18:26 -0700 (PDT) Received: from localhost ([::1]:45426 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVi5-0000f9-2G for importer@patchew.org; Tue, 26 Oct 2021 19:18:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52742) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVZo-0002lT-C2 for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:09:52 -0400 Received: from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035]:45701) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVZl-0001uW-Uh for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:09:52 -0400 Received: by mail-pj1-x1035.google.com with SMTP id ls14-20020a17090b350e00b001a00e2251c8so638714pjb.4 for ; Tue, 26 Oct 2021 16:09:49 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.09.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:09:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=5/xA01W4KeTA9PL1ecjuRsphIv0Hw/RH1bb0Ef8kKFU=; b=gayqYtzp6zKsP3U6IO4GT4JoARp6qnGtQeKNADVNluSw1NvnoULlvqfY28t/Ovg7pm tg2riaq65JZtdk4WltEYRz64H3WWnT8NBIpYhgRU3Gl3KRwg6XZh6qafT9KgVgNDeoqC M5j6NpAqli/bdqkNlH0ZZUCM9ANpSGsI/6EBwkHdpSYSW3r7wrgURu1YVun4u9mVhR+o ulYMni6xxtmbwGSpCqQHFUMKA4fuUCLOcUbtNvyeDEH7ZqcLm1rdD5J9fqvswsZD4Kuv wPzgVFyLeik5inhO7v+os49JMA3GqynH1Cj+kf+PEwAtvaGnjSl21KlJ+Ucn0Xjy/ahR UkMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=5/xA01W4KeTA9PL1ecjuRsphIv0Hw/RH1bb0Ef8kKFU=; b=AoM9wWj2RnS/+Xmv7iky26qs2UJPQKxJqC3RptkyY7YfXZ94h6kBXnZLbzLS/wO0hQ W297BoxspDht58pwJd4E2FhTy5WdPedeOos0d2Jsuc6MUW0C5Io5LJRV8RFeooKDdMDp XEA+IsZwiua22JuoE3a2Uet697jzxGZt0ykXc+5ZJ9JvLVBeMNCqKp9hK7xtzH1yrqAH i57mRLPv/ClmGTDNQFqopj2bOUqGp8sjs5L/kjJHS6AERHoi8rNPw5yDq2F5N25mdum9 7KE6Ga6e/M2R9cKONDPzuTm9rAxgJFfQEntKxeIUo48kARrTCrgbLGnrmZHaosPFq1GC Ms3g== X-Gm-Message-State: AOAM530c70euOR5LLxTfFynWsPH2HzQ5LvTFBAAhBDe6QB8JmCnnCIKq P6uB9kV8YlhnSmRUQsHnfRUUkKOgGPt+4Q== X-Google-Smtp-Source: ABdhPJz3VqPlYd+wJsKhe5I8Cx6zgWLYNz9JjMIJ8R6a6XuxEAQm7EO1FjWjztMZSDRBCepVr/yAPQ== X-Received: by 2002:a17:90a:62c9:: with SMTP id k9mr1911618pjs.52.1635289788602; Tue, 26 Oct 2021 16:09:48 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 04/51] tcg/optimize: Change tcg_opt_gen_{mov, movi} interface Date: Tue, 26 Oct 2021 16:08:56 -0700 Message-Id: <20211026230943.1225890-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1035; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1035.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635290307217100001 Adjust the interface to take the OptContext parameter instead of TCGContext or both. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Luis Pires 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 a37efff4d0..627a5b39f6 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -45,6 +45,7 @@ typedef struct TempOptInfo { } TempOptInfo; =20 typedef struct OptContext { + TCGContext *tcg; TCGTempSet temps_used; } OptContext; =20 @@ -183,7 +184,7 @@ static bool args_are_copies(TCGArg arg1, TCGArg arg2) return ts_are_copies(arg_temp(arg1), arg_temp(arg2)); } =20 -static void tcg_opt_gen_mov(TCGContext *s, TCGOp *op, TCGArg dst, TCGArg s= rc) +static void tcg_opt_gen_mov(OptContext *ctx, TCGOp *op, TCGArg dst, TCGArg= src) { TCGTemp *dst_ts =3D arg_temp(dst); TCGTemp *src_ts =3D arg_temp(src); @@ -194,7 +195,7 @@ static void tcg_opt_gen_mov(TCGContext *s, TCGOp *op, T= CGArg dst, TCGArg src) TCGOpcode new_op; =20 if (ts_are_copies(dst_ts, src_ts)) { - tcg_op_remove(s, op); + tcg_op_remove(ctx->tcg, op); return; } =20 @@ -233,8 +234,8 @@ static void tcg_opt_gen_mov(TCGContext *s, TCGOp *op, T= CGArg dst, TCGArg src) } } =20 -static void tcg_opt_gen_movi(TCGContext *s, OptContext *ctx, - TCGOp *op, TCGArg dst, uint64_t val) +static void tcg_opt_gen_movi(OptContext *ctx, TCGOp *op, + TCGArg dst, uint64_t val) { const TCGOpDef *def =3D &tcg_op_defs[op->opc]; TCGType type; @@ -251,7 +252,7 @@ static void tcg_opt_gen_movi(TCGContext *s, OptContext = *ctx, /* Convert movi to mov with constant temp. */ tv =3D tcg_constant_internal(type, val); init_ts_info(ctx, tv); - tcg_opt_gen_mov(s, op, dst, temp_arg(tv)); + tcg_opt_gen_mov(ctx, op, dst, temp_arg(tv)); } =20 static uint64_t do_constant_folding_2(TCGOpcode op, uint64_t x, uint64_t y) @@ -609,7 +610,7 @@ void tcg_optimize(TCGContext *s) { int nb_temps, nb_globals, i; TCGOp *op, *op_next, *prev_mb =3D NULL; - OptContext ctx =3D {}; + OptContext ctx =3D { .tcg =3D s }; =20 /* Array VALS has an element for each temp. If this temp holds a constant then its value is kept in VALS' eleme= nt. @@ -723,7 +724,7 @@ void tcg_optimize(TCGContext *s) CASE_OP_32_64(rotr): if (arg_is_const(op->args[1]) && arg_info(op->args[1])->val =3D=3D 0) { - tcg_opt_gen_movi(s, &ctx, op, op->args[0], 0); + tcg_opt_gen_movi(&ctx, op, op->args[0], 0); continue; } break; @@ -838,7 +839,7 @@ void tcg_optimize(TCGContext *s) if (!arg_is_const(op->args[1]) && arg_is_const(op->args[2]) && arg_info(op->args[2])->val =3D=3D 0) { - tcg_opt_gen_mov(s, op, op->args[0], op->args[1]); + tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[1]); continue; } break; @@ -848,7 +849,7 @@ void tcg_optimize(TCGContext *s) if (!arg_is_const(op->args[1]) && arg_is_const(op->args[2]) && arg_info(op->args[2])->val =3D=3D -1) { - tcg_opt_gen_mov(s, op, op->args[0], op->args[1]); + tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[1]); continue; } break; @@ -1088,12 +1089,12 @@ void tcg_optimize(TCGContext *s) =20 if (partmask =3D=3D 0) { tcg_debug_assert(nb_oargs =3D=3D 1); - tcg_opt_gen_movi(s, &ctx, op, op->args[0], 0); + tcg_opt_gen_movi(&ctx, op, op->args[0], 0); continue; } if (affected =3D=3D 0) { tcg_debug_assert(nb_oargs =3D=3D 1); - tcg_opt_gen_mov(s, op, op->args[0], op->args[1]); + tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[1]); continue; } =20 @@ -1105,7 +1106,7 @@ void tcg_optimize(TCGContext *s) CASE_OP_32_64(mulsh): if (arg_is_const(op->args[2]) && arg_info(op->args[2])->val =3D=3D 0) { - tcg_opt_gen_movi(s, &ctx, op, op->args[0], 0); + tcg_opt_gen_movi(&ctx, op, op->args[0], 0); continue; } break; @@ -1118,7 +1119,7 @@ void tcg_optimize(TCGContext *s) CASE_OP_32_64_VEC(or): CASE_OP_32_64_VEC(and): if (args_are_copies(op->args[1], op->args[2])) { - tcg_opt_gen_mov(s, op, op->args[0], op->args[1]); + tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[1]); continue; } break; @@ -1132,7 +1133,7 @@ void tcg_optimize(TCGContext *s) CASE_OP_32_64_VEC(sub): CASE_OP_32_64_VEC(xor): if (args_are_copies(op->args[1], op->args[2])) { - tcg_opt_gen_movi(s, &ctx, op, op->args[0], 0); + tcg_opt_gen_movi(&ctx, op, op->args[0], 0); continue; } break; @@ -1145,14 +1146,14 @@ void tcg_optimize(TCGContext *s) allocator where needed and possible. Also detect copies. */ switch (opc) { CASE_OP_32_64_VEC(mov): - tcg_opt_gen_mov(s, op, op->args[0], op->args[1]); + tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[1]); continue; =20 case INDEX_op_dup_vec: if (arg_is_const(op->args[1])) { tmp =3D arg_info(op->args[1])->val; tmp =3D dup_const(TCGOP_VECE(op), tmp); - tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); + tcg_opt_gen_movi(&ctx, op, op->args[0], tmp); continue; } break; @@ -1160,7 +1161,7 @@ void tcg_optimize(TCGContext *s) case INDEX_op_dup2_vec: assert(TCG_TARGET_REG_BITS =3D=3D 32); if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) { - tcg_opt_gen_movi(s, &ctx, op, op->args[0], + tcg_opt_gen_movi(&ctx, op, op->args[0], deposit64(arg_info(op->args[1])->val, 32,= 32, arg_info(op->args[2])->val)); continue; @@ -1186,7 +1187,7 @@ void tcg_optimize(TCGContext *s) case INDEX_op_extrh_i64_i32: if (arg_is_const(op->args[1])) { tmp =3D do_constant_folding(opc, arg_info(op->args[1])->va= l, 0); - tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); + tcg_opt_gen_movi(&ctx, op, op->args[0], tmp); continue; } break; @@ -1197,7 +1198,7 @@ void tcg_optimize(TCGContext *s) if (arg_is_const(op->args[1])) { tmp =3D do_constant_folding(opc, arg_info(op->args[1])->va= l, op->args[2]); - tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); + tcg_opt_gen_movi(&ctx, op, op->args[0], tmp); continue; } break; @@ -1227,7 +1228,7 @@ void tcg_optimize(TCGContext *s) if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) { tmp =3D do_constant_folding(opc, arg_info(op->args[1])->va= l, arg_info(op->args[2])->val); - tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); + tcg_opt_gen_movi(&ctx, op, op->args[0], tmp); continue; } break; @@ -1238,9 +1239,9 @@ void tcg_optimize(TCGContext *s) TCGArg v =3D arg_info(op->args[1])->val; if (v !=3D 0) { tmp =3D do_constant_folding(opc, v, 0); - tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); + tcg_opt_gen_movi(&ctx, op, op->args[0], tmp); } else { - tcg_opt_gen_mov(s, op, op->args[0], op->args[2]); + tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[2]); } continue; } @@ -1251,7 +1252,7 @@ void tcg_optimize(TCGContext *s) tmp =3D deposit64(arg_info(op->args[1])->val, op->args[3], op->args[4], arg_info(op->args[2])->val); - tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); + tcg_opt_gen_movi(&ctx, op, op->args[0], tmp); continue; } break; @@ -1260,7 +1261,7 @@ void tcg_optimize(TCGContext *s) if (arg_is_const(op->args[1])) { tmp =3D extract64(arg_info(op->args[1])->val, op->args[2], op->args[3]); - tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); + tcg_opt_gen_movi(&ctx, op, op->args[0], tmp); continue; } break; @@ -1269,7 +1270,7 @@ void tcg_optimize(TCGContext *s) if (arg_is_const(op->args[1])) { tmp =3D sextract64(arg_info(op->args[1])->val, op->args[2], op->args[3]); - tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); + tcg_opt_gen_movi(&ctx, op, op->args[0], tmp); continue; } break; @@ -1286,7 +1287,7 @@ void tcg_optimize(TCGContext *s) tmp =3D (int32_t)(((uint32_t)v1 >> shr) | ((uint32_t)v2 << (32 - shr))); } - tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); + tcg_opt_gen_movi(&ctx, op, op->args[0], tmp); continue; } break; @@ -1295,7 +1296,7 @@ void tcg_optimize(TCGContext *s) tmp =3D do_constant_folding_cond(opc, op->args[1], op->args[2], op->args[3]); if (tmp !=3D 2) { - tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); + tcg_opt_gen_movi(&ctx, op, op->args[0], tmp); continue; } break; @@ -1319,7 +1320,7 @@ void tcg_optimize(TCGContext *s) tmp =3D do_constant_folding_cond(opc, op->args[1], op->args[2], op->args[5]); if (tmp !=3D 2) { - tcg_opt_gen_mov(s, op, op->args[0], op->args[4-tmp]); + tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[4-tmp]); continue; } if (arg_is_const(op->args[3]) && arg_is_const(op->args[4])) { @@ -1361,8 +1362,8 @@ void tcg_optimize(TCGContext *s) =20 rl =3D op->args[0]; rh =3D op->args[1]; - tcg_opt_gen_movi(s, &ctx, op, rl, (int32_t)a); - tcg_opt_gen_movi(s, &ctx, op2, rh, (int32_t)(a >> 32)); + tcg_opt_gen_movi(&ctx, op, rl, (int32_t)a); + tcg_opt_gen_movi(&ctx, op2, rh, (int32_t)(a >> 32)); continue; } break; @@ -1377,8 +1378,8 @@ void tcg_optimize(TCGContext *s) =20 rl =3D op->args[0]; rh =3D op->args[1]; - tcg_opt_gen_movi(s, &ctx, op, rl, (int32_t)r); - tcg_opt_gen_movi(s, &ctx, op2, rh, (int32_t)(r >> 32)); + tcg_opt_gen_movi(&ctx, op, rl, (int32_t)r); + tcg_opt_gen_movi(&ctx, op2, rh, (int32_t)(r >> 32)); continue; } break; @@ -1466,7 +1467,7 @@ void tcg_optimize(TCGContext *s) op->args[5]); if (tmp !=3D 2) { do_setcond_const: - tcg_opt_gen_movi(s, &ctx, op, op->args[0], tmp); + tcg_opt_gen_movi(&ctx, op, op->args[0], tmp); continue; } if ((op->args[5] =3D=3D TCG_COND_LT || op->args[5] =3D=3D TCG_= COND_GE) --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635289971236131.5278678398504; Tue, 26 Oct 2021 16:12:51 -0700 (PDT) Received: from localhost ([::1]:56432 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVcg-0005ts-2T for importer@patchew.org; Tue, 26 Oct 2021 19:12:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52744) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVZo-0002mB-Ij for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:09:52 -0400 Received: from mail-pf1-x42f.google.com ([2607:f8b0:4864:20::42f]:33598) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVZm-0001vL-LQ for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:09:52 -0400 Received: by mail-pf1-x42f.google.com with SMTP id t184so954528pfd.0 for ; Tue, 26 Oct 2021 16:09:50 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.09.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:09:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=FtIqRUcfOkY+GJe8JI9dBf6G7CRUHHnpPIR2B14bLgE=; b=yRjGc0UGLzpZyTLL3VvohhNw9hl07uB1RCgWxGg2EAmRV7wRlx1kzkFVsgjba3cAXr L3af4Zocwj93czqVh1AIW3/3ESXAx8U7M/SqSCC/k9OAqVIKQjskgCf6UPzjnL30UpMs YcQFQhNFlDIEGNeDHvVLn9ouNP/Z/o9lVPGxssuTH1LuciawwM6EnXPoOUtMyPpRpXOy zgYjSnyL3Bzjv5vg6KkehZyM1vAYQDZafJ4KL1DDHpbNLhwaYLQujJikZDtGvN1DZl4m 4QxWnCPQjX+TcZ9CEBWNk3sOGwjC0HFrrqISFOci4uzESvRRlD2rv+jUVGGUsaRaRrDd 7lZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=FtIqRUcfOkY+GJe8JI9dBf6G7CRUHHnpPIR2B14bLgE=; b=FMdDJOAQgLco5RnhlEL4Pl2U9GRFir+71YhvFbxetLd9x6bjospmdavIPISuAm7rTr EG+DVi09TRcOmlHkVi2e+70zOT5U/YlBaQ1P14UWMEMe7kkZjIvMrz5l1Iy53HEvgMIl UnK/mBZGjTKmWrblcVeaPFrxbfIy8IKPWc2h68bDR0ZN5MipvSbPjet01WGatS6NUUR9 VMHGt3pMWXdR7rQODYMImT4EsWQXZ4fgsr8xwqst4X6WgijwVUH4qi98TaYaADN9EfJs IlLc7zoRQSOTcwBJprtYvYoeCBaR/jBkvxS2D4CJDU19sJo4+mvJljsAVIBUML0BsDgb ON/g== X-Gm-Message-State: AOAM530gV1D+mtnA1nFOhMnPqCWF4+1c8y5JlnN4gb0VI/Ek5l4ron/3 du7rDOqfYNNUiVECsnXScBzuDkJlp4sabg== X-Google-Smtp-Source: ABdhPJxPHCn/oVQkM/X+CZ+7Gu+lApvZJUuHxTIhJ8/i8ImPnPC+cqXRhIxtghphLFPZ3r8U49j2yw== X-Received: by 2002:a63:2c91:: with SMTP id s139mr20959342pgs.116.1635289789423; Tue, 26 Oct 2021 16:09:49 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 05/51] tcg/optimize: Move prev_mb into OptContext Date: Tue, 26 Oct 2021 16:08:57 -0700 Message-Id: <20211026230943.1225890-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::42f; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635289972474100001 This will expose the variable to subroutines that will be broken out of tcg_optimize. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Luis Pires Reviewed-by: Philippe Mathieu-Daud=C3=A9 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 627a5b39f6..b875d76354 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -46,6 +46,7 @@ typedef struct TempOptInfo { =20 typedef struct OptContext { TCGContext *tcg; + TCGOp *prev_mb; TCGTempSet temps_used; } OptContext; =20 @@ -609,7 +610,7 @@ static bool swap_commutative2(TCGArg *p1, TCGArg *p2) void tcg_optimize(TCGContext *s) { int nb_temps, nb_globals, i; - TCGOp *op, *op_next, *prev_mb =3D NULL; + TCGOp *op, *op_next; OptContext ctx =3D { .tcg =3D s }; =20 /* Array VALS has an element for each temp. @@ -1566,7 +1567,7 @@ void tcg_optimize(TCGContext *s) } =20 /* Eliminate duplicate and redundant fence instructions. */ - if (prev_mb) { + if (ctx.prev_mb) { switch (opc) { case INDEX_op_mb: /* Merge two barriers of the same type into one, @@ -1580,7 +1581,7 @@ void tcg_optimize(TCGContext *s) * barrier. This is stricter than specified but for * the purposes of TCG is better than not optimizing. */ - prev_mb->args[0] |=3D op->args[0]; + ctx.prev_mb->args[0] |=3D op->args[0]; tcg_op_remove(s, op); break; =20 @@ -1597,11 +1598,11 @@ void tcg_optimize(TCGContext *s) case INDEX_op_qemu_st_i64: case INDEX_op_call: /* Opcodes that touch guest memory stop the optimization. = */ - prev_mb =3D NULL; + ctx.prev_mb =3D NULL; break; } } else if (opc =3D=3D INDEX_op_mb) { - prev_mb =3D op; + ctx.prev_mb =3D op; } } } --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635290449704375.3442209156415; Tue, 26 Oct 2021 16:20:49 -0700 (PDT) Received: from localhost ([::1]:53954 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVkO-0006IK-AC for importer@patchew.org; Tue, 26 Oct 2021 19:20:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52750) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVZo-0002nM-V6 for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:09:53 -0400 Received: from mail-pl1-x62f.google.com ([2607:f8b0:4864:20::62f]:45835) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVZn-0001vv-Gn for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:09:52 -0400 Received: by mail-pl1-x62f.google.com with SMTP id f8so617772plo.12 for ; Tue, 26 Oct 2021 16:09:51 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.09.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:09:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=WL784dDelb2n11jVqBh0M/kFnuIJJZnBgr5d6GB5NwI=; b=vZhr/9LXtW4qWcPeY6duuF4Qh7wp3+y7p+wmPVM7duBPAnFQUk/BAq266s6wrLFb8G n0A5KahyPYFh07CgkOu2sDmLBxVccYBa8P5AQgubpk2TpoAgwAQiDBMRjw7t8xbgNWYI im2mnWz+D7Xwy2696A8w7NLCKQX9+/o/cZf8eA+lBF+wk5fM6IXks5MvSv1/LWaMmZma At+DwGeggbE9qcMwxbIQmycdCILVSjDWViW7oxxVW9aljQKpGvhrXvMmPoU7hQ5S1png LxX8gCjc93LyrtMAEDTNVZxpl09kqVoAwpDKRZ6Al6YVKUrcNojHjGcnnBbhgqzbqVar HHrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=WL784dDelb2n11jVqBh0M/kFnuIJJZnBgr5d6GB5NwI=; b=wfX6caVKwJHkQeYj8rgQjNAuA0/5mw3NgO/UOx7D+QGkpmBgz/Qss5Gj5rJXNahxjD 1AF6Wd/TT7zwRVw0mMkuvjn0aEjueld4IfrTl8AnIgNwrNO0vy5oNqN3v4b5y8uZ97Er wUfMr2qxiWS5XmdjDIcLpvhA3XTxw3uRBg8Dljr/EAo1NpmyLYoIN/CmB87scWTndR55 xDgi6bkVH1ruwzF3gIJA68fDwiJPZEIIa+oPiOkGVaD2UOf5+x3x215cB4fJWFOJwzkC fFT0ym+Fq9AM1t4MnXEhAMjAAf3fpVGrH/Bs+xyGCvBGOo9jsl6bBF6qWQX2DfMAZRK1 YOQQ== X-Gm-Message-State: AOAM532AWWTDYtXReIe7b75252iUU4Aljg1GoQ59DNXmNs//VEfP8NIC IIm6v8fJIgYdAlyOMLhc/1bGhQmPucYfHg== X-Google-Smtp-Source: ABdhPJx6aYCkNMNGlqdrExwLZgmDj0v3QXhyK+7zd4yt3egoYGf81xhnX0+/zBxpS7zofNMm7K1u7g== X-Received: by 2002:a17:902:70cb:b0:13e:91f3:641a with SMTP id l11-20020a17090270cb00b0013e91f3641amr24463507plt.13.1635289790141; Tue, 26 Oct 2021 16:09:50 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 06/51] tcg/optimize: Split out init_arguments Date: Tue, 26 Oct 2021 16:08:58 -0700 Message-Id: <20211026230943.1225890-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62f; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635290450860100003 There was no real reason for calls to have separate code here. Unify init for calls vs non-calls using the call path, which handles TCG_CALL_DUMMY_ARG. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Luis Pires Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- tcg/optimize.c | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index b875d76354..019c5aaf81 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -128,11 +128,6 @@ static void init_ts_info(OptContext *ctx, TCGTemp *ts) } } =20 -static void init_arg_info(OptContext *ctx, TCGArg arg) -{ - init_ts_info(ctx, arg_temp(arg)); -} - static TCGTemp *find_better_copy(TCGContext *s, TCGTemp *ts) { TCGTemp *i, *g, *l; @@ -606,6 +601,16 @@ static bool swap_commutative2(TCGArg *p1, TCGArg *p2) return false; } =20 +static void init_arguments(OptContext *ctx, TCGOp *op, int nb_args) +{ + for (int i =3D 0; i < nb_args; i++) { + TCGTemp *ts =3D arg_temp(op->args[i]); + if (ts) { + init_ts_info(ctx, ts); + } + } +} + /* Propagate constants and copies, fold constant expressions. */ void tcg_optimize(TCGContext *s) { @@ -636,19 +641,11 @@ void tcg_optimize(TCGContext *s) if (opc =3D=3D INDEX_op_call) { nb_oargs =3D TCGOP_CALLO(op); nb_iargs =3D TCGOP_CALLI(op); - for (i =3D 0; i < nb_oargs + nb_iargs; i++) { - TCGTemp *ts =3D arg_temp(op->args[i]); - if (ts) { - init_ts_info(&ctx, ts); - } - } } else { nb_oargs =3D def->nb_oargs; nb_iargs =3D def->nb_iargs; - for (i =3D 0; i < nb_oargs + nb_iargs; i++) { - init_arg_info(&ctx, op->args[i]); - } } + init_arguments(&ctx, op, nb_oargs + nb_iargs); =20 /* Do copy propagation */ for (i =3D nb_oargs; i < nb_oargs + nb_iargs; i++) { --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 163529009278013.392036586182712; Tue, 26 Oct 2021 16:14:52 -0700 (PDT) Received: from localhost ([::1]:36368 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVed-0002tv-RE for importer@patchew.org; Tue, 26 Oct 2021 19:14:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52764) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVZq-0002oW-1D for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:09:54 -0400 Received: from mail-pj1-x1033.google.com ([2607:f8b0:4864:20::1033]:35380) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVZo-0001w7-Fw for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:09:53 -0400 Received: by mail-pj1-x1033.google.com with SMTP id n11-20020a17090a2bcb00b001a1e7a0a6a6so3597421pje.0 for ; Tue, 26 Oct 2021 16:09:52 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.09.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:09:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=apxi4gdi/2+dlekZiDFnJhG83/VEpB6pYIdUYdxg0AQ=; b=Zlqn8ZEtUiesxXdbRwKyPohvMFlID3t7vj9+O0m5D6ZylBHSQ17hCii0P+FoLLHAnp URScYrNeVuQf1K+6AfbmxHM1SZv/DxTB/bZuO8/LMnlMfTEDK3nQMFdr2z+8QGDaMpdh udqCP/K3oHZNZVWPTkxIvZPVF4OGUGHqNYtBbzjmfYMBlCGGVtwdEFx10VLaIR+BNC+y vYANOqop/eKl5JstaOKYic0p7Um9Ax3umDgctDs1nSdh/EI8d5z6qN4RmxCc6uE0bVFZ 1M+u7HLxr2usSLnysdAOM2EcOQQojG6tgKWmTqn2GhtgI6Apeab91xlAm85QyWvWzx9N pgDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=apxi4gdi/2+dlekZiDFnJhG83/VEpB6pYIdUYdxg0AQ=; b=sPfAtQns7CqQzWkO8Ro6FZfiTL2dL580xPynGxHKqr78kA82vehCdYAZ1pB/6GMMh6 GoEEOD/YfFJX/Fp6EQoHyAXv8/kaR9JB+4wlfUyC4zPIEhhGs+pkbqK9bh/xm8I3+zs/ DkF2QNhE5+oNAhKQHO7qUjjIREYRZ9DPSkRhek7U22mP3gHVfOzIqasgCjRlFtyTZdTx kuSjMplPt6YJLd3Cw3nfiHYTnMRPeNRMkVbbw+2OeepPxdc7DHPgPkSGISUcljzVJXjn Ztr9J5wZMGiJKOsQjW1sEzuTRh9/VzCh1gM0FnR5WiuRTkAJiF9gJTEqEYzc2Y1SLRtw qFdg== X-Gm-Message-State: AOAM533U9UvHKF3gAag1sMbsohVhMq1ZAvr1bgmJkDDejzpjgHQMVvXd eTe1AYtcOHs/g+yBd99LDH3FodMR7xmYJA== X-Google-Smtp-Source: ABdhPJwVMXik70yYtYToYMoAP1QU6EOAsk4kDxAtdGF9+1sfIpW2RpZfB4gJePQlDlov/TQ2AOKbYw== X-Received: by 2002:a17:90a:8006:: with SMTP id b6mr1864217pjn.185.1635289791210; Tue, 26 Oct 2021 16:09:51 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 07/51] tcg/optimize: Split out copy_propagate Date: Tue, 26 Oct 2021 16:08:59 -0700 Message-Id: <20211026230943.1225890-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::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: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635290094129100001 Continue splitting tcg_optimize. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Luis Pires Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- tcg/optimize.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 019c5aaf81..fad6f5de1f 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -611,6 +611,19 @@ static void init_arguments(OptContext *ctx, TCGOp *op,= int nb_args) } } =20 +static void copy_propagate(OptContext *ctx, TCGOp *op, + int nb_oargs, int nb_iargs) +{ + TCGContext *s =3D ctx->tcg; + + for (int i =3D nb_oargs; i < nb_oargs + nb_iargs; i++) { + TCGTemp *ts =3D arg_temp(op->args[i]); + if (ts && ts_is_copy(ts)) { + op->args[i] =3D temp_arg(find_better_copy(s, ts)); + } + } +} + /* Propagate constants and copies, fold constant expressions. */ void tcg_optimize(TCGContext *s) { @@ -646,14 +659,7 @@ void tcg_optimize(TCGContext *s) nb_iargs =3D def->nb_iargs; } init_arguments(&ctx, op, nb_oargs + nb_iargs); - - /* Do copy propagation */ - for (i =3D nb_oargs; i < nb_oargs + nb_iargs; i++) { - TCGTemp *ts =3D arg_temp(op->args[i]); - if (ts && ts_is_copy(ts)) { - op->args[i] =3D temp_arg(find_better_copy(s, ts)); - } - } + copy_propagate(&ctx, op, nb_oargs, nb_iargs); =20 /* For commutative operations make constant second argument */ switch (opc) { --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635290301148425.9250856161557; Tue, 26 Oct 2021 16:18:21 -0700 (PDT) Received: from localhost ([::1]:44950 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVhz-0000Lo-LS for importer@patchew.org; Tue, 26 Oct 2021 19:18:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52788) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVZr-0002st-MH for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:09:57 -0400 Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]:51070) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVZp-0001wR-MZ for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:09:55 -0400 Received: by mail-pj1-x102e.google.com with SMTP id gn3so658297pjb.0 for ; Tue, 26 Oct 2021 16:09:53 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.09.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:09:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=qA2L+rswn0bgEtnoIqL3DIT4FMCOfg4+ksSKsYoClOk=; b=yf2+ISHytanOHrx6tv0AgloZ/M9N7lMUzcKYQ7vJyrPbYD8DZFGn+PwJ02CoZ+hxTQ uZS3JP0YsrNLR6ePgaQR4obcQNrS7zcYeScnZnbYoRyhczoSRC0g3S9INfdDWZAgkYZb Sn7ydUW61ivUcY3eUBHPiLkKR2+NnzEHZ2lNLrKcrUTSiMkWPnoGfOphsyWBc+11TLlf mIapsgbRU8L5OrESOxJ9do2JqYJNviQm0r0pKIQwg0vPJs4se1iUnb6s1r3GB5Bh6aGF KTtFxoWhMpXkHi2dUmCMYjJWrjFFFlJ648MwnC/ALzQYKu5dEezYaStOYw1aJlq7AjVW iKLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=qA2L+rswn0bgEtnoIqL3DIT4FMCOfg4+ksSKsYoClOk=; b=lM6aGy7I9wNEx7NoM0JmpudLFU7lXFFcPuC1IHpgfq8+544vDh+pAJ6wzMV5Jc2xrk MlBmzXVLGfaFWbHv501++Y30uXTldpm+ImCNQnRvEJmUkbF9QIQm9fmvpBqq5M6uNsxb nA5QngB4r6OydVi0gnoNgHhAoBqO3ps9EbM3AYikgBW7fg1xXZS7oF7USf6NJVkYRqxP mdvr4w8th1SJa1DpB3vxPSirP8lRKaWdWxXyv2xKC1ZD7hd6pn9dBYdjcIxzvdWF4vWM QEMd+/bjpEg4v3eQyVa6W5pdsXkLUdOsHrwE7Ab2ROuG1l1+F01D4oQRe5sGxigH5+Wr 51tA== X-Gm-Message-State: AOAM5309/s5zydXLj0DKUryhAjusXc+oWYhbHbLa/dJsQde5T+7xZ1pQ 4WEjRtW4+gB7xtA6eFzNS9C4WwekN3z7Dg== X-Google-Smtp-Source: ABdhPJxMdug2ZNDKW8Xcf2k4hSk7tYeap5xho1PwU+/8kYJLcoNEcQuC/7S5ukqtG+8/ppyVh3CeBA== X-Received: by 2002:a17:90a:c795:: with SMTP id gn21mr1920709pjb.112.1635289792207; Tue, 26 Oct 2021 16:09:52 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 08/51] tcg/optimize: Split out fold_call Date: Tue, 26 Oct 2021 16:09:00 -0700 Message-Id: <20211026230943.1225890-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102e; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635290303174100001 Calls are special in that they have a variable number of arguments, and need to be able to clobber globals. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Luis Pires 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 fad6f5de1f..74b9aa025a 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -624,10 +624,42 @@ static void copy_propagate(OptContext *ctx, TCGOp *op, } } =20 +static bool fold_call(OptContext *ctx, TCGOp *op) +{ + TCGContext *s =3D ctx->tcg; + int nb_oargs =3D TCGOP_CALLO(op); + int nb_iargs =3D TCGOP_CALLI(op); + int flags, i; + + init_arguments(ctx, op, nb_oargs + nb_iargs); + copy_propagate(ctx, op, nb_oargs, nb_iargs); + + /* If the function reads or writes globals, reset temp data. */ + flags =3D tcg_call_flags(op); + if (!(flags & (TCG_CALL_NO_READ_GLOBALS | TCG_CALL_NO_WRITE_GLOBALS)))= { + int nb_globals =3D s->nb_globals; + + for (i =3D 0; i < nb_globals; i++) { + if (test_bit(i, ctx->temps_used.l)) { + reset_ts(&ctx->tcg->temps[i]); + } + } + } + + /* Reset temp data for outputs. */ + for (i =3D 0; i < nb_oargs; i++) { + reset_temp(op->args[i]); + } + + /* Stop optimizing MB across calls. */ + ctx->prev_mb =3D NULL; + return true; +} + /* Propagate constants and copies, fold constant expressions. */ void tcg_optimize(TCGContext *s) { - int nb_temps, nb_globals, i; + int nb_temps, i; TCGOp *op, *op_next; OptContext ctx =3D { .tcg =3D s }; =20 @@ -637,8 +669,6 @@ void tcg_optimize(TCGContext *s) available through the doubly linked circular list. */ =20 nb_temps =3D s->nb_temps; - nb_globals =3D s->nb_globals; - for (i =3D 0; i < nb_temps; ++i) { s->temps[i].state_ptr =3D NULL; } @@ -647,17 +677,17 @@ void tcg_optimize(TCGContext *s) uint64_t z_mask, partmask, affected, tmp; int nb_oargs, nb_iargs; TCGOpcode opc =3D op->opc; - const TCGOpDef *def =3D &tcg_op_defs[opc]; + const TCGOpDef *def; =20 - /* Count the arguments, and initialize the temps that are - going to be used */ + /* Calls are special. */ if (opc =3D=3D INDEX_op_call) { - nb_oargs =3D TCGOP_CALLO(op); - nb_iargs =3D TCGOP_CALLI(op); - } else { - nb_oargs =3D def->nb_oargs; - nb_iargs =3D def->nb_iargs; + fold_call(&ctx, op); + continue; } + + def =3D &tcg_op_defs[opc]; + nb_oargs =3D def->nb_oargs; + nb_iargs =3D def->nb_iargs; init_arguments(&ctx, op, nb_oargs + nb_iargs); copy_propagate(&ctx, op, nb_oargs, nb_iargs); =20 @@ -1549,16 +1579,6 @@ void tcg_optimize(TCGContext *s) if (def->flags & TCG_OPF_BB_END) { memset(&ctx.temps_used, 0, sizeof(ctx.temps_used)); } else { - if (opc =3D=3D INDEX_op_call && - !(tcg_call_flags(op) - & (TCG_CALL_NO_READ_GLOBALS | TCG_CALL_NO_WRITE_GLOBALS)= )) { - for (i =3D 0; i < nb_globals; i++) { - if (test_bit(i, ctx.temps_used.l)) { - reset_ts(&s->temps[i]); - } - } - } - for (i =3D 0; i < nb_oargs; i++) { reset_temp(op->args[i]); /* Save the corresponding known-zero bits mask for the @@ -1599,7 +1619,6 @@ void tcg_optimize(TCGContext *s) case INDEX_op_qemu_st_i32: case INDEX_op_qemu_st8_i32: case INDEX_op_qemu_st_i64: - case INDEX_op_call: /* Opcodes that touch guest memory stop the optimization. = */ ctx.prev_mb =3D NULL; break; --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635290095519611.2257256062895; Tue, 26 Oct 2021 16:14:55 -0700 (PDT) Received: from localhost ([::1]:36626 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVeg-00033v-EK for importer@patchew.org; Tue, 26 Oct 2021 19:14:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52802) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVZs-0002tT-Ew for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:09:57 -0400 Received: from mail-pf1-x432.google.com ([2607:f8b0:4864:20::432]:33601) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVZq-0001wc-Ib for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:09:56 -0400 Received: by mail-pf1-x432.google.com with SMTP id t184so954651pfd.0 for ; Tue, 26 Oct 2021 16:09:54 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.09.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:09:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=NYLWr1uKuQzUUVrza4V+n6K/acOPuYl97jiAhjg0Z5M=; b=QgSpNdBbuu7+5VFbjA4opnx7Vw1oy9OZ0mhNYhpcf2Qp9IWxwCJPUDgL262cxm+fqu 3CjKS3ePrCZNkgaWzGrn2GKQm9iQQS4PmBCIxX8q+TJEZIJ5tLpDRrcPIWOt+kX647TO sUcPUO+Tyn59TXR1pGugsz0reoXYNWouVLc13HvZOEyj3BAEZZ739fh24E9xMqIkptIt jgXDX9nGKiWXgElHPugodNxTT+kPXFrpdVBkNmn5+ugudEjcgnGh1pSPfd5QBF6NdbE+ Ba3udcSwga0Zhcrc32uIg54L9KwvDR/inTD1IPsk8j69+MCY4iBRk51NiuSpn/AO/Xmg WBTA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=NYLWr1uKuQzUUVrza4V+n6K/acOPuYl97jiAhjg0Z5M=; b=fYK6BgBHryFWtXY6am7tJiexFBKAoBLmDPdu7Mfb2vAonVuZohsOQjcZEXUvnsJX0N dDFzBOBWQPnwq+2Z4y06z4sFAzypskQJhgtddfniedjd8DdAHcjEjVeFEiwaFmnOpMul 4WrGE1Oh1x8Ok3Bt0mlUx06eEW4SopGr38xpukRlLWRPC7jSIdWJqzLT9ADkPSKeEKnA J8mRvqUIn3sUpJZYZCZ+0+jrEsPpBdvZRsRX7039MhNX/a0WaFw2gZmw3efHCz+TVq6F EwaoTMTy8+vytNI5kxEE6vpZGzzoYOwDivrPeXRiXyxb55CIppi9xa4z2VMGixWEPbky cZCQ== X-Gm-Message-State: AOAM532n0ZRjfdmD3a+j/aypZJNddFZpofYaEQ/UZ6A62vlEtTaOEA8w QCz8TYD+08Orpyn0dt36eIimsCn9NZI6eg== X-Google-Smtp-Source: ABdhPJwXPE+d9KlRXrwv+Zg/EfO8avhF/XqZ/IgYFAwTZSUZqcMzAqoA/7n0MKJk9kLmAQtyiHT+gQ== X-Received: by 2002:a63:ff11:: with SMTP id k17mr21269395pgi.405.1635289793202; Tue, 26 Oct 2021 16:09:53 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 09/51] tcg/optimize: Drop nb_oargs, nb_iargs locals Date: Tue, 26 Oct 2021 16:09:01 -0700 Message-Id: <20211026230943.1225890-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::432; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x432.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635290096376100002 Rather than try to keep these up-to-date across folding, re-read nb_oargs at the end, after re-reading the opcode. A couple of asserts need dropping, but that will take care of itself as we split the function further. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Luis Pires 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 74b9aa025a..77cdffaaef 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -675,7 +675,6 @@ void tcg_optimize(TCGContext *s) =20 QTAILQ_FOREACH_SAFE(op, &s->ops, link, op_next) { uint64_t z_mask, partmask, affected, tmp; - int nb_oargs, nb_iargs; TCGOpcode opc =3D op->opc; const TCGOpDef *def; =20 @@ -686,10 +685,8 @@ void tcg_optimize(TCGContext *s) } =20 def =3D &tcg_op_defs[opc]; - nb_oargs =3D def->nb_oargs; - nb_iargs =3D def->nb_iargs; - init_arguments(&ctx, op, nb_oargs + nb_iargs); - copy_propagate(&ctx, op, nb_oargs, nb_iargs); + init_arguments(&ctx, op, def->nb_oargs + def->nb_iargs); + copy_propagate(&ctx, op, def->nb_oargs, def->nb_iargs); =20 /* For commutative operations make constant second argument */ switch (opc) { @@ -1063,7 +1060,7 @@ void tcg_optimize(TCGContext *s) =20 CASE_OP_32_64(qemu_ld): { - MemOpIdx oi =3D op->args[nb_oargs + nb_iargs]; + MemOpIdx oi =3D op->args[def->nb_oargs + def->nb_iargs]; MemOp mop =3D get_memop(oi); if (!(mop & MO_SIGN)) { z_mask =3D (2ULL << ((8 << (mop & MO_SIZE)) - 1)) - 1; @@ -1122,12 +1119,10 @@ void tcg_optimize(TCGContext *s) } =20 if (partmask =3D=3D 0) { - tcg_debug_assert(nb_oargs =3D=3D 1); tcg_opt_gen_movi(&ctx, op, op->args[0], 0); continue; } if (affected =3D=3D 0) { - tcg_debug_assert(nb_oargs =3D=3D 1); tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[1]); continue; } @@ -1202,7 +1197,6 @@ void tcg_optimize(TCGContext *s) } else if (args_are_copies(op->args[1], op->args[2])) { op->opc =3D INDEX_op_dup_vec; TCGOP_VECE(op) =3D MO_32; - nb_iargs =3D 1; } break; =20 @@ -1371,7 +1365,6 @@ void tcg_optimize(TCGContext *s) op->opc =3D opc =3D (opc =3D=3D INDEX_op_movcond_i32 ? INDEX_op_setcond_i32 : INDEX_op_setcond_i64); - nb_iargs =3D 2; } break; =20 @@ -1579,6 +1572,7 @@ void tcg_optimize(TCGContext *s) if (def->flags & TCG_OPF_BB_END) { memset(&ctx.temps_used, 0, sizeof(ctx.temps_used)); } else { + int nb_oargs =3D def->nb_oargs; for (i =3D 0; i < nb_oargs; i++) { reset_temp(op->args[i]); /* Save the corresponding known-zero bits mask for the --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635290304383236.83806385554954; Tue, 26 Oct 2021 16:18:24 -0700 (PDT) Received: from localhost ([::1]:45182 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVi3-0000Va-5h for importer@patchew.org; Tue, 26 Oct 2021 19:18:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52826) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVZu-0002uN-Cb for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:09:59 -0400 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]:34708) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVZr-0001wm-C2 for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:09:58 -0400 Received: by mail-pl1-x634.google.com with SMTP id r5so665004pls.1 for ; Tue, 26 Oct 2021 16:09:55 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.09.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:09:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=zc1IgJRz5A0yD9nF3ZiBVbKqRZed+SZjiAB2N3QmjLE=; b=gTz/n4R31p6TGhUDo4yMHAqy2z/2EMG83qv5zXIznAXDgqO9mgin5c35P8a/vA57Z/ hIkwhVBfRtpGs2lttap2KSi4XjDueSLjbeuXe2sqOdX4SKe6vgbOSKM+vKkDffT17+z6 WQA7buP6fhh/mRmq1kQklqr8OU9zIb7z6r3CTcINpOPg00je1U8IBDK9PKhuaxtzofN7 rGT/hDuUQySG6XKAI/+8m4bsWFDu9DWm5MAFgBS9NvMRkr2z+O74bgDBd+kymubCeBYa i4GJL5u7h/l3NsbcTyLDgCm+DDu17QBD2Xe+32UIxbv1fg6R7IMtpi7yDs7IHhKWQ3fS u+MA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=zc1IgJRz5A0yD9nF3ZiBVbKqRZed+SZjiAB2N3QmjLE=; b=Q2YG52pgvMuubSfSxREWkNIAmca7Dbq7w/b4jCqf3sGiU23Crb3V1EZTadJSO++Ewc 9Xji1ZOTgTuEm7KFWH9VSfqwgOZeh9nK568vT7Goq5ZSfRFgv6/sjmmvbAc4eZ7W2S2x Zp0BGYrgn8zJ2vcIEV0JjpcGIBxiyT+ig1WN22PXaLH2isxiEvL9QedJMKWiJD2ODIdV zuCRdtaTM3rFIrgWFoHpqjIGOP+3aKB8cKhXsLybgcgytS6WoVZiWMxD9oLeuKl/lmjo a5gNqmsBLwqk7SxoIuKRlvBzTkKcaKUQszt6IHjPh8tOs81tZQnxCEnmA5qXqvUPSEC4 SBJg== X-Gm-Message-State: AOAM533xI4D/ay14skod7jD0rlmWj/bjCTze6embUxK/lbwvjZXE7Cf2 01VYspyCQL86AkahsNeTBKcyLlroKqGv0Q== X-Google-Smtp-Source: ABdhPJwCqf0aLBoMdv/mpgX605EGnuWbZKC1/fKtKEU1TZRdcwshvoTkJPmI1YQTJLJWQV/HCIbEiQ== X-Received: by 2002:a17:90a:cc05:: with SMTP id b5mr1878425pju.71.1635289794018; Tue, 26 Oct 2021 16:09:54 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 10/51] tcg/optimize: Change fail return for do_constant_folding_cond* Date: Tue, 26 Oct 2021 16:09:02 -0700 Message-Id: <20211026230943.1225890-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::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: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635290305108100005 Return -1 instead of 2 for failure, so that we can use comparisons against 0 for all cases. Reviewed-by: Luis Pires Reviewed-by: Philippe Mathieu-Daud=C3=A9 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 77cdffaaef..19c01687b4 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -502,10 +502,12 @@ static bool do_constant_folding_cond_eq(TCGCond c) } } =20 -/* Return 2 if the condition can't be simplified, and the result - of the condition (0 or 1) if it can */ -static TCGArg do_constant_folding_cond(TCGOpcode op, TCGArg x, - TCGArg y, TCGCond c) +/* + * Return -1 if the condition can't be simplified, + * and the result of the condition (0 or 1) if it can. + */ +static int do_constant_folding_cond(TCGOpcode op, TCGArg x, + TCGArg y, TCGCond c) { uint64_t xv =3D arg_info(x)->val; uint64_t yv =3D arg_info(y)->val; @@ -527,15 +529,17 @@ static TCGArg do_constant_folding_cond(TCGOpcode op, = TCGArg x, case TCG_COND_GEU: return 1; default: - return 2; + return -1; } } - return 2; + return -1; } =20 -/* Return 2 if the condition can't be simplified, and the result - of the condition (0 or 1) if it can */ -static TCGArg do_constant_folding_cond2(TCGArg *p1, TCGArg *p2, TCGCond c) +/* + * Return -1 if the condition can't be simplified, + * and the result of the condition (0 or 1) if it can. + */ +static int do_constant_folding_cond2(TCGArg *p1, TCGArg *p2, TCGCond c) { TCGArg al =3D p1[0], ah =3D p1[1]; TCGArg bl =3D p2[0], bh =3D p2[1]; @@ -565,7 +569,7 @@ static TCGArg do_constant_folding_cond2(TCGArg *p1, TCG= Arg *p2, TCGCond c) if (args_are_copies(al, bl) && args_are_copies(ah, bh)) { return do_constant_folding_cond_eq(c); } - return 2; + return -1; } =20 static bool swap_commutative(TCGArg dest, TCGArg *p1, TCGArg *p2) @@ -1321,22 +1325,21 @@ void tcg_optimize(TCGContext *s) break; =20 CASE_OP_32_64(setcond): - tmp =3D do_constant_folding_cond(opc, op->args[1], - op->args[2], op->args[3]); - if (tmp !=3D 2) { - tcg_opt_gen_movi(&ctx, op, op->args[0], tmp); + i =3D do_constant_folding_cond(opc, op->args[1], + op->args[2], op->args[3]); + if (i >=3D 0) { + tcg_opt_gen_movi(&ctx, op, op->args[0], i); continue; } break; =20 CASE_OP_32_64(brcond): - tmp =3D do_constant_folding_cond(opc, op->args[0], - op->args[1], op->args[2]); - switch (tmp) { - case 0: + i =3D do_constant_folding_cond(opc, op->args[0], + op->args[1], op->args[2]); + if (i =3D=3D 0) { tcg_op_remove(s, op); continue; - case 1: + } else if (i > 0) { memset(&ctx.temps_used, 0, sizeof(ctx.temps_used)); op->opc =3D opc =3D INDEX_op_br; op->args[0] =3D op->args[3]; @@ -1345,10 +1348,10 @@ void tcg_optimize(TCGContext *s) break; =20 CASE_OP_32_64(movcond): - tmp =3D do_constant_folding_cond(opc, op->args[1], - op->args[2], op->args[5]); - if (tmp !=3D 2) { - tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[4-tmp]); + i =3D do_constant_folding_cond(opc, op->args[1], + op->args[2], op->args[5]); + if (i >=3D 0) { + tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[4 - i]); continue; } if (arg_is_const(op->args[3]) && arg_is_const(op->args[4])) { @@ -1412,14 +1415,14 @@ void tcg_optimize(TCGContext *s) break; =20 case INDEX_op_brcond2_i32: - tmp =3D do_constant_folding_cond2(&op->args[0], &op->args[2], - op->args[4]); - if (tmp =3D=3D 0) { + i =3D do_constant_folding_cond2(&op->args[0], &op->args[2], + op->args[4]); + if (i =3D=3D 0) { do_brcond_false: tcg_op_remove(s, op); continue; } - if (tmp =3D=3D 1) { + if (i > 0) { do_brcond_true: op->opc =3D opc =3D INDEX_op_br; op->args[0] =3D op->args[5]; @@ -1443,20 +1446,20 @@ void tcg_optimize(TCGContext *s) if (op->args[4] =3D=3D TCG_COND_EQ) { /* Simplify EQ comparisons where one of the pairs can be simplified. */ - tmp =3D do_constant_folding_cond(INDEX_op_brcond_i32, - op->args[0], op->args[2], - TCG_COND_EQ); - if (tmp =3D=3D 0) { + i =3D do_constant_folding_cond(INDEX_op_brcond_i32, + op->args[0], op->args[2], + TCG_COND_EQ); + if (i =3D=3D 0) { goto do_brcond_false; - } else if (tmp =3D=3D 1) { + } else if (i > 0) { goto do_brcond_high; } - tmp =3D do_constant_folding_cond(INDEX_op_brcond_i32, - op->args[1], op->args[3], - TCG_COND_EQ); - if (tmp =3D=3D 0) { + i =3D do_constant_folding_cond(INDEX_op_brcond_i32, + op->args[1], op->args[3], + TCG_COND_EQ); + if (i =3D=3D 0) { goto do_brcond_false; - } else if (tmp !=3D 1) { + } else if (i < 0) { break; } do_brcond_low: @@ -1470,31 +1473,31 @@ void tcg_optimize(TCGContext *s) if (op->args[4] =3D=3D TCG_COND_NE) { /* Simplify NE comparisons where one of the pairs can be simplified. */ - tmp =3D do_constant_folding_cond(INDEX_op_brcond_i32, - op->args[0], op->args[2], - TCG_COND_NE); - if (tmp =3D=3D 0) { + i =3D do_constant_folding_cond(INDEX_op_brcond_i32, + op->args[0], op->args[2], + TCG_COND_NE); + if (i =3D=3D 0) { goto do_brcond_high; - } else if (tmp =3D=3D 1) { + } else if (i > 0) { goto do_brcond_true; } - tmp =3D do_constant_folding_cond(INDEX_op_brcond_i32, - op->args[1], op->args[3], - TCG_COND_NE); - if (tmp =3D=3D 0) { + i =3D do_constant_folding_cond(INDEX_op_brcond_i32, + op->args[1], op->args[3], + TCG_COND_NE); + if (i =3D=3D 0) { goto do_brcond_low; - } else if (tmp =3D=3D 1) { + } else if (i > 0) { goto do_brcond_true; } } break; =20 case INDEX_op_setcond2_i32: - tmp =3D do_constant_folding_cond2(&op->args[1], &op->args[3], - op->args[5]); - if (tmp !=3D 2) { + i =3D do_constant_folding_cond2(&op->args[1], &op->args[3], + op->args[5]); + if (i >=3D 0) { do_setcond_const: - tcg_opt_gen_movi(&ctx, op, op->args[0], tmp); + tcg_opt_gen_movi(&ctx, op, op->args[0], i); continue; } if ((op->args[5] =3D=3D TCG_COND_LT || op->args[5] =3D=3D TCG_= COND_GE) @@ -1516,20 +1519,20 @@ void tcg_optimize(TCGContext *s) if (op->args[5] =3D=3D TCG_COND_EQ) { /* Simplify EQ comparisons where one of the pairs can be simplified. */ - tmp =3D do_constant_folding_cond(INDEX_op_setcond_i32, - op->args[1], op->args[3], - TCG_COND_EQ); - if (tmp =3D=3D 0) { + i =3D do_constant_folding_cond(INDEX_op_setcond_i32, + op->args[1], op->args[3], + TCG_COND_EQ); + if (i =3D=3D 0) { goto do_setcond_const; - } else if (tmp =3D=3D 1) { + } else if (i > 0) { goto do_setcond_high; } - tmp =3D do_constant_folding_cond(INDEX_op_setcond_i32, - op->args[2], op->args[4], - TCG_COND_EQ); - if (tmp =3D=3D 0) { + i =3D do_constant_folding_cond(INDEX_op_setcond_i32, + op->args[2], op->args[4], + TCG_COND_EQ); + if (i =3D=3D 0) { goto do_setcond_high; - } else if (tmp !=3D 1) { + } else if (i < 0) { break; } do_setcond_low: @@ -1543,20 +1546,20 @@ void tcg_optimize(TCGContext *s) if (op->args[5] =3D=3D TCG_COND_NE) { /* Simplify NE comparisons where one of the pairs can be simplified. */ - tmp =3D do_constant_folding_cond(INDEX_op_setcond_i32, - op->args[1], op->args[3], - TCG_COND_NE); - if (tmp =3D=3D 0) { + i =3D do_constant_folding_cond(INDEX_op_setcond_i32, + op->args[1], op->args[3], + TCG_COND_NE); + if (i =3D=3D 0) { goto do_setcond_high; - } else if (tmp =3D=3D 1) { + } else if (i > 0) { goto do_setcond_const; } - tmp =3D do_constant_folding_cond(INDEX_op_setcond_i32, - op->args[2], op->args[4], - TCG_COND_NE); - if (tmp =3D=3D 0) { + i =3D do_constant_folding_cond(INDEX_op_setcond_i32, + op->args[2], op->args[4], + TCG_COND_NE); + if (i =3D=3D 0) { goto do_setcond_low; - } else if (tmp =3D=3D 1) { + } else if (i > 0) { goto do_setcond_const; } } --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 163529045016583.95458972668757; Tue, 26 Oct 2021 16:20:50 -0700 (PDT) Received: from localhost ([::1]:53926 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVkP-0006HV-57 for importer@patchew.org; Tue, 26 Oct 2021 19:20:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52818) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVZt-0002uL-Ph for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:09:59 -0400 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]:41742) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVZr-0001wq-VS for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:09:57 -0400 Received: by mail-pj1-x1034.google.com with SMTP id na16-20020a17090b4c1000b0019f5bb661f9so688665pjb.0 for ; Tue, 26 Oct 2021 16:09:55 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.09.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:09:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=/my2BfUMduF0YwUj5N5teVZc/oRLeZHGt5Sceph4cvk=; b=vvbTGhGTCXHO0oR3zsdEk8FG6QmaZxZdYEpqLOvx8GYmWxT9DfWFOVrDwdLH0U28Ji m3iSRJjVSoEpF5OKQ1i5l94D2a3RZZ3AdM5iEV60JFvsYWkwkyTiVQitqJvc5L/KuCW/ uAJTB2zfcPx+vaf9D72djx4aEAO5vE68kpocXfBo2t2VrT1/bYGJINtURuT7oi4XexlP gvKTz/PfCU4Uc237uLdO0X0wUqWQkV8DZx3GlBv5t3HAZZQ6dT8/AIyhEEN7B5nYD5Ex 0p5t0co+KOTdL8vX+mlMFw5Bs6A2pW9xTe/Ezop/zBMrZBwzqJn3/S5Kw5sEzIgHSOdl XxpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=/my2BfUMduF0YwUj5N5teVZc/oRLeZHGt5Sceph4cvk=; b=mZLBub790k2ZEMriMAAY5WqvcbMKvpz+Fm8Z4Puw10WuDC6WzcvamPHjESojS2CHZT yIt/IIprNCOfsH0Ou7YQPEHQ/B0ptyjdd8RwkoHNom4lbPgJFK0eMyVXpJoZ2Kq4kg1X 9oDVqrVN/ZTPktd/KuuycqIJPDcyvwhwwtPu68RDKbDpVNlml9GwkLO5w71XYAsT1YmC ouyui+i/xzgp3jUEu9X6Yinp6c6I4kw2DL26ZQcOUsZej4tuBIcNyB53IoYMKJpRidR7 Ymax15MmhZie/B45UpAQVt8iu9XJHHTEGfU84GhS16mkPVyTGcVEZSk38MBcddaTD8wh gtgg== X-Gm-Message-State: AOAM5301QE/ZC9MAEnTzDJnet4oBYH5ZPL8CLhXLwoR61d9DvlpX6iYE Wc4NQR1r0KdP357MFAu2SLRFXTyjobsUVA== X-Google-Smtp-Source: ABdhPJy3gE4aWwgbLW95wG1U0x9M8JU/hRaiREpf6VrCR7iF9T6kvYX6lu2X78s89AKdZ7NIzdbYGw== X-Received: by 2002:a17:90b:30d8:: with SMTP id hi24mr1935076pjb.60.1635289794710; Tue, 26 Oct 2021 16:09:54 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 11/51] tcg/optimize: Return true from tcg_opt_gen_{mov, movi} Date: Tue, 26 Oct 2021 16:09:03 -0700 Message-Id: <20211026230943.1225890-12-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1034; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1034.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635290450866100004 This will allow callers to tail call to these functions and return true indicating processing complete. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Luis Pires Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- tcg/optimize.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 19c01687b4..066e635f73 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -180,7 +180,7 @@ static bool args_are_copies(TCGArg arg1, TCGArg arg2) return ts_are_copies(arg_temp(arg1), arg_temp(arg2)); } =20 -static void tcg_opt_gen_mov(OptContext *ctx, TCGOp *op, TCGArg dst, TCGArg= src) +static bool tcg_opt_gen_mov(OptContext *ctx, TCGOp *op, TCGArg dst, TCGArg= src) { TCGTemp *dst_ts =3D arg_temp(dst); TCGTemp *src_ts =3D arg_temp(src); @@ -192,7 +192,7 @@ static void tcg_opt_gen_mov(OptContext *ctx, TCGOp *op,= TCGArg dst, TCGArg src) =20 if (ts_are_copies(dst_ts, src_ts)) { tcg_op_remove(ctx->tcg, op); - return; + return true; } =20 reset_ts(dst_ts); @@ -228,9 +228,10 @@ static void tcg_opt_gen_mov(OptContext *ctx, TCGOp *op= , TCGArg dst, TCGArg src) di->is_const =3D si->is_const; di->val =3D si->val; } + return true; } =20 -static void tcg_opt_gen_movi(OptContext *ctx, TCGOp *op, +static bool tcg_opt_gen_movi(OptContext *ctx, TCGOp *op, TCGArg dst, uint64_t val) { const TCGOpDef *def =3D &tcg_op_defs[op->opc]; @@ -248,7 +249,7 @@ static void tcg_opt_gen_movi(OptContext *ctx, TCGOp *op, /* Convert movi to mov with constant temp. */ tv =3D tcg_constant_internal(type, val); init_ts_info(ctx, tv); - tcg_opt_gen_mov(ctx, op, dst, temp_arg(tv)); + return tcg_opt_gen_mov(ctx, op, dst, temp_arg(tv)); } =20 static uint64_t do_constant_folding_2(TCGOpcode op, uint64_t x, uint64_t y) --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635290617226179.9986389178897; Tue, 26 Oct 2021 16:23:37 -0700 (PDT) Received: from localhost ([::1]:33758 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVn5-0003KO-HK for importer@patchew.org; Tue, 26 Oct 2021 19:23:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52874) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVZz-0002wY-Et for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:03 -0400 Received: from mail-pf1-x435.google.com ([2607:f8b0:4864:20::435]:34684) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVZt-0001x0-E6 for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:01 -0400 Received: by mail-pf1-x435.google.com with SMTP id 127so921144pfu.1 for ; Tue, 26 Oct 2021 16:09:56 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.09.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:09:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=sb5338wSOtydZnMtxZpM23PXTg/PYHbWm33mLw5BH3A=; b=Q6/nSvNHE5zTnBuWUs5EcHP9xtMu3SDVG3sMIEMS8l2UxZkBRdKAPnRAWko+g4WhTd XcVLVIDSk8s98lZoWY77oqCEjxdzxPIKt4X+/j6wKPMvSEQ4lLLoOmb9CEs6wanEX9Ct vZENWN0CYTdQ9IO2f7srt1zZkTi64TvJ5XBYHYmy+qtVtEM6Lufctq3CyTOa9CCelokL mcs2M7rhKncHPesVsOT0kWFHiS7qnKnHdOzaEtGhA788Wk30wW97GcToAkMckoSPLtmG eXU13tVMlPiAXeYid2i6O5ldrhdx8gKoda59LPHOGbhwEFOxOPSdixtNmqs/+k+Q+z94 pKGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=sb5338wSOtydZnMtxZpM23PXTg/PYHbWm33mLw5BH3A=; b=JBG4/9bPflQKgrbnwQKNdVgs/0lCJQnwAtycnVtV4omeAnmI3YCM7n/7oDZYao6mO7 8IY/Tuytp8IZCUHnEpK+SxVyKRi6XUJLnO7aG8UswD6upV00B5zxPCHbH0+1rgyi94Fi MtEeIWkqFgAp0YFXm4F1mIt0GIlt09vdukrUwSc4QceHfNc5uRRtxydJCDRp9/VDUzOt 0/q6KZ0pXiP8L+kVmHNVNIf05+i0muV3xZYPZ5a8U9UCwD45Msmt+RHStfm1mQUC8VU7 u4u2lT2NMW91K0ItIm0idjDQ+9+/2Bk4+KipZyHANb8OkEmx1v5MPPLqpSSuZjVd1pU2 tOtg== X-Gm-Message-State: AOAM530xjcnidj8aD5Agj61skawxgDHQDYN+AbBolaONXCf4GIHFHCZN C8ysF4g1iIVPOVzYI+zUlp9ohso/L+PdCw== X-Google-Smtp-Source: ABdhPJzqpU4quQcAlrh7iYTv1GKA24hlTdwmBrr6Uz5kux8BFazQ5r+RtXhi9RiuAm819CncLUyzIw== X-Received: by 2002:a63:385c:: with SMTP id h28mr10888629pgn.472.1635289795571; Tue, 26 Oct 2021 16:09:55 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 12/51] tcg/optimize: Split out finish_folding Date: Tue, 26 Oct 2021 16:09:04 -0700 Message-Id: <20211026230943.1225890-13-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::435; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x435.google.com X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635290618980100001 Copy z_mask into OptContext, for writeback to the first output within the new function. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Luis Pires 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 066e635f73..368457f4a2 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -48,6 +48,9 @@ typedef struct OptContext { TCGContext *tcg; TCGOp *prev_mb; TCGTempSet temps_used; + + /* In flight values from optimization. */ + uint64_t z_mask; } OptContext; =20 static inline TempOptInfo *ts_info(TCGTemp *ts) @@ -629,6 +632,34 @@ static void copy_propagate(OptContext *ctx, TCGOp *op, } } =20 +static void finish_folding(OptContext *ctx, TCGOp *op) +{ + const TCGOpDef *def =3D &tcg_op_defs[op->opc]; + int i, nb_oargs; + + /* + * For an opcode that ends a BB, reset all temp data. + * We do no cross-BB optimization. + */ + if (def->flags & TCG_OPF_BB_END) { + memset(&ctx->temps_used, 0, sizeof(ctx->temps_used)); + ctx->prev_mb =3D NULL; + return; + } + + nb_oargs =3D def->nb_oargs; + for (i =3D 0; i < nb_oargs; i++) { + reset_temp(op->args[i]); + /* + * Save the corresponding known-zero bits mask for the + * first output argument (only one supported so far). + */ + if (i =3D=3D 0) { + arg_info(op->args[i])->z_mask =3D ctx->z_mask; + } + } +} + static bool fold_call(OptContext *ctx, TCGOp *op) { TCGContext *s =3D ctx->tcg; @@ -1122,6 +1153,7 @@ void tcg_optimize(TCGContext *s) partmask &=3D 0xffffffffu; affected &=3D 0xffffffffu; } + ctx.z_mask =3D z_mask; =20 if (partmask =3D=3D 0) { tcg_opt_gen_movi(&ctx, op, op->args[0], 0); @@ -1570,22 +1602,7 @@ void tcg_optimize(TCGContext *s) break; } =20 - /* Some of the folding above can change opc. */ - opc =3D op->opc; - def =3D &tcg_op_defs[opc]; - if (def->flags & TCG_OPF_BB_END) { - memset(&ctx.temps_used, 0, sizeof(ctx.temps_used)); - } else { - int nb_oargs =3D def->nb_oargs; - for (i =3D 0; i < nb_oargs; i++) { - reset_temp(op->args[i]); - /* Save the corresponding known-zero bits mask for the - first output argument (only one supported so far). */ - if (i =3D=3D 0) { - arg_info(op->args[i])->z_mask =3D z_mask; - } - } - } + finish_folding(&ctx, op); =20 /* Eliminate duplicate and redundant fence instructions. */ if (ctx.prev_mb) { --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635290095426957.9499693670109; Tue, 26 Oct 2021 16:14:55 -0700 (PDT) Received: from localhost ([::1]:36614 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVeg-00033X-9p for importer@patchew.org; Tue, 26 Oct 2021 19:14:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52842) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVZv-0002uP-BE for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:09:59 -0400 Received: from mail-pg1-x52a.google.com ([2607:f8b0:4864:20::52a]:39913) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVZt-0001x9-QI for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:09:59 -0400 Received: by mail-pg1-x52a.google.com with SMTP id g184so1023379pgc.6 for ; Tue, 26 Oct 2021 16:09:57 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.09.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:09:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=aQUcMu1Ri+jkcKMkTmUqdfPvjg+0V++WEX2k8DhqwDc=; b=uA3w2vqLSyCJDK9/reIpww/3X77kGTYIsMPMjpEaOVDFabWxzeGeOxR7KonlRumu8x 7V5Z340ye/OZEFH7uRdVrnCcQJgLsRvP5CmAdkZbVRBdRpoPTHgHcM774jCAj0FI9kpw B+RKDiW2jsO/QUVoj5CHX7AAo/KLs/nwKrvgnhgtDisvaY1Y2ccAXzwouVLLscyRzRSM KXvX30MTBf7V5VYvwdfTdW0iUXvP0ZXWGDxIZdfHPK/NNfSINES2Z2ggxuj5nBj84EgD 5zrD9XHTKfYgbsamx67vrksRxyJLZgL7m5oeiLf8TplvBhG3XQK93F9qMzzH2UzCR1BA Pbow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=aQUcMu1Ri+jkcKMkTmUqdfPvjg+0V++WEX2k8DhqwDc=; b=ikMy0OiEjxjbWSI1uYpP9EiTNkGKufD93pyGOOhjPJ2cnpRAahLeZVk6JECxvjj003 0PLpbh27MBZBrizkIDKHJEELfUY2NRNNpQw5bg593W+dRDHMWjkVDpRFHoxr/wp8HbR6 +BifP9J13DPSiM/5kxWGeRQlHJz87lObitiu99Wj5jgtJvLJ/jib2elqc5sN7++a+MH8 C14YSrUhrlcEo2mTo1ley4eOxiEFucgPk+CHS1x9vt0I9qFs4cVbSebz9ScMOG211dbA buL8+URFcAAB+zCLrBex5aw5WRxLOK71dMjaV9zT35h38vKPB9bCUOpjSDmPY/uzTFtN vczQ== X-Gm-Message-State: AOAM531lUGAtSig+qsVikfPaXEW74alqsCGQQnatXRxo1FrR2qubYQa3 fa416CemAXPvk+Kc21Se9oq47R14TZ8EBw== X-Google-Smtp-Source: ABdhPJz6FnN3eWQbmmD1RLtdSChsdgmvn439EZLObQgerT2YKRokEvj+325SihNOS9gZy8BcBne6EA== X-Received: by 2002:a63:9a12:: with SMTP id o18mr21311873pge.419.1635289796522; Tue, 26 Oct 2021 16:09:56 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 13/51] tcg/optimize: Use a boolean to avoid a mass of continues Date: Tue, 26 Oct 2021 16:09:05 -0700 Message-Id: <20211026230943.1225890-14-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52a; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635290096364100001 Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Luis Pires Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- tcg/optimize.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 368457f4a2..699476e2f1 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -713,6 +713,7 @@ void tcg_optimize(TCGContext *s) uint64_t z_mask, partmask, affected, tmp; TCGOpcode opc =3D op->opc; const TCGOpDef *def; + bool done =3D false; =20 /* Calls are special. */ if (opc =3D=3D INDEX_op_call) { @@ -1212,8 +1213,8 @@ void tcg_optimize(TCGContext *s) allocator where needed and possible. Also detect copies. */ switch (opc) { CASE_OP_32_64_VEC(mov): - tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[1]); - continue; + done =3D tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[1]); + break; =20 case INDEX_op_dup_vec: if (arg_is_const(op->args[1])) { @@ -1602,7 +1603,9 @@ void tcg_optimize(TCGContext *s) break; } =20 - finish_folding(&ctx, op); + if (!done) { + finish_folding(&ctx, op); + } =20 /* Eliminate duplicate and redundant fence instructions. */ if (ctx.prev_mb) { --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635290442158301.65103558317674; Tue, 26 Oct 2021 16:20:42 -0700 (PDT) Received: from localhost ([::1]:53542 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVkH-00060h-1Z for importer@patchew.org; Tue, 26 Oct 2021 19:20:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52856) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVZw-0002um-UB for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:01 -0400 Received: from mail-pg1-x531.google.com ([2607:f8b0:4864:20::531]:41745) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVZu-0001xJ-JT for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:09:59 -0400 Received: by mail-pg1-x531.google.com with SMTP id 83so1014117pgc.8 for ; Tue, 26 Oct 2021 16:09:58 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.09.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:09:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=nnJy1DPqTKH9tszR9agXW3yGGHUuzxkGQ+Lpc0L3P3o=; b=NBWay6pjTwR2VLfGzoCANQLV2FqMLnE/HhTqLsIYcGRFlFNWJUSjUwfrrX996aKT8G DiT6O6X0vgSUEP/LXdXyd6il/RC7BOiJ5U174zugMdktraaWvfFzqLdvwo6yXwCS2I8M szMQQoM6NjOp9QMy4gMa7jYDtEivpntDrPTbRzXQYBRKucHHuIXySqA1A7X/uQ62eswd ++5TUBN7zb1a5KLx9dHmoJXOn3/xnQIwOdgMsr6nBCJ/3AcHGfz8xgpaARYec6BRaJlp 3LDA0udfnifQ0n2phWTRXhpLciaU/6HHWPCS9j11XSJwUUrZTRm7hXzHxCrA1u6bnVrx 78Qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=nnJy1DPqTKH9tszR9agXW3yGGHUuzxkGQ+Lpc0L3P3o=; b=shTJli8r6wIgeLvQlzehYUY0yl78Ysszgk1ZU+bB/Kth2B15t1qDBpKF94H6bq4k9R EOENuxLNZwkF0/gRMzLe7kykGZgtexCdExC1R1GD+QTJb2stf8bx/QphAj2l4dQZupL9 Tr6KHCozTHSDYZRoTw+kQyVRHQ3N5h0O7+m4MqVFcfNl3CPgTzgHUXcc80NCHCL9GKkA XJPlbRHwTNEQoCsfDrKikpM3iH2W0XfyWTl/c6ZJfh42jPjfppAoMaCsdAgCAVv2TiaU NoEX7YbwoEZFdiLgOGH7X1IQ4jCf5j5EpfbS5l2mbAPI2ajY2xpuJ6PestwTBAePf8J5 xKbQ== X-Gm-Message-State: AOAM530QLH1HaOux18BHJ8yhn7UkcYYTDYtMuwysF2D7ZqzU1Rpc+/7R OTw/D/gRXAfQfGHyUeB/vVx2zL5n35NCtg== X-Google-Smtp-Source: ABdhPJwLSt8MR9kcU2Pi3HWPGD3PMFMnrfFOlQCoOvR+GCRGTkI7xbhlSaTD9vDtje03BsovBvgv5w== X-Received: by 2002:a63:8ac7:: with SMTP id y190mr13195487pgd.55.1635289797331; Tue, 26 Oct 2021 16:09:57 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 14/51] tcg/optimize: Split out fold_mb, fold_qemu_{ld,st} Date: Tue, 26 Oct 2021 16:09:06 -0700 Message-Id: <20211026230943.1225890-15-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::531; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x531.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635290442643100001 This puts the separate mb optimization into the same framework as the others. While fold_qemu_{ld,st} are currently identical, that won't last as more code gets moved. Reviewed-by: Luis Pires Reviewed-by: Philippe Mathieu-Daud=C3=A9 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 699476e2f1..159a5a9ee5 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -692,6 +692,44 @@ static bool fold_call(OptContext *ctx, TCGOp *op) return true; } =20 +static bool fold_mb(OptContext *ctx, TCGOp *op) +{ + /* Eliminate duplicate and redundant fence instructions. */ + if (ctx->prev_mb) { + /* + * Merge two barriers of the same type into one, + * or a weaker barrier into a stronger one, + * or two weaker barriers into a stronger one. + * mb X; mb Y =3D> mb X|Y + * mb; strl =3D> mb; st + * ldaq; mb =3D> ld; mb + * ldaq; strl =3D> ld; mb; st + * Other combinations are also merged into a strong + * barrier. This is stricter than specified but for + * the purposes of TCG is better than not optimizing. + */ + ctx->prev_mb->args[0] |=3D op->args[0]; + tcg_op_remove(ctx->tcg, op); + } else { + ctx->prev_mb =3D op; + } + return true; +} + +static bool fold_qemu_ld(OptContext *ctx, TCGOp *op) +{ + /* Opcodes that touch guest memory stop the mb optimization. */ + ctx->prev_mb =3D NULL; + return false; +} + +static bool fold_qemu_st(OptContext *ctx, TCGOp *op) +{ + /* Opcodes that touch guest memory stop the mb optimization. */ + ctx->prev_mb =3D NULL; + return false; +} + /* Propagate constants and copies, fold constant expressions. */ void tcg_optimize(TCGContext *s) { @@ -1599,6 +1637,19 @@ void tcg_optimize(TCGContext *s) } break; =20 + case INDEX_op_mb: + done =3D fold_mb(&ctx, op); + break; + case INDEX_op_qemu_ld_i32: + case INDEX_op_qemu_ld_i64: + done =3D fold_qemu_ld(&ctx, op); + break; + case INDEX_op_qemu_st_i32: + case INDEX_op_qemu_st8_i32: + case INDEX_op_qemu_st_i64: + done =3D fold_qemu_st(&ctx, op); + break; + default: break; } @@ -1606,43 +1657,5 @@ void tcg_optimize(TCGContext *s) if (!done) { finish_folding(&ctx, op); } - - /* Eliminate duplicate and redundant fence instructions. */ - if (ctx.prev_mb) { - switch (opc) { - case INDEX_op_mb: - /* Merge two barriers of the same type into one, - * or a weaker barrier into a stronger one, - * or two weaker barriers into a stronger one. - * mb X; mb Y =3D> mb X|Y - * mb; strl =3D> mb; st - * ldaq; mb =3D> ld; mb - * ldaq; strl =3D> ld; mb; st - * Other combinations are also merged into a strong - * barrier. This is stricter than specified but for - * the purposes of TCG is better than not optimizing. - */ - ctx.prev_mb->args[0] |=3D op->args[0]; - tcg_op_remove(s, op); - break; - - default: - /* Opcodes that end the block stop the optimization. */ - if ((def->flags & TCG_OPF_BB_END) =3D=3D 0) { - break; - } - /* fallthru */ - case INDEX_op_qemu_ld_i32: - case INDEX_op_qemu_ld_i64: - case INDEX_op_qemu_st_i32: - case INDEX_op_qemu_st8_i32: - case INDEX_op_qemu_st_i64: - /* Opcodes that touch guest memory stop the optimization. = */ - ctx.prev_mb =3D NULL; - break; - } - } else if (opc =3D=3D INDEX_op_mb) { - ctx.prev_mb =3D op; - } } } --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 163529097997977.2723169760892; Tue, 26 Oct 2021 16:29:39 -0700 (PDT) Received: from localhost ([::1]:50438 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVsw-0006Lf-QE for importer@patchew.org; Tue, 26 Oct 2021 19:29:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53084) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVaB-0003DV-Ng for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:15 -0400 Received: from mail-pf1-x429.google.com ([2607:f8b0:4864:20::429]:42593) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVZw-0001xR-Le for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:15 -0400 Received: by mail-pf1-x429.google.com with SMTP id m14so881340pfc.9 for ; Tue, 26 Oct 2021 16:09:59 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.09.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:09:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=2aCMzzpED1pnAsbhFWuSe8VI84HPP2h5WLYR7vcie50=; b=v/S1P1Z7olRdgjQTeA+/Hjnyd7e5kwwLEzKdvoFkdR9pNjiPw2szgssMaNLrkZN58H yk0qhrBOpINmhx8dzQDFWp28R5TBNwk5XMxDmacIzacC9SzH91eTu2GDb4kt8BNp/11P wA990nt+9AFM/95xL9GUu4VN8FhartKq1lysQbQV3yhiFVu11vgHRTDO7GYgqm+Z2J0C gq8XHMy2c/ztc1qKsRhpewh4Yk8Rwn49eSjm3ZNI1Y/6TolmqWctcdoAoz61gmJxq2K/ UFDTTPRptnuERkYsIM5ZFlQZUl3essC/95vmRiGeSD3t3300OBLWlWfZec69Y1JUqbXG 9ksg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=2aCMzzpED1pnAsbhFWuSe8VI84HPP2h5WLYR7vcie50=; b=E52o+oByneVv3v2OUO1PoqcuNubYRBCeEOg2E/jlYgLbaWoGpskCZEGjOSZeS76hEz rDkP/CX+xiBWksux7aISqaqdjp/hqPOaSVfsxzWsobIDuJKgPAO7UXxMT6/YxZ3DWV0B ypJxBKXcGLJgVJzZwdfb37Zc3db562uqYDoiS1F6Kp44+b8eEQS8fQ9iTaqXLd/XCpgu Fue9lxaIv8i09wMnFw2XhoebXhKFUQ9KNTTtEru/0VRtYltekG728J4lGHrBrUJAIG82 sER2UgjAnUo3VJFDv3QKr5deX3WqZBoUoBo6gkSTEDLjJD4p1niWIspbwJZb2zAhtu3l 1q8A== X-Gm-Message-State: AOAM533EDjUWJSxip0EYpd65rxO2Y/wIOfty4TPbf5/w0fn7/MEmgLKt 80AvW/R/X72cpnoV+8ktImhwZ3QftbtNyg== X-Google-Smtp-Source: ABdhPJxmonPChmiNsbpBngJ7idbVE09JzsYPji4ck38AbevadlxApp76oJO/NdTr006rTvCPq3YqgA== X-Received: by 2002:a63:2a88:: with SMTP id q130mr21061252pgq.169.1635289798215; Tue, 26 Oct 2021 16:09:58 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 15/51] tcg/optimize: Split out fold_const{1,2} Date: Tue, 26 Oct 2021 16:09:07 -0700 Message-Id: <20211026230943.1225890-16-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::429; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x429.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, T_SPF_TEMPERROR=0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635290981760100001 Split out a whole bunch of placeholder functions, which are currently identical. That won't last as more code gets moved. Use CASE_32_64_VEC for some logical operators that previously missed the addition of vectors. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Luis Pires Signed-off-by: Richard Henderson --- tcg/optimize.c | 271 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 219 insertions(+), 52 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 159a5a9ee5..5c3f8e8fcd 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -660,6 +660,60 @@ static void finish_folding(OptContext *ctx, TCGOp *op) } } =20 +/* + * The fold_* functions return true when processing is complete, + * usually by folding the operation to a constant or to a copy, + * and calling tcg_opt_gen_{mov,movi}. They may do other things, + * like collect information about the value produced, for use in + * optimizing a subsequent operation. + * + * These first fold_* functions are all helpers, used by other + * folders for more specific operations. + */ + +static bool fold_const1(OptContext *ctx, TCGOp *op) +{ + if (arg_is_const(op->args[1])) { + uint64_t t; + + t =3D arg_info(op->args[1])->val; + t =3D do_constant_folding(op->opc, t, 0); + return tcg_opt_gen_movi(ctx, op, op->args[0], t); + } + return false; +} + +static bool fold_const2(OptContext *ctx, TCGOp *op) +{ + if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) { + uint64_t t1 =3D arg_info(op->args[1])->val; + uint64_t t2 =3D arg_info(op->args[2])->val; + + t1 =3D do_constant_folding(op->opc, t1, t2); + return tcg_opt_gen_movi(ctx, op, op->args[0], t1); + } + return false; +} + +/* + * These outermost fold_ functions are sorted alphabetically. + */ + +static bool fold_add(OptContext *ctx, TCGOp *op) +{ + return fold_const2(ctx, op); +} + +static bool fold_and(OptContext *ctx, TCGOp *op) +{ + return fold_const2(ctx, op); +} + +static bool fold_andc(OptContext *ctx, TCGOp *op) +{ + return fold_const2(ctx, op); +} + static bool fold_call(OptContext *ctx, TCGOp *op) { TCGContext *s =3D ctx->tcg; @@ -692,6 +746,31 @@ static bool fold_call(OptContext *ctx, TCGOp *op) return true; } =20 +static bool fold_ctpop(OptContext *ctx, TCGOp *op) +{ + return fold_const1(ctx, op); +} + +static bool fold_divide(OptContext *ctx, TCGOp *op) +{ + return fold_const2(ctx, op); +} + +static bool fold_eqv(OptContext *ctx, TCGOp *op) +{ + return fold_const2(ctx, op); +} + +static bool fold_exts(OptContext *ctx, TCGOp *op) +{ + return fold_const1(ctx, op); +} + +static bool fold_extu(OptContext *ctx, TCGOp *op) +{ + return fold_const1(ctx, op); +} + static bool fold_mb(OptContext *ctx, TCGOp *op) { /* Eliminate duplicate and redundant fence instructions. */ @@ -716,6 +795,46 @@ static bool fold_mb(OptContext *ctx, TCGOp *op) return true; } =20 +static bool fold_mul(OptContext *ctx, TCGOp *op) +{ + return fold_const2(ctx, op); +} + +static bool fold_mul_highpart(OptContext *ctx, TCGOp *op) +{ + return fold_const2(ctx, op); +} + +static bool fold_nand(OptContext *ctx, TCGOp *op) +{ + return fold_const2(ctx, op); +} + +static bool fold_neg(OptContext *ctx, TCGOp *op) +{ + return fold_const1(ctx, op); +} + +static bool fold_nor(OptContext *ctx, TCGOp *op) +{ + return fold_const2(ctx, op); +} + +static bool fold_not(OptContext *ctx, TCGOp *op) +{ + return fold_const1(ctx, op); +} + +static bool fold_or(OptContext *ctx, TCGOp *op) +{ + return fold_const2(ctx, op); +} + +static bool fold_orc(OptContext *ctx, TCGOp *op) +{ + return fold_const2(ctx, op); +} + static bool fold_qemu_ld(OptContext *ctx, TCGOp *op) { /* Opcodes that touch guest memory stop the mb optimization. */ @@ -730,6 +849,26 @@ static bool fold_qemu_st(OptContext *ctx, TCGOp *op) return false; } =20 +static bool fold_remainder(OptContext *ctx, TCGOp *op) +{ + return fold_const2(ctx, op); +} + +static bool fold_shift(OptContext *ctx, TCGOp *op) +{ + return fold_const2(ctx, op); +} + +static bool fold_sub(OptContext *ctx, TCGOp *op) +{ + return fold_const2(ctx, op); +} + +static bool fold_xor(OptContext *ctx, TCGOp *op) +{ + return fold_const2(ctx, op); +} + /* Propagate constants and copies, fold constant expressions. */ void tcg_optimize(TCGContext *s) { @@ -1276,26 +1415,6 @@ void tcg_optimize(TCGContext *s) } break; =20 - CASE_OP_32_64(not): - CASE_OP_32_64(neg): - CASE_OP_32_64(ext8s): - CASE_OP_32_64(ext8u): - CASE_OP_32_64(ext16s): - CASE_OP_32_64(ext16u): - CASE_OP_32_64(ctpop): - case INDEX_op_ext32s_i64: - case INDEX_op_ext32u_i64: - case INDEX_op_ext_i32_i64: - case INDEX_op_extu_i32_i64: - case INDEX_op_extrl_i64_i32: - case INDEX_op_extrh_i64_i32: - if (arg_is_const(op->args[1])) { - tmp =3D do_constant_folding(opc, arg_info(op->args[1])->va= l, 0); - tcg_opt_gen_movi(&ctx, op, op->args[0], tmp); - continue; - } - break; - CASE_OP_32_64(bswap16): CASE_OP_32_64(bswap32): case INDEX_op_bswap64_i64: @@ -1307,36 +1426,6 @@ void tcg_optimize(TCGContext *s) } break; =20 - CASE_OP_32_64(add): - CASE_OP_32_64(sub): - CASE_OP_32_64(mul): - CASE_OP_32_64(or): - CASE_OP_32_64(and): - CASE_OP_32_64(xor): - CASE_OP_32_64(shl): - CASE_OP_32_64(shr): - CASE_OP_32_64(sar): - CASE_OP_32_64(rotl): - CASE_OP_32_64(rotr): - CASE_OP_32_64(andc): - CASE_OP_32_64(orc): - CASE_OP_32_64(eqv): - CASE_OP_32_64(nand): - CASE_OP_32_64(nor): - CASE_OP_32_64(muluh): - CASE_OP_32_64(mulsh): - CASE_OP_32_64(div): - CASE_OP_32_64(divu): - CASE_OP_32_64(rem): - CASE_OP_32_64(remu): - if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) { - tmp =3D do_constant_folding(opc, arg_info(op->args[1])->va= l, - arg_info(op->args[2])->val); - tcg_opt_gen_movi(&ctx, op, op->args[0], tmp); - continue; - } - break; - CASE_OP_32_64(clz): CASE_OP_32_64(ctz): if (arg_is_const(op->args[1])) { @@ -1637,9 +1726,73 @@ void tcg_optimize(TCGContext *s) } break; =20 + default: + break; + + /* ---------------------------------------------------------- */ + /* Sorted alphabetically by opcode as much as possible. */ + + CASE_OP_32_64_VEC(add): + done =3D fold_add(&ctx, op); + break; + CASE_OP_32_64_VEC(and): + done =3D fold_and(&ctx, op); + break; + CASE_OP_32_64_VEC(andc): + done =3D fold_andc(&ctx, op); + break; + CASE_OP_32_64(ctpop): + done =3D fold_ctpop(&ctx, op); + break; + CASE_OP_32_64(div): + CASE_OP_32_64(divu): + done =3D fold_divide(&ctx, op); + break; + CASE_OP_32_64(eqv): + done =3D fold_eqv(&ctx, op); + break; + CASE_OP_32_64(ext8s): + CASE_OP_32_64(ext16s): + case INDEX_op_ext32s_i64: + case INDEX_op_ext_i32_i64: + done =3D fold_exts(&ctx, op); + break; + CASE_OP_32_64(ext8u): + CASE_OP_32_64(ext16u): + case INDEX_op_ext32u_i64: + case INDEX_op_extu_i32_i64: + case INDEX_op_extrl_i64_i32: + case INDEX_op_extrh_i64_i32: + done =3D fold_extu(&ctx, op); + break; case INDEX_op_mb: done =3D fold_mb(&ctx, op); break; + CASE_OP_32_64(mul): + done =3D fold_mul(&ctx, op); + break; + CASE_OP_32_64(mulsh): + CASE_OP_32_64(muluh): + done =3D fold_mul_highpart(&ctx, op); + break; + CASE_OP_32_64(nand): + done =3D fold_nand(&ctx, op); + break; + CASE_OP_32_64(neg): + done =3D fold_neg(&ctx, op); + break; + CASE_OP_32_64(nor): + done =3D fold_nor(&ctx, op); + break; + CASE_OP_32_64_VEC(not): + done =3D fold_not(&ctx, op); + break; + CASE_OP_32_64_VEC(or): + done =3D fold_or(&ctx, op); + break; + CASE_OP_32_64_VEC(orc): + done =3D fold_orc(&ctx, op); + break; case INDEX_op_qemu_ld_i32: case INDEX_op_qemu_ld_i64: done =3D fold_qemu_ld(&ctx, op); @@ -1649,8 +1802,22 @@ void tcg_optimize(TCGContext *s) case INDEX_op_qemu_st_i64: done =3D fold_qemu_st(&ctx, op); break; - - default: + CASE_OP_32_64(rem): + CASE_OP_32_64(remu): + done =3D fold_remainder(&ctx, op); + break; + CASE_OP_32_64(rotl): + CASE_OP_32_64(rotr): + CASE_OP_32_64(sar): + CASE_OP_32_64(shl): + CASE_OP_32_64(shr): + done =3D fold_shift(&ctx, op); + break; + CASE_OP_32_64_VEC(sub): + done =3D fold_sub(&ctx, op); + break; + CASE_OP_32_64_VEC(xor): + done =3D fold_xor(&ctx, op); break; } =20 --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635291205848349.0932625139029; Tue, 26 Oct 2021 16:33:25 -0700 (PDT) Received: from localhost ([::1]:58934 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVwa-0003nk-D3 for importer@patchew.org; Tue, 26 Oct 2021 19:33:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53096) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVaD-0003Ej-5S for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:17 -0400 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]:51074) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVZw-0001xm-MI for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:15 -0400 Received: by mail-pj1-x1032.google.com with SMTP id gn3so658434pjb.0 for ; Tue, 26 Oct 2021 16:09:59 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.09.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:09:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=4b6zM17cF3RrWL3jUN3e39U/QFtejbDytYKYLpCpWYI=; b=qGrZc16LYjF+sTtGwwlQE03MP/oUCHQGAGto5nomfnZoUo6NHyR3rAywFzi7LBht8L TxfQErsaB9aeobAsLiik4b7Dr4bofyiH6vcFxAx5ZpHN8iAZszrXl9CMFianrACLCnes 11WXzGmSppfaRRW2icMpM9whEXp2YfAb4JIYZj2CHd3zXmgFmcDk8EaA5euf9JzQ7d9S 2jSPBhd+29KGAYjeAtUkH+eKBFxkzTHOmxutEz7/xOqGogbNyCzDN+KFYFB7MBvScGc2 mwqxEo1mW3KIglWfSm3e2cCaZXUXOSjH7kF2bIhc74tb7Hr2MI4gR312yjWPBKmGZTYd 3mGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=4b6zM17cF3RrWL3jUN3e39U/QFtejbDytYKYLpCpWYI=; b=Rx1zjTZoMotcOOwjfTFY27M7qg6snTKJI/1ozMJcVCQpdDsmRsqxIuEeYG+c/lwgQ2 U1Ft9g8zYeO432aLRUyZn7an1wt/bVC/+VJjiBuPblGKUPsF/y2KqPJUK3SEIAsCjh3r epCtUjg/FDuvBMVxRcmzN6uvII7jN/wy2yHzH+viXtGVlMqDq9Pi23MqVr4E9HUiBcHT YUBxuoojZKt9G5HEsE/cHfc4KZZZTvqIlb4ccReXmtPVM49xqT3gBpcAW3wg+a+7PMZc 309N8DFpG+dj9XmjfhMab7TVO//coddyw2enXlviBPLu5Nl8KSoGNFFNapRnnKXV88C/ v1dw== X-Gm-Message-State: AOAM530+ZuDrclBPiK6zbp4WTA86lM+NP5DvqIox8835aq7mFq1WNUe8 QH7jVfR+W9Jo7CeX6KDSzrJy8en/sKngEw== X-Google-Smtp-Source: ABdhPJzEKdSNWuC4ZVftIoASy7SIHuNwHXKpezbBsMr2xj6UhwOBG/0n+9WxMT5QjQCZhHZLe1e0zA== X-Received: by 2002:a17:90a:2c02:: with SMTP id m2mr1880325pjd.109.1635289799020; Tue, 26 Oct 2021 16:09:59 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 16/51] tcg/optimize: Split out fold_setcond2 Date: Tue, 26 Oct 2021 16:09:08 -0700 Message-Id: <20211026230943.1225890-17-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1032; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1032.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635291207879100001 Reduce some code duplication by folding the NE and EQ cases. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Luis Pires 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 5c3f8e8fcd..80e43deb8e 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -854,6 +854,75 @@ static bool fold_remainder(OptContext *ctx, TCGOp *op) return fold_const2(ctx, op); } =20 +static bool fold_setcond2(OptContext *ctx, TCGOp *op) +{ + TCGCond cond =3D op->args[5]; + int i =3D do_constant_folding_cond2(&op->args[1], &op->args[3], cond); + int inv =3D 0; + + if (i >=3D 0) { + goto do_setcond_const; + } + + switch (cond) { + case TCG_COND_LT: + case TCG_COND_GE: + /* + * Simplify LT/GE comparisons vs zero to a single compare + * vs the high word of the input. + */ + if (arg_is_const(op->args[3]) && arg_info(op->args[3])->val =3D=3D= 0 && + arg_is_const(op->args[4]) && arg_info(op->args[4])->val =3D=3D= 0) { + goto do_setcond_high; + } + break; + + case TCG_COND_NE: + inv =3D 1; + QEMU_FALLTHROUGH; + case TCG_COND_EQ: + /* + * Simplify EQ/NE comparisons where one of the pairs + * can be simplified. + */ + i =3D do_constant_folding_cond(INDEX_op_setcond_i32, op->args[1], + op->args[3], cond); + switch (i ^ inv) { + case 0: + goto do_setcond_const; + case 1: + goto do_setcond_high; + } + + i =3D do_constant_folding_cond(INDEX_op_setcond_i32, op->args[2], + op->args[4], cond); + switch (i ^ inv) { + case 0: + goto do_setcond_const; + case 1: + op->args[2] =3D op->args[3]; + op->args[3] =3D cond; + op->opc =3D INDEX_op_setcond_i32; + break; + } + break; + + default: + break; + + do_setcond_high: + op->args[1] =3D op->args[2]; + op->args[2] =3D op->args[4]; + op->args[3] =3D cond; + op->opc =3D INDEX_op_setcond_i32; + break; + } + return false; + + do_setcond_const: + return tcg_opt_gen_movi(ctx, op, op->args[0], i); +} + static bool fold_shift(OptContext *ctx, TCGOp *op) { return fold_const2(ctx, op); @@ -1653,79 +1722,6 @@ void tcg_optimize(TCGContext *s) } break; =20 - case INDEX_op_setcond2_i32: - i =3D do_constant_folding_cond2(&op->args[1], &op->args[3], - op->args[5]); - if (i >=3D 0) { - do_setcond_const: - tcg_opt_gen_movi(&ctx, op, op->args[0], i); - continue; - } - if ((op->args[5] =3D=3D TCG_COND_LT || op->args[5] =3D=3D TCG_= COND_GE) - && arg_is_const(op->args[3]) - && arg_info(op->args[3])->val =3D=3D 0 - && arg_is_const(op->args[4]) - && arg_info(op->args[4])->val =3D=3D 0) { - /* Simplify LT/GE comparisons vs zero to a single compare - vs the high word of the input. */ - do_setcond_high: - reset_temp(op->args[0]); - arg_info(op->args[0])->z_mask =3D 1; - op->opc =3D INDEX_op_setcond_i32; - op->args[1] =3D op->args[2]; - op->args[2] =3D op->args[4]; - op->args[3] =3D op->args[5]; - break; - } - if (op->args[5] =3D=3D TCG_COND_EQ) { - /* Simplify EQ comparisons where one of the pairs - can be simplified. */ - i =3D do_constant_folding_cond(INDEX_op_setcond_i32, - op->args[1], op->args[3], - TCG_COND_EQ); - if (i =3D=3D 0) { - goto do_setcond_const; - } else if (i > 0) { - goto do_setcond_high; - } - i =3D do_constant_folding_cond(INDEX_op_setcond_i32, - op->args[2], op->args[4], - TCG_COND_EQ); - if (i =3D=3D 0) { - goto do_setcond_high; - } else if (i < 0) { - break; - } - do_setcond_low: - reset_temp(op->args[0]); - arg_info(op->args[0])->z_mask =3D 1; - op->opc =3D INDEX_op_setcond_i32; - op->args[2] =3D op->args[3]; - op->args[3] =3D op->args[5]; - break; - } - if (op->args[5] =3D=3D TCG_COND_NE) { - /* Simplify NE comparisons where one of the pairs - can be simplified. */ - i =3D do_constant_folding_cond(INDEX_op_setcond_i32, - op->args[1], op->args[3], - TCG_COND_NE); - if (i =3D=3D 0) { - goto do_setcond_high; - } else if (i > 0) { - goto do_setcond_const; - } - i =3D do_constant_folding_cond(INDEX_op_setcond_i32, - op->args[2], op->args[4], - TCG_COND_NE); - if (i =3D=3D 0) { - goto do_setcond_low; - } else if (i > 0) { - goto do_setcond_const; - } - } - break; - default: break; =20 @@ -1813,6 +1809,9 @@ void tcg_optimize(TCGContext *s) CASE_OP_32_64(shr): done =3D fold_shift(&ctx, op); break; + case INDEX_op_setcond2_i32: + done =3D fold_setcond2(&ctx, op); + break; CASE_OP_32_64_VEC(sub): done =3D fold_sub(&ctx, op); break; --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635290622647226.24962439744365; Tue, 26 Oct 2021 16:23:42 -0700 (PDT) Received: from localhost ([::1]:34298 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVnB-0003gR-EN for importer@patchew.org; Tue, 26 Oct 2021 19:23:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52968) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVa3-0002zp-BU for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:07 -0400 Received: from mail-pf1-x431.google.com ([2607:f8b0:4864:20::431]:44909) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVZz-0001y2-7K for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:07 -0400 Received: by mail-pf1-x431.google.com with SMTP id a26so869734pfr.11 for ; Tue, 26 Oct 2021 16:10:00 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.09.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:09:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=wwLC3SIjtchiXP//8YOMxzaxe2iWQlOarPylhYlRTg4=; b=RkYy9Jj7zaqXS+PVurc6xwhGiWKpAPiFvIVVTKeB9rKWgjiAul4MsSYg0AkIthJVrg gbwS2XrWm30PJ8RpvlfTMNri4gjDMrpKVBRJ4PNqRsBrVSE73Bt3T7bvk1c56m1yEcGg SifuoqyNf96RrTJtNOEuJ48FQT8C0lKtUTqJEzL1L2F+03ie1Nikc0qMsa67POavUXH+ Z/HdeDLwdmBiwMytjWaFdCsoCyEt2Ys97RqUgmXBjBsZiJeDHs3i7iw2gcMYO1oFAkeM kPSQ7JvXw2LXRORSuO+S8GHJScDC1BwPNma0aLeqb03xV505GIKr5RKJe8+DwjYZQiwF 0v/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=wwLC3SIjtchiXP//8YOMxzaxe2iWQlOarPylhYlRTg4=; b=6baN19bxp+91Rk6/VVBDFPybS+8KK0f94sq8RiNTGAHjoWuP78nCOu/Hrsu7Mp6Rq6 9cOfrQUwfLlpPz6qYkkTvF0yTTyoBSwPLOaJYGGz9HhsPyc8tTCngRg7/cO9RPPlp3J5 kpbFnuH2EiufzzyqEX2FfIHwP2+Ly9hkkT62jP2wIjA9O0RpNEXU042V/SlWgc74ZKx2 yJEdqQU3a8NZtLeE7eV9rB02FyMLZi48QYfwKRJzghiohDiVL1Y0/hUqd06+knVM+25c Oe3PUab8srCetGdOFjwGIRX+Ypqna17JgYXtdqpI+3sn+//AlKn+jpd1P9AWSTK15gr/ daNQ== X-Gm-Message-State: AOAM532AZFrNTmk77uogVx1ObKevHU1Yicoj885IoulGdppTjwzJXHk9 brcD47wTirg/vtnYCrdh9ODEgqZi4j986g== X-Google-Smtp-Source: ABdhPJw7faS1drL2Metv45DI8UNo7l/z+Ua/0LYiHT6e4x9QEWeZmJdwGroRO+EwN5UI0pP3qYUrJw== X-Received: by 2002:a05:6a00:22c1:b0:47c:28f5:7b9c with SMTP id f1-20020a056a0022c100b0047c28f57b9cmr1379387pfj.80.1635289799833; Tue, 26 Oct 2021 16:09:59 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 17/51] tcg/optimize: Split out fold_brcond2 Date: Tue, 26 Oct 2021 16:09:09 -0700 Message-Id: <20211026230943.1225890-18-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-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::431; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x431.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635290623014100001 Content-Type: text/plain; charset="utf-8" Reduce some code duplication by folding the NE and EQ cases. Reviewed-by: Luis Pires Signed-off-by: Richard Henderson --- tcg/optimize.c | 159 +++++++++++++++++++++++++------------------------ 1 file changed, 81 insertions(+), 78 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 80e43deb8e..c9db14f1d0 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -714,6 +714,84 @@ static bool fold_andc(OptContext *ctx, TCGOp *op) return fold_const2(ctx, op); } =20 +static bool fold_brcond2(OptContext *ctx, TCGOp *op) +{ + TCGCond cond =3D op->args[4]; + int i =3D do_constant_folding_cond2(&op->args[0], &op->args[2], cond); + TCGArg label =3D op->args[5]; + int inv =3D 0; + + if (i >=3D 0) { + goto do_brcond_const; + } + + switch (cond) { + case TCG_COND_LT: + case TCG_COND_GE: + /* + * Simplify LT/GE comparisons vs zero to a single compare + * vs the high word of the input. + */ + if (arg_is_const(op->args[2]) && arg_info(op->args[2])->val =3D=3D= 0 && + arg_is_const(op->args[3]) && arg_info(op->args[3])->val =3D=3D= 0) { + goto do_brcond_high; + } + break; + + case TCG_COND_NE: + inv =3D 1; + QEMU_FALLTHROUGH; + case TCG_COND_EQ: + /* + * Simplify EQ/NE comparisons where one of the pairs + * can be simplified. + */ + i =3D do_constant_folding_cond(INDEX_op_brcond_i32, op->args[0], + op->args[2], cond); + switch (i ^ inv) { + case 0: + goto do_brcond_const; + case 1: + goto do_brcond_high; + } + + i =3D do_constant_folding_cond(INDEX_op_brcond_i32, op->args[1], + op->args[3], cond); + switch (i ^ inv) { + case 0: + goto do_brcond_const; + case 1: + op->opc =3D INDEX_op_brcond_i32; + op->args[1] =3D op->args[2]; + op->args[2] =3D cond; + op->args[3] =3D label; + break; + } + break; + + default: + break; + + do_brcond_high: + op->opc =3D INDEX_op_brcond_i32; + op->args[0] =3D op->args[1]; + op->args[1] =3D op->args[3]; + op->args[2] =3D cond; + op->args[3] =3D label; + break; + + do_brcond_const: + if (i =3D=3D 0) { + tcg_op_remove(ctx->tcg, op); + return true; + } + op->opc =3D INDEX_op_br; + op->args[0] =3D label; + break; + } + return false; +} + static bool fold_call(OptContext *ctx, TCGOp *op) { TCGContext *s =3D ctx->tcg; @@ -1644,84 +1722,6 @@ void tcg_optimize(TCGContext *s) } break; =20 - case INDEX_op_brcond2_i32: - i =3D do_constant_folding_cond2(&op->args[0], &op->args[2], - op->args[4]); - if (i =3D=3D 0) { - do_brcond_false: - tcg_op_remove(s, op); - continue; - } - if (i > 0) { - do_brcond_true: - op->opc =3D opc =3D INDEX_op_br; - op->args[0] =3D op->args[5]; - break; - } - if ((op->args[4] =3D=3D TCG_COND_LT || op->args[4] =3D=3D TCG_= COND_GE) - && arg_is_const(op->args[2]) - && arg_info(op->args[2])->val =3D=3D 0 - && arg_is_const(op->args[3]) - && arg_info(op->args[3])->val =3D=3D 0) { - /* Simplify LT/GE comparisons vs zero to a single compare - vs the high word of the input. */ - do_brcond_high: - op->opc =3D opc =3D INDEX_op_brcond_i32; - op->args[0] =3D op->args[1]; - op->args[1] =3D op->args[3]; - op->args[2] =3D op->args[4]; - op->args[3] =3D op->args[5]; - break; - } - if (op->args[4] =3D=3D TCG_COND_EQ) { - /* Simplify EQ comparisons where one of the pairs - can be simplified. */ - i =3D do_constant_folding_cond(INDEX_op_brcond_i32, - op->args[0], op->args[2], - TCG_COND_EQ); - if (i =3D=3D 0) { - goto do_brcond_false; - } else if (i > 0) { - goto do_brcond_high; - } - i =3D do_constant_folding_cond(INDEX_op_brcond_i32, - op->args[1], op->args[3], - TCG_COND_EQ); - if (i =3D=3D 0) { - goto do_brcond_false; - } else if (i < 0) { - break; - } - do_brcond_low: - memset(&ctx.temps_used, 0, sizeof(ctx.temps_used)); - op->opc =3D INDEX_op_brcond_i32; - op->args[1] =3D op->args[2]; - op->args[2] =3D op->args[4]; - op->args[3] =3D op->args[5]; - break; - } - if (op->args[4] =3D=3D TCG_COND_NE) { - /* Simplify NE comparisons where one of the pairs - can be simplified. */ - i =3D do_constant_folding_cond(INDEX_op_brcond_i32, - op->args[0], op->args[2], - TCG_COND_NE); - if (i =3D=3D 0) { - goto do_brcond_high; - } else if (i > 0) { - goto do_brcond_true; - } - i =3D do_constant_folding_cond(INDEX_op_brcond_i32, - op->args[1], op->args[3], - TCG_COND_NE); - if (i =3D=3D 0) { - goto do_brcond_low; - } else if (i > 0) { - goto do_brcond_true; - } - } - break; - default: break; =20 @@ -1737,6 +1737,9 @@ void tcg_optimize(TCGContext *s) CASE_OP_32_64_VEC(andc): done =3D fold_andc(&ctx, op); break; + case INDEX_op_brcond2_i32: + done =3D fold_brcond2(&ctx, op); + break; CASE_OP_32_64(ctpop): done =3D fold_ctpop(&ctx, op); break; --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635290676344517.3724913807151; Tue, 26 Oct 2021 16:24:36 -0700 (PDT) Received: from localhost ([::1]:37170 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVo3-0005cB-A9 for importer@patchew.org; Tue, 26 Oct 2021 19:24:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52920) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVa1-0002yh-Qr for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:05 -0400 Received: from mail-pf1-x434.google.com ([2607:f8b0:4864:20::434]:46715) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVZz-0001yC-7N for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:05 -0400 Received: by mail-pf1-x434.google.com with SMTP id x66so862815pfx.13 for ; Tue, 26 Oct 2021 16:10:01 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.09.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:10:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=CFsfCOujg6xp28y0o9M8YysK5F5Ff4YXOa1Luu+j29I=; b=k7hI726Wfc6dC5/ziKhwNJVwtTa+jmSFf8Db6lTHOkJt48h0BV44mUmDIo4I801X8I BHAESc41AgeEva+2asQ3/hgYWbZkKOG5drybMLe5lTnHh/e2p0wSfna/50TkGkgkHyqP VmHH/7fXkTRfBkpzzga0/P82tpD7OAr9WQpYrEj7mbFIIr6Dukfr8ZiQ0QfCeF6KS/Xx oDfoHu7y888xvSP+1i2uY0FVPeNMfLx8BVt3EszbRtOpEH7yGI6NbIfRmeDlMHE6ZB0X m027uXc9opm6KHeEvCAjUQBxepl/LKJM3bSVtOWxxiMrfrmsnXPI4Zw+auUQhaSpmo+u ep8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=CFsfCOujg6xp28y0o9M8YysK5F5Ff4YXOa1Luu+j29I=; b=J8MzuXFIf9ZAQPUoRY4uBPcHt5BJxGF4BIJOxWW977DofxPJmk+8o631bFaTL8cB20 rFp5nSp2C2J7H9gYvzS6YtzpsvYVCTmrmCIuWJu4aXjPHtjUil4UwtFaPhLLhq2KdFkb ELhM46kJ8MEn0qrH3nLF+VuK2Pb1DLMCdCWSWXJZdkSrqXv35lSoE6iIZvKuQJ2NYQRG x+mfcqUsR+puYlMFk9erx2WRAYSJtSPLFwjLnWrbIlpI0EeGXX3p5NyIydXv5cc45u2A tfcu8a3vhUgn0yKf4XloGrptf0IzrNTlvHW+TDaIRwk+lxzFc3ZbpqCvNH8XZfBq5Azg BVxQ== X-Gm-Message-State: AOAM530hYyTKK99J9Z2W+35637+BmPgkTPsBwHBaK1w1axo87MTPlM9S 8WrW292HoG8PGIc/amzxs3zfMyzxW3ssgQ== X-Google-Smtp-Source: ABdhPJxHy8KOHUfYyPUy93/xnC5945pxMU9OuE5quF2aD7WWKNCE/RgMPOtygR3Gh48qw/GHmIn4yQ== X-Received: by 2002:a63:618d:: with SMTP id v135mr13947990pgb.79.1635289800905; Tue, 26 Oct 2021 16:10:00 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 18/51] tcg/optimize: Split out fold_brcond Date: Tue, 26 Oct 2021 16:09:10 -0700 Message-Id: <20211026230943.1225890-19-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::434; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x434.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635290677234100001 Reviewed-by: Luis Pires Reviewed-by: Philippe Mathieu-Daud=C3=A9 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 c9db14f1d0..24ba6d2830 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -714,6 +714,22 @@ static bool fold_andc(OptContext *ctx, TCGOp *op) return fold_const2(ctx, op); } =20 +static bool fold_brcond(OptContext *ctx, TCGOp *op) +{ + TCGCond cond =3D op->args[2]; + int i =3D do_constant_folding_cond(op->opc, op->args[0], op->args[1], = cond); + + if (i =3D=3D 0) { + tcg_op_remove(ctx->tcg, op); + return true; + } + if (i > 0) { + op->opc =3D INDEX_op_br; + op->args[0] =3D op->args[3]; + } + return false; +} + static bool fold_brcond2(OptContext *ctx, TCGOp *op) { TCGCond cond =3D op->args[4]; @@ -1641,20 +1657,6 @@ void tcg_optimize(TCGContext *s) } break; =20 - CASE_OP_32_64(brcond): - i =3D do_constant_folding_cond(opc, op->args[0], - op->args[1], op->args[2]); - if (i =3D=3D 0) { - tcg_op_remove(s, op); - continue; - } else if (i > 0) { - memset(&ctx.temps_used, 0, sizeof(ctx.temps_used)); - op->opc =3D opc =3D INDEX_op_br; - op->args[0] =3D op->args[3]; - break; - } - break; - CASE_OP_32_64(movcond): i =3D do_constant_folding_cond(opc, op->args[1], op->args[2], op->args[5]); @@ -1737,6 +1739,9 @@ void tcg_optimize(TCGContext *s) CASE_OP_32_64_VEC(andc): done =3D fold_andc(&ctx, op); break; + CASE_OP_32_64(brcond): + done =3D fold_brcond(&ctx, op); + break; case INDEX_op_brcond2_i32: done =3D fold_brcond2(&ctx, op); break; --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 16352903022781017.8426990550691; Tue, 26 Oct 2021 16:18:22 -0700 (PDT) Received: from localhost ([::1]:45156 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVi0-0000Ug-V2 for importer@patchew.org; Tue, 26 Oct 2021 19:18:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52980) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVa3-00030E-Vi for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:08 -0400 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]:41734) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVZz-0001yT-DH for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:07 -0400 Received: by mail-pj1-x102b.google.com with SMTP id na16-20020a17090b4c1000b0019f5bb661f9so688764pjb.0 for ; Tue, 26 Oct 2021 16:10:02 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.10.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:10:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=CEAmAjtRAA8VTRQA9Y1dByLl7XumxO8Ow9/VzdNZDew=; b=UObz/MYgYViruDx4QjWLTHmfokG55Zu93zCVAU+71KM+ItHm+oHi3J8aozQAI/FXSL ARjhh+Z1KCWrObCEImWFK0ro6If5xT1wOKvC29bb6xseIoOjItaQl7ygP0GCnYWErVmo WWblmFhLSUEAdE/E7WpHX9ok/9fYVIZM/YJIdYnTaWUivYbADyUaE0vxBYA+4Wg/zUHS CWUHgosIY1dHx8Vv6L+4b2uEBx4vl0qpxCt1Fn0s1ReAqlxuS5+Whwm/bvisXcMmfk+0 w0LbYClFgJyUwnpzwzwaAaiqsaP+TR9kMA6V1kQcrn6/7AHFrxFTcX8N9XtQMI4ckl36 qiZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=CEAmAjtRAA8VTRQA9Y1dByLl7XumxO8Ow9/VzdNZDew=; b=N1Tg+oBj/24zTcPYH2usHzmxCZMDYG373BIO0jDzUdgHHY/xjIoa7Me6/7SR7Vgv7o BSFNkaMfdkqFRTT4mqCm5ODlreKT5Lwc9joTUISiKPKSYRCTqXtxTX6GFxcH6VSNr6Nd lWPWN/111YiwgtzmTtTnjmcCDkL4CG9kMVeubmMcuSGXgFRF6rc6WWbACKjwcqPjAfZp QQZPCILN3fzC4OcPYAr8u+ST4cotBydBWvgO8ALPanZmupO8kyxPzC7eRkL+O8p7T3pS ZL/1rQ3hkVGQADemFajjIFSHI/DyZZeq+b5It0APSoul6KDoOcDUMS2CWW0q6dbEsBpJ BJBQ== X-Gm-Message-State: AOAM532TOavsO9TAl6Wceak+CaecYFravQV9uh9JOSdzTOfXu6MvHCzN Jqm8GqV8u8N7a2D2G8G9IgzffBoUltY+nQ== X-Google-Smtp-Source: ABdhPJwAO4apW8vmmW05Xb4uRe+G5XSJnihOeUk8YnAJnjH0+95YSetuTWJa1I3Q5wO7Z2+iDpiPrA== X-Received: by 2002:a17:90a:fe8a:: with SMTP id co10mr1868151pjb.183.1635289801911; Tue, 26 Oct 2021 16:10:01 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 19/51] tcg/optimize: Split out fold_setcond Date: Tue, 26 Oct 2021 16:09:11 -0700 Message-Id: <20211026230943.1225890-20-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102b; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102b.google.com X-Spam_score_int: -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: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635290303199100002 Reviewed-by: Luis Pires Reviewed-by: Philippe Mathieu-Daud=C3=A9 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 24ba6d2830..f79cb44944 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -948,6 +948,17 @@ static bool fold_remainder(OptContext *ctx, TCGOp *op) return fold_const2(ctx, op); } =20 +static bool fold_setcond(OptContext *ctx, TCGOp *op) +{ + TCGCond cond =3D op->args[3]; + int i =3D do_constant_folding_cond(op->opc, op->args[1], op->args[2], = cond); + + if (i >=3D 0) { + return tcg_opt_gen_movi(ctx, op, op->args[0], i); + } + return false; +} + static bool fold_setcond2(OptContext *ctx, TCGOp *op) { TCGCond cond =3D op->args[5]; @@ -1648,15 +1659,6 @@ void tcg_optimize(TCGContext *s) } break; =20 - CASE_OP_32_64(setcond): - i =3D do_constant_folding_cond(opc, op->args[1], - op->args[2], op->args[3]); - if (i >=3D 0) { - tcg_opt_gen_movi(&ctx, op, op->args[0], i); - continue; - } - break; - CASE_OP_32_64(movcond): i =3D do_constant_folding_cond(opc, op->args[1], op->args[2], op->args[5]); @@ -1817,6 +1819,9 @@ void tcg_optimize(TCGContext *s) CASE_OP_32_64(shr): done =3D fold_shift(&ctx, op); break; + CASE_OP_32_64(setcond): + done =3D fold_setcond(&ctx, op); + break; case INDEX_op_setcond2_i32: done =3D fold_setcond2(&ctx, op); break; --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635290783065405.55840412677026; Tue, 26 Oct 2021 16:26:23 -0700 (PDT) Received: from localhost ([::1]:42662 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVpm-00010k-1H for importer@patchew.org; Tue, 26 Oct 2021 19:26:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52996) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVa4-00031d-NS for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:08 -0400 Received: from mail-pf1-x430.google.com ([2607:f8b0:4864:20::430]:36664) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVa0-0001yu-Kw for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:08 -0400 Received: by mail-pf1-x430.google.com with SMTP id m26so914575pff.3 for ; Tue, 26 Oct 2021 16:10:04 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.10.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:10:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=l1Q9hVmZCD5h+WSzcvXil606EiQ6sWYW4OegtZB7+1g=; b=t2zJGdFpjGdBLZ2Ew6eukePKpQgIxDyGRpx4VM+gyN+xedGco717JytV5rs3WchecV sbC1HXBTuD002hP1vpGYLmK8lJDYug9UQ/C94rXpFoWtJfgHCAGVBDgJYmmYln9JTyzE L4cFs8IARcU64/HR3MPK5uCk5kzu/r7p7MWe2+/6b0H/ok5gIzv2TXC7J/w+44wIAmAv T+oqhUpj6jqY3cR5pOKb1wSX+i3dLYflbUMvGgJqLEaa0VXylE2UTCN91p6aKEGBwBjQ p9iyb3sECvSVg0f6UPqYKncSXLIYYMKfWTeokJrZAS9qktuvXY6QgZFrNGGyBeyVZplW H3Vw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=l1Q9hVmZCD5h+WSzcvXil606EiQ6sWYW4OegtZB7+1g=; b=PtIt+5jeNlBM6j5bhqK1xskZSrw2F5PkpfR40NHHHY/ZWTvnfNXVH2a/lQvK72iyE7 UnBHU3xSo5+yszDdNNhMYufi2HIORZ7q7mwgCJdvw9dR12mJIjHew2qxqch5omdmkGoh wGLRU7WoOOBogZYTlgyyWkaKYycLGZmW5e/4SV3/MY5rUz7yqLVqfELJ6yYnnO10EGuz trDE/Kmsa2uuJ1PwZ6QV6moCbAkum8hpAAeswRKiRfhiIBuRWFxGs3naEpFBdPb4+Nap edwTW63X/hegFYmeuQpEvGFxFv/8Yt7zVjwrhKx3rqNcs1Ox4DCVb0zYln/GKHduIIKH ooMg== X-Gm-Message-State: AOAM533vDe/uwtQOlc4kklb+ptQJMtm7c7jYce8iEcQmtL9aBtqkxL3x NfSC82AvCy/Eb1KucLa0KkUCQX7BcgwtQg== X-Google-Smtp-Source: ABdhPJxl6ib6VSFhHbmk0vR9+YaCUfLb3/Ud79kiB0IAimldxI+fWvAVkSNtAybxoqMTT8O1hzu7ng== X-Received: by 2002:a63:1d58:: with SMTP id d24mr21663917pgm.316.1635289802865; Tue, 26 Oct 2021 16:10:02 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 20/51] tcg/optimize: Split out fold_mulu2_i32 Date: Tue, 26 Oct 2021 16:09:12 -0700 Message-Id: <20211026230943.1225890-21-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::430; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x430.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635290785035100003 Reviewed-by: Luis Pires Reviewed-by: Philippe Mathieu-Daud=C3=A9 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 f79cb44944..805522f99d 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -899,6 +899,24 @@ static bool fold_mul_highpart(OptContext *ctx, TCGOp *= op) return fold_const2(ctx, op); } =20 +static bool fold_mulu2_i32(OptContext *ctx, TCGOp *op) +{ + if (arg_is_const(op->args[2]) && arg_is_const(op->args[3])) { + uint32_t a =3D arg_info(op->args[2])->val; + uint32_t b =3D arg_info(op->args[3])->val; + uint64_t r =3D (uint64_t)a * b; + TCGArg rl, rh; + TCGOp *op2 =3D tcg_op_insert_before(ctx->tcg, op, INDEX_op_mov_i32= ); + + rl =3D op->args[0]; + rh =3D op->args[1]; + tcg_opt_gen_movi(ctx, op, rl, (int32_t)r); + tcg_opt_gen_movi(ctx, op2, rh, (int32_t)(r >> 32)); + return true; + } + return false; +} + static bool fold_nand(OptContext *ctx, TCGOp *op) { return fold_const2(ctx, op); @@ -1710,22 +1728,6 @@ void tcg_optimize(TCGContext *s) } break; =20 - case INDEX_op_mulu2_i32: - if (arg_is_const(op->args[2]) && arg_is_const(op->args[3])) { - uint32_t a =3D arg_info(op->args[2])->val; - uint32_t b =3D arg_info(op->args[3])->val; - uint64_t r =3D (uint64_t)a * b; - TCGArg rl, rh; - TCGOp *op2 =3D tcg_op_insert_before(s, op, INDEX_op_mov_i3= 2); - - rl =3D op->args[0]; - rh =3D op->args[1]; - tcg_opt_gen_movi(&ctx, op, rl, (int32_t)r); - tcg_opt_gen_movi(&ctx, op2, rh, (int32_t)(r >> 32)); - continue; - } - break; - default: break; =20 @@ -1781,6 +1783,9 @@ void tcg_optimize(TCGContext *s) CASE_OP_32_64(muluh): done =3D fold_mul_highpart(&ctx, op); break; + case INDEX_op_mulu2_i32: + done =3D fold_mulu2_i32(&ctx, op); + break; CASE_OP_32_64(nand): done =3D fold_nand(&ctx, op); break; --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635290776114279.21999120071587; Tue, 26 Oct 2021 16:26:16 -0700 (PDT) Received: from localhost ([::1]:41962 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVpf-0000UI-31 for importer@patchew.org; Tue, 26 Oct 2021 19:26:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52994) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVa4-00031a-NY for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:08 -0400 Received: from mail-pg1-x529.google.com ([2607:f8b0:4864:20::529]:39913) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVa1-0001z1-FQ for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:08 -0400 Received: by mail-pg1-x529.google.com with SMTP id g184so1023648pgc.6 for ; Tue, 26 Oct 2021 16:10:04 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.10.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:10:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=XCdKX5lGX4jVtgmDyFNtAjJPKoYBkr5rEDOGi0sGeW8=; b=XpaidSdnAHeV5T6rqwkPGY+qCDRCp1MUDijPjY673FG5OEqtkC2XznyTudrEOoSvi1 Nnv/ecf9xStgTjTajE0U7J9nkXMHAOfgtWDvdN2iuFs5yc+SxCPfXw0vzsoHn1hojuZU HHV4fXuTaI+LW/VvJ3bSkwsU2k9O78Opo5Ilgk+YGndXpuaAcO9lgSJ8IzPBRvUdSRyK PemBIs++K3QaPNXHXUWxjTV2hXHknU9VgDwmcgn8LxbwvqdkohZqZHPdFFu+pG9CK2JI NEpEmD9Qx7Fy8f6eCZKO4bQKn1S7i8MWyYRmDMsFbpPq0aeacuvw3IG6D1Z4vfTTG5bt VMww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=XCdKX5lGX4jVtgmDyFNtAjJPKoYBkr5rEDOGi0sGeW8=; b=pOWZ3QlCfM0NU3OZInoeaqlH9/vtx3au9kX/ma1uaLyXH6iELIqmpSViJag73Sn7kD HfiflWLsES1XtvBKhvD0x9FbY7iEOjem6lQFaw0q1/Pr8tWBR/4MZhSIFqPIaU1O06gz HnRxL15ISRL/Epzd6Yntkmg/y3+DNUchBBokw/r/JQgnWcZIjSEY+grTjr7w/dHoUpj1 exf2JUuwqlt+RP3nMbCHc+ktr6KWOHG9AqKhfqSMXq23UgoRDPy1S4YHX+0iA60KjvZq chr8yJ4vwbesvrD7HPkr9wNSFJHT/FMaIl/AW6LczSwzk417vao124h4k9rkFFUPI6Jm mNwA== X-Gm-Message-State: AOAM531gfVJf5RWVf72a0IHuTV5CNgp/v1crKpwWOQ+EEo5bn4zd1rP2 uyzZXvjms73XSF2LX9aVJtrn7/aCN3FjRg== X-Google-Smtp-Source: ABdhPJxfiAqBJtnRdLl1jLNvHKDsiiaQP8lS4UFSp1KsdwCgimrZunIeHQVRsb+Q2vCsvh8cffn08Q== X-Received: by 2002:a63:b91c:: with SMTP id z28mr21014061pge.393.1635289803775; Tue, 26 Oct 2021 16:10:03 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 21/51] tcg/optimize: Split out fold_addsub2_i32 Date: Tue, 26 Oct 2021 16:09:13 -0700 Message-Id: <20211026230943.1225890-22-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::529; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x529.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635290776768100001 Add two additional helpers, fold_add2_i32 and fold_sub2_i32 which will not be simple wrappers forever. Reviewed-by: Luis Pires Reviewed-by: Philippe Mathieu-Daud=C3=A9 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 805522f99d..9d1d045363 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -704,6 +704,39 @@ static bool fold_add(OptContext *ctx, TCGOp *op) return fold_const2(ctx, op); } =20 +static bool fold_addsub2_i32(OptContext *ctx, TCGOp *op, bool add) +{ + if (arg_is_const(op->args[2]) && arg_is_const(op->args[3]) && + arg_is_const(op->args[4]) && arg_is_const(op->args[5])) { + uint32_t al =3D arg_info(op->args[2])->val; + uint32_t ah =3D arg_info(op->args[3])->val; + uint32_t bl =3D arg_info(op->args[4])->val; + uint32_t bh =3D arg_info(op->args[5])->val; + uint64_t a =3D ((uint64_t)ah << 32) | al; + uint64_t b =3D ((uint64_t)bh << 32) | bl; + TCGArg rl, rh; + TCGOp *op2 =3D tcg_op_insert_before(ctx->tcg, op, INDEX_op_mov_i32= ); + + if (add) { + a +=3D b; + } else { + a -=3D b; + } + + rl =3D op->args[0]; + rh =3D op->args[1]; + tcg_opt_gen_movi(ctx, op, rl, (int32_t)a); + tcg_opt_gen_movi(ctx, op2, rh, (int32_t)(a >> 32)); + return true; + } + return false; +} + +static bool fold_add2_i32(OptContext *ctx, TCGOp *op) +{ + return fold_addsub2_i32(ctx, op, true); +} + static bool fold_and(OptContext *ctx, TCGOp *op) { return fold_const2(ctx, op); @@ -1056,6 +1089,11 @@ static bool fold_sub(OptContext *ctx, TCGOp *op) return fold_const2(ctx, op); } =20 +static bool fold_sub2_i32(OptContext *ctx, TCGOp *op) +{ + return fold_addsub2_i32(ctx, op, false); +} + static bool fold_xor(OptContext *ctx, TCGOp *op) { return fold_const2(ctx, op); @@ -1701,32 +1739,6 @@ void tcg_optimize(TCGContext *s) } break; =20 - case INDEX_op_add2_i32: - case INDEX_op_sub2_i32: - if (arg_is_const(op->args[2]) && arg_is_const(op->args[3]) - && arg_is_const(op->args[4]) && arg_is_const(op->args[5]))= { - uint32_t al =3D arg_info(op->args[2])->val; - uint32_t ah =3D arg_info(op->args[3])->val; - uint32_t bl =3D arg_info(op->args[4])->val; - uint32_t bh =3D arg_info(op->args[5])->val; - uint64_t a =3D ((uint64_t)ah << 32) | al; - uint64_t b =3D ((uint64_t)bh << 32) | bl; - TCGArg rl, rh; - TCGOp *op2 =3D tcg_op_insert_before(s, op, INDEX_op_mov_i3= 2); - - if (opc =3D=3D INDEX_op_add2_i32) { - a +=3D b; - } else { - a -=3D b; - } - - rl =3D op->args[0]; - rh =3D op->args[1]; - tcg_opt_gen_movi(&ctx, op, rl, (int32_t)a); - tcg_opt_gen_movi(&ctx, op2, rh, (int32_t)(a >> 32)); - continue; - } - break; =20 default: break; @@ -1737,6 +1749,9 @@ void tcg_optimize(TCGContext *s) CASE_OP_32_64_VEC(add): done =3D fold_add(&ctx, op); break; + case INDEX_op_add2_i32: + done =3D fold_add2_i32(&ctx, op); + break; CASE_OP_32_64_VEC(and): done =3D fold_and(&ctx, op); break; @@ -1833,6 +1848,9 @@ void tcg_optimize(TCGContext *s) CASE_OP_32_64_VEC(sub): done =3D fold_sub(&ctx, op); break; + case INDEX_op_sub2_i32: + done =3D fold_sub2_i32(&ctx, op); + break; CASE_OP_32_64_VEC(xor): done =3D fold_xor(&ctx, op); break; --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635290991461741.1972047731064; Tue, 26 Oct 2021 16:29:51 -0700 (PDT) Received: from localhost ([::1]:50936 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVt8-0006f5-Aa for importer@patchew.org; Tue, 26 Oct 2021 19:29:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53004) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVa6-00033m-Ex for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:10 -0400 Received: from mail-pg1-x52e.google.com ([2607:f8b0:4864:20::52e]:42861) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVa2-0001z9-1L for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:10 -0400 Received: by mail-pg1-x52e.google.com with SMTP id t7so1008890pgl.9 for ; Tue, 26 Oct 2021 16:10:05 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.10.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:10:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=C2TgxQz1GB819hSkndrC8NaNVJWCUo0QsMgOlWylEw4=; b=QeB7QIxGp4on65pY8952UOWe57wcXZxIXjab9Kgems7C+aoOAiyPtxzEhjFh4gTsMm ebPf87DmfVXzjnY1Gi9cFZCr9RF4bT03F8Y8qMayUO026mrxiyGqXSFHw02Q9mQ6FVen 0aCB3zDZfDxoPW6c2dHudyAgJFAM624ekYxaLRN3Nz/Tlt1Yt9aX0gKzkvneIB/V0feM 2rnKn5b9AOoC50YsndDO3AQbTJgY4ZBEoEl2bmxgylF7b+dsMS1617MwpuXA6tXEFZbH lZTLvNSJKIZQcGlOX/PWuMBMGlt1Tec/YjpxJ+9F+WGvDD8jOyOjSDHeisP2n1ixcNLv 9JNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=C2TgxQz1GB819hSkndrC8NaNVJWCUo0QsMgOlWylEw4=; b=wq/c9O9SDvGoS2COL69mfVkovt0RktaQM9OgdpBXDvE98STVLFhRF5RdCt3zO81OFx P3wfd+NklGQhLd33N9W0NBYMAGZW6kdQLteusI8EHekSMHkoFfOQeybvgtvBVBgnYKSa WmFxISQAcphOK9jeW6S1O7xKRrhKSfC8qMsIOfofKfPrE0L4EFXsMCbhA6sRh6uF71HW oDL+VnHOvB756hiKjye/37B3Gz5qJSc7laXtVh821Gi8vk2mF4fSujJ6df1+vxy5NJbk bjgi3Y4AcezE0g9YT9IZZJ88XxJCXnvJVyYvM2Y0yGiKzvXRCpmA/m7Bv1uyTQlwH4K+ H7yw== X-Gm-Message-State: AOAM530NyIivyUzWiJdVfNJKYb5HnLQO7L6ZbpPiAU/Tt89ugGLmmEWT bS5If1kUaXvbIs0snI/mgo3NqSmqXCkVDA== X-Google-Smtp-Source: ABdhPJwVZzlX7g+7s5Tbcez5L+uVVfdAanC473g6cuKPfr3PPHUtORqEz4j8d9Uhse6rPM1slw7V9w== X-Received: by 2002:a63:7405:: with SMTP id p5mr21262912pgc.426.1635289804620; Tue, 26 Oct 2021 16:10:04 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 22/51] tcg/optimize: Split out fold_movcond Date: Tue, 26 Oct 2021 16:09:14 -0700 Message-Id: <20211026230943.1225890-23-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52e; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635290992339100001 Reviewed-by: Luis Pires Reviewed-by: Philippe Mathieu-Daud=C3=A9 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 9d1d045363..110b3d1cc2 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -922,6 +922,34 @@ static bool fold_mb(OptContext *ctx, TCGOp *op) return true; } =20 +static bool fold_movcond(OptContext *ctx, TCGOp *op) +{ + TCGOpcode opc =3D op->opc; + TCGCond cond =3D op->args[5]; + int i =3D do_constant_folding_cond(opc, op->args[1], op->args[2], cond= ); + + if (i >=3D 0) { + return tcg_opt_gen_mov(ctx, op, op->args[0], op->args[4 - i]); + } + + if (arg_is_const(op->args[3]) && arg_is_const(op->args[4])) { + uint64_t tv =3D arg_info(op->args[3])->val; + uint64_t fv =3D arg_info(op->args[4])->val; + + opc =3D (opc =3D=3D INDEX_op_movcond_i32 + ? INDEX_op_setcond_i32 : INDEX_op_setcond_i64); + + if (tv =3D=3D 1 && fv =3D=3D 0) { + op->opc =3D opc; + op->args[3] =3D cond; + } else if (fv =3D=3D 1 && tv =3D=3D 0) { + op->opc =3D opc; + op->args[3] =3D tcg_invert_cond(cond); + } + } + return false; +} + static bool fold_mul(OptContext *ctx, TCGOp *op) { return fold_const2(ctx, op); @@ -1715,31 +1743,6 @@ void tcg_optimize(TCGContext *s) } break; =20 - CASE_OP_32_64(movcond): - i =3D do_constant_folding_cond(opc, op->args[1], - op->args[2], op->args[5]); - if (i >=3D 0) { - tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[4 - i]); - continue; - } - if (arg_is_const(op->args[3]) && arg_is_const(op->args[4])) { - uint64_t tv =3D arg_info(op->args[3])->val; - uint64_t fv =3D arg_info(op->args[4])->val; - TCGCond cond =3D op->args[5]; - - if (fv =3D=3D 1 && tv =3D=3D 0) { - cond =3D tcg_invert_cond(cond); - } else if (!(tv =3D=3D 1 && fv =3D=3D 0)) { - break; - } - op->args[3] =3D cond; - op->opc =3D opc =3D (opc =3D=3D INDEX_op_movcond_i32 - ? INDEX_op_setcond_i32 - : INDEX_op_setcond_i64); - } - break; - - default: break; =20 @@ -1791,6 +1794,9 @@ void tcg_optimize(TCGContext *s) case INDEX_op_mb: done =3D fold_mb(&ctx, op); break; + CASE_OP_32_64(movcond): + done =3D fold_movcond(&ctx, op); + break; CASE_OP_32_64(mul): done =3D fold_mul(&ctx, op); break; --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 163529044834674.22718508109222; Tue, 26 Oct 2021 16:20:48 -0700 (PDT) Received: from localhost ([::1]:53700 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVkN-00068h-2y for importer@patchew.org; Tue, 26 Oct 2021 19:20:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53058) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVa9-00039w-OX for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:14 -0400 Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]:41529) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVa3-0001zZ-2u for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:13 -0400 Received: by mail-pf1-x42c.google.com with SMTP id y7so889190pfg.8 for ; Tue, 26 Oct 2021 16:10:06 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.10.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:10:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=UhofiOMOxfG85+VIZHMXYK/5ma+X06jKCdYHbFqq/90=; b=coYXeJIIPzLHnVpUPY3+vcse2a4svv9hRNu4YIj0L7/gVhN1GVFTFdRmz6NCK4eTrK U4Ywhj3RG7lQfVc/pQsDff70tPFhc71SHyTY6JhgfpnK7qI6nZP+oQni23EqeftdAuXI TBzrFJ1iek5PnzA7Trk+/l4zOdCWNGxi6cpAvh7Idl1Jh14eve04SCwjaQgz0QOnR0uG c+me0zb2OJKMELG3dDXXz5EgPVW2IPgG6aAeS/L59idos0D5Ut/izDq7pZMWlbcG5nSm KKKLUINCkZ0nX/yFwQp+n3BN9RR/Zp6/jaNIyJnDudJY4gQ924y7f9G2bDYMWuSNcqiH npXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=UhofiOMOxfG85+VIZHMXYK/5ma+X06jKCdYHbFqq/90=; b=IiQ5xo0mnTBNEy0wCTrNyZLh0CJRfw10wYdgxBc9ZCy/3zzKan2540m7tlQYK+1Eiw XOiziNHso+ONYLkD02QT5LPr3KUg9ZfIl2XV9G1hJIcDjh/axeRRAtwjLHELOHHYmwQF O0+MX3fsmEl+CrWUepnUr+MHQBhHJKpyu+Kto/AzRwI5q45RG/7p7KT58Yn4KjIB+K6v 285sSKgrvtP65Q+H8/8JbZy8DUpIPkc0y3LTSWdwqOJB68YyvNt06fJfMOqcP07V6eQW abHQA77df5B7G/OGVHqV0m9hVYSsu1zOPz4az4wTmrUIQuNhYKfHwOHRLgPzXUb8a/LK TZ+Q== X-Gm-Message-State: AOAM53050/qNlFcKx2xcSe/y7XbanwrWiIWL614LyRaeCIviErD8k6ez Sz+hruyh5Zr3fdk2xwabHMjzwvsD6psMsA== X-Google-Smtp-Source: ABdhPJwGYlWWGtd5w2x6rZi9u7Qy6+nbTjUrzH381nofhErJo/HLspKJ/xJSuaEBN+56GSXY428wTw== X-Received: by 2002:a63:6c02:: with SMTP id h2mr21294206pgc.173.1635289805794; Tue, 26 Oct 2021 16:10:05 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 23/51] tcg/optimize: Split out fold_extract2 Date: Tue, 26 Oct 2021 16:09:15 -0700 Message-Id: <20211026230943.1225890-24-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::42c; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635290448919100001 Reviewed-by: Luis Pires Reviewed-by: Philippe Mathieu-Daud=C3=A9 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 110b3d1cc2..faedbdbfb8 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -888,6 +888,25 @@ static bool fold_eqv(OptContext *ctx, TCGOp *op) return fold_const2(ctx, op); } =20 +static bool fold_extract2(OptContext *ctx, TCGOp *op) +{ + if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) { + uint64_t v1 =3D arg_info(op->args[1])->val; + uint64_t v2 =3D arg_info(op->args[2])->val; + int shr =3D op->args[3]; + + if (op->opc =3D=3D INDEX_op_extract2_i64) { + v1 >>=3D shr; + v2 <<=3D 64 - shr; + } else { + v1 =3D (uint32_t)v1 >> shr; + v2 =3D (int32_t)v2 << (32 - shr); + } + return tcg_opt_gen_movi(ctx, op, op->args[0], v1 | v2); + } + return false; +} + static bool fold_exts(OptContext *ctx, TCGOp *op) { return fold_const1(ctx, op); @@ -1726,23 +1745,6 @@ void tcg_optimize(TCGContext *s) } break; =20 - CASE_OP_32_64(extract2): - if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) { - uint64_t v1 =3D arg_info(op->args[1])->val; - uint64_t v2 =3D arg_info(op->args[2])->val; - int shr =3D op->args[3]; - - if (opc =3D=3D INDEX_op_extract2_i64) { - tmp =3D (v1 >> shr) | (v2 << (64 - shr)); - } else { - tmp =3D (int32_t)(((uint32_t)v1 >> shr) | - ((uint32_t)v2 << (32 - shr))); - } - tcg_opt_gen_movi(&ctx, op, op->args[0], tmp); - continue; - } - break; - default: break; =20 @@ -1777,6 +1779,9 @@ void tcg_optimize(TCGContext *s) CASE_OP_32_64(eqv): done =3D fold_eqv(&ctx, op); break; + CASE_OP_32_64(extract2): + done =3D fold_extract2(&ctx, op); + break; CASE_OP_32_64(ext8s): CASE_OP_32_64(ext16s): case INDEX_op_ext32s_i64: --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635290619198441.7383250930252; Tue, 26 Oct 2021 16:23:39 -0700 (PDT) Received: from localhost ([::1]:33988 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVn8-0003U5-2q for importer@patchew.org; Tue, 26 Oct 2021 19:23:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53072) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVaB-0003CO-2z for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:15 -0400 Received: from mail-pg1-x52e.google.com ([2607:f8b0:4864:20::52e]:38809) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVa3-0001zj-P3 for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:14 -0400 Received: by mail-pg1-x52e.google.com with SMTP id e65so1031261pgc.5 for ; Tue, 26 Oct 2021 16:10:07 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.10.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:10:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=F1AVpbG5TP2qMj+ELcN61uRCpwzeIi0grwtPZKRIVFo=; b=rznvl8Epvaws3JC8JIdtLugjwowB8xLRJbCAfvMVCTBObNo502nFtgV60b92PdkAPE URinGvW3vxkwK6sW/SRQTy/YjTXJBI04A/7rQFUPKvYPzP4vEcMbabCBFmT4lx5bvTG1 Q11vWvzHzTnNq1j1bnl83wa4zK5M2hZlm6DSWC3RIgb4ly8QctqdATwduxtmmKC9co1v bByCw1vYPYyT3kg/8MegFy30TAWJCQ6KebhmAAuYCgcoUDo2ez1OOe/e0QpJ8FVViD81 jh14IADMAbFyMvy8Ryeudi94NBuTkrT36feNwlg3w2WuoiDSjraBIZ4sEKhoPOtzYSBH QVaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=F1AVpbG5TP2qMj+ELcN61uRCpwzeIi0grwtPZKRIVFo=; b=v3dV5SqU62oT9+amBhXjwUwfwDdyGJ40w2N7gQ147MUmAi6C+6V2Nkt83/6oCJ5OWY MvT4J803niU88K5UvZJAmf+L+yWSTcMzSE3gi8Q7KsZskn8MSCrMoDnG6B7O+x8Jgy/M +QO4Lql7Kr+NWhEU54INxY+k29AvgsKWTA85cdN0+4/m0g8tde0d9qugbsIsbIQPd95+ dLuQjCfoupLg7ejw15o8BJwvb+Bf3GruzeBgw20md9V69ygQ8KEcixRDNRz+r7Cm/0hC RoCWD/nGg3b4khV8Zq2SToxzvX5RQVE2GMW2QB2khE2nrY+tYrtxILJ+rG0SO6gBl1Qc 5Y/g== X-Gm-Message-State: AOAM531S9vEJQZuxFqmDVSJt8HjP2mXXHJZU4rDLFI+qPEzwnl+Ko0zw l4gUUYPkO2AqSzk3zY/aBD57j5D4pLhpCg== X-Google-Smtp-Source: ABdhPJwA2VRelc+oYC9HPCxD/NJxDiDVqHYhqBzKRlLpfkhM16DwLwYuKscWpbkJz7B5DlBPF4wOtA== X-Received: by 2002:a65:62c4:: with SMTP id m4mr21590387pgv.453.1635289806548; Tue, 26 Oct 2021 16:10:06 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 24/51] tcg/optimize: Split out fold_extract, fold_sextract Date: Tue, 26 Oct 2021 16:09:16 -0700 Message-Id: <20211026230943.1225890-25-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52e; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635290620660100003 Reviewed-by: Luis Pires Reviewed-by: Philippe Mathieu-Daud=C3=A9 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 faedbdbfb8..3bd5f043c8 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -888,6 +888,18 @@ static bool fold_eqv(OptContext *ctx, TCGOp *op) return fold_const2(ctx, op); } =20 +static bool fold_extract(OptContext *ctx, TCGOp *op) +{ + if (arg_is_const(op->args[1])) { + uint64_t t; + + t =3D arg_info(op->args[1])->val; + t =3D extract64(t, op->args[2], op->args[3]); + return tcg_opt_gen_movi(ctx, op, op->args[0], t); + } + return false; +} + static bool fold_extract2(OptContext *ctx, TCGOp *op) { if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) { @@ -1126,6 +1138,18 @@ static bool fold_setcond2(OptContext *ctx, TCGOp *op) return tcg_opt_gen_movi(ctx, op, op->args[0], i); } =20 +static bool fold_sextract(OptContext *ctx, TCGOp *op) +{ + if (arg_is_const(op->args[1])) { + uint64_t t; + + t =3D arg_info(op->args[1])->val; + t =3D sextract64(t, op->args[2], op->args[3]); + return tcg_opt_gen_movi(ctx, op, op->args[0], t); + } + return false; +} + static bool fold_shift(OptContext *ctx, TCGOp *op) { return fold_const2(ctx, op); @@ -1727,24 +1751,6 @@ void tcg_optimize(TCGContext *s) } break; =20 - CASE_OP_32_64(extract): - if (arg_is_const(op->args[1])) { - tmp =3D extract64(arg_info(op->args[1])->val, - op->args[2], op->args[3]); - tcg_opt_gen_movi(&ctx, op, op->args[0], tmp); - continue; - } - break; - - CASE_OP_32_64(sextract): - if (arg_is_const(op->args[1])) { - tmp =3D sextract64(arg_info(op->args[1])->val, - op->args[2], op->args[3]); - tcg_opt_gen_movi(&ctx, op, op->args[0], tmp); - continue; - } - break; - default: break; =20 @@ -1779,6 +1785,9 @@ void tcg_optimize(TCGContext *s) CASE_OP_32_64(eqv): done =3D fold_eqv(&ctx, op); break; + CASE_OP_32_64(extract): + done =3D fold_extract(&ctx, op); + break; CASE_OP_32_64(extract2): done =3D fold_extract2(&ctx, op); break; @@ -1856,6 +1865,9 @@ void tcg_optimize(TCGContext *s) case INDEX_op_setcond2_i32: done =3D fold_setcond2(&ctx, op); break; + CASE_OP_32_64(sextract): + done =3D fold_sextract(&ctx, op); + break; CASE_OP_32_64_VEC(sub): done =3D fold_sub(&ctx, op); break; --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635291205114205.36505905461843; Tue, 26 Oct 2021 16:33:25 -0700 (PDT) Received: from localhost ([::1]:58922 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVwa-0003nD-18 for importer@patchew.org; Tue, 26 Oct 2021 19:33:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53194) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVaH-0003N3-M0 for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:21 -0400 Received: from mail-pj1-x1033.google.com ([2607:f8b0:4864:20::1033]:37431) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVa4-0001zy-D2 for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:21 -0400 Received: by mail-pj1-x1033.google.com with SMTP id t5-20020a17090a4e4500b001a0a284fcc2so3572028pjl.2 for ; Tue, 26 Oct 2021 16:10:08 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.10.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:10:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=OJWu7yUFUqO6SxASLIr2hIPwbeHCDr8GBSl6LyJ/KfE=; b=mx2ZQvdUOlgQRL4QVlM/4jfnS2kAxO+buqtlqmTic0lVb103aBSrPCcAcH0cVPY4hS mz7xbe52mtT7puXSb+Jm2DeUbN4FUOdZYMwhemWk6BMULu0Szy+P0iEtiSQO0mmuXR/t Vug2MKUm0AkHZbAREQX6w/mgnb85OQtAmlEONv40sbyAGRYUOgQ9iNnfzg/4NqiWHnJ/ glzzH3epp2idnj7PqIYUao1rglGa9KxV5n7jWhSORiFHmjUCVyWWvgmT/T4+rrdntxYl EBvGPVE6P8HXZ2vq8mXLm2qRsy17rptSw9q/GQZ6OJJDxQJU25g/7g/EeMMlMmPI0mSB 4hxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=OJWu7yUFUqO6SxASLIr2hIPwbeHCDr8GBSl6LyJ/KfE=; b=rnXZkjHWA9MxqoUk801O7s4U1QcD/N0Vr26vUpcqrDXFX17Dsg90dKocTp/Hh3lCMa I+qObwCHPB3S3GJxHM3RiXSEZqr1sU9o81woYTu7agF1H8h8iKz9MvzWMQKc8c14rO9l +AyrtjYcPDcoZ7lBvoBcSjOyvme1+FI47G4zGdB6wDBh167lE2pjuq7EbQCgZKISAXgc BZT7HuvlSEepwpO7o0iuiOYlXsRN3bId9LpOTy0ofXOyRTF3xiwZautFGEQGw0t1a66n NtedxroA+J8ezqkz22UUsbp1ndxnPjNZHUrBS5iePShrID6JiKYl1YBou1Zv1R1m/r0J q1Cg== X-Gm-Message-State: AOAM533BxKqyBAgYwEOc73Y4+mEKgl9m/bRjiQmeuxURgk5YK2Ry0qjm GWmFH2OZkSIEx2WdRb9xjxASp+6l4suI6g== X-Google-Smtp-Source: ABdhPJwnu5ERrxpyyHegIfSL3WiaHwORzkyuiEDam7diebgnLlRmsFKi1AJDU7CbS1oqIcX8WZzkEw== X-Received: by 2002:a17:902:db04:b0:13e:f118:54de with SMTP id m4-20020a170902db0400b0013ef11854demr25668384plx.44.1635289807264; Tue, 26 Oct 2021 16:10:07 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 25/51] tcg/optimize: Split out fold_deposit Date: Tue, 26 Oct 2021 16:09:17 -0700 Message-Id: <20211026230943.1225890-26-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::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: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635291205794100001 Reviewed-by: Luis Pires Reviewed-by: Philippe Mathieu-Daud=C3=A9 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 3bd5f043c8..2c57d08760 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -878,6 +878,18 @@ static bool fold_ctpop(OptContext *ctx, TCGOp *op) return fold_const1(ctx, op); } =20 +static bool fold_deposit(OptContext *ctx, TCGOp *op) +{ + if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) { + uint64_t t1 =3D arg_info(op->args[1])->val; + uint64_t t2 =3D arg_info(op->args[2])->val; + + t1 =3D deposit64(t1, op->args[3], op->args[4], t2); + return tcg_opt_gen_movi(ctx, op, op->args[0], t1); + } + return false; +} + static bool fold_divide(OptContext *ctx, TCGOp *op) { return fold_const2(ctx, op); @@ -1741,16 +1753,6 @@ void tcg_optimize(TCGContext *s) } break; =20 - CASE_OP_32_64(deposit): - if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) { - tmp =3D deposit64(arg_info(op->args[1])->val, - op->args[3], op->args[4], - arg_info(op->args[2])->val); - tcg_opt_gen_movi(&ctx, op, op->args[0], tmp); - continue; - } - break; - default: break; =20 @@ -1778,6 +1780,9 @@ void tcg_optimize(TCGContext *s) CASE_OP_32_64(ctpop): done =3D fold_ctpop(&ctx, op); break; + CASE_OP_32_64(deposit): + done =3D fold_deposit(&ctx, op); + break; CASE_OP_32_64(div): CASE_OP_32_64(divu): done =3D fold_divide(&ctx, op); --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635290780817837.0595890866304; Tue, 26 Oct 2021 16:26:20 -0700 (PDT) Received: from localhost ([::1]:42414 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVpj-0000nY-RW for importer@patchew.org; Tue, 26 Oct 2021 19:26:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53114) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVaC-0003Fn-S8 for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:16 -0400 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]:40714) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVa6-00020G-KW for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:16 -0400 Received: by mail-pj1-x102d.google.com with SMTP id n36-20020a17090a5aa700b0019fa884ab85so3547877pji.5 for ; Tue, 26 Oct 2021 16:10:09 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.10.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:10:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=I6H+U1ruTrcwXeKIJx0xdeAaOvB86vmaSGOOcxgJmqQ=; b=OjPTYBejdyS1FFlOYasGX5aDXcRrEysuEDE8n3PI5MQwMmfP80Stgx1366uB1wpTW3 UEQXQkKpxN+ulVFoVgYA+lZOrWqQZ+jpHt8c+hcvfxGU/nCdz3r8qD8nI41VWZSTmp8H toJEQNW0SYnN1MQwvFL9zSzLTM944zjmbY4nfidkFDW5bnuNQwoqzWD7dyjqUqvrErCm ZIGK5+GTsawzxmSrHg39plqmCudz3IkhU0n23EosOjQ8TFE1qCguKf/dkwwYhDM11nVF 04L8Ci1q4Erj807FFmC0kHYFoBvTRhzdQ73jJcvt+kKZSs2Nb90WwF2laC9EQxUEuY0d f+xw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=I6H+U1ruTrcwXeKIJx0xdeAaOvB86vmaSGOOcxgJmqQ=; b=cxbL6NIqtkSDGEAlizGoc4tpN9H0YPPLwLg2VzewPmLt539DcESBDIcO08FgXqCLEG NrssjCUdq/YZ8yXzIxDhIDcaFcbYieWapS0lqs2iPvyMqmhof7006tB3UuvlNZsBQqh4 R3eAgQiMLtxWIHXit5j0LRBYtf71UTnF39nwPGqF19jqNHwrcg4N1AwagcJCR8mGPgQN ECe1zmGH/DlAV3Q2ALkwA1sqPAsBkurmcuGfU1sIpQdMvuu0n7jCCNCx9tQ7c/0Xfm06 gPrfpSI6J21+clL5xhGPCoPSYEyUQl5xBXbsO0NMxPjpKNiTadQwsD1o+leK/pncArrk eDAQ== X-Gm-Message-State: AOAM53017KjZxIH2EGrZa9C5ixje7Bh0UtfHfok1Fh7hGdXn87FY8mvf LVhRSOV9R0ymG14aFisLanShf7jln6iY2g== X-Google-Smtp-Source: ABdhPJxWwapmIwqkyk+ue/5EOnf2waziD1dWgA6wxYw9k3LeX861LTiCXAdOxEs8FO9U6aYFYfrHXQ== X-Received: by 2002:a17:902:e5c9:b0:140:32f:54c5 with SMTP id u9-20020a170902e5c900b00140032f54c5mr25383828plf.65.1635289808066; Tue, 26 Oct 2021 16:10:08 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 26/51] tcg/optimize: Split out fold_count_zeros Date: Tue, 26 Oct 2021 16:09:18 -0700 Message-Id: <20211026230943.1225890-27-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102d; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635290783013100001 Reviewed-by: Luis Pires Reviewed-by: Philippe Mathieu-Daud=C3=A9 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 2c57d08760..dd65f1afcd 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -873,6 +873,20 @@ static bool fold_call(OptContext *ctx, TCGOp *op) return true; } =20 +static bool fold_count_zeros(OptContext *ctx, TCGOp *op) +{ + if (arg_is_const(op->args[1])) { + uint64_t t =3D arg_info(op->args[1])->val; + + if (t !=3D 0) { + t =3D do_constant_folding(op->opc, t, 0); + return tcg_opt_gen_movi(ctx, op, op->args[0], t); + } + return tcg_opt_gen_mov(ctx, op, op->args[0], op->args[2]); + } + return false; +} + static bool fold_ctpop(OptContext *ctx, TCGOp *op) { return fold_const1(ctx, op); @@ -1739,20 +1753,6 @@ void tcg_optimize(TCGContext *s) } break; =20 - CASE_OP_32_64(clz): - CASE_OP_32_64(ctz): - if (arg_is_const(op->args[1])) { - TCGArg v =3D arg_info(op->args[1])->val; - if (v !=3D 0) { - tmp =3D do_constant_folding(opc, v, 0); - tcg_opt_gen_movi(&ctx, op, op->args[0], tmp); - } else { - tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[2]); - } - continue; - } - break; - default: break; =20 @@ -1777,6 +1777,10 @@ void tcg_optimize(TCGContext *s) case INDEX_op_brcond2_i32: done =3D fold_brcond2(&ctx, op); break; + CASE_OP_32_64(clz): + CASE_OP_32_64(ctz): + done =3D fold_count_zeros(&ctx, op); + break; CASE_OP_32_64(ctpop): done =3D fold_ctpop(&ctx, op); break; --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635291413227862.6861135869083; Tue, 26 Oct 2021 16:36:53 -0700 (PDT) Received: from localhost ([::1]:39246 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVzw-00012V-94 for importer@patchew.org; Tue, 26 Oct 2021 19:36:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53132) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVaE-0003JJ-Ag for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:18 -0400 Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]:36661) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVa7-00020V-6U for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:17 -0400 Received: by mail-pf1-x42c.google.com with SMTP id m26so914751pff.3 for ; Tue, 26 Oct 2021 16:10:10 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.10.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:10:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=5pO8srHxeyy8XfwYL1eqggORkYu4mPynLSww9CDHj/M=; b=W+DioL7FATzLH0JESewJCTpcx4cmajnKeCOzQZbx8HAZdHCrttT8ectgU3dvzRXlGb 5KiLRtHoB/ZKubSY/uvJhbAoyTUH2T2ll6HYoicRd/XPaAhuCxpnkaezRSwjewz8atsC V9WU1F76uEbkKUBKThYyDLPYUlYorSy0TjOrvKWvpKOg5arce4Z+eYwN+oHiPABORw5D xpEsJuDosFsnC0nraR04Mp0Asx25m/EFALJ5xPtamuiaXZ6gbBzaMfOPvF+PRcrga8aM BSTOBJ7JojUMwreqFxCtipY9LiANW51to3c2Fa+mKeFQiDFzoTwnvMtRHC0LPG6CzswP BDQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=5pO8srHxeyy8XfwYL1eqggORkYu4mPynLSww9CDHj/M=; b=DMQ3ws68FEI/j4F2+ct+AvWK9zqUInoTQSUkJSOi8frdMnVZs3cnhpYql8K2GnPIel RfwoyHoe2Rs2jxNSmstXnJ5pb/gA6kQJhR/PqZfKrHHwtiDggwtduXBkTCXUBBLIjMNN h22P1oCgpPnR8GIH34J80PXpaJGAEKhTaY0LeYD5GviEck07cGnDojd1tVCnA9AagA5T G0ZXobUhhzJ9fr0AH4hRg5gvKSEp05UMLNiXwZmQFbn+4jQI1tayNyCSWmMNU2239cx3 +ktZsYa9razDLgi54zNL2AKHiqZ494KVKYieA0ZKTvjXOycGmX8ZK/zbb22Y1QsEolpv SMaQ== X-Gm-Message-State: AOAM530jgCfAyxYZjexJLggXlee3I5vjDd4rtUbr664ufHoYocNAb6Ib KfGXhWECWLjYd9+InXhJBm3d7vU2tVvWgg== X-Google-Smtp-Source: ABdhPJxT2g2MiUQ5q2LgpYKrLpQ8IZnVOrnUNPrMaTphescvnO07wRcJT1N8ee9vh0Q8nftB6xTABg== X-Received: by 2002:a63:b402:: with SMTP id s2mr18417909pgf.324.1635289809009; Tue, 26 Oct 2021 16:10:09 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 27/51] tcg/optimize: Split out fold_bswap Date: Tue, 26 Oct 2021 16:09:19 -0700 Message-Id: <20211026230943.1225890-28-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::42c; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635291415377100001 Reviewed-by: Luis Pires Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- tcg/optimize.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index dd65f1afcd..5374c230da 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -841,6 +841,17 @@ static bool fold_brcond2(OptContext *ctx, TCGOp *op) return false; } =20 +static bool fold_bswap(OptContext *ctx, TCGOp *op) +{ + if (arg_is_const(op->args[1])) { + uint64_t t =3D arg_info(op->args[1])->val; + + t =3D do_constant_folding(op->opc, t, op->args[2]); + return tcg_opt_gen_movi(ctx, op, op->args[0], t); + } + return false; +} + static bool fold_call(OptContext *ctx, TCGOp *op) { TCGContext *s =3D ctx->tcg; @@ -1742,17 +1753,6 @@ void tcg_optimize(TCGContext *s) } break; =20 - CASE_OP_32_64(bswap16): - CASE_OP_32_64(bswap32): - case INDEX_op_bswap64_i64: - if (arg_is_const(op->args[1])) { - tmp =3D do_constant_folding(opc, arg_info(op->args[1])->va= l, - op->args[2]); - tcg_opt_gen_movi(&ctx, op, op->args[0], tmp); - continue; - } - break; - default: break; =20 @@ -1777,6 +1777,11 @@ void tcg_optimize(TCGContext *s) case INDEX_op_brcond2_i32: done =3D fold_brcond2(&ctx, op); break; + CASE_OP_32_64(bswap16): + CASE_OP_32_64(bswap32): + case INDEX_op_bswap64_i64: + done =3D fold_bswap(&ctx, op); + break; CASE_OP_32_64(clz): CASE_OP_32_64(ctz): done =3D fold_count_zeros(&ctx, op); --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635291208973984.1656307200244; Tue, 26 Oct 2021 16:33:28 -0700 (PDT) Received: from localhost ([::1]:59290 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVwd-00041t-Vf for importer@patchew.org; Tue, 26 Oct 2021 19:33:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53134) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVaE-0003Jw-J8 for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:18 -0400 Received: from mail-pg1-x529.google.com ([2607:f8b0:4864:20::529]:42857) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVa7-00020d-7V for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:18 -0400 Received: by mail-pg1-x529.google.com with SMTP id t7so1009060pgl.9 for ; Tue, 26 Oct 2021 16:10:10 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.10.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:10:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=fwDfuaHLd2phF2WKQRX+NWoB84U/ilhRWeGAC07+3IE=; b=Xu1l7AtWff5GUEkgHyFlyssm6dY2W7TaM8u76lMCxki0AgvVeNyFahloWBnF9S2tcG hUuK/rx8Kq0EElY5ZarEMqPMv3k4kycu3g7ZxN/qWZcOwiRKpVFmaVOPbxG1J948cHps VRYoafD5MAcFOL9gxGnUh5Zoz0NB7JsDs9eQtpRzAMhXbmIWANgA0MBxK/woOcnpx2nM QZKhj8WUQC80XcZawSamq7f1egrQg7f6DRI5ILAlbOBgL3RYRvctvrt4DuX7dezSSZcN oFh1ync/J7zKTXS9oiusNI9MXP4abUKREwJoGn8S3hLi3woUFCte0eek58S8/wK3I+CO BDFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=fwDfuaHLd2phF2WKQRX+NWoB84U/ilhRWeGAC07+3IE=; b=dA42vqG39zKB8OLBM0nTODZE8b/wHxnlqA0Zzk4FV6Crr/Key1DjOpxGzK0GNbd5Yj GQK7ijzspOUy5LloANNoP7va5mme+RU6BedgirXIo9pVwdDRMFijoWbgaEq/6kX9Z28p hYpeT5OwtCwI+45BYpTR1aw15SEJhOevfkCoSrnyXQ9zyLQPKyEi3T5qOhkVHYB4U8CX 9tq3rwGA+xMQGV0x4HZNWZIQ4kMeBzYvtx51i1nfLaalRjeuK391AkxyzM5LUojGatL7 ylM7fmtzhNpPIWSnBpWcHOYBQzaDPyyV1Wi2rUFOu3kwPMzTOGCA+GBWTfWWptUT5rqN zSMw== X-Gm-Message-State: AOAM532ryWySse+P0yMrqZEwIkg6d2cZ0zqvIDKLtklyPEVMK5BZNAP9 uWYvj/YB5KlPd4jTtdW/CSLmDNDd8fVSsA== X-Google-Smtp-Source: ABdhPJy8Jv+EoKnzSAWW1J3qhSYlgAMOG8UXGYmb67tQ5l+/HhEyAD9i89jUsy5Fim0B6evY/gDnow== X-Received: by 2002:a63:7006:: with SMTP id l6mr15315807pgc.402.1635289810022; Tue, 26 Oct 2021 16:10:10 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 28/51] tcg/optimize: Split out fold_dup, fold_dup2 Date: Tue, 26 Oct 2021 16:09:20 -0700 Message-Id: <20211026230943.1225890-29-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::529; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x529.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635291209988100003 Reviewed-by: Luis Pires Reviewed-by: Philippe Mathieu-Daud=C3=A9 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 5374c230da..8524fe1f8a 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -920,6 +920,31 @@ static bool fold_divide(OptContext *ctx, TCGOp *op) return fold_const2(ctx, op); } =20 +static bool fold_dup(OptContext *ctx, TCGOp *op) +{ + if (arg_is_const(op->args[1])) { + uint64_t t =3D arg_info(op->args[1])->val; + t =3D dup_const(TCGOP_VECE(op), t); + return tcg_opt_gen_movi(ctx, op, op->args[0], t); + } + return false; +} + +static bool fold_dup2(OptContext *ctx, TCGOp *op) +{ + if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) { + uint64_t t =3D deposit64(arg_info(op->args[1])->val, 32, 32, + arg_info(op->args[2])->val); + return tcg_opt_gen_movi(ctx, op, op->args[0], t); + } + + if (args_are_copies(op->args[1], op->args[2])) { + op->opc =3D INDEX_op_dup_vec; + TCGOP_VECE(op) =3D MO_32; + } + return false; +} + static bool fold_eqv(OptContext *ctx, TCGOp *op) { return fold_const2(ctx, op); @@ -1731,28 +1756,6 @@ void tcg_optimize(TCGContext *s) done =3D tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[1]); break; =20 - case INDEX_op_dup_vec: - if (arg_is_const(op->args[1])) { - tmp =3D arg_info(op->args[1])->val; - tmp =3D dup_const(TCGOP_VECE(op), tmp); - tcg_opt_gen_movi(&ctx, op, op->args[0], tmp); - continue; - } - break; - - case INDEX_op_dup2_vec: - assert(TCG_TARGET_REG_BITS =3D=3D 32); - if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) { - tcg_opt_gen_movi(&ctx, op, op->args[0], - deposit64(arg_info(op->args[1])->val, 32,= 32, - arg_info(op->args[2])->val)); - continue; - } else if (args_are_copies(op->args[1], op->args[2])) { - op->opc =3D INDEX_op_dup_vec; - TCGOP_VECE(op) =3D MO_32; - } - break; - default: break; =20 @@ -1796,6 +1799,12 @@ void tcg_optimize(TCGContext *s) CASE_OP_32_64(divu): done =3D fold_divide(&ctx, op); break; + case INDEX_op_dup_vec: + done =3D fold_dup(&ctx, op); + break; + case INDEX_op_dup2_vec: + done =3D fold_dup2(&ctx, op); + break; CASE_OP_32_64(eqv): done =3D fold_eqv(&ctx, op); break; --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635291790278380.9361829427784; Tue, 26 Oct 2021 16:43:10 -0700 (PDT) Received: from localhost ([::1]:47834 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfW61-0006pv-At for importer@patchew.org; Tue, 26 Oct 2021 19:43:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53164) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVaG-0003Lg-92 for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:21 -0400 Received: from mail-pl1-x636.google.com ([2607:f8b0:4864:20::636]:37438) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVa8-00020o-GA for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:19 -0400 Received: by mail-pl1-x636.google.com with SMTP id n11so652568plf.4 for ; Tue, 26 Oct 2021 16:10:12 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.10.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:10:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=3jpxULOVdIgL0Mnirkv2EuUv8fHOKVVpG1kUJouTiHI=; b=RbBpcjubvQ4TUS+qLOcDBEYOMG5Lj38yCc/tUzuPU9sz8u4v2UEMbtJZKL5UnxaV5P qzUkjzKbcgKjvhCkcQq0zzlpBVpe8Yo6hJDyKQw4+QrP5otr96ZWU4lM0wQxG0ya3VK+ 7lGQZ/miH8ZwgHkkVgASjHOFM+irw0KL48e1WUHTalqk7pRg3wOOM2ueIJXxtpUriLou J4i88mFwU5wtAMRPljL/aWE2tg7VfWmZDX8MhBMHSuy6O6YTtGYaPDrs9d8wjXfJKpuF OsfR0r0iZl95FkIOCXz5d5OOgCiIHxD6Ck4xz7dxhhjzAegQWd4KVOGZMVE18yIq6ir4 /8AQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=3jpxULOVdIgL0Mnirkv2EuUv8fHOKVVpG1kUJouTiHI=; b=HeuBUpYcdcanIPqnn/g8e0ATlRvm0ujj0vCDkD52Hjnh/7Id2BpmvnKaeltF/KjFdV h+uUq+Dsbc+IgE1WsluPac9XrxJ12ylRtb/G0Os2OqCwtAySMr84sziAOdeu3SPIiWIb rmqclfqG1XgnvFnZvehRwDjsuN+48sp89MzUC0njBvl58lS3e+bsP59ZuU32P5L5QjZ3 b1KWY22f/L48qQDoL/CMlP8IWHPek0GZyz8dkIksqtA1iolCx0Ri35L9mCiWElJfpM2U A/W0S0vUYrim3DwxIT0e8Yl9rhod2E1TmYRJCzXAa2PpA3ezNl70nmvlZcJ3J6OxOcD2 Q33w== X-Gm-Message-State: AOAM533lgiC5QzLcCfkKpzxcu0aRK9NpjNEjaxxykheUBm4GWxPfi+xC qGpKrkkEJaLELXPkdbbsFQKhVIySFy4B0A== X-Google-Smtp-Source: ABdhPJxpEBekMdbVIOkj1gRI6wUHTs2rvJsqSBD0CLAiF7MFPoYxOgBYugwNnw4/lsxvHw0jrE5NDg== X-Received: by 2002:a17:902:b691:b029:12d:2b6:d116 with SMTP id c17-20020a170902b691b029012d02b6d116mr24210351pls.71.1635289811214; Tue, 26 Oct 2021 16:10:11 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 29/51] tcg/optimize: Split out fold_mov Date: Tue, 26 Oct 2021 16:09:21 -0700 Message-Id: <20211026230943.1225890-30-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::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: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635291791441100001 This is the final entry in the main switch that was in a different form. After this, we have the option to convert the switch into a function dispatch table. Reviewed-by: Luis Pires Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- tcg/optimize.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 8524fe1f8a..5f1bd7cd78 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -1015,6 +1015,11 @@ static bool fold_mb(OptContext *ctx, TCGOp *op) return true; } =20 +static bool fold_mov(OptContext *ctx, TCGOp *op) +{ + return tcg_opt_gen_mov(ctx, op, op->args[0], op->args[1]); +} + static bool fold_movcond(OptContext *ctx, TCGOp *op) { TCGOpcode opc =3D op->opc; @@ -1748,20 +1753,11 @@ void tcg_optimize(TCGContext *s) break; } =20 - /* Propagate constants through copy operations and do constant - folding. Constants will be substituted to arguments by register - allocator where needed and possible. Also detect copies. */ + /* + * Process each opcode. + * Sorted alphabetically by opcode as much as possible. + */ switch (opc) { - CASE_OP_32_64_VEC(mov): - done =3D tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[1]); - break; - - default: - break; - - /* ---------------------------------------------------------- */ - /* Sorted alphabetically by opcode as much as possible. */ - CASE_OP_32_64_VEC(add): done =3D fold_add(&ctx, op); break; @@ -1831,6 +1827,9 @@ void tcg_optimize(TCGContext *s) case INDEX_op_mb: done =3D fold_mb(&ctx, op); break; + CASE_OP_32_64_VEC(mov): + done =3D fold_mov(&ctx, op); + break; CASE_OP_32_64(movcond): done =3D fold_movcond(&ctx, op); break; @@ -1900,6 +1899,8 @@ void tcg_optimize(TCGContext *s) CASE_OP_32_64_VEC(xor): done =3D fold_xor(&ctx, op); break; + default: + break; } =20 if (!done) { --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635290987622616.1525436977763; Tue, 26 Oct 2021 16:29:47 -0700 (PDT) Received: from localhost ([::1]:50680 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVt4-0006Uk-CC for importer@patchew.org; Tue, 26 Oct 2021 19:29:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53190) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVaH-0003Ml-Hj for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:21 -0400 Received: from mail-pg1-x529.google.com ([2607:f8b0:4864:20::529]:39914) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVa9-00020y-Bl for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:20 -0400 Received: by mail-pg1-x529.google.com with SMTP id g184so1023918pgc.6 for ; Tue, 26 Oct 2021 16:10:12 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.10.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:10:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=8y4qKou3t3jzIUIj9qEAD2/5WFZAuzm9armlPHHtAYM=; b=qTJrt2e9upQeoRYHWtXoX+8t1CsLStlm0/m0t8l/SkHjTyK5Bq7BMcQq3a4wNdJ81M Ag67S+DbsvfureTdCqVJyF1ORwBmr4vr/VW8boduiRjx0No5wJMutunhx60rWoZ2IvzD kU8b/3P5ev+RAlgGKl94Qb501Y1b0D2bMgruxlk+xJnRiCioKDe6AiDIl4EiKONUGutg J6uidmR74GSXVLhfm6BzTka0/OVFte1laStOaTC6BZ4fucF8zmQtAFA1STXKMUJHH4Tb 5a4MCHu+zmLqRN6DESM2TcC7auzMD6BoFwTIbuhQFi3iST6f9zmxC25GCv9DP7sHgu0P zkDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=8y4qKou3t3jzIUIj9qEAD2/5WFZAuzm9armlPHHtAYM=; b=6DhPZYkNWYHPAOU8SS02i3fGzOLqpeH9CKSgwLa5hoktWbeDxcXVE42+HrOLLW3ASN XJDLXRBgRocBkd7ryvf0yvqWRRTM6fRo5jfD8c/+eRh8XaltuF2aE6mXtnDYWKGeR8rj dxWmGvZEHDFvsYnmiTLRiZ6vFnqBlYqEqp5amPwPD5Lre6a2S3wDAXHkfIJDtIZ4p9hB 0fvSE9dY/reX2SmUi6NrM06JBPwN5Lu4jC60g2sQaOyO7YwRfxfohVnl5uk+wNHGZOGg eZDIXuO+B2skInwEiwEJMDU2J6pHzW3OebyBsjAskze1/8Zt1D9iWvQqPbNwjvSBS9kr Q+ZA== X-Gm-Message-State: AOAM533ZoYGM8WFv/Yd8ZgZOhlkKRk/sxP0xcCbpAXKu+6SWZpuRO2wR n+lZ3DaNDrO7rInb+8+19/V/K0S/XtaJeA== X-Google-Smtp-Source: ABdhPJzEfNiAB5ZmpshStYsqDmFT9GIz7MVFOjPnuQLRb0LV/IBHfXGeibRWtbnDp6Y1P/hbX+Outw== X-Received: by 2002:a62:dd96:0:b0:47c:1b37:d0f with SMTP id w144-20020a62dd96000000b0047c1b370d0fmr4876149pff.1.1635289812221; Tue, 26 Oct 2021 16:10:12 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 30/51] tcg/optimize: Split out fold_xx_to_i Date: Tue, 26 Oct 2021 16:09:22 -0700 Message-Id: <20211026230943.1225890-31-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::529; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x529.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635290988125100001 Pull the "op r, a, a =3D> movi r, 0" optimization into a function, and use it in the outer opcode fold functions. Reviewed-by: Luis Pires Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- tcg/optimize.c | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 5f1bd7cd78..2f55dc56c0 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -695,6 +695,15 @@ static bool fold_const2(OptContext *ctx, TCGOp *op) return false; } =20 +/* If the binary operation has both arguments equal, fold to @i. */ +static bool fold_xx_to_i(OptContext *ctx, TCGOp *op, uint64_t i) +{ + if (args_are_copies(op->args[1], op->args[2])) { + return tcg_opt_gen_movi(ctx, op, op->args[0], i); + } + return false; +} + /* * These outermost fold_ functions are sorted alphabetically. */ @@ -744,7 +753,11 @@ static bool fold_and(OptContext *ctx, TCGOp *op) =20 static bool fold_andc(OptContext *ctx, TCGOp *op) { - return fold_const2(ctx, op); + if (fold_const2(ctx, op) || + fold_xx_to_i(ctx, op, 0)) { + return true; + } + return false; } =20 static bool fold_brcond(OptContext *ctx, TCGOp *op) @@ -1224,7 +1237,11 @@ static bool fold_shift(OptContext *ctx, TCGOp *op) =20 static bool fold_sub(OptContext *ctx, TCGOp *op) { - return fold_const2(ctx, op); + if (fold_const2(ctx, op) || + fold_xx_to_i(ctx, op, 0)) { + return true; + } + return false; } =20 static bool fold_sub2_i32(OptContext *ctx, TCGOp *op) @@ -1234,7 +1251,11 @@ static bool fold_sub2_i32(OptContext *ctx, TCGOp *op) =20 static bool fold_xor(OptContext *ctx, TCGOp *op) { - return fold_const2(ctx, op); + if (fold_const2(ctx, op) || + fold_xx_to_i(ctx, op, 0)) { + return true; + } + return false; } =20 /* Propagate constants and copies, fold constant expressions. */ @@ -1739,20 +1760,6 @@ void tcg_optimize(TCGContext *s) break; } =20 - /* Simplify expression for "op r, a, a =3D> movi r, 0" cases */ - switch (opc) { - CASE_OP_32_64_VEC(andc): - CASE_OP_32_64_VEC(sub): - CASE_OP_32_64_VEC(xor): - if (args_are_copies(op->args[1], op->args[2])) { - tcg_opt_gen_movi(&ctx, op, op->args[0], 0); - continue; - } - break; - default: - break; - } - /* * Process each opcode. * Sorted alphabetically by opcode as much as possible. --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635291415047574.8481123478317; Tue, 26 Oct 2021 16:36:55 -0700 (PDT) Received: from localhost ([::1]:39432 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVzy-00019v-0A for importer@patchew.org; Tue, 26 Oct 2021 19:36:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53196) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVaH-0003Np-Uo for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:21 -0400 Received: from mail-pg1-x533.google.com ([2607:f8b0:4864:20::533]:33589) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVaA-000213-7S for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:21 -0400 Received: by mail-pg1-x533.google.com with SMTP id r28so1097525pga.0 for ; Tue, 26 Oct 2021 16:10:13 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.10.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:10:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=p1UNT79xG4oDnmYUiMREY20bNauejtvwzT0okXNXFUU=; b=hPgc2an4+R8xsrsoCE9JJKFNdsd2jvfoF/RD98ik9+K+APX6NmjYTzEn4n70jaKEEM HINK4p/bK3JEnvkRco7tMVbu73GGgcVnF3nY+n0/qGsP7c7S2pRUQH8q2aSqqhOr5q54 b6DqO6gRbRmOvtCin7tsublgIhjECXbJboBbWf7cG+sWQaJP7QfgxvNVNB2IqsNHUzRz 3fHnRTmtVzopWRSEa4zt1bnwo44FxZy6EsqPxMvtefwmCBaZ4rSlQlEsXsNJoFaiq+W9 elH9+hfydGle49S4yHmnLAWvAk3t+5R8pZonpUm0XiEF6NK1BcnSduRLeX4lmo45Xp4A aHWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=p1UNT79xG4oDnmYUiMREY20bNauejtvwzT0okXNXFUU=; b=xQXX80n5VgrNiKnWNTeI/b/8fNCb8Jz38+QnND6wDyvLy5dAJaQ+EK3jTpPtHUAs2d SkS5WCV3pQVtoEDj09wiSqYJpwxTjN6XBwX/YJZIrzeb9BJN42ESmfk2g/3uML/uBAvq zUg07DKn1psHT0Wa+Q00HM/MHjXbDaTQDdM5BQ9aVwa/wU7225RfOoKsGRsTu035ymZN bVjV16SX+yIlcDgRGv3IYCXHFBmgy0KRGZwJM2ct5hOj+GdOCFurvnVoqUJINJo09ibD MG54QiHK2inI/JyELk+TKBxHaQsEQOOfnsPwRpBLDIABasCh4fCbYcDxTxdTsdxnlULY Eq2w== X-Gm-Message-State: AOAM5302uVWrKw3MU1QokgZlFIQnku9Ysrg9A+WHpOYczkbua/3+8CEu zaZtLSMrxHR3EQiLn7pHIZeesNJZGQDHSA== X-Google-Smtp-Source: ABdhPJx+tMBoIpPltmFGssrD+EcdQbaI+aZeO+TMM6MS3pSBeCTTbMwgkothJvXPM7X6o6uZTq5b/A== X-Received: by 2002:a62:e816:0:b0:47b:d98e:f934 with SMTP id c22-20020a62e816000000b0047bd98ef934mr24709038pfi.83.1635289812936; Tue, 26 Oct 2021 16:10:12 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 31/51] tcg/optimize: Split out fold_xx_to_x Date: Tue, 26 Oct 2021 16:09:23 -0700 Message-Id: <20211026230943.1225890-32-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::533; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x533.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635291415503100004 Pull the "op r, a, a =3D> mov r, a" optimization into a function, and use it in the outer opcode fold functions. Reviewed-by: Luis Pires Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- tcg/optimize.c | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 2f55dc56c0..ab96849edf 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -704,8 +704,22 @@ static bool fold_xx_to_i(OptContext *ctx, TCGOp *op, u= int64_t i) return false; } =20 +/* If the binary operation has both arguments equal, fold to identity. */ +static bool fold_xx_to_x(OptContext *ctx, TCGOp *op) +{ + if (args_are_copies(op->args[1], op->args[2])) { + return tcg_opt_gen_mov(ctx, op, op->args[0], op->args[1]); + } + return false; +} + /* * These outermost fold_ functions are sorted alphabetically. + * + * The ordering of the transformations should be: + * 1) those that produce a constant + * 2) those that produce a copy + * 3) those that produce information about the result value. */ =20 static bool fold_add(OptContext *ctx, TCGOp *op) @@ -748,7 +762,11 @@ static bool fold_add2_i32(OptContext *ctx, TCGOp *op) =20 static bool fold_and(OptContext *ctx, TCGOp *op) { - return fold_const2(ctx, op); + if (fold_const2(ctx, op) || + fold_xx_to_x(ctx, op)) { + return true; + } + return false; } =20 static bool fold_andc(OptContext *ctx, TCGOp *op) @@ -1111,7 +1129,11 @@ static bool fold_not(OptContext *ctx, TCGOp *op) =20 static bool fold_or(OptContext *ctx, TCGOp *op) { - return fold_const2(ctx, op); + if (fold_const2(ctx, op) || + fold_xx_to_x(ctx, op)) { + return true; + } + return false; } =20 static bool fold_orc(OptContext *ctx, TCGOp *op) @@ -1747,19 +1769,6 @@ void tcg_optimize(TCGContext *s) break; } =20 - /* Simplify expression for "op r, a, a =3D> mov r, a" cases */ - switch (opc) { - CASE_OP_32_64_VEC(or): - CASE_OP_32_64_VEC(and): - if (args_are_copies(op->args[1], op->args[2])) { - tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[1]); - continue; - } - break; - default: - break; - } - /* * Process each opcode. * Sorted alphabetically by opcode as much as possible. --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635292197723636.2218314181871; Tue, 26 Oct 2021 16:49:57 -0700 (PDT) Received: from localhost ([::1]:56438 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfWCa-0004QQ-Nh for importer@patchew.org; Tue, 26 Oct 2021 19:49:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53200) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVaI-0003P2-DK for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:22 -0400 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]:40952) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVaB-00021C-4A for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:22 -0400 Received: by mail-pl1-x62d.google.com with SMTP id v20so638329plo.7 for ; Tue, 26 Oct 2021 16:10:14 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.10.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:10:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=YxTcI07P5KgjPUJAeZlSj6fs12sCJJNKN5YAni+jya0=; b=Kgqx5ALSKO/OGZtx5F9sNF4T1sWZFznFktoBCQ4gpuUXJAj2z2FEXtJ1OOvVjfOgBu 9iTII7bq16Jc4jYZD9GdKANyeNwWHp8F3QdNxqHdUhACS3+pKH6XlLgT+ic6Kj1QjmO+ MQ8gdzYdy1mpIDT14yHQ2d44SRXdwWwSEFlMok2hISmswTRMOomUfdt9kAAcJtRWk+PH iFO/w3Tleb/ynl4IWxUrpZicgKTRIglRFlkHu7jo2kLCdQbogDXwjCBNzgNmqzVfFfj6 egTTEy0+JexaZIDIpvbbSF27vKalyUQykuyk4rXG8je3raAS5VNYdErgmYg9+en5XHgj p/Nw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=YxTcI07P5KgjPUJAeZlSj6fs12sCJJNKN5YAni+jya0=; b=mf+G2VHqGQ/JY/voB8PVKuXqWzGeP6nDJGlyBbGGfqkPrO2JtDbtWMGkSzmPmMOyYc di0iqndAxRhC/4X6TRmCUWHbqNiXePboYeo14OWy4KQsVbMFubAekblrxHSirxdp9Uo7 O8blSegbQAbVBJ0qNyTWB8wBCyZDy9bLOArWthhEZCDkAXHeU11YO4bKRYOr1uVbuiFx lxWidaUQx0vb/BgKm/WqvhQVgsBTfhKSKLpDchmifs94dynta7xYZEKWmmS8ucCOIF+v +S/psZveoNj1BjaM44WM1xJRtt9y8+cwchuC+EefjpsVEZH2GSiCDifGBquH1/QBtL2h 9pBA== X-Gm-Message-State: AOAM531e972LRjR5apxgoZ3RdGcv+x3nf0RokjnfkTD6wwsYhPBGrZjy kVg4z5d+7Ye5c2jUd5QU7b/Fjb0dA6xnXA== X-Google-Smtp-Source: ABdhPJyXD+xTdg2gqXjHpYQ6Dv795HMGEx6uQiSeRvm6m5M8/z5BLCWanSqLf0JELwyoJ9hVYtM/vg== X-Received: by 2002:a17:902:d483:b0:13f:342d:ec92 with SMTP id c3-20020a170902d48300b0013f342dec92mr24869773plg.67.1635289813813; Tue, 26 Oct 2021 16:10:13 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 32/51] tcg/optimize: Split out fold_xi_to_i Date: Tue, 26 Oct 2021 16:09:24 -0700 Message-Id: <20211026230943.1225890-33-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62d; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635292199410100001 Pull the "op r, a, 0 =3D> movi r, 0" optimization into a function, and use it in the outer opcode fold functions. Reviewed-by: Luis Pires Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- tcg/optimize.c | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index ab96849edf..cfdc53c964 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -695,6 +695,15 @@ static bool fold_const2(OptContext *ctx, TCGOp *op) return false; } =20 +/* If the binary operation has second argument @i, fold to @i. */ +static bool fold_xi_to_i(OptContext *ctx, TCGOp *op, uint64_t i) +{ + if (arg_is_const(op->args[2]) && arg_info(op->args[2])->val =3D=3D i) { + return tcg_opt_gen_movi(ctx, op, op->args[0], i); + } + return false; +} + /* If the binary operation has both arguments equal, fold to @i. */ static bool fold_xx_to_i(OptContext *ctx, TCGOp *op, uint64_t i) { @@ -763,6 +772,7 @@ static bool fold_add2_i32(OptContext *ctx, TCGOp *op) static bool fold_and(OptContext *ctx, TCGOp *op) { if (fold_const2(ctx, op) || + fold_xi_to_i(ctx, op, 0) || fold_xx_to_x(ctx, op)) { return true; } @@ -1081,12 +1091,20 @@ static bool fold_movcond(OptContext *ctx, TCGOp *op) =20 static bool fold_mul(OptContext *ctx, TCGOp *op) { - return fold_const2(ctx, op); + if (fold_const2(ctx, op) || + fold_xi_to_i(ctx, op, 0)) { + return true; + } + return false; } =20 static bool fold_mul_highpart(OptContext *ctx, TCGOp *op) { - return fold_const2(ctx, op); + if (fold_const2(ctx, op) || + fold_xi_to_i(ctx, op, 0)) { + return true; + } + return false; } =20 static bool fold_mulu2_i32(OptContext *ctx, TCGOp *op) @@ -1753,22 +1771,6 @@ void tcg_optimize(TCGContext *s) continue; } =20 - /* Simplify expression for "op r, a, 0 =3D> movi r, 0" cases */ - switch (opc) { - CASE_OP_32_64_VEC(and): - CASE_OP_32_64_VEC(mul): - CASE_OP_32_64(muluh): - CASE_OP_32_64(mulsh): - if (arg_is_const(op->args[2]) - && arg_info(op->args[2])->val =3D=3D 0) { - tcg_opt_gen_movi(&ctx, op, op->args[0], 0); - continue; - } - break; - default: - break; - } - /* * Process each opcode. * Sorted alphabetically by opcode as much as possible. --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635292410544238.68211832414306; Tue, 26 Oct 2021 16:53:30 -0700 (PDT) Received: from localhost ([::1]:37026 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfWG1-0001xP-FF for importer@patchew.org; Tue, 26 Oct 2021 19:53:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53232) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVaJ-0003Rd-VW for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:24 -0400 Received: from mail-pg1-x532.google.com ([2607:f8b0:4864:20::532]:38814) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVaC-00021r-0Y for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:23 -0400 Received: by mail-pg1-x532.google.com with SMTP id e65so1031547pgc.5 for ; Tue, 26 Oct 2021 16:10:15 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.10.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:10:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=skOoD+WVXqg1LP1/W8y7ihe77x/ObnYayHV13fG5FOQ=; b=l8l4KpeYaPxtGYprIX1LC4VMk9bly/Ufo/x0n2TNSFliLuB9VSCqiXE3QvKA/4bga1 MXUXfxtoTl4Gk4Z49uC3uoLTUheu6t5KiC/Cjl5HR9KjHxk2Tk8ML5x42XfYwZnYeCPR rderW7DlAFbMKx1T5Twuf94fVOI1TNSv6W7TxN3Ov2HXLSQ9hoWL24ZWfeHtyl8hbbej Xnd0H7ml6tVG2YToJA0v+RsMf1TcAZWM+0yjg6XpVotodSkTbMWscqAULs0+7Q5kMPy6 CCKtJyLfY9x8SgpEGTdTDahuAbebYFzoSropOxVnIQ9OaghT/fuzsihYQwGYzVt5k3kp W8YQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=skOoD+WVXqg1LP1/W8y7ihe77x/ObnYayHV13fG5FOQ=; b=P5x90pMC1ie2R3k06UC1CUZ2BRFVoSPKDEnJQmEeCAJYwozYTlF47sp1uBQl8sr7LX /buBDpCOTK2dhWa16peyXImZa1ogP3lp1dSDcpJTtexPyzvIp8wI8/vTzVGPsh1VGeFi upere59PAlKqcB4Uq7yRFdgrnepZqEE1HGvMwxFpeBhxPxtrTxdjI6M/1uGIh9M9XqoT BJO7LibJ/o8GY4InJRWQq+eJ2FYhioIvC7rJbpO1W0PduzBtQcDzw/D5y6qeFNXNsIFD Apdq7/v7+YhRhxvx+NIBZHskwHI4m48OSBrdsVyRqpqRLWjJIQIkuqr0eDax2OAkapPP GdRw== X-Gm-Message-State: AOAM530dA+nd2Zha+ALY8I5RD9f++e//SCeaUXiUirxUNPHIFmg0nqXh ggFM95F61aq5+Q6abm5f8cb7m0T4YJ7JnQ== X-Google-Smtp-Source: ABdhPJyuOaUzUXnELgJ3tWvK5Yf/u6oLd/sUI8gGDdR/kyv/N0ieJQm3ATQBvBf861gbouTCCXdxRA== X-Received: by 2002:a05:6a00:8c7:b0:44c:a7f9:d8d1 with SMTP id s7-20020a056a0008c700b0044ca7f9d8d1mr28807209pfu.49.1635289814601; Tue, 26 Oct 2021 16:10:14 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 33/51] tcg/optimize: Add type to OptContext Date: Tue, 26 Oct 2021 16:09:25 -0700 Message-Id: <20211026230943.1225890-34-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-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::532; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x532.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635292411225100002 Content-Type: text/plain; charset="utf-8" Compute the type of the operation early. There are at least 4 places that used a def->flags ladder to determine the type of the operation being optimized. There were two places that assumed !TCG_OPF_64BIT means TCG_TYPE_I32, and so could potentially compute incorrect results for vector operations. Reviewed-by: Luis Pires Signed-off-by: Richard Henderson --- tcg/optimize.c | 149 +++++++++++++++++++++++++++++-------------------- 1 file changed, 89 insertions(+), 60 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index cfdc53c964..e869fa7e78 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -51,6 +51,7 @@ typedef struct OptContext { =20 /* In flight values from optimization. */ uint64_t z_mask; + TCGType type; } OptContext; =20 static inline TempOptInfo *ts_info(TCGTemp *ts) @@ -187,7 +188,6 @@ static bool tcg_opt_gen_mov(OptContext *ctx, TCGOp *op,= TCGArg dst, TCGArg src) { TCGTemp *dst_ts =3D arg_temp(dst); TCGTemp *src_ts =3D arg_temp(src); - const TCGOpDef *def; TempOptInfo *di; TempOptInfo *si; uint64_t z_mask; @@ -201,16 +201,24 @@ static bool tcg_opt_gen_mov(OptContext *ctx, TCGOp *o= p, TCGArg dst, TCGArg src) reset_ts(dst_ts); di =3D ts_info(dst_ts); si =3D ts_info(src_ts); - def =3D &tcg_op_defs[op->opc]; - if (def->flags & TCG_OPF_VECTOR) { - new_op =3D INDEX_op_mov_vec; - } else if (def->flags & TCG_OPF_64BIT) { - new_op =3D INDEX_op_mov_i64; - } else { + + switch (ctx->type) { + case TCG_TYPE_I32: new_op =3D INDEX_op_mov_i32; + break; + case TCG_TYPE_I64: + new_op =3D INDEX_op_mov_i64; + break; + case TCG_TYPE_V64: + case TCG_TYPE_V128: + case TCG_TYPE_V256: + /* TCGOP_VECL and TCGOP_VECE remain unchanged. */ + new_op =3D INDEX_op_mov_vec; + break; + default: + g_assert_not_reached(); } op->opc =3D new_op; - /* TCGOP_VECL and TCGOP_VECE remain unchanged. */ op->args[0] =3D dst; op->args[1] =3D src; =20 @@ -237,20 +245,9 @@ static bool tcg_opt_gen_mov(OptContext *ctx, TCGOp *op= , TCGArg dst, TCGArg src) static bool tcg_opt_gen_movi(OptContext *ctx, TCGOp *op, TCGArg dst, uint64_t val) { - const TCGOpDef *def =3D &tcg_op_defs[op->opc]; - TCGType type; - TCGTemp *tv; - - if (def->flags & TCG_OPF_VECTOR) { - type =3D TCGOP_VECL(op) + TCG_TYPE_V64; - } else if (def->flags & TCG_OPF_64BIT) { - type =3D TCG_TYPE_I64; - } else { - type =3D TCG_TYPE_I32; - } - /* Convert movi to mov with constant temp. */ - tv =3D tcg_constant_internal(type, val); + TCGTemp *tv =3D tcg_constant_internal(ctx->type, val); + init_ts_info(ctx, tv); return tcg_opt_gen_mov(ctx, op, dst, temp_arg(tv)); } @@ -420,11 +417,11 @@ static uint64_t do_constant_folding_2(TCGOpcode op, u= int64_t x, uint64_t y) } } =20 -static uint64_t do_constant_folding(TCGOpcode op, uint64_t x, uint64_t y) +static uint64_t do_constant_folding(TCGOpcode op, TCGType type, + uint64_t x, uint64_t y) { - const TCGOpDef *def =3D &tcg_op_defs[op]; uint64_t res =3D do_constant_folding_2(op, x, y); - if (!(def->flags & TCG_OPF_64BIT)) { + if (type =3D=3D TCG_TYPE_I32) { res =3D (int32_t)res; } return res; @@ -510,19 +507,21 @@ static bool do_constant_folding_cond_eq(TCGCond c) * Return -1 if the condition can't be simplified, * and the result of the condition (0 or 1) if it can. */ -static int do_constant_folding_cond(TCGOpcode op, TCGArg x, +static int do_constant_folding_cond(TCGType type, TCGArg x, TCGArg y, TCGCond c) { uint64_t xv =3D arg_info(x)->val; uint64_t yv =3D arg_info(y)->val; =20 if (arg_is_const(x) && arg_is_const(y)) { - const TCGOpDef *def =3D &tcg_op_defs[op]; - tcg_debug_assert(!(def->flags & TCG_OPF_VECTOR)); - if (def->flags & TCG_OPF_64BIT) { - return do_constant_folding_cond_64(xv, yv, c); - } else { + switch (type) { + case TCG_TYPE_I32: return do_constant_folding_cond_32(xv, yv, c); + case TCG_TYPE_I64: + return do_constant_folding_cond_64(xv, yv, c); + default: + /* Only scalar comparisons are optimizable */ + return -1; } } else if (args_are_copies(x, y)) { return do_constant_folding_cond_eq(c); @@ -677,7 +676,7 @@ static bool fold_const1(OptContext *ctx, TCGOp *op) uint64_t t; =20 t =3D arg_info(op->args[1])->val; - t =3D do_constant_folding(op->opc, t, 0); + t =3D do_constant_folding(op->opc, ctx->type, t, 0); return tcg_opt_gen_movi(ctx, op, op->args[0], t); } return false; @@ -689,7 +688,7 @@ static bool fold_const2(OptContext *ctx, TCGOp *op) uint64_t t1 =3D arg_info(op->args[1])->val; uint64_t t2 =3D arg_info(op->args[2])->val; =20 - t1 =3D do_constant_folding(op->opc, t1, t2); + t1 =3D do_constant_folding(op->opc, ctx->type, t1, t2); return tcg_opt_gen_movi(ctx, op, op->args[0], t1); } return false; @@ -791,7 +790,7 @@ static bool fold_andc(OptContext *ctx, TCGOp *op) static bool fold_brcond(OptContext *ctx, TCGOp *op) { TCGCond cond =3D op->args[2]; - int i =3D do_constant_folding_cond(op->opc, op->args[0], op->args[1], = cond); + int i =3D do_constant_folding_cond(ctx->type, op->args[0], op->args[1]= , cond); =20 if (i =3D=3D 0) { tcg_op_remove(ctx->tcg, op); @@ -836,7 +835,7 @@ static bool fold_brcond2(OptContext *ctx, TCGOp *op) * Simplify EQ/NE comparisons where one of the pairs * can be simplified. */ - i =3D do_constant_folding_cond(INDEX_op_brcond_i32, op->args[0], + i =3D do_constant_folding_cond(TCG_TYPE_I32, op->args[0], op->args[2], cond); switch (i ^ inv) { case 0: @@ -845,7 +844,7 @@ static bool fold_brcond2(OptContext *ctx, TCGOp *op) goto do_brcond_high; } =20 - i =3D do_constant_folding_cond(INDEX_op_brcond_i32, op->args[1], + i =3D do_constant_folding_cond(TCG_TYPE_I32, op->args[1], op->args[3], cond); switch (i ^ inv) { case 0: @@ -887,7 +886,7 @@ static bool fold_bswap(OptContext *ctx, TCGOp *op) if (arg_is_const(op->args[1])) { uint64_t t =3D arg_info(op->args[1])->val; =20 - t =3D do_constant_folding(op->opc, t, op->args[2]); + t =3D do_constant_folding(op->opc, ctx->type, t, op->args[2]); return tcg_opt_gen_movi(ctx, op, op->args[0], t); } return false; @@ -931,7 +930,7 @@ static bool fold_count_zeros(OptContext *ctx, TCGOp *op) uint64_t t =3D arg_info(op->args[1])->val; =20 if (t !=3D 0) { - t =3D do_constant_folding(op->opc, t, 0); + t =3D do_constant_folding(op->opc, ctx->type, t, 0); return tcg_opt_gen_movi(ctx, op, op->args[0], t); } return tcg_opt_gen_mov(ctx, op, op->args[0], op->args[2]); @@ -1063,9 +1062,8 @@ static bool fold_mov(OptContext *ctx, TCGOp *op) =20 static bool fold_movcond(OptContext *ctx, TCGOp *op) { - TCGOpcode opc =3D op->opc; TCGCond cond =3D op->args[5]; - int i =3D do_constant_folding_cond(opc, op->args[1], op->args[2], cond= ); + int i =3D do_constant_folding_cond(ctx->type, op->args[1], op->args[2]= , cond); =20 if (i >=3D 0) { return tcg_opt_gen_mov(ctx, op, op->args[0], op->args[4 - i]); @@ -1074,9 +1072,18 @@ static bool fold_movcond(OptContext *ctx, TCGOp *op) if (arg_is_const(op->args[3]) && arg_is_const(op->args[4])) { uint64_t tv =3D arg_info(op->args[3])->val; uint64_t fv =3D arg_info(op->args[4])->val; + TCGOpcode opc; =20 - opc =3D (opc =3D=3D INDEX_op_movcond_i32 - ? INDEX_op_setcond_i32 : INDEX_op_setcond_i64); + switch (ctx->type) { + case TCG_TYPE_I32: + opc =3D INDEX_op_setcond_i32; + break; + case TCG_TYPE_I64: + opc =3D INDEX_op_setcond_i64; + break; + default: + g_assert_not_reached(); + } =20 if (tv =3D=3D 1 && fv =3D=3D 0) { op->opc =3D opc; @@ -1181,7 +1188,7 @@ static bool fold_remainder(OptContext *ctx, TCGOp *op) static bool fold_setcond(OptContext *ctx, TCGOp *op) { TCGCond cond =3D op->args[3]; - int i =3D do_constant_folding_cond(op->opc, op->args[1], op->args[2], = cond); + int i =3D do_constant_folding_cond(ctx->type, op->args[1], op->args[2]= , cond); =20 if (i >=3D 0) { return tcg_opt_gen_movi(ctx, op, op->args[0], i); @@ -1220,7 +1227,7 @@ static bool fold_setcond2(OptContext *ctx, TCGOp *op) * Simplify EQ/NE comparisons where one of the pairs * can be simplified. */ - i =3D do_constant_folding_cond(INDEX_op_setcond_i32, op->args[1], + i =3D do_constant_folding_cond(TCG_TYPE_I32, op->args[1], op->args[3], cond); switch (i ^ inv) { case 0: @@ -1229,7 +1236,7 @@ static bool fold_setcond2(OptContext *ctx, TCGOp *op) goto do_setcond_high; } =20 - i =3D do_constant_folding_cond(INDEX_op_setcond_i32, op->args[2], + i =3D do_constant_folding_cond(TCG_TYPE_I32, op->args[2], op->args[4], cond); switch (i ^ inv) { case 0: @@ -1331,6 +1338,15 @@ void tcg_optimize(TCGContext *s) init_arguments(&ctx, op, def->nb_oargs + def->nb_iargs); copy_propagate(&ctx, op, def->nb_oargs, def->nb_iargs); =20 + /* Pre-compute the type of the operation. */ + if (def->flags & TCG_OPF_VECTOR) { + ctx.type =3D TCG_TYPE_V64 + TCGOP_VECL(op); + } else if (def->flags & TCG_OPF_64BIT) { + ctx.type =3D TCG_TYPE_I64; + } else { + ctx.type =3D TCG_TYPE_I32; + } + /* For commutative operations make constant second argument */ switch (opc) { CASE_OP_32_64_VEC(add): @@ -1411,19 +1427,24 @@ void tcg_optimize(TCGContext *s) /* Proceed with possible constant folding. */ break; } - if (opc =3D=3D INDEX_op_sub_i32) { + switch (ctx.type) { + case TCG_TYPE_I32: neg_op =3D INDEX_op_neg_i32; have_neg =3D TCG_TARGET_HAS_neg_i32; - } else if (opc =3D=3D INDEX_op_sub_i64) { + break; + case TCG_TYPE_I64: neg_op =3D INDEX_op_neg_i64; have_neg =3D TCG_TARGET_HAS_neg_i64; - } else if (TCG_TARGET_HAS_neg_vec) { - TCGType type =3D TCGOP_VECL(op) + TCG_TYPE_V64; - unsigned vece =3D TCGOP_VECE(op); - neg_op =3D INDEX_op_neg_vec; - have_neg =3D tcg_can_emit_vec_op(neg_op, type, vece) >= 0; - } else { break; + case TCG_TYPE_V64: + case TCG_TYPE_V128: + case TCG_TYPE_V256: + neg_op =3D INDEX_op_neg_vec; + have_neg =3D tcg_can_emit_vec_op(neg_op, ctx.type, + TCGOP_VECE(op)) > 0; + break; + default: + g_assert_not_reached(); } if (!have_neg) { break; @@ -1476,15 +1497,23 @@ void tcg_optimize(TCGContext *s) TCGOpcode not_op; bool have_not; =20 - if (def->flags & TCG_OPF_VECTOR) { - not_op =3D INDEX_op_not_vec; - have_not =3D TCG_TARGET_HAS_not_vec; - } else if (def->flags & TCG_OPF_64BIT) { - not_op =3D INDEX_op_not_i64; - have_not =3D TCG_TARGET_HAS_not_i64; - } else { + switch (ctx.type) { + case TCG_TYPE_I32: not_op =3D INDEX_op_not_i32; have_not =3D TCG_TARGET_HAS_not_i32; + break; + case TCG_TYPE_I64: + not_op =3D INDEX_op_not_i64; + have_not =3D TCG_TARGET_HAS_not_i64; + break; + case TCG_TYPE_V64: + case TCG_TYPE_V128: + case TCG_TYPE_V256: + not_op =3D INDEX_op_not_vec; + have_not =3D TCG_TARGET_HAS_not_vec; + break; + default: + g_assert_not_reached(); } if (!have_not) { break; @@ -1755,7 +1784,7 @@ void tcg_optimize(TCGContext *s) below, we can ignore high bits, but for further optimizations we need to record that the high bits contain garbage. */ partmask =3D z_mask; - if (!(def->flags & TCG_OPF_64BIT)) { + if (ctx.type =3D=3D TCG_TYPE_I32) { z_mask |=3D ~(tcg_target_ulong)0xffffffffu; partmask &=3D 0xffffffffu; affected &=3D 0xffffffffu; --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635291799825279.9378215020499; Tue, 26 Oct 2021 16:43:19 -0700 (PDT) Received: from localhost ([::1]:48076 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfW6A-00070D-PU for importer@patchew.org; Tue, 26 Oct 2021 19:43:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53224) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVaJ-0003Q2-G3 for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:23 -0400 Received: from mail-pg1-x529.google.com ([2607:f8b0:4864:20::529]:46036) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVaC-000230-Kg for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:23 -0400 Received: by mail-pg1-x529.google.com with SMTP id f5so985328pgc.12 for ; Tue, 26 Oct 2021 16:10:16 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.10.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:10:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=S0SCg5p4EYCHGwPbJ1a4TLPyA6Zo8+aXq5lp/xexQmM=; b=VQ3NPnaGJFbKuLfRItwuXAuWGa3rgo0LYjPUbJ1BUlVdNDH43UuFbUXX4iBRKd9m0Q IIEIdpJqGamKi/zaD+gozJvKZWM70HLWbB+IVxXOFlvm151H6E2HeSh/9RbYH408utdl VksPHCP5MJKl6PjqlaOchPh4fa2VUdg6JetOGqpURa6wpsfLKttHyz8BIGn8NUSn/tJZ +c+T/RyH4rRtEq3vzogx8fYPDHvI6E7bLuKSEGJ2DwGopVMUPNUDl/1K7oUdTqaWjTF7 H8bitfmZncy13l4peP4ZaRzYVXGbZlTuQOtivUl+mMXXUBCTN37ZN9ujn/p4ADFvWEFn 1a1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=S0SCg5p4EYCHGwPbJ1a4TLPyA6Zo8+aXq5lp/xexQmM=; b=PVVfzmd5CJPIp+U/Rr3yE1jbQKLbiVWD61dQYvUDX/5Qgo06Ipcd3kOC2vvFMVl0xb BPfpwez7eYXagwTEMWeYDXnjWXSsW5KGihOXKvGbJ4Xt//ODW7lb8TdLZCL5q5KGwfYU nSG2apNkZw/ZFyM44/FoEgfJJIGEdDTn+sBVFGhfKi8l7j1LnVk0sSPc7m9jBscl+WO3 gYsHAgkzx9b5Nj3noQpolVuxBCdrRNCV2SsxX4jsH6QQcAPewaE5GeSBZrbR7WVItyh0 0cDS90hWEnFGVgm7wciziTwWHAE6P+XE398q2eX4FdTvxIBanfBGfA2RlGYkFQb3qa45 6aog== X-Gm-Message-State: AOAM532m9F0WQeLiNYGYfkNi9spm5uzzmPrOejs1yWw451+iIYR70TQa 2LzyVIqJrg2cbb00avxlIx34lGt7Cec13g== X-Google-Smtp-Source: ABdhPJzKPTZucvS0/+Xb63AyKeFNxodWLM+pdg0IjEBsVszjLJjpdObh4671TD2wxr2IxWjYSnojpg== X-Received: by 2002:aa7:8704:0:b0:47b:e938:f31 with SMTP id b4-20020aa78704000000b0047be9380f31mr18597772pfo.67.1635289815363; Tue, 26 Oct 2021 16:10:15 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 34/51] tcg/optimize: Split out fold_to_not Date: Tue, 26 Oct 2021 16:09:26 -0700 Message-Id: <20211026230943.1225890-35-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::529; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x529.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635291801980100001 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 Reviewed-by: Luis Pires --- tcg/optimize.c | 158 +++++++++++++++++++++++++++---------------------- 1 file changed, 86 insertions(+), 72 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index e869fa7e78..21f4251b4f 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -694,6 +694,52 @@ static bool fold_const2(OptContext *ctx, TCGOp *op) return false; } =20 +/* + * Convert @op to NOT, if NOT is supported by the host. + * Return true f the conversion is successful, which will still + * indicate that the processing is complete. + */ +static bool fold_not(OptContext *ctx, TCGOp *op); +static bool fold_to_not(OptContext *ctx, TCGOp *op, int idx) +{ + TCGOpcode not_op; + bool have_not; + + switch (ctx->type) { + case TCG_TYPE_I32: + not_op =3D INDEX_op_not_i32; + have_not =3D TCG_TARGET_HAS_not_i32; + break; + case TCG_TYPE_I64: + not_op =3D INDEX_op_not_i64; + have_not =3D TCG_TARGET_HAS_not_i64; + break; + case TCG_TYPE_V64: + case TCG_TYPE_V128: + case TCG_TYPE_V256: + not_op =3D INDEX_op_not_vec; + have_not =3D TCG_TARGET_HAS_not_vec; + break; + default: + g_assert_not_reached(); + } + if (have_not) { + op->opc =3D not_op; + op->args[1] =3D op->args[idx]; + return fold_not(ctx, op); + } + return false; +} + +/* If the binary operation has first argument @i, fold to NOT. */ +static bool fold_ix_to_not(OptContext *ctx, TCGOp *op, uint64_t i) +{ + if (arg_is_const(op->args[1]) && arg_info(op->args[1])->val =3D=3D i) { + return fold_to_not(ctx, op, 2); + } + return false; +} + /* If the binary operation has second argument @i, fold to @i. */ static bool fold_xi_to_i(OptContext *ctx, TCGOp *op, uint64_t i) { @@ -703,6 +749,15 @@ static bool fold_xi_to_i(OptContext *ctx, TCGOp *op, u= int64_t i) return false; } =20 +/* If the binary operation has second argument @i, fold to NOT. */ +static bool fold_xi_to_not(OptContext *ctx, TCGOp *op, uint64_t i) +{ + if (arg_is_const(op->args[2]) && arg_info(op->args[2])->val =3D=3D i) { + return fold_to_not(ctx, op, 1); + } + return false; +} + /* If the binary operation has both arguments equal, fold to @i. */ static bool fold_xx_to_i(OptContext *ctx, TCGOp *op, uint64_t i) { @@ -781,7 +836,8 @@ static bool fold_and(OptContext *ctx, TCGOp *op) static bool fold_andc(OptContext *ctx, TCGOp *op) { if (fold_const2(ctx, op) || - fold_xx_to_i(ctx, op, 0)) { + fold_xx_to_i(ctx, op, 0) || + fold_ix_to_not(ctx, op, -1)) { return true; } return false; @@ -987,7 +1043,11 @@ static bool fold_dup2(OptContext *ctx, TCGOp *op) =20 static bool fold_eqv(OptContext *ctx, TCGOp *op) { - return fold_const2(ctx, op); + if (fold_const2(ctx, op) || + fold_xi_to_not(ctx, op, 0)) { + return true; + } + return false; } =20 static bool fold_extract(OptContext *ctx, TCGOp *op) @@ -1134,7 +1194,11 @@ static bool fold_mulu2_i32(OptContext *ctx, TCGOp *o= p) =20 static bool fold_nand(OptContext *ctx, TCGOp *op) { - return fold_const2(ctx, op); + if (fold_const2(ctx, op) || + fold_xi_to_not(ctx, op, -1)) { + return true; + } + return false; } =20 static bool fold_neg(OptContext *ctx, TCGOp *op) @@ -1144,12 +1208,22 @@ static bool fold_neg(OptContext *ctx, TCGOp *op) =20 static bool fold_nor(OptContext *ctx, TCGOp *op) { - return fold_const2(ctx, op); + if (fold_const2(ctx, op) || + fold_xi_to_not(ctx, op, 0)) { + return true; + } + return false; } =20 static bool fold_not(OptContext *ctx, TCGOp *op) { - return fold_const1(ctx, op); + if (fold_const1(ctx, op)) { + return true; + } + + /* Because of fold_to_not, we want to always return true, via finish. = */ + finish_folding(ctx, op); + return true; } =20 static bool fold_or(OptContext *ctx, TCGOp *op) @@ -1163,7 +1237,11 @@ static bool fold_or(OptContext *ctx, TCGOp *op) =20 static bool fold_orc(OptContext *ctx, TCGOp *op) { - return fold_const2(ctx, op); + if (fold_const2(ctx, op) || + fold_ix_to_not(ctx, op, 0)) { + return true; + } + return false; } =20 static bool fold_qemu_ld(OptContext *ctx, TCGOp *op) @@ -1299,7 +1377,8 @@ static bool fold_sub2_i32(OptContext *ctx, TCGOp *op) static bool fold_xor(OptContext *ctx, TCGOp *op) { if (fold_const2(ctx, op) || - fold_xx_to_i(ctx, op, 0)) { + fold_xx_to_i(ctx, op, 0) || + fold_xi_to_not(ctx, op, -1)) { return true; } return false; @@ -1458,71 +1537,6 @@ void tcg_optimize(TCGContext *s) } } break; - CASE_OP_32_64_VEC(xor): - CASE_OP_32_64(nand): - if (!arg_is_const(op->args[1]) - && arg_is_const(op->args[2]) - && arg_info(op->args[2])->val =3D=3D -1) { - i =3D 1; - goto try_not; - } - break; - CASE_OP_32_64(nor): - if (!arg_is_const(op->args[1]) - && arg_is_const(op->args[2]) - && arg_info(op->args[2])->val =3D=3D 0) { - i =3D 1; - goto try_not; - } - break; - CASE_OP_32_64_VEC(andc): - if (!arg_is_const(op->args[2]) - && arg_is_const(op->args[1]) - && arg_info(op->args[1])->val =3D=3D -1) { - i =3D 2; - goto try_not; - } - break; - CASE_OP_32_64_VEC(orc): - CASE_OP_32_64(eqv): - if (!arg_is_const(op->args[2]) - && arg_is_const(op->args[1]) - && arg_info(op->args[1])->val =3D=3D 0) { - i =3D 2; - goto try_not; - } - break; - try_not: - { - TCGOpcode not_op; - bool have_not; - - switch (ctx.type) { - case TCG_TYPE_I32: - not_op =3D INDEX_op_not_i32; - have_not =3D TCG_TARGET_HAS_not_i32; - break; - case TCG_TYPE_I64: - not_op =3D INDEX_op_not_i64; - have_not =3D TCG_TARGET_HAS_not_i64; - break; - case TCG_TYPE_V64: - case TCG_TYPE_V128: - case TCG_TYPE_V256: - not_op =3D INDEX_op_not_vec; - have_not =3D TCG_TARGET_HAS_not_vec; - break; - default: - g_assert_not_reached(); - } - if (!have_not) { - break; - } - op->opc =3D not_op; - reset_temp(op->args[0]); - op->args[1] =3D op->args[i]; - continue; - } default: break; } --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635290841117375.07626720112523; Tue, 26 Oct 2021 16:27:21 -0700 (PDT) Received: from localhost ([::1]:45434 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVqi-0002tj-4m for importer@patchew.org; Tue, 26 Oct 2021 19:27:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53236) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVaK-0003Rm-31 for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:24 -0400 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]:39743) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVaD-00023d-L8 for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:23 -0400 Received: by mail-pj1-x1029.google.com with SMTP id u6-20020a17090a3fc600b001a00250584aso3550759pjm.4 for ; Tue, 26 Oct 2021 16:10:17 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.10.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:10:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=FGhVKVJSDxY3HmMJpb1bjuDxl1XBH/ImqPdvrbNQikQ=; b=l1og1Z6nPaVBU96SSlW5jEQKSVxtlfL04YvGW3A6EFpCJ/tgxRG2tXzTfv+WhP/d1L WSWbhhOk4Lqwoz9gP4Vevsf+VAKByIPpFkDstylV1azOaM4BZzOz/8S4Kmp3hS7gTyIa mhzJOnovWrEDgX9Gw7Epkv3ZqTJ4RNUGZd2+zkdZhIOdXASOd5Qc9q2m1lYp6UciPGL5 mofVbUqoOAdTiXD23LQV9qLY0gleb++dnM86VlGSPyLrF0CV07iZEgYMQQzd/kF3KmOv DQfikaanE9G36zfVvsWQS2SwKJxRR4dM9Vud3Dpjlawhi3EEziKhtsvGvdMjM7saA1uh t7pw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=FGhVKVJSDxY3HmMJpb1bjuDxl1XBH/ImqPdvrbNQikQ=; b=08LHRZd2eXDNrg8HyGCKjWft1O4YU9TKiWhg+UJWZERoZmCpFkVIk+gycqQ5IBaG2n pQxbyyr4gqktSKHJ6TcoEwYUN5asRmstnG77zQirYvqWK+IcjfcO1v8eq1jQ//zhRHD9 LxBbS8afiAu0NBfphCZt2Scp1rDRFA8Np7Vt+i3hEWkTEBAWiSFhSqxgRhxQKAitajX8 wOQrwWcBkXgoJjCTEx5907wA+1yP+EMHOxAEPLCwBc/ZTWn1JGxSdLFq/agVBqpZmx/V LgVoddTwhmUgwJoR8OImrVWhqLxeh2km+mcXHyREzGJkUITefbManyeAY6etTJXuJI1s DUHQ== X-Gm-Message-State: AOAM531DnfgFJijXkzt5uJXlFJZOjx4xYEzOuCLACZgamXGoIyJ5ixKg NRTthUP/Mx+0XMy/Au9pTDmM6cK9vOFFAA== X-Google-Smtp-Source: ABdhPJzxiKHdNfj5G4qAU+labWmrDgU+bnohrHzgvu18svZjA96JruKXe+meXExAKlSRbx0OXaM2bw== X-Received: by 2002:a17:902:868c:b0:140:f6f:8a10 with SMTP id g12-20020a170902868c00b001400f6f8a10mr24821374plo.77.1635289816314; Tue, 26 Oct 2021 16:10:16 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 35/51] tcg/optimize: Split out fold_sub_to_neg Date: Tue, 26 Oct 2021 16:09:27 -0700 Message-Id: <20211026230943.1225890-36-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-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: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635290842623100001 Content-Type: text/plain; charset="utf-8" Even though there is only one user, place this more complex conversion into its own helper. Reviewed-by: Luis Pires Signed-off-by: Richard Henderson --- tcg/optimize.c | 89 ++++++++++++++++++++++++++------------------------ 1 file changed, 47 insertions(+), 42 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 21f4251b4f..e0d850ffe4 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -1203,7 +1203,15 @@ static bool fold_nand(OptContext *ctx, TCGOp *op) =20 static bool fold_neg(OptContext *ctx, TCGOp *op) { - return fold_const1(ctx, op); + if (fold_const1(ctx, op)) { + return true; + } + /* + * Because of fold_sub_to_neg, we want to always return true, + * via finish_folding. + */ + finish_folding(ctx, op); + return true; } =20 static bool fold_nor(OptContext *ctx, TCGOp *op) @@ -1360,10 +1368,47 @@ static bool fold_shift(OptContext *ctx, TCGOp *op) return fold_const2(ctx, op); } =20 +static bool fold_sub_to_neg(OptContext *ctx, TCGOp *op) +{ + TCGOpcode neg_op; + bool have_neg; + + if (!arg_is_const(op->args[1]) || arg_info(op->args[1])->val !=3D 0) { + return false; + } + + switch (ctx->type) { + case TCG_TYPE_I32: + neg_op =3D INDEX_op_neg_i32; + have_neg =3D TCG_TARGET_HAS_neg_i32; + break; + case TCG_TYPE_I64: + neg_op =3D INDEX_op_neg_i64; + have_neg =3D TCG_TARGET_HAS_neg_i64; + break; + case TCG_TYPE_V64: + case TCG_TYPE_V128: + case TCG_TYPE_V256: + neg_op =3D INDEX_op_neg_vec; + have_neg =3D (TCG_TARGET_HAS_neg_vec && + tcg_can_emit_vec_op(neg_op, ctx->type, TCGOP_VECE(op))= > 0); + break; + default: + g_assert_not_reached(); + } + if (have_neg) { + op->opc =3D neg_op; + op->args[1] =3D op->args[2]; + return fold_neg(ctx, op); + } + return false; +} + static bool fold_sub(OptContext *ctx, TCGOp *op) { if (fold_const2(ctx, op) || - fold_xx_to_i(ctx, op, 0)) { + fold_xx_to_i(ctx, op, 0) || + fold_sub_to_neg(ctx, op)) { return true; } return false; @@ -1497,46 +1542,6 @@ void tcg_optimize(TCGContext *s) continue; } break; - CASE_OP_32_64_VEC(sub): - { - TCGOpcode neg_op; - bool have_neg; - - if (arg_is_const(op->args[2])) { - /* Proceed with possible constant folding. */ - break; - } - switch (ctx.type) { - case TCG_TYPE_I32: - neg_op =3D INDEX_op_neg_i32; - have_neg =3D TCG_TARGET_HAS_neg_i32; - break; - case TCG_TYPE_I64: - neg_op =3D INDEX_op_neg_i64; - have_neg =3D TCG_TARGET_HAS_neg_i64; - break; - case TCG_TYPE_V64: - case TCG_TYPE_V128: - case TCG_TYPE_V256: - neg_op =3D INDEX_op_neg_vec; - have_neg =3D tcg_can_emit_vec_op(neg_op, ctx.type, - TCGOP_VECE(op)) > 0; - break; - default: - g_assert_not_reached(); - } - if (!have_neg) { - break; - } - if (arg_is_const(op->args[1]) - && arg_info(op->args[1])->val =3D=3D 0) { - op->opc =3D neg_op; - reset_temp(op->args[0]); - op->args[1] =3D op->args[2]; - continue; - } - } - break; default: break; } --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635291166090599.1482097185424; Tue, 26 Oct 2021 16:32:46 -0700 (PDT) Received: from localhost ([::1]:56640 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVvv-0002Ek-2V for importer@patchew.org; Tue, 26 Oct 2021 19:32:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53292) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVaM-0003ZO-Qm for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:26 -0400 Received: from mail-pg1-x52d.google.com ([2607:f8b0:4864:20::52d]:33584) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVaE-00024C-M6 for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:26 -0400 Received: by mail-pg1-x52d.google.com with SMTP id r28so1097636pga.0 for ; Tue, 26 Oct 2021 16:10:18 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.10.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:10:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=q3ElF8JA3bM0mJLq0luTOxuWYnSYGx2kNvlEU56rwcM=; b=sgIQ8t5IZxTauvmM1tldQUs11szXhOB9HvCBwnty8sXIo0S1dcqfqFehoCG4XKWiKS 4IsYGQlzIZWYgQqkzBErHAYu/KYSMYTpHjlU58w4VE2TBdAICd2pZ3yPxUFddsKsmWnU dWbG+7mAfCHjuENGIoo5oY2IOMRJNX+y2tLbnWdUfRxrxZqpPNXvDyAnkIIBg/wPzqYp mkABg+UN+GaDW2eF4GaQLSRUQMBtU5gfc/v1lb9bnFo8XD4c8Ci/IVXUHuuTQWGYYVUm CZggbz5pMCa4qD4SVxwB43RxgjsA2JgSpwPF6TUxTerPXBjx/suPbVsm9b0FToRLMHql 2qpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=q3ElF8JA3bM0mJLq0luTOxuWYnSYGx2kNvlEU56rwcM=; b=jgjaT8IJSFBdS5BrmJ4k1iLcXKFaiRtXFIUEHqV2Do8ZX2W90zTrtNxBxswRinSlsA n+l3R/afB8iXGLN2HRPpeC4LIN+gfqxk/A8mKG+sgGSexCiLxIgHPJ7H7E8qd9cQei6v EYhW5IS1Q7G77njGCPtoLzTmjpdbTh3Gwa27eTJ2aopTGzLUCJ0r7JtRiPcsfnFGLFi9 0crrCSUng+T/9cRX2vbdZsV0BipsJDzS8Pe5NBsVM/jm3I2ld50wRejavxbsqNnk6rmK /wuvW0wE1DWFnKmtVMOcFaJBeMp3s33FA7MZ4u6QHL6xjBxFYIyOHw1cl4h6xCUUemVV YY5A== X-Gm-Message-State: AOAM532HopuoooLUWn/1kWhepxqn+2XpQWDOfAvAw36NGOITXdUgPzgv PCkiMvub3ozHoLhkjjMev70jjwHzMLeFDg== X-Google-Smtp-Source: ABdhPJxFFuUo9xX/DuEiGozQDVFC5T6D7ZYvV3WRotUt0N7Cuz1/+7fe2iIHw0zPKCKkyKOX2jRiFw== X-Received: by 2002:a05:6a00:1995:b0:47c:1e13:b679 with SMTP id d21-20020a056a00199500b0047c1e13b679mr3825743pfl.19.1635289817330; Tue, 26 Oct 2021 16:10:17 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 36/51] tcg/optimize: Split out fold_xi_to_x Date: Tue, 26 Oct 2021 16:09:28 -0700 Message-Id: <20211026230943.1225890-37-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52d; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635291167320100001 Content-Type: text/plain; charset="utf-8" Pull the "op r, a, i =3D> mov r, a" optimization into a function, and use them in the outer-most logical operations. Signed-off-by: Richard Henderson Reviewed-by: Luis Pires --- tcg/optimize.c | 61 +++++++++++++++++++++----------------------------- 1 file changed, 26 insertions(+), 35 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index e0d850ffe4..f5ab0500b7 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -749,6 +749,15 @@ static bool fold_xi_to_i(OptContext *ctx, TCGOp *op, u= int64_t i) return false; } =20 +/* If the binary operation has second argument @i, fold to identity. */ +static bool fold_xi_to_x(OptContext *ctx, TCGOp *op, uint64_t i) +{ + if (arg_is_const(op->args[2]) && arg_info(op->args[2])->val =3D=3D i) { + return tcg_opt_gen_mov(ctx, op, op->args[0], op->args[1]); + } + return false; +} + /* If the binary operation has second argument @i, fold to NOT. */ static bool fold_xi_to_not(OptContext *ctx, TCGOp *op, uint64_t i) { @@ -787,7 +796,11 @@ static bool fold_xx_to_x(OptContext *ctx, TCGOp *op) =20 static bool fold_add(OptContext *ctx, TCGOp *op) { - return fold_const2(ctx, op); + if (fold_const2(ctx, op) || + fold_xi_to_x(ctx, op, 0)) { + return true; + } + return false; } =20 static bool fold_addsub2_i32(OptContext *ctx, TCGOp *op, bool add) @@ -827,6 +840,7 @@ static bool fold_and(OptContext *ctx, TCGOp *op) { if (fold_const2(ctx, op) || fold_xi_to_i(ctx, op, 0) || + fold_xi_to_x(ctx, op, -1) || fold_xx_to_x(ctx, op)) { return true; } @@ -837,6 +851,7 @@ static bool fold_andc(OptContext *ctx, TCGOp *op) { if (fold_const2(ctx, op) || fold_xx_to_i(ctx, op, 0) || + fold_xi_to_x(ctx, op, 0) || fold_ix_to_not(ctx, op, -1)) { return true; } @@ -1044,6 +1059,7 @@ static bool fold_dup2(OptContext *ctx, TCGOp *op) static bool fold_eqv(OptContext *ctx, TCGOp *op) { if (fold_const2(ctx, op) || + fold_xi_to_x(ctx, op, -1) || fold_xi_to_not(ctx, op, 0)) { return true; } @@ -1237,6 +1253,7 @@ static bool fold_not(OptContext *ctx, TCGOp *op) static bool fold_or(OptContext *ctx, TCGOp *op) { if (fold_const2(ctx, op) || + fold_xi_to_x(ctx, op, 0) || fold_xx_to_x(ctx, op)) { return true; } @@ -1246,6 +1263,7 @@ static bool fold_or(OptContext *ctx, TCGOp *op) static bool fold_orc(OptContext *ctx, TCGOp *op) { if (fold_const2(ctx, op) || + fold_xi_to_x(ctx, op, -1) || fold_ix_to_not(ctx, op, 0)) { return true; } @@ -1365,7 +1383,11 @@ static bool fold_sextract(OptContext *ctx, TCGOp *op) =20 static bool fold_shift(OptContext *ctx, TCGOp *op) { - return fold_const2(ctx, op); + if (fold_const2(ctx, op) || + fold_xi_to_x(ctx, op, 0)) { + return true; + } + return false; } =20 static bool fold_sub_to_neg(OptContext *ctx, TCGOp *op) @@ -1408,6 +1430,7 @@ static bool fold_sub(OptContext *ctx, TCGOp *op) { if (fold_const2(ctx, op) || fold_xx_to_i(ctx, op, 0) || + fold_xi_to_x(ctx, op, 0) || fold_sub_to_neg(ctx, op)) { return true; } @@ -1423,6 +1446,7 @@ static bool fold_xor(OptContext *ctx, TCGOp *op) { if (fold_const2(ctx, op) || fold_xx_to_i(ctx, op, 0) || + fold_xi_to_x(ctx, op, 0) || fold_xi_to_not(ctx, op, -1)) { return true; } @@ -1546,39 +1570,6 @@ void tcg_optimize(TCGContext *s) break; } =20 - /* Simplify expression for "op r, a, const =3D> mov r, a" cases */ - switch (opc) { - CASE_OP_32_64_VEC(add): - CASE_OP_32_64_VEC(sub): - CASE_OP_32_64_VEC(or): - CASE_OP_32_64_VEC(xor): - CASE_OP_32_64_VEC(andc): - CASE_OP_32_64(shl): - CASE_OP_32_64(shr): - CASE_OP_32_64(sar): - CASE_OP_32_64(rotl): - CASE_OP_32_64(rotr): - if (!arg_is_const(op->args[1]) - && arg_is_const(op->args[2]) - && arg_info(op->args[2])->val =3D=3D 0) { - tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[1]); - continue; - } - break; - CASE_OP_32_64_VEC(and): - CASE_OP_32_64_VEC(orc): - CASE_OP_32_64(eqv): - if (!arg_is_const(op->args[1]) - && arg_is_const(op->args[2]) - && arg_info(op->args[2])->val =3D=3D -1) { - tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[1]); - continue; - } - break; - default: - break; - } - /* Simplify using known-zero bits. Currently only ops with a single output argument is supported. */ z_mask =3D -1; --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635291414495334.0528441133647; Tue, 26 Oct 2021 16:36:54 -0700 (PDT) Received: from localhost ([::1]:39316 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVzx-000157-EE for importer@patchew.org; Tue, 26 Oct 2021 19:36:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53250) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVaL-0003UA-6O for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:25 -0400 Received: from mail-pj1-x102f.google.com ([2607:f8b0:4864:20::102f]:46975) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVaF-00024U-KO for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:24 -0400 Received: by mail-pj1-x102f.google.com with SMTP id lx5-20020a17090b4b0500b001a262880e99so635020pjb.5 for ; Tue, 26 Oct 2021 16:10:19 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.10.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:10:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=c9WNRlGeOHz8VZWPjOaGMMZX6Dax33jheJzEQdYsE1k=; b=ByqZ2zAe/fPifm7gkBfqsX8MWvKMKMqyypb78oMbHvAh/Jdr2Dtar6Sb8dJSI0LZIk xiwcy/cVJbnCdwEkGPb3kpIhH4JXqFm9n8EQUT8W+T7BNv6uLe3+FrdGuKaNG00RWhxO OuZD/PIsF7qRzMF/EQN8pjjLYkUUvMa0UPKZJ8lsr5Tajn1ZGS902gwz6M4UJhaXesbX oW9yDZtjBntQL0jKs3WshZBm+oI1U/j0p/Xzj9PiwVcSy86YR/guuEnR1nopnHcI2eCX LfcRGNeqySqbdgX7rLMud9yQ71HK+Wg7NxeOf4SdzRLOCNtdd1WdcckYgmKo57O4WE4+ c/pQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=c9WNRlGeOHz8VZWPjOaGMMZX6Dax33jheJzEQdYsE1k=; b=4zYFiIwakPxot0KMu/MNLVdUNrAam+obeyERVaVlvdK6/FDjFvk3kbp0eI+2GcuyBT nw0Y0y49RfZU2kctMKNTX+pLch4v/sumNStpuCy7d7zzWvnKDrmWLWWPkC4IlGrTtV/f 38pxxXmuBWCD/9QgxuB8adY2FLgcDFw0txUrF7+W6QIKxtTHJsZEWCMleIgP+oxKLLzX gGHnufp7u65gGn5E+/6IO2Hex7GpLrG7B/nsWF4e3oiBgUfl4ftJ2qmf8nSRLeapbs56 90nPbMKxEemggEg16z666LHNcJ1Z3zyJCSckPgQMXHyESosl884vmst9clOzXX46N4u4 M3Wg== X-Gm-Message-State: AOAM531E/WZjXmAJOJsi1SG/GwTs8bxeTwyK6EQaubQmxXyjj2LYGqoV fg/d0ARPk00NYrUDhg+i8AU3v38wj2qMtw== X-Google-Smtp-Source: ABdhPJxlEnio4d9rS4zy/fa6dQuZYgg84QTM7AR2SR1SrhQZ6Zgx4Ab0U2X7ktBmt99kR4aVy9GoFw== X-Received: by 2002:a17:90a:a581:: with SMTP id b1mr1890239pjq.21.1635289818281; Tue, 26 Oct 2021 16:10:18 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 37/51] tcg/optimize: Split out fold_ix_to_i Date: Tue, 26 Oct 2021 16:09:29 -0700 Message-Id: <20211026230943.1225890-38-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102f; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635291415491100003 Pull the "op r, 0, b =3D> movi r, 0" optimization into a function, and use it in fold_shift. Reviewed-by: Luis Pires Reviewed-by: Philippe Mathieu-Daud=C3=A9 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 f5ab0500b7..bf74b77355 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -731,6 +731,15 @@ static bool fold_to_not(OptContext *ctx, TCGOp *op, in= t idx) return false; } =20 +/* If the binary operation has first argument @i, fold to @i. */ +static bool fold_ix_to_i(OptContext *ctx, TCGOp *op, uint64_t i) +{ + if (arg_is_const(op->args[1]) && arg_info(op->args[1])->val =3D=3D i) { + return tcg_opt_gen_movi(ctx, op, op->args[0], i); + } + return false; +} + /* If the binary operation has first argument @i, fold to NOT. */ static bool fold_ix_to_not(OptContext *ctx, TCGOp *op, uint64_t i) { @@ -1384,6 +1393,7 @@ static bool fold_sextract(OptContext *ctx, TCGOp *op) static bool fold_shift(OptContext *ctx, TCGOp *op) { if (fold_const2(ctx, op) || + fold_ix_to_i(ctx, op, 0) || fold_xi_to_x(ctx, op, 0)) { return true; } @@ -1552,24 +1562,6 @@ void tcg_optimize(TCGContext *s) break; } =20 - /* Simplify expressions for "shift/rot r, 0, a =3D> movi r, 0", - and "sub r, 0, a =3D> neg r, a" case. */ - switch (opc) { - CASE_OP_32_64(shl): - CASE_OP_32_64(shr): - CASE_OP_32_64(sar): - CASE_OP_32_64(rotl): - CASE_OP_32_64(rotr): - if (arg_is_const(op->args[1]) - && arg_info(op->args[1])->val =3D=3D 0) { - tcg_opt_gen_movi(&ctx, op, op->args[0], 0); - continue; - } - break; - default: - break; - } - /* Simplify using known-zero bits. Currently only ops with a single output argument is supported. */ z_mask =3D -1; --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635291358522758.9094226351242; Tue, 26 Oct 2021 16:35:58 -0700 (PDT) Received: from localhost ([::1]:37078 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfVz3-0007zt-5L for importer@patchew.org; Tue, 26 Oct 2021 19:35:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53296) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVaM-0003Zi-W8 for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:27 -0400 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]:35351) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVaH-00025E-9b for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:26 -0400 Received: by mail-pl1-x631.google.com with SMTP id n18so662232plc.2 for ; Tue, 26 Oct 2021 16:10:20 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.10.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:10:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=JH7+yeHZn0ym/koyQpEJgke8cqeJnnG3xii+2x78ihg=; b=JSm7VElf94lFdM6faRA9BllmanSN9XrvWaM8vRykk+KmJU676STfNnN56CP8G07Qir TVCD9rHuCJUAt3X9bjV2VU1tqobeDd4XO4g57revQTX61ADZXnzAM5x37I3iP8CNzFGV drZMhM6yYJu/TrlWF2mEX7NotA49zsChDxwZygKX6WqjMiw9ofxGLyIwPJ7qRXKKxj9h h1fDSt3x1ix4IejRzcGEXwZVJ31Fu4OZ2Ql2VFCeXtdtNrRbISKlsyBBXOZgQh2cS8H0 A1wwOQwePii+n7HMVzbZf874JXYrIFGGiISyXQj0/iBPpoMFSl+Kby7Fi2DY1TYgShXh 93ag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=JH7+yeHZn0ym/koyQpEJgke8cqeJnnG3xii+2x78ihg=; b=Tye2u2CiaihiG3vkiQs9Jld3DD23nKAfmP6juv8+ghu+gCr8wVBRHcbHkqJaPYd0Xw CTOOBv3tJP1n++jGjlYj7J+KHO7j9shGCvWeB2VEkzivTX1sVJWbepc8K8LHqQtozjvi ddiPfJ1vWC/alrOqUAFJZ9UNKM9Qv46+HkAsICoLku6weQS0Cf4g1AiMZ8rsLkBAuM8P XLvlVZXLRAPwMPv9Kz7AMxNMdFOSPb9/ZdP06GzApbtioCN4u6f4jFoYZkP6033vU5Hk 4Gk6QxSBJDTsKdq7yz7grM+NxlsvnZ3/jg2M3U5flQq4q5eqww87W1tf3bfjOI9S6c0k UlJQ== X-Gm-Message-State: AOAM531hlKt10Evni5geNftjLK68IfWqZKurgJ/1BQOlqzxg5+sLbyt+ 0Xiy2VXf6g86WVCYy9/t2FVixyiYan9zHQ== X-Google-Smtp-Source: ABdhPJzwmgMsg8DyOMxTOJxlKXzzfAYX3KGJ6beGNtucTHLG+5w9H4ZlXL/S8xg2KzGbQUe5vA1IpA== X-Received: by 2002:a17:90b:224a:: with SMTP id hk10mr1878770pjb.139.1635289819305; Tue, 26 Oct 2021 16:10:19 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 38/51] tcg/optimize: Split out fold_masks Date: Tue, 26 Oct 2021 16:09:30 -0700 Message-Id: <20211026230943.1225890-39-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::631; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x631.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635291359069100001 Move all of the known-zero optimizations into the per-opcode functions. Use fold_masks when there is a possibility of the result being determined, and simply set ctx->z_mask otherwise. Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Richard Henderson Reviewed-by: Luis Pires --- tcg/optimize.c | 545 ++++++++++++++++++++++++++----------------------- 1 file changed, 294 insertions(+), 251 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index bf74b77355..cca1e37256 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -50,7 +50,8 @@ typedef struct OptContext { TCGTempSet temps_used; =20 /* In flight values from optimization. */ - uint64_t z_mask; + uint64_t a_mask; /* mask bit is 0 iff value identical to first input = */ + uint64_t z_mask; /* mask bit is 0 iff value bit is 0 */ TCGType type; } OptContext; =20 @@ -694,6 +695,31 @@ static bool fold_const2(OptContext *ctx, TCGOp *op) return false; } =20 +static bool fold_masks(OptContext *ctx, TCGOp *op) +{ + uint64_t a_mask =3D ctx->a_mask; + uint64_t z_mask =3D ctx->z_mask; + + /* + * 32-bit ops generate 32-bit results. For the result is zero test + * below, we can ignore high bits, but for further optimizations we + * need to record that the high bits contain garbage. + */ + if (ctx->type =3D=3D TCG_TYPE_I32) { + ctx->z_mask |=3D MAKE_64BIT_MASK(32, 32); + a_mask &=3D MAKE_64BIT_MASK(0, 32); + z_mask &=3D MAKE_64BIT_MASK(0, 32); + } + + if (z_mask =3D=3D 0) { + return tcg_opt_gen_movi(ctx, op, op->args[0], 0); + } + if (a_mask =3D=3D 0) { + return tcg_opt_gen_mov(ctx, op, op->args[0], op->args[1]); + } + return false; +} + /* * Convert @op to NOT, if NOT is supported by the host. * Return true f the conversion is successful, which will still @@ -847,24 +873,55 @@ static bool fold_add2_i32(OptContext *ctx, TCGOp *op) =20 static bool fold_and(OptContext *ctx, TCGOp *op) { + uint64_t z1, z2; + if (fold_const2(ctx, op) || fold_xi_to_i(ctx, op, 0) || fold_xi_to_x(ctx, op, -1) || fold_xx_to_x(ctx, op)) { return true; } - return false; + + z1 =3D arg_info(op->args[1])->z_mask; + z2 =3D arg_info(op->args[2])->z_mask; + ctx->z_mask =3D z1 & z2; + + /* + * Known-zeros does not imply known-ones. Therefore unless + * arg2 is constant, we can't infer affected bits from it. + */ + if (arg_is_const(op->args[2])) { + ctx->a_mask =3D z1 & ~z2; + } + + return fold_masks(ctx, op); } =20 static bool fold_andc(OptContext *ctx, TCGOp *op) { + uint64_t z1; + if (fold_const2(ctx, op) || fold_xx_to_i(ctx, op, 0) || fold_xi_to_x(ctx, op, 0) || fold_ix_to_not(ctx, op, -1)) { return true; } - return false; + + z1 =3D arg_info(op->args[1])->z_mask; + + /* + * Known-zeros does not imply known-ones. Therefore unless + * arg2 is constant, we can't infer anything from it. + */ + if (arg_is_const(op->args[2])) { + uint64_t z2 =3D ~arg_info(op->args[2])->z_mask; + ctx->a_mask =3D z1 & ~z2; + z1 &=3D z2; + } + ctx->z_mask =3D z1; + + return fold_masks(ctx, op); } =20 static bool fold_brcond(OptContext *ctx, TCGOp *op) @@ -963,13 +1020,52 @@ static bool fold_brcond2(OptContext *ctx, TCGOp *op) =20 static bool fold_bswap(OptContext *ctx, TCGOp *op) { + uint64_t z_mask, sign; + if (arg_is_const(op->args[1])) { uint64_t t =3D arg_info(op->args[1])->val; =20 t =3D do_constant_folding(op->opc, ctx->type, t, op->args[2]); return tcg_opt_gen_movi(ctx, op, op->args[0], t); } - return false; + + z_mask =3D arg_info(op->args[1])->z_mask; + switch (op->opc) { + case INDEX_op_bswap16_i32: + case INDEX_op_bswap16_i64: + z_mask =3D bswap16(z_mask); + sign =3D INT16_MIN; + break; + case INDEX_op_bswap32_i32: + case INDEX_op_bswap32_i64: + z_mask =3D bswap32(z_mask); + sign =3D INT32_MIN; + break; + case INDEX_op_bswap64_i64: + z_mask =3D bswap64(z_mask); + sign =3D INT64_MIN; + break; + default: + g_assert_not_reached(); + } + + switch (op->args[2] & (TCG_BSWAP_OZ | TCG_BSWAP_OS)) { + case TCG_BSWAP_OZ: + break; + case TCG_BSWAP_OS: + /* If the sign bit may be 1, force all the bits above to 1. */ + if (z_mask & sign) { + z_mask |=3D sign; + } + break; + default: + /* The high bits are undefined: force all bits above the sign to 1= . */ + z_mask |=3D sign << 1; + break; + } + ctx->z_mask =3D z_mask; + + return fold_masks(ctx, op); } =20 static bool fold_call(OptContext *ctx, TCGOp *op) @@ -1006,6 +1102,8 @@ static bool fold_call(OptContext *ctx, TCGOp *op) =20 static bool fold_count_zeros(OptContext *ctx, TCGOp *op) { + uint64_t z_mask; + if (arg_is_const(op->args[1])) { uint64_t t =3D arg_info(op->args[1])->val; =20 @@ -1015,12 +1113,39 @@ static bool fold_count_zeros(OptContext *ctx, TCGOp= *op) } return tcg_opt_gen_mov(ctx, op, op->args[0], op->args[2]); } + + switch (ctx->type) { + case TCG_TYPE_I32: + z_mask =3D 31; + break; + case TCG_TYPE_I64: + z_mask =3D 63; + break; + default: + g_assert_not_reached(); + } + ctx->z_mask =3D arg_info(op->args[2])->z_mask | z_mask; + return false; } =20 static bool fold_ctpop(OptContext *ctx, TCGOp *op) { - return fold_const1(ctx, op); + if (fold_const1(ctx, op)) { + return true; + } + + switch (ctx->type) { + case TCG_TYPE_I32: + ctx->z_mask =3D 32 | 31; + break; + case TCG_TYPE_I64: + ctx->z_mask =3D 64 | 63; + break; + default: + g_assert_not_reached(); + } + return false; } =20 static bool fold_deposit(OptContext *ctx, TCGOp *op) @@ -1032,6 +1157,10 @@ static bool fold_deposit(OptContext *ctx, TCGOp *op) t1 =3D deposit64(t1, op->args[3], op->args[4], t2); return tcg_opt_gen_movi(ctx, op, op->args[0], t1); } + + ctx->z_mask =3D deposit64(arg_info(op->args[1])->z_mask, + op->args[3], op->args[4], + arg_info(op->args[2])->z_mask); return false; } =20 @@ -1077,6 +1206,8 @@ static bool fold_eqv(OptContext *ctx, TCGOp *op) =20 static bool fold_extract(OptContext *ctx, TCGOp *op) { + uint64_t z_mask_old, z_mask; + if (arg_is_const(op->args[1])) { uint64_t t; =20 @@ -1084,7 +1215,15 @@ static bool fold_extract(OptContext *ctx, TCGOp *op) t =3D extract64(t, op->args[2], op->args[3]); return tcg_opt_gen_movi(ctx, op, op->args[0], t); } - return false; + + z_mask_old =3D arg_info(op->args[1])->z_mask; + z_mask =3D 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) @@ -1108,12 +1247,83 @@ static bool fold_extract2(OptContext *ctx, TCGOp *o= p) =20 static bool fold_exts(OptContext *ctx, TCGOp *op) { - return fold_const1(ctx, op); + uint64_t z_mask_old, z_mask, sign; + bool type_change =3D false; + + if (fold_const1(ctx, op)) { + return true; + } + + z_mask_old =3D z_mask =3D arg_info(op->args[1])->z_mask; + + switch (op->opc) { + CASE_OP_32_64(ext8s): + sign =3D INT8_MIN; + z_mask =3D (uint8_t)z_mask; + break; + CASE_OP_32_64(ext16s): + sign =3D INT16_MIN; + z_mask =3D (uint16_t)z_mask; + break; + case INDEX_op_ext_i32_i64: + type_change =3D true; + QEMU_FALLTHROUGH; + case INDEX_op_ext32s_i64: + sign =3D INT32_MIN; + z_mask =3D (uint32_t)z_mask; + break; + default: + g_assert_not_reached(); + } + + if (z_mask & sign) { + z_mask |=3D sign; + } else if (!type_change) { + ctx->a_mask =3D z_mask_old ^ z_mask; + } + ctx->z_mask =3D z_mask; + + return fold_masks(ctx, op); } =20 static bool fold_extu(OptContext *ctx, TCGOp *op) { - return fold_const1(ctx, op); + uint64_t z_mask_old, z_mask; + bool type_change =3D false; + + if (fold_const1(ctx, op)) { + return true; + } + + z_mask_old =3D z_mask =3D arg_info(op->args[1])->z_mask; + + switch (op->opc) { + CASE_OP_32_64(ext8u): + z_mask =3D (uint8_t)z_mask; + break; + CASE_OP_32_64(ext16u): + z_mask =3D (uint16_t)z_mask; + break; + case INDEX_op_extrl_i64_i32: + case INDEX_op_extu_i32_i64: + type_change =3D true; + QEMU_FALLTHROUGH; + case INDEX_op_ext32u_i64: + z_mask =3D (uint32_t)z_mask; + break; + case INDEX_op_extrh_i64_i32: + type_change =3D true; + z_mask >>=3D 32; + break; + default: + g_assert_not_reached(); + } + + ctx->z_mask =3D z_mask; + if (!type_change) { + ctx->a_mask =3D z_mask_old ^ z_mask; + } + return fold_masks(ctx, op); } =20 static bool fold_mb(OptContext *ctx, TCGOp *op) @@ -1154,6 +1364,9 @@ static bool fold_movcond(OptContext *ctx, TCGOp *op) return tcg_opt_gen_mov(ctx, op, op->args[0], op->args[4 - i]); } =20 + ctx->z_mask =3D arg_info(op->args[3])->z_mask + | arg_info(op->args[4])->z_mask; + if (arg_is_const(op->args[3]) && arg_is_const(op->args[4])) { uint64_t tv =3D arg_info(op->args[3])->val; uint64_t fv =3D arg_info(op->args[4])->val; @@ -1228,9 +1441,16 @@ static bool fold_nand(OptContext *ctx, TCGOp *op) =20 static bool fold_neg(OptContext *ctx, TCGOp *op) { + uint64_t z_mask; + if (fold_const1(ctx, op)) { return true; } + + /* Set to 1 all bits to the left of the rightmost. */ + z_mask =3D arg_info(op->args[1])->z_mask; + ctx->z_mask =3D -(z_mask & -z_mask); + /* * Because of fold_sub_to_neg, we want to always return true, * via finish_folding. @@ -1266,7 +1486,10 @@ static bool fold_or(OptContext *ctx, TCGOp *op) fold_xx_to_x(ctx, op)) { return true; } - return false; + + ctx->z_mask =3D arg_info(op->args[1])->z_mask + | arg_info(op->args[2])->z_mask; + return fold_masks(ctx, op); } =20 static bool fold_orc(OptContext *ctx, TCGOp *op) @@ -1281,6 +1504,15 @@ static bool fold_orc(OptContext *ctx, TCGOp *op) =20 static bool fold_qemu_ld(OptContext *ctx, TCGOp *op) { + const TCGOpDef *def =3D &tcg_op_defs[op->opc]; + MemOpIdx oi =3D op->args[def->nb_oargs + def->nb_iargs]; + MemOp mop =3D get_memop(oi); + int width =3D 8 * memop_size(mop); + + if (!(mop & MO_SIGN) && width < 64) { + ctx->z_mask =3D MAKE_64BIT_MASK(0, width); + } + /* Opcodes that touch guest memory stop the mb optimization. */ ctx->prev_mb =3D NULL; return false; @@ -1306,6 +1538,8 @@ static bool fold_setcond(OptContext *ctx, TCGOp *op) if (i >=3D 0) { return tcg_opt_gen_movi(ctx, op, op->args[0], i); } + + ctx->z_mask =3D 1; return false; } =20 @@ -1372,6 +1606,8 @@ static bool fold_setcond2(OptContext *ctx, TCGOp *op) op->opc =3D INDEX_op_setcond_i32; break; } + + ctx->z_mask =3D 1; return false; =20 do_setcond_const: @@ -1380,6 +1616,8 @@ static bool fold_setcond2(OptContext *ctx, TCGOp *op) =20 static bool fold_sextract(OptContext *ctx, TCGOp *op) { + int64_t z_mask_old, z_mask; + if (arg_is_const(op->args[1])) { uint64_t t; =20 @@ -1387,7 +1625,15 @@ static bool fold_sextract(OptContext *ctx, TCGOp *op) t =3D sextract64(t, op->args[2], op->args[3]); return tcg_opt_gen_movi(ctx, op, op->args[0], t); } - return false; + + z_mask_old =3D arg_info(op->args[1])->z_mask; + z_mask =3D sextract64(z_mask_old, op->args[2], op->args[3]); + if (op->args[2] =3D=3D 0 && z_mask >=3D 0) { + ctx->a_mask =3D z_mask_old ^ z_mask; + } + ctx->z_mask =3D z_mask; + + return fold_masks(ctx, op); } =20 static bool fold_shift(OptContext *ctx, TCGOp *op) @@ -1397,6 +1643,13 @@ static bool fold_shift(OptContext *ctx, TCGOp *op) fold_xi_to_x(ctx, op, 0)) { return true; } + + if (arg_is_const(op->args[2])) { + ctx->z_mask =3D do_constant_folding(op->opc, ctx->type, + arg_info(op->args[1])->z_mask, + arg_info(op->args[2])->val); + return fold_masks(ctx, op); + } return false; } =20 @@ -1452,6 +1705,25 @@ static bool fold_sub2_i32(OptContext *ctx, TCGOp *op) return fold_addsub2_i32(ctx, op, false); } =20 +static bool fold_tcg_ld(OptContext *ctx, TCGOp *op) +{ + /* We can't do any folding with a load, but we can record bits. */ + switch (op->opc) { + CASE_OP_32_64(ld8u): + ctx->z_mask =3D MAKE_64BIT_MASK(0, 8); + break; + CASE_OP_32_64(ld16u): + ctx->z_mask =3D MAKE_64BIT_MASK(0, 16); + break; + case INDEX_op_ld32u_i64: + ctx->z_mask =3D MAKE_64BIT_MASK(0, 32); + break; + default: + g_assert_not_reached(); + } + return false; +} + static bool fold_xor(OptContext *ctx, TCGOp *op) { if (fold_const2(ctx, op) || @@ -1460,7 +1732,10 @@ static bool fold_xor(OptContext *ctx, TCGOp *op) fold_xi_to_not(ctx, op, -1)) { return true; } - return false; + + ctx->z_mask =3D arg_info(op->args[1])->z_mask + | arg_info(op->args[2])->z_mask; + return fold_masks(ctx, op); } =20 /* Propagate constants and copies, fold constant expressions. */ @@ -1481,7 +1756,6 @@ void tcg_optimize(TCGContext *s) } =20 QTAILQ_FOREACH_SAFE(op, &s->ops, link, op_next) { - uint64_t z_mask, partmask, affected, tmp; TCGOpcode opc =3D op->opc; const TCGOpDef *def; bool done =3D false; @@ -1562,245 +1836,9 @@ void tcg_optimize(TCGContext *s) break; } =20 - /* Simplify using known-zero bits. Currently only ops with a single - output argument is supported. */ - z_mask =3D -1; - affected =3D -1; - switch (opc) { - CASE_OP_32_64(ext8s): - if ((arg_info(op->args[1])->z_mask & 0x80) !=3D 0) { - break; - } - QEMU_FALLTHROUGH; - CASE_OP_32_64(ext8u): - z_mask =3D 0xff; - goto and_const; - CASE_OP_32_64(ext16s): - if ((arg_info(op->args[1])->z_mask & 0x8000) !=3D 0) { - break; - } - QEMU_FALLTHROUGH; - CASE_OP_32_64(ext16u): - z_mask =3D 0xffff; - goto and_const; - case INDEX_op_ext32s_i64: - if ((arg_info(op->args[1])->z_mask & 0x80000000) !=3D 0) { - break; - } - QEMU_FALLTHROUGH; - case INDEX_op_ext32u_i64: - z_mask =3D 0xffffffffU; - goto and_const; - - CASE_OP_32_64(and): - z_mask =3D arg_info(op->args[2])->z_mask; - if (arg_is_const(op->args[2])) { - and_const: - affected =3D arg_info(op->args[1])->z_mask & ~z_mask; - } - z_mask =3D arg_info(op->args[1])->z_mask & z_mask; - break; - - case INDEX_op_ext_i32_i64: - if ((arg_info(op->args[1])->z_mask & 0x80000000) !=3D 0) { - break; - } - QEMU_FALLTHROUGH; - case INDEX_op_extu_i32_i64: - /* We do not compute affected as it is a size changing op. */ - z_mask =3D (uint32_t)arg_info(op->args[1])->z_mask; - break; - - CASE_OP_32_64(andc): - /* Known-zeros does not imply known-ones. Therefore unless - op->args[2] is constant, we can't infer anything from it. = */ - if (arg_is_const(op->args[2])) { - z_mask =3D ~arg_info(op->args[2])->z_mask; - goto and_const; - } - /* But we certainly know nothing outside args[1] may be set. */ - z_mask =3D arg_info(op->args[1])->z_mask; - break; - - case INDEX_op_sar_i32: - if (arg_is_const(op->args[2])) { - tmp =3D arg_info(op->args[2])->val & 31; - z_mask =3D (int32_t)arg_info(op->args[1])->z_mask >> tmp; - } - break; - case INDEX_op_sar_i64: - if (arg_is_const(op->args[2])) { - tmp =3D arg_info(op->args[2])->val & 63; - z_mask =3D (int64_t)arg_info(op->args[1])->z_mask >> tmp; - } - break; - - case INDEX_op_shr_i32: - if (arg_is_const(op->args[2])) { - tmp =3D arg_info(op->args[2])->val & 31; - z_mask =3D (uint32_t)arg_info(op->args[1])->z_mask >> tmp; - } - break; - case INDEX_op_shr_i64: - if (arg_is_const(op->args[2])) { - tmp =3D arg_info(op->args[2])->val & 63; - z_mask =3D (uint64_t)arg_info(op->args[1])->z_mask >> tmp; - } - break; - - case INDEX_op_extrl_i64_i32: - z_mask =3D (uint32_t)arg_info(op->args[1])->z_mask; - break; - case INDEX_op_extrh_i64_i32: - z_mask =3D (uint64_t)arg_info(op->args[1])->z_mask >> 32; - break; - - CASE_OP_32_64(shl): - if (arg_is_const(op->args[2])) { - tmp =3D arg_info(op->args[2])->val & (TCG_TARGET_REG_BITS = - 1); - z_mask =3D arg_info(op->args[1])->z_mask << tmp; - } - break; - - CASE_OP_32_64(neg): - /* Set to 1 all bits to the left of the rightmost. */ - z_mask =3D -(arg_info(op->args[1])->z_mask - & -arg_info(op->args[1])->z_mask); - break; - - CASE_OP_32_64(deposit): - z_mask =3D deposit64(arg_info(op->args[1])->z_mask, - op->args[3], op->args[4], - arg_info(op->args[2])->z_mask); - break; - - CASE_OP_32_64(extract): - z_mask =3D extract64(arg_info(op->args[1])->z_mask, - op->args[2], op->args[3]); - if (op->args[2] =3D=3D 0) { - affected =3D arg_info(op->args[1])->z_mask & ~z_mask; - } - break; - CASE_OP_32_64(sextract): - z_mask =3D sextract64(arg_info(op->args[1])->z_mask, - op->args[2], op->args[3]); - if (op->args[2] =3D=3D 0 && (tcg_target_long)z_mask >=3D 0) { - affected =3D arg_info(op->args[1])->z_mask & ~z_mask; - } - break; - - CASE_OP_32_64(or): - CASE_OP_32_64(xor): - z_mask =3D arg_info(op->args[1])->z_mask - | arg_info(op->args[2])->z_mask; - break; - - case INDEX_op_clz_i32: - case INDEX_op_ctz_i32: - z_mask =3D arg_info(op->args[2])->z_mask | 31; - break; - - case INDEX_op_clz_i64: - case INDEX_op_ctz_i64: - z_mask =3D arg_info(op->args[2])->z_mask | 63; - break; - - case INDEX_op_ctpop_i32: - z_mask =3D 32 | 31; - break; - case INDEX_op_ctpop_i64: - z_mask =3D 64 | 63; - break; - - CASE_OP_32_64(setcond): - case INDEX_op_setcond2_i32: - z_mask =3D 1; - break; - - CASE_OP_32_64(movcond): - z_mask =3D arg_info(op->args[3])->z_mask - | arg_info(op->args[4])->z_mask; - break; - - CASE_OP_32_64(ld8u): - z_mask =3D 0xff; - break; - CASE_OP_32_64(ld16u): - z_mask =3D 0xffff; - break; - case INDEX_op_ld32u_i64: - z_mask =3D 0xffffffffu; - break; - - CASE_OP_32_64(qemu_ld): - { - MemOpIdx oi =3D op->args[def->nb_oargs + def->nb_iargs]; - MemOp mop =3D get_memop(oi); - if (!(mop & MO_SIGN)) { - z_mask =3D (2ULL << ((8 << (mop & MO_SIZE)) - 1)) - 1; - } - } - break; - - CASE_OP_32_64(bswap16): - z_mask =3D arg_info(op->args[1])->z_mask; - if (z_mask <=3D 0xffff) { - op->args[2] |=3D TCG_BSWAP_IZ; - } - z_mask =3D bswap16(z_mask); - switch (op->args[2] & (TCG_BSWAP_OZ | TCG_BSWAP_OS)) { - case TCG_BSWAP_OZ: - break; - case TCG_BSWAP_OS: - z_mask =3D (int16_t)z_mask; - break; - default: /* undefined high bits */ - z_mask |=3D MAKE_64BIT_MASK(16, 48); - break; - } - break; - - case INDEX_op_bswap32_i64: - z_mask =3D arg_info(op->args[1])->z_mask; - if (z_mask <=3D 0xffffffffu) { - op->args[2] |=3D TCG_BSWAP_IZ; - } - z_mask =3D bswap32(z_mask); - switch (op->args[2] & (TCG_BSWAP_OZ | TCG_BSWAP_OS)) { - case TCG_BSWAP_OZ: - break; - case TCG_BSWAP_OS: - z_mask =3D (int32_t)z_mask; - break; - default: /* undefined high bits */ - z_mask |=3D MAKE_64BIT_MASK(32, 32); - break; - } - break; - - default: - break; - } - - /* 32-bit ops generate 32-bit results. For the result is zero test - below, we can ignore high bits, but for further optimizations we - need to record that the high bits contain garbage. */ - partmask =3D z_mask; - if (ctx.type =3D=3D TCG_TYPE_I32) { - z_mask |=3D ~(tcg_target_ulong)0xffffffffu; - partmask &=3D 0xffffffffu; - affected &=3D 0xffffffffu; - } - ctx.z_mask =3D z_mask; - - if (partmask =3D=3D 0) { - tcg_opt_gen_movi(&ctx, op, op->args[0], 0); - continue; - } - if (affected =3D=3D 0) { - tcg_opt_gen_mov(&ctx, op, op->args[0], op->args[1]); - continue; - } + /* Assume all bits affected, and no bits known zero. */ + ctx.a_mask =3D -1; + ctx.z_mask =3D -1; =20 /* * Process each opcode. @@ -1873,6 +1911,11 @@ void tcg_optimize(TCGContext *s) case INDEX_op_extrh_i64_i32: done =3D fold_extu(&ctx, op); break; + CASE_OP_32_64(ld8u): + CASE_OP_32_64(ld16u): + case INDEX_op_ld32u_i64: + done =3D fold_tcg_ld(&ctx, op); + break; case INDEX_op_mb: done =3D fold_mb(&ctx, op); break; --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635292205771512.629283229203; Tue, 26 Oct 2021 16:50:05 -0700 (PDT) Received: from localhost ([::1]:56684 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfWCi-0004bg-Od for importer@patchew.org; Tue, 26 Oct 2021 19:50:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53284) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVaM-0003Xn-C5 for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:26 -0400 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]:39745) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVaH-00025M-D3 for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:10:26 -0400 Received: by mail-pj1-x102b.google.com with SMTP id u6-20020a17090a3fc600b001a00250584aso3550882pjm.4 for ; Tue, 26 Oct 2021 16:10:20 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t22sm4450630pfg.63.2021.10.26.16.10.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:10:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BKMWDGbunLx5T4t+f20qgfpyiKn0M08bSNTZbum3miU=; b=GkLqpY+9qKB/gDKGoHlm6VJcelTx1say+WiaYCBM+lpHp5EDsdM6LhJ3ktN9VI6xc3 hwGHL90m+MdD36WsF7DctCoae0rrFHyR6i5EUfrWB9dsNDZ8OCoP1325cLl6XN1Y53X1 3Y7cbBlgnh8g2VrQFzXDsdeB3cL3n79xcPlNAvNrvhBzE5OpkoSeEhjL5PVItxVv96tw VbcFnIN5snrUoecDBWhtN9sSt/iuPCyvxyXadF6S3QDkkKD24etO4LDUN8hLbCG3Wogr 63cx/mBgMoqk20BlgOxNWxgmaYVk8fQph5nw5GEhHFIQceXwBoFNvvwQsgYSfHPOWMWm mOAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=BKMWDGbunLx5T4t+f20qgfpyiKn0M08bSNTZbum3miU=; b=CInpIO2e+dNqgGX/usnkLPiAxs8VrWvJEOhVA+1hGk5d+BimwehroMkXeQsSMYI7Vr n85hks4TDEjv5F5BVjIRkcAb10VYJppTqOLXLq74F0aNwuKMeUiGLLngqU0P25gt1tAo b8f5rLoQrLbtd9ZUt6S+yxjj7WwLVSzLh2fXm6a+pRlvhOgBvVs22GYjXB75VuhlbOq+ AxCH2puzUn2LXQzIQhbSpnFVikhF6OB63IkIGgAlcF0vnM1WCdDHlfP9FRFUL5ul2WzG DDVVcD2Q5nzJ6nE1zdO0fqeSTJJb0A9qdlh/0KEtwRwioTz2rQkJmPy0GLVktQUOoTBF yHSQ== X-Gm-Message-State: AOAM532V2a8FsbGK/r8w7ENnpJfH1EWhEpP/R77qcXwgHPyrJeuORqA+ L2X1aJGUksAZR4n07n+XOWiLx3ALKRU3jg== X-Google-Smtp-Source: ABdhPJxOD+9QPXi84UuJ+LmlqDz4DvJxnFOoJHOPnGLJzcqFX1Bi9XAsk5QtbHVTu4VwrmXJqwIFFA== X-Received: by 2002:a17:90b:3505:: with SMTP id ls5mr1908646pjb.31.1635289820172; Tue, 26 Oct 2021 16:10:20 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 39/51] tcg/optimize: Expand fold_mulu2_i32 to all 4-arg multiplies Date: Tue, 26 Oct 2021 16:09:31 -0700 Message-Id: <20211026230943.1225890-40-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102b; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635292207760100001 Rename to fold_multiply2, and handle muls2_i32, mulu2_i64, and muls2_i64. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson Reviewed-by: Luis Pires --- tcg/optimize.c | 44 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index cca1e37256..7597655a43 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -1412,19 +1412,44 @@ static bool fold_mul_highpart(OptContext *ctx, TCGO= p *op) return false; } =20 -static bool fold_mulu2_i32(OptContext *ctx, TCGOp *op) +static bool fold_multiply2(OptContext *ctx, TCGOp *op) { if (arg_is_const(op->args[2]) && arg_is_const(op->args[3])) { - uint32_t a =3D arg_info(op->args[2])->val; - uint32_t b =3D arg_info(op->args[3])->val; - uint64_t r =3D (uint64_t)a * b; + uint64_t a =3D arg_info(op->args[2])->val; + uint64_t b =3D arg_info(op->args[3])->val; + uint64_t h, l; TCGArg rl, rh; - TCGOp *op2 =3D tcg_op_insert_before(ctx->tcg, op, INDEX_op_mov_i32= ); + TCGOp *op2; + + switch (op->opc) { + case INDEX_op_mulu2_i32: + l =3D (uint64_t)(uint32_t)a * (uint32_t)b; + h =3D (int32_t)(l >> 32); + l =3D (int32_t)l; + break; + case INDEX_op_muls2_i32: + l =3D (int64_t)(int32_t)a * (int32_t)b; + h =3D l >> 32; + l =3D (int32_t)l; + break; + case INDEX_op_mulu2_i64: + mulu64(&l, &h, a, b); + break; + case INDEX_op_muls2_i64: + muls64(&l, &h, a, b); + break; + default: + g_assert_not_reached(); + } =20 rl =3D op->args[0]; rh =3D op->args[1]; - tcg_opt_gen_movi(ctx, op, rl, (int32_t)r); - tcg_opt_gen_movi(ctx, op2, rh, (int32_t)(r >> 32)); + + /* The proper opcode is supplied by tcg_opt_gen_mov. */ + op2 =3D tcg_op_insert_before(ctx->tcg, op, 0); + + tcg_opt_gen_movi(ctx, op, rl, l); + tcg_opt_gen_movi(ctx, op2, rh, h); return true; } return false; @@ -1932,8 +1957,9 @@ void tcg_optimize(TCGContext *s) CASE_OP_32_64(muluh): done =3D fold_mul_highpart(&ctx, op); break; - case INDEX_op_mulu2_i32: - done =3D fold_mulu2_i32(&ctx, op); + CASE_OP_32_64(muls2): + CASE_OP_32_64(mulu2): + done =3D fold_multiply2(&ctx, op); break; CASE_OP_32_64(nand): done =3D fold_nand(&ctx, op); --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635291687648334.83382755110176; Tue, 26 Oct 2021 16:41:27 -0700 (PDT) Received: from localhost ([::1]:46184 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfW4M-0005fU-99 for importer@patchew.org; Tue, 26 Oct 2021 19:41:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53854) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVdF-0008VS-NQ for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:13:26 -0400 Received: from mail-pg1-x52f.google.com ([2607:f8b0:4864:20::52f]:43694) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVdD-00036K-B2 for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:13:25 -0400 Received: by mail-pg1-x52f.google.com with SMTP id r2so1005048pgl.10 for ; Tue, 26 Oct 2021 16:13:22 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id d6sm24158122pfa.39.2021.10.26.16.13.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:13:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=bPCnbyip9ASVZYiN9ZYrSvAto4Yhq99OKGRmORXFwds=; b=YMkO+vtxtF1IatR26Yb7Xi5ofOOAvkZgTGXi5CoLcV6yoI52mIQlG+IyuDlcQeo5Ta YYZH/BMLrZaFI1e+pRyEsxtnZ9mrv4hyl+2oJm9tpYNTph1lPLoXv1Zh3nhMLveN5mev cXpX2RSxPntafKaD2yYz0077Kiszq+sezHEWYpXYoiXsvjdz9C7nX2L+f7+y92G1GMcB NqYWnImBwb1Ua/ljJHopzcYY5SEPGDw4a3ltEoUVGMr5FxLv3uHI+huDJUc+e0Q0w++A 3ZffK+HHLcYkbpXbrTrwj/GPQsD/yK6UxQo9SI6LEMJ47vdS4uDWBg8fux9OQzfaDifx 3gEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=bPCnbyip9ASVZYiN9ZYrSvAto4Yhq99OKGRmORXFwds=; b=roOPHsoULW1nEOXs6n8D/ybp0ioqQjItE+Qw2b80/4rBVXRzAAa2Hy1NN5W7zWuZuO tZxVDXopFZraMqu7um+nJ7skIKNtrclAv8iU9VqrV/GnnFE5TdV9sLXchtzkqHarQ+tm oW7KxkLeP9ZeN6iGvtu7aF5Ti/jC6Ehk01klojSi/5DGMfygTqJ7HRh4JBWIOMZn2mxH +3BnXAYDmFwtXNV80pz/l2Kww35NhVLRvXOOPBoTEUDZVWbdMnHHE9NzfL2Ul41Bz9Ua PcdKUm4/BbZCXLUqysxSriWbOEmk8Cho4Z64DAM1MN/vFbBCeAnNaYLjRVbUjjKHCXvd ct0w== X-Gm-Message-State: AOAM5331vPUtyly7vhtCANqg2cr6RdcLjCM0vK4KWZDeWa9bPo0Hsdm+ RIa3dMFgaOp66Ijp7xaiXbEapXMMm9jzXw== X-Google-Smtp-Source: ABdhPJwMuRW+xhuDNOW+n1UZ7wPmdWQD3F+6MDSABWF1rROPHsOR0RwQPY9PfP81m/fJCfsYHW+fSw== X-Received: by 2002:aa7:8718:0:b0:47b:f2ca:2e59 with SMTP id b24-20020aa78718000000b0047bf2ca2e59mr15505149pfo.21.1635290002001; Tue, 26 Oct 2021 16:13:22 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 40/51] tcg/optimize: Expand fold_addsub2_i32 to 64-bit ops Date: Tue, 26 Oct 2021 16:09:32 -0700 Message-Id: <20211026230943.1225890-41-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52f; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635291688507100001 Rename to fold_addsub2. Use Int128 to implement the wider operation. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson Reviewed-by: Luis Pires --- tcg/optimize.c | 65 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 44 insertions(+), 21 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 7597655a43..6189637dd8 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -24,6 +24,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/int128.h" #include "tcg/tcg-op.h" #include "tcg-internal.h" =20 @@ -838,37 +839,59 @@ static bool fold_add(OptContext *ctx, TCGOp *op) return false; } =20 -static bool fold_addsub2_i32(OptContext *ctx, TCGOp *op, bool add) +static bool fold_addsub2(OptContext *ctx, TCGOp *op, bool add) { if (arg_is_const(op->args[2]) && arg_is_const(op->args[3]) && arg_is_const(op->args[4]) && arg_is_const(op->args[5])) { - uint32_t al =3D arg_info(op->args[2])->val; - uint32_t ah =3D arg_info(op->args[3])->val; - uint32_t bl =3D arg_info(op->args[4])->val; - uint32_t bh =3D arg_info(op->args[5])->val; - uint64_t a =3D ((uint64_t)ah << 32) | al; - uint64_t b =3D ((uint64_t)bh << 32) | bl; + uint64_t al =3D arg_info(op->args[2])->val; + uint64_t ah =3D arg_info(op->args[3])->val; + uint64_t bl =3D arg_info(op->args[4])->val; + uint64_t bh =3D arg_info(op->args[5])->val; TCGArg rl, rh; - TCGOp *op2 =3D tcg_op_insert_before(ctx->tcg, op, INDEX_op_mov_i32= ); + TCGOp *op2; =20 - if (add) { - a +=3D b; + if (ctx->type =3D=3D TCG_TYPE_I32) { + uint64_t a =3D deposit64(al, 32, 32, ah); + uint64_t b =3D deposit64(bl, 32, 32, bh); + + if (add) { + a +=3D b; + } else { + a -=3D b; + } + + al =3D sextract64(a, 0, 32); + ah =3D sextract64(a, 32, 32); } else { - a -=3D b; + Int128 a =3D int128_make128(al, ah); + Int128 b =3D int128_make128(bl, bh); + + if (add) { + a =3D int128_add(a, b); + } else { + a =3D int128_sub(a, b); + } + + al =3D int128_getlo(a); + ah =3D int128_gethi(a); } =20 rl =3D op->args[0]; rh =3D op->args[1]; - tcg_opt_gen_movi(ctx, op, rl, (int32_t)a); - tcg_opt_gen_movi(ctx, op2, rh, (int32_t)(a >> 32)); + + /* The proper opcode is supplied by tcg_opt_gen_mov. */ + op2 =3D tcg_op_insert_before(ctx->tcg, op, 0); + + tcg_opt_gen_movi(ctx, op, rl, al); + tcg_opt_gen_movi(ctx, op2, rh, ah); return true; } return false; } =20 -static bool fold_add2_i32(OptContext *ctx, TCGOp *op) +static bool fold_add2(OptContext *ctx, TCGOp *op) { - return fold_addsub2_i32(ctx, op, true); + return fold_addsub2(ctx, op, true); } =20 static bool fold_and(OptContext *ctx, TCGOp *op) @@ -1725,9 +1748,9 @@ static bool fold_sub(OptContext *ctx, TCGOp *op) return false; } =20 -static bool fold_sub2_i32(OptContext *ctx, TCGOp *op) +static bool fold_sub2(OptContext *ctx, TCGOp *op) { - return fold_addsub2_i32(ctx, op, false); + return fold_addsub2(ctx, op, false); } =20 static bool fold_tcg_ld(OptContext *ctx, TCGOp *op) @@ -1873,8 +1896,8 @@ void tcg_optimize(TCGContext *s) CASE_OP_32_64_VEC(add): done =3D fold_add(&ctx, op); break; - case INDEX_op_add2_i32: - done =3D fold_add2_i32(&ctx, op); + CASE_OP_32_64(add2): + done =3D fold_add2(&ctx, op); break; CASE_OP_32_64_VEC(and): done =3D fold_and(&ctx, op); @@ -2011,8 +2034,8 @@ void tcg_optimize(TCGContext *s) CASE_OP_32_64_VEC(sub): done =3D fold_sub(&ctx, op); break; - case INDEX_op_sub2_i32: - done =3D fold_sub2_i32(&ctx, op); + CASE_OP_32_64(sub2): + done =3D fold_sub2(&ctx, op); break; CASE_OP_32_64_VEC(xor): done =3D fold_xor(&ctx, op); --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635292133757959.6952335875362; Tue, 26 Oct 2021 16:48:53 -0700 (PDT) Received: from localhost ([::1]:54872 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfWBY-0003NY-AM for importer@patchew.org; Tue, 26 Oct 2021 19:48:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53872) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVdG-0008Vl-El for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:13:26 -0400 Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]:33615) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVdE-00036O-3z for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:13:26 -0400 Received: by mail-pf1-x42c.google.com with SMTP id t184so960586pfd.0 for ; Tue, 26 Oct 2021 16:13:23 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id d6sm24158122pfa.39.2021.10.26.16.13.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:13:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=n47MTXgHZalE95TWi53dEjc+mKQRRvcdCV84YGe7Grc=; b=n5xJrzJ9vDW1W2fDtJEwwupCACxPvYpTKSLgMJ21sWZB/rvoUBy6DUPe3zJb7RW3yz fXGVreq2iEj7PxCesM2UKhBGc8e47bu/8mDgwcXikSzGBFRI5hQskNaao91uJ9a2RjAQ nz8zjukmqRsEWwR9Cv5NN3haix2v1Xn4ua8owgnqCmbFmalequqszfW2BxUkvywSXBCk JMY1OhLB7KhM72mH57pVmwJCAmjtPdxqUe4v9QJquY+AePA9RC13LcWeGRIbjSlgaf5M dKVgGX2gLFlyGzjxHcG5HovYBuwks7/PWCpSlOWDdGwRVfwNLFK+ceCldWJ+WwedfccP 3GuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=n47MTXgHZalE95TWi53dEjc+mKQRRvcdCV84YGe7Grc=; b=DsSHGGbJn9P/dZcQQhM9w8KyG/5Q2rAec07czjxjNYinuZ95wAqDSl/h8Ph5aSRhcx s6gcgyJNdiz74gcBDp+KLDMbrtJOZOO6nQo4XlHheS5Xq4y9sR2D+jozGMQkPLEpFl7d eEXKtUeU6ppTAwJ78Ru6ZNapJegezFznmS1sNyAWgjiUVx9w93dvWKwnJOutHpZbsywT AVk2Ds4xaeXRIE+WGE4/lIhrQthTAnrhzM6gGCA11Hiu8WhqbcIzN2UeUoFuG/TMMh6x 7z0yt61xqn18cscL/2oguI+6T4UbYrWCYwD2tDLA3WJeY0OR8ZZWl915cwIkcQ3AzJ4q ekdg== X-Gm-Message-State: AOAM532WgvTNK8+u94SdeaYBDYzEFWbTMKuzp6SpAZe254v7eaoMgNLk 8thc951Q7U2otRp1yQREgUMAQJ7fLhI0CA== X-Google-Smtp-Source: ABdhPJw+pLjBVgU5CcsdNKEO2ywNqAnBIXRnlk5aPKdXxtxc57wDMvoQhUvJRobf2gYxKoi6SKK7rQ== X-Received: by 2002:a63:9308:: with SMTP id b8mr21249662pge.104.1635290002811; Tue, 26 Oct 2021 16:13:22 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 41/51] tcg/optimize: Sink commutative operand swapping into fold functions Date: Tue, 26 Oct 2021 16:09:33 -0700 Message-Id: <20211026230943.1225890-42-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-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: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635292134628100001 Content-Type: text/plain; charset="utf-8" Most of these are handled by creating a fold_const2_commutative to handle all of the binary operators. The rest were already handled on a case-by-case basis in the switch, and have their own fold function in which to place the call. We now have only one major switch on TCGOpcode. Introduce NO_DEST and a block comment for swap_commutative in order to make the handling of brcond and movcond opcodes cleaner. Signed-off-by: Richard Henderson Reviewed-by: Luis Pires --- tcg/optimize.c | 141 ++++++++++++++++++++++++------------------------- 1 file changed, 69 insertions(+), 72 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 6189637dd8..b72a01910a 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -577,6 +577,19 @@ static int do_constant_folding_cond2(TCGArg *p1, TCGAr= g *p2, TCGCond c) return -1; } =20 +/** + * swap_commutative: + * @dest: TCGArg of the destination argument, or NO_DEST. + * @p1: first paired argument + * @p2: second paired argument + * + * If *@p1 is a constant and *@p2 is not, swap. + * If *@p2 matches @dest, swap. + * Return true if a swap was performed. + */ + +#define NO_DEST temp_arg(NULL) + static bool swap_commutative(TCGArg dest, TCGArg *p1, TCGArg *p2) { TCGArg a1 =3D *p1, a2 =3D *p2; @@ -696,6 +709,12 @@ static bool fold_const2(OptContext *ctx, TCGOp *op) return false; } =20 +static bool fold_const2_commutative(OptContext *ctx, TCGOp *op) +{ + swap_commutative(op->args[0], &op->args[1], &op->args[2]); + return fold_const2(ctx, op); +} + static bool fold_masks(OptContext *ctx, TCGOp *op) { uint64_t a_mask =3D ctx->a_mask; @@ -832,7 +851,7 @@ static bool fold_xx_to_x(OptContext *ctx, TCGOp *op) =20 static bool fold_add(OptContext *ctx, TCGOp *op) { - if (fold_const2(ctx, op) || + if (fold_const2_commutative(ctx, op) || fold_xi_to_x(ctx, op, 0)) { return true; } @@ -891,6 +910,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 @@ -898,7 +920,7 @@ static bool fold_and(OptContext *ctx, TCGOp *op) { uint64_t z1, z2; =20 - if (fold_const2(ctx, op) || + if (fold_const2_commutative(ctx, op) || fold_xi_to_i(ctx, op, 0) || fold_xi_to_x(ctx, op, -1) || fold_xx_to_x(ctx, op)) { @@ -950,8 +972,13 @@ static bool fold_andc(OptContext *ctx, TCGOp *op) static bool fold_brcond(OptContext *ctx, TCGOp *op) { TCGCond cond =3D op->args[2]; - int i =3D do_constant_folding_cond(ctx->type, op->args[0], op->args[1]= , cond); + int i; =20 + if (swap_commutative(NO_DEST, &op->args[0], &op->args[1])) { + op->args[2] =3D cond =3D tcg_swap_cond(cond); + } + + i =3D do_constant_folding_cond(ctx->type, op->args[0], op->args[1], co= nd); if (i =3D=3D 0) { tcg_op_remove(ctx->tcg, op); return true; @@ -966,10 +993,14 @@ static bool fold_brcond(OptContext *ctx, TCGOp *op) static bool fold_brcond2(OptContext *ctx, TCGOp *op) { TCGCond cond =3D op->args[4]; - int i =3D do_constant_folding_cond2(&op->args[0], &op->args[2], cond); TCGArg label =3D op->args[5]; - int inv =3D 0; + int i, inv =3D 0; =20 + if (swap_commutative2(&op->args[0], &op->args[2])) { + op->args[4] =3D cond =3D tcg_swap_cond(cond); + } + + i =3D do_constant_folding_cond2(&op->args[0], &op->args[2], cond); if (i >=3D 0) { goto do_brcond_const; } @@ -1219,7 +1250,7 @@ static bool fold_dup2(OptContext *ctx, TCGOp *op) =20 static bool fold_eqv(OptContext *ctx, TCGOp *op) { - if (fold_const2(ctx, op) || + if (fold_const2_commutative(ctx, op) || fold_xi_to_x(ctx, op, -1) || fold_xi_to_not(ctx, op, 0)) { return true; @@ -1381,8 +1412,20 @@ static bool fold_mov(OptContext *ctx, TCGOp *op) static bool fold_movcond(OptContext *ctx, TCGOp *op) { TCGCond cond =3D op->args[5]; - int i =3D do_constant_folding_cond(ctx->type, op->args[1], op->args[2]= , cond); + int i; =20 + if (swap_commutative(NO_DEST, &op->args[1], &op->args[2])) { + op->args[5] =3D cond =3D tcg_swap_cond(cond); + } + /* + * Canonicalize the "false" input reg to match the destination reg so + * that the tcg backend can implement a "move if true" operation. + */ + if (swap_commutative(op->args[0], &op->args[4], &op->args[3])) { + op->args[5] =3D cond =3D tcg_invert_cond(cond); + } + + i =3D do_constant_folding_cond(ctx->type, op->args[1], op->args[2], co= nd); if (i >=3D 0) { return tcg_opt_gen_mov(ctx, op, op->args[0], op->args[4 - i]); } @@ -1428,7 +1471,7 @@ static bool fold_mul(OptContext *ctx, TCGOp *op) =20 static bool fold_mul_highpart(OptContext *ctx, TCGOp *op) { - if (fold_const2(ctx, op) || + if (fold_const2_commutative(ctx, op) || fold_xi_to_i(ctx, op, 0)) { return true; } @@ -1437,6 +1480,8 @@ static bool fold_mul_highpart(OptContext *ctx, TCGOp = *op) =20 static bool fold_multiply2(OptContext *ctx, TCGOp *op) { + swap_commutative(op->args[0], &op->args[2], &op->args[3]); + if (arg_is_const(op->args[2]) && arg_is_const(op->args[3])) { uint64_t a =3D arg_info(op->args[2])->val; uint64_t b =3D arg_info(op->args[3])->val; @@ -1480,7 +1525,7 @@ static bool fold_multiply2(OptContext *ctx, TCGOp *op) =20 static bool fold_nand(OptContext *ctx, TCGOp *op) { - if (fold_const2(ctx, op) || + if (fold_const2_commutative(ctx, op) || fold_xi_to_not(ctx, op, -1)) { return true; } @@ -1509,7 +1554,7 @@ static bool fold_neg(OptContext *ctx, TCGOp *op) =20 static bool fold_nor(OptContext *ctx, TCGOp *op) { - if (fold_const2(ctx, op) || + if (fold_const2_commutative(ctx, op) || fold_xi_to_not(ctx, op, 0)) { return true; } @@ -1529,7 +1574,7 @@ static bool fold_not(OptContext *ctx, TCGOp *op) =20 static bool fold_or(OptContext *ctx, TCGOp *op) { - if (fold_const2(ctx, op) || + if (fold_const2_commutative(ctx, op) || fold_xi_to_x(ctx, op, 0) || fold_xx_to_x(ctx, op)) { return true; @@ -1581,8 +1626,13 @@ static bool fold_remainder(OptContext *ctx, TCGOp *o= p) static bool fold_setcond(OptContext *ctx, TCGOp *op) { TCGCond cond =3D op->args[3]; - int i =3D do_constant_folding_cond(ctx->type, op->args[1], op->args[2]= , cond); + int i; =20 + if (swap_commutative(op->args[0], &op->args[1], &op->args[2])) { + op->args[3] =3D cond =3D tcg_swap_cond(cond); + } + + i =3D do_constant_folding_cond(ctx->type, op->args[1], op->args[2], co= nd); if (i >=3D 0) { return tcg_opt_gen_movi(ctx, op, op->args[0], i); } @@ -1594,9 +1644,13 @@ static bool fold_setcond(OptContext *ctx, TCGOp *op) static bool fold_setcond2(OptContext *ctx, TCGOp *op) { TCGCond cond =3D op->args[5]; - int i =3D do_constant_folding_cond2(&op->args[1], &op->args[3], cond); - int inv =3D 0; + int i, inv =3D 0; =20 + if (swap_commutative2(&op->args[1], &op->args[3])) { + op->args[5] =3D cond =3D tcg_swap_cond(cond); + } + + i =3D do_constant_folding_cond2(&op->args[1], &op->args[3], cond); if (i >=3D 0) { goto do_setcond_const; } @@ -1774,7 +1828,7 @@ static bool fold_tcg_ld(OptContext *ctx, TCGOp *op) =20 static bool fold_xor(OptContext *ctx, TCGOp *op) { - if (fold_const2(ctx, op) || + if (fold_const2_commutative(ctx, op) || fold_xx_to_i(ctx, op, 0) || fold_xi_to_x(ctx, op, 0) || fold_xi_to_not(ctx, op, -1)) { @@ -1827,63 +1881,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 Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 163529239138997.51675071549914; Tue, 26 Oct 2021 16:53:11 -0700 (PDT) Received: from localhost ([::1]:35556 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfWFi-0000yq-Dj for importer@patchew.org; Tue, 26 Oct 2021 19:53:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53880) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVdH-00005W-0J for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:13:27 -0400 Received: from mail-pg1-x52f.google.com ([2607:f8b0:4864:20::52f]:40738) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVdE-00036S-TB for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:13:26 -0400 Received: by mail-pg1-x52f.google.com with SMTP id l186so1021653pge.7 for ; Tue, 26 Oct 2021 16:13:24 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id d6sm24158122pfa.39.2021.10.26.16.13.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:13:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=PmCiFfpbHMLDvaeGsDwSQLjEhMdJFYRFDu2z/zQdWR8=; b=aVlpV0VGLRIBHPFTZxV5Ah9iVbReMqumHs65YKv4IUMP/J5QGNpWCx/VfWoKyvwHHd sWE48sR+tzptb+RMQAk9hGQMMSzhVftLK1vNvORBZXRfkvbdoRFo8Sr4+LwUiYlA+ypv ga7fTZdelUfwbgxkyy5kp4oqBOR7+Ngdbds9QWFxP+W3rvywA15nIoHy8HBh2s4wjxRt 00UtUW2Yswlr4jyZpHXNUMnam0xlnl9No0VEudAapjtXAmrnSljRMCFzfTe8PBLcapaB jFyNFVmAns34lxcPTIkqSX4c0kc2Hz+ik+oRWxhYp7OrYKQOTRN3bP3geIBWGwbZq09d +q/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=PmCiFfpbHMLDvaeGsDwSQLjEhMdJFYRFDu2z/zQdWR8=; b=2TknAofiZvj6XfAQiSbWSBMT9OTEFA6KL2KCPWFilsUQG2jf7hSokRcxw9+QqAti39 pCSfJr9osRGlSCiWguKJlkuAR6SGg2akd/ydIgJ+x9SbxWzMWMrwr5DAaZAZ2eMCkK2O nOf8giH+rcXMMuBUuArt8ea8aZsza1fkbnhk/46b2mbuROcL877sBnxCZDRBucHsP6iE 3/9bkY+/qnXW1GXtWz9oUWC15UMqpO18FZbEGF79DhAG4Y7cS25AnTZXEFz4ZRVH30QN oT2gt8OR5u4jGipTfK3/fRUpUo5qHwOS4uiHbeYIC7SgFsaLmKRIgC2+mxvVeDz/Lc6M ap+A== X-Gm-Message-State: AOAM532AA8juQg8yVwrNq1/D8Ve2aemhVEuIl9JIOrDAgB0NxchTYvAR Dnqv3CZl7/8MPbP60N2JPHupPZehI6Gg9w== X-Google-Smtp-Source: ABdhPJxnyFbj+XVroIxWxNcFrAbtU5lbQPPwVg8AF8xS2+sMjPTlZDb5k37w5yUKoqnxkzAhN57kmA== X-Received: by 2002:a05:6a00:1748:b0:47c:dca:f2f2 with SMTP id j8-20020a056a00174800b0047c0dcaf2f2mr8095188pfc.43.1635290003677; Tue, 26 Oct 2021 16:13:23 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 42/51] tcg/optimize: Stop forcing z_mask to "garbage" for 32-bit values Date: Tue, 26 Oct 2021 16:09:34 -0700 Message-Id: <20211026230943.1225890-43-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52f; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635292392223100001 This "garbage" setting pre-dates the addition of the type changing opcodes INDEX_op_ext_i32_i64, INDEX_op_extu_i32_i64, and INDEX_op_extr{l,h}_i64_i32. So now we have a definitive points at which to adjust z_mask to eliminate such bits from the 32-bit operands. Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Richard Henderson Reviewed-by: Luis Pires --- tcg/optimize.c | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index b72a01910a..3207817b68 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -124,10 +124,6 @@ static void init_ts_info(OptContext *ctx, TCGTemp *ts) ti->is_const =3D true; ti->val =3D ts->val; ti->z_mask =3D ts->val; - if (TCG_TARGET_REG_BITS > 32 && ts->type =3D=3D TCG_TYPE_I32) { - /* High bits of a 32-bit quantity are garbage. */ - ti->z_mask |=3D ~0xffffffffull; - } } else { ti->is_const =3D false; ti->z_mask =3D -1; @@ -192,7 +188,6 @@ static bool tcg_opt_gen_mov(OptContext *ctx, TCGOp *op,= TCGArg dst, TCGArg src) TCGTemp *src_ts =3D arg_temp(src); TempOptInfo *di; TempOptInfo *si; - uint64_t z_mask; TCGOpcode new_op; =20 if (ts_are_copies(dst_ts, src_ts)) { @@ -224,12 +219,7 @@ static bool tcg_opt_gen_mov(OptContext *ctx, TCGOp *op= , TCGArg dst, TCGArg src) op->args[0] =3D dst; op->args[1] =3D src; =20 - z_mask =3D si->z_mask; - if (TCG_TARGET_REG_BITS > 32 && new_op =3D=3D INDEX_op_mov_i32) { - /* High bits of the destination are now garbage. */ - z_mask |=3D ~0xffffffffull; - } - di->z_mask =3D z_mask; + di->z_mask =3D si->z_mask; =20 if (src_ts->type =3D=3D dst_ts->type) { TempOptInfo *ni =3D ts_info(si->next_copy); @@ -247,9 +237,14 @@ static bool tcg_opt_gen_mov(OptContext *ctx, TCGOp *op= , TCGArg dst, TCGArg src) static bool tcg_opt_gen_movi(OptContext *ctx, TCGOp *op, TCGArg dst, uint64_t val) { - /* Convert movi to mov with constant temp. */ - TCGTemp *tv =3D tcg_constant_internal(ctx->type, val); + TCGTemp *tv; =20 + if (ctx->type =3D=3D TCG_TYPE_I32) { + val =3D (int32_t)val; + } + + /* Convert movi to mov with constant temp. */ + tv =3D tcg_constant_internal(ctx->type, val); init_ts_info(ctx, tv); return tcg_opt_gen_mov(ctx, op, dst, temp_arg(tv)); } @@ -721,14 +716,16 @@ static bool fold_masks(OptContext *ctx, TCGOp *op) uint64_t z_mask =3D ctx->z_mask; =20 /* - * 32-bit ops generate 32-bit results. For the result is zero test - * below, we can ignore high bits, but for further optimizations we - * need to record that the high bits contain garbage. + * 32-bit ops generate 32-bit results, which for the purpose of + * simplifying tcg are sign-extended. Certainly that's how we + * represent our constants elsewhere. Note that the bits will + * be reset properly for a 64-bit value when encountering the + * type changing opcodes. */ if (ctx->type =3D=3D TCG_TYPE_I32) { - ctx->z_mask |=3D MAKE_64BIT_MASK(32, 32); - a_mask &=3D MAKE_64BIT_MASK(0, 32); - z_mask &=3D MAKE_64BIT_MASK(0, 32); + a_mask =3D (int32_t)a_mask; + z_mask =3D (int32_t)z_mask; + ctx->z_mask =3D z_mask; } =20 if (z_mask =3D=3D 0) { --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635291806176692.2108718749574; Tue, 26 Oct 2021 16:43:26 -0700 (PDT) Received: from localhost ([::1]:48306 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfW6H-0007Ef-5i for importer@patchew.org; Tue, 26 Oct 2021 19:43:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53886) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVdH-000061-Mj for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:13:27 -0400 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]:56267) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVdF-00036X-R9 for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:13:27 -0400 Received: by mail-pj1-x1032.google.com with SMTP id om14so613877pjb.5 for ; Tue, 26 Oct 2021 16:13:25 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id d6sm24158122pfa.39.2021.10.26.16.13.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:13:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=RV32wXKdXzELrxqTu5Q17Cra2XnriOA/nq2XJNlaAZY=; b=JjRpQ1UMvGIStWYeqwv8MuZLiE+df1+kwOnf4oERJZW7OtQ6C/9BfdI1WEbSiq/j4Y +nh29o/4gmIdzko6I3ILZCEmc4rgkuaQn2lcqSs7GBTXNdC6bgcQxUuSVlSizxIyXUCZ YoRFHdWCVA4dAychBgeid1cA89Ib60dE8/3xG5iXIb4bruc0ukmDOWb7cwuanIhQJRGI QGKxwKR+JBFiQO/VyOLx4B5hDxRvqHKIoQ655JLZRvbeNYgKESkg+apl3JVhtT7yVNCf HkSr8yMjMn/yOdg7vaBrcXbYdFkTB1IsbRqiUg37mkFxQRBrerAUy+/OVgrPpQqa5x0q vK8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=RV32wXKdXzELrxqTu5Q17Cra2XnriOA/nq2XJNlaAZY=; b=hX6bgrofpOiEK2mNAQuqWAzAo56eA+cMEH7pQXNfKkHra3rjcLb2hWFpYAY7kK+M7r QZzVn7FYEEGZMIeejqUsqdkcyaQ0yDKvfEpq1FFBQ6c82NeDL4T61B02QwDLbVdzPhQX VjqRUbXV2GhB2k8P/t1aPhy3a1urLJSHZdQxpWoOX9mtSSOfmQ7ZIzouS26653c8XKgU N5Z+6btySGRqhK9Wwufzq1CvuQh08luptpoM31CLLneeZ3OwjoXvnGUOb7CT8u1QbZjf JhfF0zQsSaa7cDNe8321cRwu6zeY4oONPBIoni76uvS3KgYxatK8yCbjYEMLAEgapB4Z xL3w== X-Gm-Message-State: AOAM530StsoiaBgE+iom0Q1RGylWgdR0f+ibdE8sIP1Zh42Y+tBhLynI m3UHfWPE47ZlPKcssAT2UY68EXOlfBEvZw== X-Google-Smtp-Source: ABdhPJysJn+8EPPH4CXqAMtAa7jGJ4chVPTuNF+VbMf3nOUrXVV5EU07U7NDSuVVHVoqeqNuWdIdAw== X-Received: by 2002:a17:90b:1649:: with SMTP id il9mr1893113pjb.167.1635290004692; Tue, 26 Oct 2021 16:13:24 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 43/51] tcg/optimize: Use fold_xx_to_i for orc Date: Tue, 26 Oct 2021 16:09:35 -0700 Message-Id: <20211026230943.1225890-44-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1032; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1032.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635291808141100001 Recognize the constant function for or-compliment. Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Richard Henderson Reviewed-by: Luis Pires Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- tcg/optimize.c | 1 + 1 file changed, 1 insertion(+) diff --git a/tcg/optimize.c b/tcg/optimize.c index 3207817b68..bea82305db 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -1585,6 +1585,7 @@ static bool fold_or(OptContext *ctx, TCGOp *op) static bool fold_orc(OptContext *ctx, TCGOp *op) { if (fold_const2(ctx, op) || + fold_xx_to_i(ctx, op, -1) || fold_xi_to_x(ctx, op, -1) || fold_ix_to_not(ctx, op, 0)) { return true; --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635292567454936.2432439520802; Tue, 26 Oct 2021 16:56:07 -0700 (PDT) Received: from localhost ([::1]:44854 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfWIY-00077y-BZ for importer@patchew.org; Tue, 26 Oct 2021 19:56:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53914) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVdI-00007d-QE for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:13:30 -0400 Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]:41745) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVdH-00036k-DS for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:13:28 -0400 Received: by mail-pj1-x102c.google.com with SMTP id na16-20020a17090b4c1000b0019f5bb661f9so692740pjb.0 for ; Tue, 26 Oct 2021 16:13:26 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id d6sm24158122pfa.39.2021.10.26.16.13.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:13:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=/NZkowD6C8yX465pZ6nDRR+ZC3z4EscWFPRhl5q7Pl8=; b=r9yHUsvzHOyfPO32p/wVt5uO/7ixnfsrhFZcqNuX1c7EVUKoZ8D9KC5jJvWINYDISW oNxQAoWSXWhONSAFyHXp4ry2IpJWz4g4j7RDRfJ8ZIBGGxWRWyUop44UD4YoOu6JSIam MI4P7kCsvSgKwdFLnvf6lgjXdPs1EbEMEXN+QLsxQ4yx8L8DKG7GwLM6eS3vFsMxkwsG TzJpjbCXbiatBn4OQxIhcLXEjf8Id2AzgmlbD+512jqOOH+kJgOtywoJDYWalxAVxWjr jldhBdMRGSXgjelUct4TbV2pFvTvYx2I7rDdS0zEcMt8McdMG7M/FVw+RAokqYBwHBnL Wl0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=/NZkowD6C8yX465pZ6nDRR+ZC3z4EscWFPRhl5q7Pl8=; b=tYB9OEWvAVbyPMUusv5RYve5hYNxcHfeO2w9c8p2Vxf9P22c13klHZqxpL56o3oIpH 8451dG8hoNb9K6Zt4pdSQui80+9MKWdP6jUxLOfT/9g1+gZu+1p6F7ECEZTMagcZxlO5 4i8i97SqzA3QPh2sdo6guWEpD53BSvfdZ1mcfTpYOb8NTLqvxpNnQN8xiLuJo2rUtNDF iqlSwngmP7EgPt5GkTexY1LUjnj5nwTZvUweH2cndB5Z0PMNYJFt2QtBmapJSid6Rwio 475zdQdGRnSw1TPCWGCrxDXcCjn0eCkohlRCnj2CNwCLifZ+91pVEM2z+wiZWIZ44djq sP5g== X-Gm-Message-State: AOAM531pLrIH1Yp/uQQDenn79DGTQmkt7kYdOtK4HdLlVQnGiuuZyF5s lrF8uel4eP2a5OKOszvQsOSDidFnd3NHvQ== X-Google-Smtp-Source: ABdhPJwB7OUm9/PlnMrwtYHokggcL09y0GFkjoHISd0mcQ6yNnxF4CEy4L7gXn0UQ46YYrlkULO1dw== X-Received: by 2002:a17:90a:4e42:: with SMTP id t2mr1987974pjl.108.1635290005967; Tue, 26 Oct 2021 16:13:25 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 44/51] tcg/optimize: Use fold_xi_to_x for mul Date: Tue, 26 Oct 2021 16:09:36 -0700 Message-Id: <20211026230943.1225890-45-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-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: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635292568030100001 Content-Type: text/plain; charset="utf-8" Recognize the identity function for low-part multiply. Suggested-by: Luis Pires Signed-off-by: Richard Henderson Reviewed-by: Luis Pires Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- tcg/optimize.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index bea82305db..fe2b1eb18e 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -1460,7 +1460,8 @@ static bool fold_movcond(OptContext *ctx, TCGOp *op) static bool fold_mul(OptContext *ctx, TCGOp *op) { if (fold_const2(ctx, op) || - fold_xi_to_i(ctx, op, 0)) { + fold_xi_to_i(ctx, op, 0) || + fold_xi_to_x(ctx, op, 1)) { return true; } return false; --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635292751185894.7425391815588; Tue, 26 Oct 2021 16:59:11 -0700 (PDT) Received: from localhost ([::1]:51454 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfWLV-0003D6-VP for importer@patchew.org; Tue, 26 Oct 2021 19:59:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53930) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVdJ-00007z-K0 for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:13:30 -0400 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]:33622) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVdI-00036x-7q for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:13:29 -0400 Received: by mail-pf1-x433.google.com with SMTP id t184so960704pfd.0 for ; Tue, 26 Oct 2021 16:13:27 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id d6sm24158122pfa.39.2021.10.26.16.13.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:13:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=cnvEeNPX98sjNFRW8f9jeq34B27koZa1lMjiPIc/x4o=; b=g9Hl/aCgvXjcW2VE9D5p6WO8ZpqTpg+rnPe1JZD5kOd5WTHLw2/7+568xAznnvgrZ8 BqCi6PsKgqOk/R1ZP2+zf6M32ViaABzGiMTz8XMd6l867TmrJwj8KPA0H1gx6kMGWenE bMr9Gxn2QfgfLwymmoxilX1hYMO8kahn/qs8cktu5ctaTRWzuZnr0cDt7JY9+eMrK4/R TGu3BJDbmfpPyb/Eghn0gLWxjig/lN+rzEyspK4TLBtQkrmGXuJPk/4t6OCubRWjGD8O Qr55NOmiY43wGpwpx5YpbBRCVH/TZIIZpkA1bSN40RV+UbDoE0BBKxFmDD+E3+VMYJ+N 7/mA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=cnvEeNPX98sjNFRW8f9jeq34B27koZa1lMjiPIc/x4o=; b=Nelt/8pCGCswOIn1hRGnNA/fflIOIJBFpVSI2BbssHEcaYfC46f1U0YRxlx56kkic8 2a+E/+QHELHSEpJI2fyp60qdX5dmsI75B9ta/ZXiJVMiaIGYv78qBOLyQ+3BSMJ9pi9v alhxH8NVzrTfSelVvQ1OCqYK7PzKBTemOVDG4vFStMYvIW0mTEBLmxKG3Xa2rBoidvxz oPW/x6KvflOHSA8b41uFhft1z9H8pl2HeqJI09feQxYPH2cKGZ9P9BU/N5xFKVv0Ah8a f+xpN/a7k85I5lAUbnvjWQa4M8cLmyUyl8UagbpZKjRfbPaWdF0PoPDmUXJcoBDZEc0z /xPQ== X-Gm-Message-State: AOAM533g79Ucei39pwAqL5qmO5HfR2QKiL2g+fXzfZIpBK8jH/yVRcMP vOfwjkNiZjCD/CKZBbRhG0rRgizsl8rciQ== X-Google-Smtp-Source: ABdhPJzps0r+1OxN/8I/JBEDC4dUSVcXGp6PDg+lYsu9/zbouPvROM8NRpkqHcrpi2Mp9GzmuzrGLw== X-Received: by 2002:a63:6f44:: with SMTP id k65mr21427547pgc.440.1635290006825; Tue, 26 Oct 2021 16:13:26 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 45/51] tcg/optimize: Use fold_xi_to_x for div Date: Tue, 26 Oct 2021 16:09:37 -0700 Message-Id: <20211026230943.1225890-46-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-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: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635292751909100001 Content-Type: text/plain; charset="utf-8" Recognize the identity function for division. Suggested-by: Luis Pires Signed-off-by: Richard Henderson Reviewed-by: Luis Pires Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- tcg/optimize.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index fe2b1eb18e..92684d4b1d 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -1217,7 +1217,11 @@ static bool fold_deposit(OptContext *ctx, TCGOp *op) =20 static bool fold_divide(OptContext *ctx, TCGOp *op) { - return fold_const2(ctx, op); + if (fold_const2(ctx, op) || + fold_xi_to_x(ctx, op, 1)) { + return true; + } + return false; } =20 static bool fold_dup(OptContext *ctx, TCGOp *op) --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635292669872591.6687356243406; Tue, 26 Oct 2021 16:57:49 -0700 (PDT) Received: from localhost ([::1]:49180 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfWKC-0001g0-Lq for importer@patchew.org; Tue, 26 Oct 2021 19:57:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53932) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVdK-000081-8B for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:13:31 -0400 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]:44894) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVdI-000377-S9 for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:13:29 -0400 Received: by mail-pj1-x1032.google.com with SMTP id oa12-20020a17090b1bcc00b0019f715462a8so647018pjb.3 for ; Tue, 26 Oct 2021 16:13:28 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id d6sm24158122pfa.39.2021.10.26.16.13.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:13:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=GboP199OubzTFoUWNJIGCwetPDxwQovjb6ythEGyKNU=; b=FIHJvrp3UZ3pQs9mMAP3R2tusKyHxzk5gU0eEvjHd3vJ8/Potayu1LLrRGY2bYt1wy Bcpl1mne/IveWNuMcpxMBUjxkT4LrE86W99oHbBOCaNn8h5AhuKibL0I5scKhYb2rPdO Z3j6vlm+9t0/7J5vb4kA+NZcK0DQjIfqLd2Hi1BdXTVcqV/UH5joMg9soY6sh3HW2ND2 TgmJydNG1sHEIlwsCREzWsiXfaPY3ibEBpkFG9XdhnP+CU+6857Jxv9Ycjha3CzGExyN zv3eSOHpqtt/DkRZXVoN57Qc7AktFPWA5cHANUzlZG8HW7ZxV1BzjX4HSGv9C5KZtOaf mr4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=GboP199OubzTFoUWNJIGCwetPDxwQovjb6ythEGyKNU=; b=nTTRLJtRMZ2A4T/cJaIYfnXbH4xnMjfNC0ktYm85/npP7QQl1tNjNIDSmltv5TQgGd ow8T9a0sB9mi/00x+JClGZM+9Wjp1sEHUVyp9hWTpqDYls7380ESVTYTYolvd17CGUXs gihQZtkJ+I7zUr+Yl1jKpzsR92c1h9R1lXlHfPAoNRFzeCUxQurUuf21ZZtCjcGtSwFK 6mPMp5ePZJbVJHaD+Qqbqsqls5+uKnbnfHd4USctYNTHM6jyISAxfU4kEEH9IYWUattn lvc0Yi7FRrJD3METE1gPlTfiySfRkd1PCVxiY0Bn0DL2S+AlpbqKyc8mEqivhFzLmx1O eN3w== X-Gm-Message-State: AOAM530p/5/xslVr68Qk/SxYpvVYxskcMdG6yjHdffoEJ9r7ENlUQwDi uokT9zC9BDjEehQvsR7dVSgWUfnLR2in1g== X-Google-Smtp-Source: ABdhPJzJtD9hLwqqgGbr/2xvGIickpkDVyI7q47u1xXCJa3c/U1rbnsBI3xbpRcluF3pOOk9QMYS7Q== X-Received: by 2002:a17:90b:1811:: with SMTP id lw17mr1958869pjb.22.1635290007724; Tue, 26 Oct 2021 16:13:27 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 46/51] tcg/optimize: Use fold_xx_to_i for rem Date: Tue, 26 Oct 2021 16:09:38 -0700 Message-Id: <20211026230943.1225890-47-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-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::1032; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1032.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635292672045100003 Content-Type: text/plain; charset="utf-8" Recognize the constant function for remainder. Suggested-by: Luis Pires Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- tcg/optimize.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 92684d4b1d..6c6c523a85 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -1623,7 +1623,11 @@ static bool fold_qemu_st(OptContext *ctx, TCGOp *op) =20 static bool fold_remainder(OptContext *ctx, TCGOp *op) { - return fold_const2(ctx, op); + if (fold_const2(ctx, op) || + fold_xx_to_i(ctx, op, 1)) { + return true; + } + return false; } =20 static bool fold_setcond(OptContext *ctx, TCGOp *op) --=20 2.25.1 From nobody Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635292951831319.7576408730472; Tue, 26 Oct 2021 17:02:31 -0700 (PDT) Received: from localhost ([::1]:54204 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfWOk-0005As-EK for importer@patchew.org; Tue, 26 Oct 2021 20:02:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53962) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVdN-0000AF-46 for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:13:33 -0400 Received: from mail-pf1-x42b.google.com ([2607:f8b0:4864:20::42b]:36676) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVdK-00037T-JB for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:13:32 -0400 Received: by mail-pf1-x42b.google.com with SMTP id m26so920146pff.3 for ; Tue, 26 Oct 2021 16:13:30 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id d6sm24158122pfa.39.2021.10.26.16.13.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:13:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=DsfypDh+crhT4o2nCKU8fbNZB88YlA0a4vqSSNYIH70=; b=CXfoGMYDzsrpKv8DFBNp3N/E/87b+Irh2rHJas5orfylmIx8kaL7LVXsJctfrMl1Iq 2NB0vK8drtqviscdpx78N9v3JLFOVpzzDtlgOetxTDQUQhxwbC+UEcIu1gJq+Ru0qAGx oTasaC2THWuAENGibkV9cgHpsymd4QfUwJYZSbHpPGOZweAVuCrZwjNp8m0TtXgcAPm5 L+tPFDNDtsPwPCvjZ1S1c+ES2GB0fXx1FYeNvOzjTIn0OdGonZEJsHUvQhof28osoije 5f3ZDfczPsV4tbAappVslaxm+C0rtiwv6eaaTbsMt7vXWUuGZhQQ0v2tiEUDmYrwdFgq z3eQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=DsfypDh+crhT4o2nCKU8fbNZB88YlA0a4vqSSNYIH70=; b=nHw18W3xtcsin7bFQruFuiPoXg1aZZR0AXGxjfLG+CjLDUXIChF7qMboYhEoHtUEmS rO0VJQQitFwsSZAPfDSxFIwu6iOpoH2EhYEt/Wzt+LSogL7Gi8QQaI19Wa2bkR3PXlk9 7ZEEUmV+opZ6PSK4DoMAjTsEtcNzNUjSrmOglqKGxRdfWehHLaIt6vuqeSqKdRPd4jkr ihQXuC6anLWZ/y62TojM38/C15Ihx/Cl4OmSJyZXN0Zidb/oTWNs33iS7OXIDJVHtJjq f6Yj4qntKkpMLFxGCvTgg0yVPz3AtuzWjb+v6bn5Q5UvY11QFtFMix06ck2/qgz4A6dA Hyig== X-Gm-Message-State: AOAM532CtsziSCrnm/dVjQmIyE6bXCRewML0F5gNh5684soXnWKN6zjB JgJAPUjbsWkDAi8LtL0N4Kw9B2AtL6h0AA== X-Google-Smtp-Source: ABdhPJwjQgIg7B5RnVfNRQYxW0ExhHa8CfBwDRU8uUaOdQ7lGFEtXn+T73nsl8m043NIJVd8FaZPog== X-Received: by 2002:a63:e446:: with SMTP id i6mr21738116pgk.288.1635290009020; Tue, 26 Oct 2021 16:13:29 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 47/51] tcg/optimize: Optimize sign extensions Date: Tue, 26 Oct 2021 16:09:39 -0700 Message-Id: <20211026230943.1225890-48-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::42b; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635292954189100001 Certain targets, like riscv, produce signed 32-bit results. This can lead to lots of redundant extensions as values are manipulated. Begin by tracking only the obvious sign-extensions, and converting them to simple copies when possible. Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Richard Henderson Reviewed-by: Luis Pires --- tcg/optimize.c | 123 ++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 102 insertions(+), 21 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 6c6c523a85..742417ca1e 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -43,6 +43,7 @@ typedef struct TempOptInfo { TCGTemp *next_copy; uint64_t val; uint64_t z_mask; /* mask bit is 0 if and only if value bit is 0 */ + uint64_t s_mask; /* a left-aligned mask of clrsb(value) bits. */ } TempOptInfo; =20 typedef struct OptContext { @@ -53,9 +54,37 @@ typedef struct OptContext { /* In flight values from optimization. */ uint64_t a_mask; /* mask bit is 0 iff value identical to first input = */ uint64_t z_mask; /* mask bit is 0 iff value bit is 0 */ + uint64_t s_mask; /* mask of clrsb(value) bits */ TCGType type; } OptContext; =20 +/* Calculate the smask for a specific value. */ +static uint64_t smask_from_value(uint64_t value) +{ + int rep =3D clrsb64(value); + return ~(~0ull >> rep); +} + +/* + * Calculate the smask for a given set of known-zeros. + * If there are lots of zeros on the left, we can consider the remainder + * an unsigned field, and thus the corresponding signed field is one bit + * larger. + */ +static uint64_t smask_from_zmask(uint64_t zmask) +{ + /* + * Only the 0 bits are significant for zmask, thus the msb itself + * must be zero, else we have no sign information. + */ + int rep =3D clz64(zmask); + if (rep =3D=3D 0) { + return 0; + } + rep -=3D 1; + return ~(~0ull >> rep); +} + static inline TempOptInfo *ts_info(TCGTemp *ts) { return ts->state_ptr; @@ -94,6 +123,7 @@ static void reset_ts(TCGTemp *ts) ti->prev_copy =3D ts; ti->is_const =3D false; ti->z_mask =3D -1; + ti->s_mask =3D 0; } =20 static void reset_temp(TCGArg arg) @@ -124,9 +154,11 @@ static void init_ts_info(OptContext *ctx, TCGTemp *ts) ti->is_const =3D true; ti->val =3D ts->val; ti->z_mask =3D ts->val; + ti->s_mask =3D smask_from_value(ts->val); } else { ti->is_const =3D false; ti->z_mask =3D -1; + ti->s_mask =3D 0; } } =20 @@ -220,6 +252,7 @@ static bool tcg_opt_gen_mov(OptContext *ctx, TCGOp *op,= TCGArg dst, TCGArg src) op->args[1] =3D src; =20 di->z_mask =3D si->z_mask; + di->s_mask =3D si->s_mask; =20 if (src_ts->type =3D=3D dst_ts->type) { TempOptInfo *ni =3D ts_info(si->next_copy); @@ -658,13 +691,15 @@ static void finish_folding(OptContext *ctx, TCGOp *op) =20 nb_oargs =3D def->nb_oargs; for (i =3D 0; i < nb_oargs; i++) { - reset_temp(op->args[i]); + TCGTemp *ts =3D arg_temp(op->args[i]); + reset_ts(ts); /* - * Save the corresponding known-zero bits mask for the + * Save the corresponding known-zero/sign bits mask for the * first output argument (only one supported so far). */ if (i =3D=3D 0) { - arg_info(op->args[i])->z_mask =3D ctx->z_mask; + ts_info(ts)->z_mask =3D ctx->z_mask; + ts_info(ts)->s_mask =3D ctx->s_mask; } } } @@ -714,6 +749,7 @@ static bool fold_masks(OptContext *ctx, TCGOp *op) { uint64_t a_mask =3D ctx->a_mask; uint64_t z_mask =3D ctx->z_mask; + uint64_t s_mask =3D ctx->s_mask; =20 /* * 32-bit ops generate 32-bit results, which for the purpose of @@ -725,7 +761,9 @@ static bool fold_masks(OptContext *ctx, TCGOp *op) if (ctx->type =3D=3D TCG_TYPE_I32) { a_mask =3D (int32_t)a_mask; z_mask =3D (int32_t)z_mask; + s_mask |=3D MAKE_64BIT_MASK(32, 32); ctx->z_mask =3D z_mask; + ctx->s_mask =3D s_mask; } =20 if (z_mask =3D=3D 0) { @@ -1071,7 +1109,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; @@ -1081,6 +1119,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: @@ -1099,6 +1138,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: @@ -1107,14 +1147,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); } @@ -1262,21 +1305,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); } @@ -1302,14 +1348,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): @@ -1333,10 +1381,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); } @@ -1375,6 +1427,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; } @@ -1605,8 +1658,12 @@ static bool fold_qemu_ld(OptContext *ctx, TCGOp *op) MemOp mop =3D get_memop(oi); int width =3D 8 * memop_size(mop); =20 - if (!(mop & MO_SIGN) && width < 64) { - ctx->z_mask =3D MAKE_64BIT_MASK(0, width); + if (width < 64) { + ctx->s_mask =3D MAKE_64BIT_MASK(width, 64 - width); + if (!(mop & MO_SIGN)) { + ctx->z_mask =3D MAKE_64BIT_MASK(0, width); + ctx->s_mask <<=3D 1; + } } =20 /* Opcodes that touch guest memory stop the mb optimization. */ @@ -1725,23 +1782,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 @@ -1818,14 +1883,26 @@ static bool fold_tcg_ld(OptContext *ctx, TCGOp *op) { /* We can't do any folding with a load, but we can record bits. */ switch (op->opc) { + CASE_OP_32_64(ld8s): + ctx->s_mask =3D MAKE_64BIT_MASK(8, 56); + break; CASE_OP_32_64(ld8u): ctx->z_mask =3D MAKE_64BIT_MASK(0, 8); + ctx->s_mask =3D MAKE_64BIT_MASK(9, 55); + break; + CASE_OP_32_64(ld16s): + ctx->s_mask =3D MAKE_64BIT_MASK(16, 48); break; CASE_OP_32_64(ld16u): ctx->z_mask =3D MAKE_64BIT_MASK(0, 16); + ctx->s_mask =3D MAKE_64BIT_MASK(17, 47); + break; + case INDEX_op_ld32s_i64: + ctx->s_mask =3D MAKE_64BIT_MASK(32, 32); break; case INDEX_op_ld32u_i64: ctx->z_mask =3D MAKE_64BIT_MASK(0, 32); + ctx->s_mask =3D MAKE_64BIT_MASK(33, 31); break; default: g_assert_not_reached(); @@ -1888,9 +1965,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. @@ -1963,8 +2041,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 Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635292324378760.4756230331277; Tue, 26 Oct 2021 16:52:04 -0700 (PDT) Received: from localhost ([::1]:59956 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfWEd-0006s0-8O for importer@patchew.org; Tue, 26 Oct 2021 19:52:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53980) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVdO-0000Cj-AZ for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:13:34 -0400 Received: from mail-pg1-x536.google.com ([2607:f8b0:4864:20::536]:34717) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVdL-00037d-GA for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:13:34 -0400 Received: by mail-pg1-x536.google.com with SMTP id h193so1064529pgc.1 for ; Tue, 26 Oct 2021 16:13:30 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id d6sm24158122pfa.39.2021.10.26.16.13.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:13:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=a4njDfQC9JoQ4EGmKy2OjsF/31HmyACHskOdXQZvxJE=; b=nubpKN6GG6qvhWGG3WFKDD/OwCP+Eg7vNKX4Tu7dm111qVz/z5oc3NxFC6mCpBl/MA stRWiUHON5At7noRC4UHaLcfzd5nuEa9Ol9YfR1ydvLL+y1UpCTZm2zI3wXhyr0D48+3 +fHLMX5XuKejBdfk0rFo4E1N+78AgfdMRxz+BaoU39Mvc9h/y3dRuEkZDB0NW4P5v436 ALHJMesWztNjfDrz6nXrRiaLdnZJ6Z0GUXvKj8VUPi3+mDQNNu8Yd6GUJmZJBHch4Rg5 jz9kTGikwMmueVrYJnShkQobBUkVvI3izz2nSeZLHRJRgNRtFrjnsQNnk5TV3tz6CYvv Fd0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=a4njDfQC9JoQ4EGmKy2OjsF/31HmyACHskOdXQZvxJE=; b=qVRLj6e/T9LaX5g3teN0KOQq5tjpJmuGvCQoSoFC/Ee06lmmJsVZ0mwtVJirUo8ns4 T6sOzRYtP85Ono4WgugRUCzDa6rpF4Gd+sNP8iLZ6x6TBoUHBM4LnFCokDHvRmO4zO1G He99w/Eo6RTz1dl831KM+2dH3f3DPY1ghDJwhUmiemHtwisViX+UZJjvSWJHkwuv62Rb TW4Jm3T8HqlSKASyWNqOR6ZOwfV59NmJq4b0n1hbyR3TuzNKjANBaY96Dm+CJ4xFXMXd Jb8LNkusHUHPOrjgfVNu7ysSiO6/atrEvtgIY+LeoCIhUiLtFsMXLxQYoaCWfRtyA2hA XZVA== X-Gm-Message-State: AOAM532Zec6KCUdd6ZbHeDlweToB2AdzbX1TWkkvwbGy6Bhn8/TM+KtB X4t337qJNmuljZsoDnMW0BXQZKNqvwiSIw== X-Google-Smtp-Source: ABdhPJwW2KNs45FwDGwXuxx0w0oM7z8c1tviKQa8wa1IkZrZRuJEDuq9S0vW1h3xrtX5phagj6jpRg== X-Received: by 2002:a63:7b5c:: with SMTP id k28mr18495615pgn.158.1635290010118; Tue, 26 Oct 2021 16:13:30 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 48/51] tcg/optimize: Propagate sign info for logical operations Date: Tue, 26 Oct 2021 16:09:40 -0700 Message-Id: <20211026230943.1225890-49-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::536; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x536.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635292325423100001 Sign repetitions are perforce all identical, whether they are 1 or 0. Bitwise operations preserve the relative quantity of the repetitions. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson Reviewed-by: Luis Pires --- tcg/optimize.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/tcg/optimize.c b/tcg/optimize.c index 742417ca1e..311d9779f2 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -966,6 +966,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. @@ -1001,6 +1008,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 @@ -1299,6 +1308,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 @@ -1486,6 +1498,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; @@ -1584,6 +1598,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 @@ -1613,6 +1630,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 @@ -1622,6 +1642,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; @@ -1637,6 +1659,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 @@ -1648,6 +1672,9 @@ static bool fold_orc(OptContext *ctx, TCGOp *op) fold_ix_to_not(ctx, op, 0)) { return true; } + + ctx->s_mask =3D arg_info(op->args[1])->s_mask + & arg_info(op->args[2])->s_mask; return false; } =20 @@ -1921,6 +1948,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 Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635292410866114.8007337373507; Tue, 26 Oct 2021 16:53:30 -0700 (PDT) Received: from localhost ([::1]:37126 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfWG1-00021d-OL for importer@patchew.org; Tue, 26 Oct 2021 19:53:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53982) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVdO-0000Co-Bq for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:13:34 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]:45707) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVdM-00037k-PI for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:13:34 -0400 Received: by mail-pj1-x1031.google.com with SMTP id ls14-20020a17090b350e00b001a00e2251c8so642977pjb.4 for ; Tue, 26 Oct 2021 16:13:31 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id d6sm24158122pfa.39.2021.10.26.16.13.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:13:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=CQKY6BJo1TTNoM3ikIZAZY/KG7wYR8GP1IgW1gGuVbE=; b=D9bed8+Bv7QW750LuqHNFDCiWjMZj0S+E8wv7HNGm4J9paEgVhlMqtwe6TQkRIdP6A Saql+mILJGdNH0JoEQ7HyOqDcJzLZ29pyDq11A4xbQtNb5WKtp5reQ9iBGuA1qgDHPdk bKwrK06IaBdwjnJHumONWuGdTutH0/xlqlStXrEoJR7vgAG4zFVdlFfqdkFELxoliWQS QKsXuM/I31ajy1ovrBivtMNo7PRrWmYImm5opRPXYq0kAO4JgjDJBAcgQKPcCG7ParzG kW6izN0BifTTkWCGam/wiqqz8wvF4Q9dIg92x3H98dhuoqQj5G96vJmBCfodTXyV+syl ui9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=CQKY6BJo1TTNoM3ikIZAZY/KG7wYR8GP1IgW1gGuVbE=; b=NOMvGjR61sxQrnJlO4Vzs1aY9YZlxPwSHRmVi5abkeQMcfME7q+XTFB5lxtmza5EAK TS1Ym0fy+AiIyAzHUtTBYsoFNFpGtjK3EtMlevorhNIao57ntk2DJDuqraw+YoY89dNg g9PEQUlD+j8CrV3p+Yo+N3kqvRV9n6T+RLvT/HZtXFWFz9dFBcOmfJHHVit+It3TUO2Y Cvr1M0l3y0j3Rhf5Nq7L0NOwxAvlvHMLnY2vJCg5Nky/WbuUeima6DlWaD3o7+Hnfnd3 RbRw8rLFcMMPv/cVIEPRPu5/nHphCTuCcx4KLwqvdEcgKgzVWrRnlJCMI4pPVGc8FHTP oxqw== X-Gm-Message-State: AOAM531WkxHYJpgBHrhK8pRTV+rP0LVZ6hFCKRNcI/j6j+OsIDdVMWQd Amt0kIYKJuuUJZS9Qnnl52MK4g2O8Xinvg== X-Google-Smtp-Source: ABdhPJyInjy9uM5PUsA/MP5JdxYE5GkLp9o3qqk1xJM/qUke7JiTf9mB36/pQEKgLsvOO/VeRdSUQA== X-Received: by 2002:a17:90b:2246:: with SMTP id hk6mr1993031pjb.116.1635290011026; Tue, 26 Oct 2021 16:13:31 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 49/51] tcg/optimize: Propagate sign info for setcond Date: Tue, 26 Oct 2021 16:09:41 -0700 Message-Id: <20211026230943.1225890-50-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1031; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1031.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635292411201100001 The result is either 0 or 1, which means that we have a 2 bit signed result, and thus 62 bits of sign. For clarity, use the smask_from_zmask function. Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Richard Henderson Reviewed-by: Luis Pires --- tcg/optimize.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tcg/optimize.c b/tcg/optimize.c index 311d9779f2..515087876c 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -1729,6 +1729,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 @@ -1801,6 +1802,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 Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635292532569115.42129518067725; Tue, 26 Oct 2021 16:55:32 -0700 (PDT) Received: from localhost ([::1]:43938 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfWHy-0006VG-Js for importer@patchew.org; Tue, 26 Oct 2021 19:55:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54000) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVdQ-0000EO-1F for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:13:36 -0400 Received: from mail-pf1-x42b.google.com ([2607:f8b0:4864:20::42b]:43676) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVdN-00037p-7h for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:13:35 -0400 Received: by mail-pf1-x42b.google.com with SMTP id 187so880138pfc.10 for ; Tue, 26 Oct 2021 16:13:32 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id d6sm24158122pfa.39.2021.10.26.16.13.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:13:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=HNbzgMBtjU/uvlvvRvWfsbvztDv8gt6Nc5lohSZdq6Q=; b=fxMsTFC9sXQUKZGQ+78YBs5Ap8mWYWldP9a61pQiaIYCWtwNzp7UvPTHAstLk+xvjZ OPB5D+zalM0WrJu5mz2xm3sBKjtktTS89JYAPcONFNO4XyjtZ4wBTX8NRfoS5FelybQ/ MEj0/tDBfKay/serhayVon3Pw6Wq/5PBM0jWb09Xy2qY5NLxWSNSeQYZHaFfPzoErxy2 J15dRgguo9zrfrOh77P0DJ7hHsqdxXwmuiq6yNqmaLhufP2XI4lbka7zzjZrJCD1OsQF Zal8glWb4bFBTfcrl26oEpQEp2yrcoE2OG7K+gfliZB9tSEbJVbw5wcKemvtm362uoeM h+hg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=HNbzgMBtjU/uvlvvRvWfsbvztDv8gt6Nc5lohSZdq6Q=; b=uSZOlTqMnX5RFWJisrXO9WpRlgB9MV5TAAImzAqWgiDqguiYBzX1Fg6nTDj/yuEizN DG6IAl/fLZ9kdoCvhDSbxnZ1aX9LYOub1wj1r4dDri0mpBPQtfjwroEZM5zhnqmlI3E/ YLCTOOEePaFZlV9mR/YK/S5Ou4BV7kBv2gvWObf7OybMa6fcyX0iwwWMs18rOk0yOuQ7 qfaOe4e/tcHSzSCeZVkvLEpEG8evWjfrP9czVj0CnhkmuZbCk7x4RCdq16Jc5vw8FMYM zTWeC59+2KeumwuFI2ErhJ/s6G6l/W0KGM2nCH9JsiBPg1cTm/Tz/7zAELmL3ffRtMJ+ WLIA== X-Gm-Message-State: AOAM531y0TErBwY4FkCyKPEmi/V/hTvy0WhRsnOPW+2crgfnZrgTqg4i d2yc/+q7YqvUBCQnZ5hvNrPqsMhzYsumbw== X-Google-Smtp-Source: ABdhPJwvBivdQLXWFJT13qCq5CnQAWjEBIb4pGIySUzD+fok/u5wbSIx/PSEL3eu4AwxouF07ufkqA== X-Received: by 2002:a63:8c4d:: with SMTP id q13mr21279148pgn.92.1635290011779; Tue, 26 Oct 2021 16:13:31 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 50/51] tcg/optimize: Propagate sign info for bit counting Date: Tue, 26 Oct 2021 16:09:42 -0700 Message-Id: <20211026230943.1225890-51-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::42b; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635292534515100001 The results are generally 6 bit unsigned values, though the count leading and trailing bits may produce any value for a zero input. Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Richard Henderson Reviewed-by: Luis Pires --- tcg/optimize.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 515087876c..ccabc5ed54 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -1228,7 +1228,7 @@ static bool fold_count_zeros(OptContext *ctx, TCGOp *= op) g_assert_not_reached(); } ctx->z_mask =3D arg_info(op->args[2])->z_mask | z_mask; - + ctx->s_mask =3D smask_from_zmask(ctx->z_mask); return false; } =20 @@ -1248,6 +1248,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 Tue May 14 09:15:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1635293056345155.35732822984846; Tue, 26 Oct 2021 17:04:16 -0700 (PDT) Received: from localhost ([::1]:56498 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfWQR-0006iJ-46 for importer@patchew.org; Tue, 26 Oct 2021 20:04:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54002) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfVdR-0000FN-5q for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:13:37 -0400 Received: from mail-pf1-x42b.google.com ([2607:f8b0:4864:20::42b]:34692) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mfVdO-000380-1t for qemu-devel@nongnu.org; Tue, 26 Oct 2021 19:13:36 -0400 Received: by mail-pf1-x42b.google.com with SMTP id 127so927123pfu.1 for ; Tue, 26 Oct 2021 16:13:33 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id d6sm24158122pfa.39.2021.10.26.16.13.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 16:13:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=mUsUojes9E/WUS/+YAxDThhgpmUv93fOZ4TSPj0umDw=; b=g1h0Vs1yJD7Ng8siQMw0CnP28NAO1orCan+yDZvbkaVto0lEdd5e2SwSmoW0r06K5p P8FWXk/AQWqRiHChHsD8C+i1X2n60X9uq76SYYtzojPXMUdfHk3ppZIODmYBWwIj4CAA 0HlPV2xOUOelsq8cGaI17nCrTFojHEpe4cAwmtuLz93eeh0BdkPmCFzbw1al3EEi1Ln/ ZoHXULB4gGGuyWgbSPZ6+mvPd+N3wzOPJ3XDJR0dS8amZiFVD9aMhbWMDZjmKsh96ZWM NrP3PLJLrh5lFPEMkFSs7C8NBIE+3gUT60rPLwsyOM6BWC8DYqxxWmOEAbI6/hixqSRQ eusQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=mUsUojes9E/WUS/+YAxDThhgpmUv93fOZ4TSPj0umDw=; b=3xI8Nj8wmaejuNao4Z7T1kIPg6qWOUmBFnjEeS0kv+IhXchgzZ2QjjEq7phPfMF4w9 llpkgGyyb/FFN+pBQm8W/ALCuOouz4hO666nH1Sn93SZL8KpNKF1vzolKVvrj1cegHIL bJ9rR7BXnehBFw6UzrnTAGJNf5IvY0YHyiQIyY7AaNLZQfc6iXd63EPqkCfzMGcMDVl/ //xfFOdBYZg7WFnT6TF+UFJ9bMB6Gcq9WnQIsD5JpfULLe4pX2K1xxV4Nblex3MiGlZf iOtDnitS0KCZuO9mBbkMy1GXuUJ0qkCzUD71wB67Qrc9i5IRmFgn1Fw4zXpHhpurs2Ee 3jTQ== X-Gm-Message-State: AOAM530uyn05KWsc9yA3/Ycd2HqYGaTBRAPBgnsH46vGJ3ZeZoMqddAH D/xd4tQ1cQYDtlVI3NUnQdD7xYQoJ4UNlw== X-Google-Smtp-Source: ABdhPJwqcLumEAWOx7J6qJ6QJv/HXM6yeNjkivtW/YM2x7K71ll8FFZEEp0szN3Uoa3adO0WRHw8/Q== X-Received: by 2002:a62:8017:0:b0:47b:fc93:f252 with SMTP id j23-20020a628017000000b0047bfc93f252mr13686215pfd.39.1635290012860; Tue, 26 Oct 2021 16:13:32 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v4 51/51] tcg/optimize: Propagate sign info for shifting Date: Tue, 26 Oct 2021 16:09:43 -0700 Message-Id: <20211026230943.1225890-52-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211026230943.1225890-1-richard.henderson@linaro.org> References: <20211026230943.1225890-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::42b; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42b.google.com X-Spam_score_int: -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: , Cc: luis.pires@eldorado.org.br, alex.bennee@linaro.org, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1635293057147100001 For constant shifts, we can simply shift the s_mask. For variable shifts, we know that sar does not reduce the s_mask, which helps for sequences like ext32s_i64 t, in sar_i64 t, t, v ext32s_i64 out, t allowing the final extend to be eliminated. Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Richard Henderson Reviewed-by: Luis Pires --- tcg/optimize.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 3 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index ccabc5ed54..98ebe93f04 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -85,6 +85,18 @@ static uint64_t smask_from_zmask(uint64_t zmask) return ~(~0ull >> rep); } =20 +/* + * Recreate a properly left-aligned smask after manipulation. + * Some bit-shuffling, particularly shifts and rotates, may + * retain sign bits on the left, but may scatter disconnected + * sign bits on the right. Retain only what remains to the left. + */ +static uint64_t smask_from_smask(int64_t smask) +{ + /* Only the 1 bits are significant for smask */ + return smask_from_zmask(~smask); +} + static inline TempOptInfo *ts_info(TCGTemp *ts) { return ts->state_ptr; @@ -1842,18 +1854,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