From nobody Wed Apr 9 12:43:32 2025 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=1599611201; cv=none; d=zohomail.com; s=zohoarc; b=Snc2IeSoUNN2t3EPGv0ygMvgp1/WWh7dvKYAKNmZLPNyaKCDL9K7iC606t+wciYGFOuXB8tzpBv9WJUt89KNNkyB3i10w5q0v1S+f6FHDH+WsxeiMD3mDW4+AYmpzsJhTAiJ4xEkUlmHZrVqK87RbCk0eBjTQHVulMpHm0ZUm38= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1599611201; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=1NhNPEIDsGzd2+XZQVnWFC0k3zKAB+Awk5/hTm4NEwE=; b=AgVef88cT17TWtXKUJQUMhoTQc5Yai/x0An66zrVyu7eo4mCTYt3ZBSK8XSWmIRMB/vOdKDNJfoxGE+a6n+uy6OKwnUz97CFHIMn0L4376CvX0EVI/T4hCA+RqutKa78wzpOhBWA6LCpy4s0vYClkswYBirMndzcBlrRJf+kgHY= 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 159961120121369.22714742935182; Tue, 8 Sep 2020 17:26:41 -0700 (PDT) Received: from localhost ([::1]:50938 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kFnwd-0004Y0-VD for importer@patchew.org; Tue, 08 Sep 2020 20:26:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37544) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kFnna-0008QJ-Gv for qemu-devel@nongnu.org; Tue, 08 Sep 2020 20:17:18 -0400 Received: from mail-pj1-x1042.google.com ([2607:f8b0:4864:20::1042]:39475) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kFnnY-0002Ff-FU for qemu-devel@nongnu.org; Tue, 08 Sep 2020 20:17:18 -0400 Received: by mail-pj1-x1042.google.com with SMTP id s2so426078pjr.4 for ; Tue, 08 Sep 2020 17:17:16 -0700 (PDT) Received: from localhost.localdomain ([71.212.141.89]) by smtp.gmail.com with ESMTPSA id 137sm505437pfu.149.2020.09.08.17.17.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Sep 2020 17:17: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=1NhNPEIDsGzd2+XZQVnWFC0k3zKAB+Awk5/hTm4NEwE=; b=fV1LqSREgOEiUJmb7AH6Z7MTZwMsxQ0vHK0Bm0EDMeCsIMI6nZNa2SNCh9rrgYVTi6 nT+Dya25DqJG+W14bXeZ/a9U6h7o+4n18YvO+iQlaHHQW5GUD+/+vamKMlMiyQfmjhhM BS578KPqLPxEPgjbJU5MN8RXkbFSzD/3Lt5F9vrWntiAJt3hs0N+v8swRpW7r6+N90Qm jy5oviYkldsy+mYtVqJV2Tg5FDsEizta8wGFQ9RXMKJrJHCg49Aq6jBJ6wlk69bhZN4v MKw9BOu0T+5+uK4zR5x1hTvoIILIcK5gIg2wrreYCmBg3+2S8/+C36hUul6qgE6Ps0NS M5Ew== 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=1NhNPEIDsGzd2+XZQVnWFC0k3zKAB+Awk5/hTm4NEwE=; b=lKPWTY6MdDpBp/ikbaNFltn92YZoc4RduzSuUQ6KFV/Ii/5Inb+37e22c6Z3F2mmwW chjbbVGMMzv6vgREdDm94EHsUmvQqaJNeqUrKlUXIbt7Nqb3sEdFH2RZPTc98uDtSDLQ xwiOPXYn/3ptdM1ykzyJtBjb3Benu5+D8zXDwZxQGTcLr15HYmx/2AolRsO+x+aOo0ze /NE8Sx/3izPOsQfllEOaMoahiLGFW2B6yAPyrR46E1WDcbQ01UeA5Af8c+j2qwPuAVlq mhKDLT/xQToY0D6FYDIvEbocdA0wUcGSVe7SliZXHLpzMh5DKeG0v95eFrIPyY0QrAeh f0og== X-Gm-Message-State: AOAM532QZLd3fYdFDLU81YHBsHFF2c4Y6BouWeqI5WQMoKF20hN1vAED p7whDjLNJzJkFTdYb/Jc9Pqp2FcIO08eAg== X-Google-Smtp-Source: ABdhPJz0nA4HjC/sXvhFZOW0Bppsi5Shisd+eICAMCahDqBaMfLN77ctiRa91RC+M9uOiHUE6Gg+Gg== X-Received: by 2002:a17:90a:5609:: with SMTP id r9mr1186624pjf.217.1599610634646; Tue, 08 Sep 2020 17:17:14 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 20/43] tcg/optimize: Adjust TempOptInfo allocation Date: Tue, 8 Sep 2020 17:16:24 -0700 Message-Id: <20200909001647.532249-21-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200909001647.532249-1-richard.henderson@linaro.org> References: <20200909001647.532249-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::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_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Do not allocate a large block for indexing. Instead, allocate for each temporary as they are seen. In general, this will use less memory, if we consider that most TBs do not touch every target register. This also allows us to allocate TempOptInfo for new temps created during optimization. Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Richard Henderson --- tcg/optimize.c | 60 ++++++++++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 26 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index bf2c2a3ce5..e269962932 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -89,35 +89,41 @@ static void reset_temp(TCGArg arg) } =20 /* Initialize and activate a temporary. */ -static void init_ts_info(TempOptInfo *infos, - TCGTempSet *temps_used, TCGTemp *ts) +static void init_ts_info(TCGTempSet *temps_used, TCGTemp *ts) { size_t idx =3D temp_idx(ts); - if (!test_bit(idx, temps_used->l)) { - TempOptInfo *ti =3D &infos[idx]; + TempOptInfo *ti; =20 + if (test_bit(idx, temps_used->l)) { + return; + } + set_bit(idx, temps_used->l); + + ti =3D ts->state_ptr; + if (ti =3D=3D NULL) { + ti =3D tcg_malloc(sizeof(TempOptInfo)); ts->state_ptr =3D ti; - ti->next_copy =3D ts; - ti->prev_copy =3D ts; - if (ts->kind =3D=3D TEMP_CONST) { - ti->is_const =3D true; - ti->val =3D ti->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; - } - } else { - ti->is_const =3D false; - ti->mask =3D -1; + } + + ti->next_copy =3D ts; + ti->prev_copy =3D ts; + if (ts->kind =3D=3D TEMP_CONST) { + ti->is_const =3D true; + ti->val =3D ts->val; + ti->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; } - set_bit(idx, temps_used->l); + } else { + ti->is_const =3D false; + ti->mask =3D -1; } } =20 -static void init_arg_info(TempOptInfo *infos, - TCGTempSet *temps_used, TCGArg arg) +static void init_arg_info(TCGTempSet *temps_used, TCGArg arg) { - init_ts_info(infos, temps_used, arg_temp(arg)); + init_ts_info(temps_used, arg_temp(arg)); } =20 static TCGTemp *find_better_copy(TCGContext *s, TCGTemp *ts) @@ -604,9 +610,8 @@ static bool swap_commutative2(TCGArg *p1, TCGArg *p2) /* Propagate constants and copies, fold constant expressions. */ void tcg_optimize(TCGContext *s) { - int nb_temps, nb_globals; + int nb_temps, nb_globals, i; TCGOp *op, *op_next, *prev_mb =3D NULL; - TempOptInfo *infos; TCGTempSet temps_used; =20 /* Array VALS has an element for each temp. @@ -616,12 +621,15 @@ void tcg_optimize(TCGContext *s) =20 nb_temps =3D s->nb_temps; nb_globals =3D s->nb_globals; + bitmap_zero(temps_used.l, nb_temps); - infos =3D tcg_malloc(sizeof(TempOptInfo) * nb_temps); + for (i =3D 0; i < nb_temps; ++i) { + s->temps[i].state_ptr =3D NULL; + } =20 QTAILQ_FOREACH_SAFE(op, &s->ops, link, op_next) { uint64_t mask, partmask, affected, tmp; - int nb_oargs, nb_iargs, i; + int nb_oargs, nb_iargs; TCGOpcode opc =3D op->opc; const TCGOpDef *def =3D &tcg_op_defs[opc]; =20 @@ -633,14 +641,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(infos, &temps_used, ts); + init_ts_info(&temps_used, 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(infos, &temps_used, op->args[i]); + init_arg_info(&temps_used, op->args[i]); } } =20 --=20 2.25.1