From nobody Tue Feb 10 19:49:14 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 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