From nobody Tue Feb 10 12:14:01 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588951147; cv=none; d=zohomail.com; s=zohoarc; b=BznGP5csSjKqNc8UvgulMUHeC8z/r4vA6j3nYjazh5IaaTZpAGwNkBbPHWrjZOwR19/7kLN1MwRtZOXg8sKWNfV+sG/ei7GyiXbIvW6RngmxR1JYRBpP/JV73pgfrxeSToDD8hsPGshjSPvOtvshuHvaIT7/2X0NWlMsAc6vGpk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588951147; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=N87+uoODPiN2PxHSS9BG0v3AbBww5OeyNSCwJsVaeMs=; b=Jgv7YRqPjOKngNUijk9HIfJWM0BNRphhat2fljm8zPiAXEDIBGXvzz9XTBxeFssdMGl7R7XS4t9TjjGHuq4NvJzQCzmQYzrMkeVNwTr4xtjZN9EAEDCM1Rrt2rl984YSpihV/JVp+Xu4gnVDm0VRK/q2tTuWQB0pio/Xqk5xe0k= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 15889511474241022.3805543047306; Fri, 8 May 2020 08:19:07 -0700 (PDT) Received: from localhost ([::1]:36482 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jX4mH-0006kq-TZ for importer@patchew.org; Fri, 08 May 2020 11:19:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60080) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jX4ee-0002ko-79 for qemu-devel@nongnu.org; Fri, 08 May 2020 11:11:12 -0400 Received: from mail-pj1-x1042.google.com ([2607:f8b0:4864:20::1042]:39964) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jX4ed-00049G-36 for qemu-devel@nongnu.org; Fri, 08 May 2020 11:11:11 -0400 Received: by mail-pj1-x1042.google.com with SMTP id fu13so4361717pjb.5 for ; Fri, 08 May 2020 08:11:10 -0700 (PDT) Received: from localhost.localdomain (174-21-149-226.tukw.qwest.net. [174.21.149.226]) by smtp.gmail.com with ESMTPSA id d13sm1557562pga.64.2020.05.08.08.11.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2020 08:11: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=N87+uoODPiN2PxHSS9BG0v3AbBww5OeyNSCwJsVaeMs=; b=OUWi3kzqWsRbphN5foKSoQBdk58BLmncizVFzR6E4ZSO+NsdqrDlv8iyJ2jeMo0cuV L3ybrT5zWS74B3g0d7rpq75Js4ahJlOgdDzs1BAhZKU43ZyUbjmx6PZ2mI9T9Op5FThL XPohekfig5BGjC12dng8euU1JB9kSYxcEmlp8VUokjlzPc9Oy79IMfe5vfRfq4O32cXm skABQkgV1v4IXQmjLOiFN6Utt8koq4Rvp2ZQ4X4W3vGccqxS30gAkMj5MLJcog/Xriu0 fCk2k0Ip6YvOOotQonItwbMvH0Zv72Wa8UOed2Dyii9zGpg+cHfBk3kERKtLLx9pRHwK SWSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=N87+uoODPiN2PxHSS9BG0v3AbBww5OeyNSCwJsVaeMs=; b=nf1LT/dBCRqn57twlnkZXVHMOGyK75Mqb4xg3O/NY+BlolIJrcS/cfphDy5xNhLiT5 ZWsKWtH43gZ4u8cU/gmmMlAlNvjqRR4dh1F+ZvLSeOLEG96Way0w5OrgWXXTdcepezj3 J8NlkfE/W9BoTzrj2g5Wys160tnajHdCSaE/swR2R1wCEbooIc11JUG3nxnHTYq72hzH Z4K1jWsDi91MSxYldIbp+kvR0xvdscBTBkh6fgpF+2n+wZgRweXfzy501xEqLPzDw/WA iUiuVUGJh/QAPJIL9S3xNnlQDFtCdoz7LQXT8F79UH03f9VaVQXpU2AuHpFzP1pW2LIT b7aQ== X-Gm-Message-State: AGi0PuaHc0c9MA/2LdVuMAgX5nqq9BgS1dk33S+vfJWamoaOy27K/A9c mfAuhQqz/AJNL9o0z49mDBkjw1KnxqY= X-Google-Smtp-Source: APiQypJPcot5XcvmP6yDf8BSKrWsJm478BI/I0n/Bdpg7znVPgSn/OTozZKE4MPnKfR/5Fo1XNpMqg== X-Received: by 2002:a17:902:8b88:: with SMTP id ay8mr2862403plb.235.1588950669263; Fri, 08 May 2020 08:11:09 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 10/10] tcg: Improve move ops in liveness_pass_2 Date: Fri, 8 May 2020 08:10:55 -0700 Message-Id: <20200508151055.5832-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200508151055.5832-1-richard.henderson@linaro.org> References: <20200508151055.5832-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::1042; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1042.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN 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: alex.bennee@linaro.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" If the output of the move is dead, then the last use is in the store. If we propagate the input to the store, then we can remove the move opcode entirely. Signed-off-by: Richard Henderson --- tcg/tcg.c | 78 +++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 56 insertions(+), 22 deletions(-) diff --git a/tcg/tcg.c b/tcg/tcg.c index aa13158999..216a6963b3 100644 --- a/tcg/tcg.c +++ b/tcg/tcg.c @@ -2982,34 +2982,68 @@ static bool liveness_pass_2(TCGContext *s) } =20 /* Outputs become available. */ - for (i =3D 0; i < nb_oargs; i++) { - arg_ts =3D arg_temp(op->args[i]); + if (opc =3D=3D INDEX_op_mov_i32 || opc =3D=3D INDEX_op_mov_i64) { + arg_ts =3D arg_temp(op->args[0]); dir_ts =3D arg_ts->state_ptr; - if (!dir_ts) { - continue; + if (dir_ts) { + op->args[0] =3D temp_arg(dir_ts); + changes =3D true; + + /* The output is now live and modified. */ + arg_ts->state =3D 0; + + if (NEED_SYNC_ARG(0)) { + TCGOpcode sopc =3D (arg_ts->type =3D=3D TCG_TYPE_I32 + ? INDEX_op_st_i32 + : INDEX_op_st_i64); + TCGOp *sop =3D tcg_op_insert_after(s, op, sopc); + TCGTemp *out_ts =3D dir_ts; + + if (IS_DEAD_ARG(0)) { + out_ts =3D arg_temp(op->args[1]); + arg_ts->state =3D TS_DEAD; + tcg_op_remove(s, op); + } else { + arg_ts->state =3D TS_MEM; + } + + sop->args[0] =3D temp_arg(out_ts); + sop->args[1] =3D temp_arg(arg_ts->mem_base); + sop->args[2] =3D arg_ts->mem_offset; + } else { + tcg_debug_assert(!IS_DEAD_ARG(0)); + } } - op->args[i] =3D temp_arg(dir_ts); - changes =3D true; + } else { + for (i =3D 0; i < nb_oargs; i++) { + arg_ts =3D arg_temp(op->args[i]); + dir_ts =3D arg_ts->state_ptr; + if (!dir_ts) { + continue; + } + op->args[i] =3D temp_arg(dir_ts); + changes =3D true; =20 - /* The output is now live and modified. */ - arg_ts->state =3D 0; + /* The output is now live and modified. */ + arg_ts->state =3D 0; =20 - /* Sync outputs upon their last write. */ - if (NEED_SYNC_ARG(i)) { - TCGOpcode sopc =3D (arg_ts->type =3D=3D TCG_TYPE_I32 - ? INDEX_op_st_i32 - : INDEX_op_st_i64); - TCGOp *sop =3D tcg_op_insert_after(s, op, sopc); + /* Sync outputs upon their last write. */ + if (NEED_SYNC_ARG(i)) { + TCGOpcode sopc =3D (arg_ts->type =3D=3D TCG_TYPE_I32 + ? INDEX_op_st_i32 + : INDEX_op_st_i64); + TCGOp *sop =3D tcg_op_insert_after(s, op, sopc); =20 - sop->args[0] =3D temp_arg(dir_ts); - sop->args[1] =3D temp_arg(arg_ts->mem_base); - sop->args[2] =3D arg_ts->mem_offset; + sop->args[0] =3D temp_arg(dir_ts); + sop->args[1] =3D temp_arg(arg_ts->mem_base); + sop->args[2] =3D arg_ts->mem_offset; =20 - arg_ts->state =3D TS_MEM; - } - /* Drop outputs that are dead. */ - if (IS_DEAD_ARG(i)) { - arg_ts->state =3D TS_DEAD; + arg_ts->state =3D TS_MEM; + } + /* Drop outputs that are dead. */ + if (IS_DEAD_ARG(i)) { + arg_ts->state =3D TS_DEAD; + } } } } --=20 2.20.1