From patchwork Fri May 8 15:17:39 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 186373 Delivered-To: patch@linaro.org Received: by 2002:a92:8d81:0:0:0:0:0 with SMTP id w1csp88523ill; Fri, 8 May 2020 08:30:24 -0700 (PDT) X-Google-Smtp-Source: APiQypLCSgMtIQ8C4mn2sM5JzROfMB+H+CnGaouoNiWfs1CUJtI/HXEnsEoLtEgPDeo1izbH62nR X-Received: by 2002:a05:620a:16d6:: with SMTP id a22mr3191388qkn.291.1588951824730; Fri, 08 May 2020 08:30:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588951824; cv=none; d=google.com; s=arc-20160816; b=rlRekrwugaxOyZwnpoJSErtx09xWf5qIwAmXaQrnSX0FKU/PFrcnd5TAPDjhJa6Yes NZ3YjS90c/QwhqrBcQ8DniekljCraag4VyxLqawY2RP6Uw39wjn/GHe1cbjuODGazz3H 7UfjFkk5cjSm5gc/xLsw7Y7b9/SrNS8m9VC6mFdUvYHVs02VQEzLXCzDNZDLbRqmoRXX XnPzosZQVb188QRacCKRMrm4R7QH1PAXt9QtNVdXpnDI160JTs+yDQgP2p/8Q76VVZPx QhU9AZnc7ngdbAfDPKhaG28EwhuRTCr7t/O8MMLolyQwqbsdgRryB5nyEnHSA/qOBqmm nB6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=DuJkDhPEOnaROoc/1JyNu5wUbGL/01Lw8KOKVY4KSao=; b=vApeh+5fKKK9autwg+CwVoR5Syhm89+yGFYSccqQgo7wOAeSLNpFyJJ8q7wkTRRINY v7PLg/pFRQkfEMpHsk/6jlsWhGdqSlut19T+fWvwPI+8Hrm6GSDO18WvN/kWQNSmowBm MTTzgEYc13HgHcpkG0E5gbHUeyCVlv/N0Ka4YWXkPtxPW8e0ngWTpXpTgbm8KtsbMDwg FYIEYcfWmby/Evp8kUhdJUH/dRwEkQo/NdSvG8t4uvVFPZsQzPQEP7xOLJcj83RMohDy bZHsrvF4tFnsp1Zfg8Rax4D7j5+t2HKJFmzwxMEwzzG3oNcIKfvxL4xjulUAkpHcYwBR 9gPg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=IUlSt1Ff; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:470:142::17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:470:142::17]) by mx.google.com with ESMTPS id u2si1393519qve.98.2020.05.08.08.30.24 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Fri, 08 May 2020 08:30:24 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:470:142::17 as permitted sender) client-ip=2001:470:142::17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=IUlSt1Ff; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:470:142::17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:41484 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jX4xD-0007c1-VI for patch@linaro.org; Fri, 08 May 2020 11:30:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33914) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jX4lM-00062s-1U for qemu-devel@nongnu.org; Fri, 08 May 2020 11:18:08 -0400 Received: from mail-pj1-x1043.google.com ([2607:f8b0:4864:20::1043]:37075) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jX4lI-00030z-5M for qemu-devel@nongnu.org; Fri, 08 May 2020 11:18:07 -0400 Received: by mail-pj1-x1043.google.com with SMTP id a7so4381236pju.2 for ; Fri, 08 May 2020 08:18: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=DuJkDhPEOnaROoc/1JyNu5wUbGL/01Lw8KOKVY4KSao=; b=IUlSt1FfdZcSAndamJS81XM69YeXeb/BPXTdslQOIuDedGyEk0OI9TtE+OWSb8rWzK ZzH9u5ERnNahi+ArltdSubfwaOCgNDBBixEDXfclldVGhgb4YCDpL+Vk6kO6Y3KrVxOD JSsi30xa4VMgO8CE2lRwH3hSIP0uBmYKWoPLVm7CEZ93ZJFxVdMuGw6287xoucHfnjrv pHL9hPIMSb45AsjMHLFefxcWFRi7pa/iH6u79MPTsAHUtdSrl9OPtRLDgmWf6XVoDPoW 2eGtuxh/ktanz2yfaeAZwc/9ZcVw0O5S4U3IeJAHTrtQ+GHbBtr1MQkXMAwFK8TcdD7I xkBg== 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=DuJkDhPEOnaROoc/1JyNu5wUbGL/01Lw8KOKVY4KSao=; b=rZEVGEFie+oiM3FZCztHXFKPdBU6WKQFrwD4B+figaxEmaeFl8CiV9Po0cFhLbwOfC sxCUyztGETphUJKrx3JKznZ4nR2XBUDwgFwR5ifo5JGY0/SmYhIT+EWvtt5i6ZLcY6Or 4O7XaSrfe2oWy75VyNR2ORyu3OEN9I+NOstMKOleJ+qQemTHNP57zOOtKBOZagr6rQtZ ZEulayz18QZLJpJ0I+MKuZkfWdmCrIbwhy+oZnAy9BQn9dcuLugzGUQ9+NFulENJS/pw 7qrxWwxSmcrzKRnBgJ9e3IlD4l5y9Ol9E9NZDgde90qjrekZ9fUBArHJ9AhoaHAw/Dwj Z1Bw== X-Gm-Message-State: AGi0PuZR8GXTlUxGPxTQEqw+XJzuVJsL5W6+LiwR3me/UQJCyKYHBBm+ 2UNziBwjItl+x09mh6aCoPHSiOUZZUM= X-Received: by 2002:a17:90b:93:: with SMTP id bb19mr6074946pjb.134.1588951082448; Fri, 08 May 2020 08:18:02 -0700 (PDT) Received: from localhost.localdomain (174-21-149-226.tukw.qwest.net. [174.21.149.226]) by smtp.gmail.com with ESMTPSA id b5sm2125933pfb.190.2020.05.08.08.18.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2020 08:18:01 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 11/19] tcg/optimize: Adjust TempOptInfo allocation Date: Fri, 8 May 2020 08:17:39 -0700 Message-Id: <20200508151747.6166-12-richard.henderson@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200508151747.6166-1-richard.henderson@linaro.org> References: <20200508151747.6166-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::1043; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1043.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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" 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. Signed-off-by: Richard Henderson --- tcg/optimize.c | 60 ++++++++++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 26 deletions(-) -- 2.20.1 diff --git a/tcg/optimize.c b/tcg/optimize.c index b86bf3d707..d36d7e1d7f 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -89,35 +89,41 @@ static void reset_temp(TCGArg arg) } /* 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 = temp_idx(ts); - if (!test_bit(idx, temps_used->l)) { - TempOptInfo *ti = &infos[idx]; + TempOptInfo *ti; + if (test_bit(idx, temps_used->l)) { + return; + } + set_bit(idx, temps_used->l); + + ti = ts->state_ptr; + if (ti == NULL) { + ti = tcg_malloc(sizeof(TempOptInfo)); ts->state_ptr = ti; - ti->next_copy = ts; - ti->prev_copy = ts; - if (ts->kind == TEMP_CONST) { - ti->is_const = true; - ti->val = ti->mask = ts->val; - if (TCG_TARGET_REG_BITS > 32 && ts->type == TCG_TYPE_I32) { - /* High bits of a 32-bit quantity are garbage. */ - ti->mask |= ~0xffffffffull; - } - } else { - ti->is_const = false; - ti->mask = -1; + } + + ti->next_copy = ts; + ti->prev_copy = ts; + if (ts->kind == TEMP_CONST) { + ti->is_const = true; + ti->val = ts->val; + ti->mask = ts->val; + if (TCG_TARGET_REG_BITS > 32 && ts->type == TCG_TYPE_I32) { + /* High bits of a 32-bit quantity are garbage. */ + ti->mask |= ~0xffffffffull; } - set_bit(idx, temps_used->l); + } else { + ti->is_const = false; + ti->mask = -1; } } -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)); } static TCGTemp *find_better_copy(TCGContext *s, TCGTemp *ts) @@ -603,9 +609,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 = NULL; - TempOptInfo *infos; TCGTempSet temps_used; /* Array VALS has an element for each temp. @@ -615,12 +620,15 @@ void tcg_optimize(TCGContext *s) nb_temps = s->nb_temps; nb_globals = s->nb_globals; + bitmap_zero(temps_used.l, nb_temps); - infos = tcg_malloc(sizeof(TempOptInfo) * nb_temps); + for (i = 0; i < nb_temps; ++i) { + s->temps[i].state_ptr = NULL; + } QTAILQ_FOREACH_SAFE(op, &s->ops, link, op_next) { tcg_target_ulong mask, partmask, affected; - int nb_oargs, nb_iargs, i; + int nb_oargs, nb_iargs; TCGArg tmp; TCGOpcode opc = op->opc; const TCGOpDef *def = &tcg_op_defs[opc]; @@ -633,14 +641,14 @@ void tcg_optimize(TCGContext *s) for (i = 0; i < nb_oargs + nb_iargs; i++) { TCGTemp *ts = arg_temp(op->args[i]); if (ts) { - init_ts_info(infos, &temps_used, ts); + init_ts_info(&temps_used, ts); } } } else { nb_oargs = def->nb_oargs; nb_iargs = def->nb_iargs; for (i = 0; i < nb_oargs + nb_iargs; i++) { - init_arg_info(infos, &temps_used, op->args[i]); + init_arg_info(&temps_used, op->args[i]); } }