From: Richard Henderson <rth@twiddle.net>
To: qemu-devel@nongnu.org
Cc: peter.maydell@linaro.org, aurelien@aurel32.net
Subject: [Qemu-devel] [PULL 4/9] tcg: fix dead computation for repeated input arguments
Date: Tue, 9 Jun 2015 07:13:00 -0700 [thread overview]
Message-ID: <1433859185-24874-5-git-send-email-rth@twiddle.net> (raw)
In-Reply-To: <1433859185-24874-1-git-send-email-rth@twiddle.net>
From: Aurelien Jarno <aurelien@aurel32.net>
When the same temp is used twice or more as an input argument to a TCG
instruction, the dead computation code doesn't recognize the second use
as a dead temp. This is because the temp is marked as live in the same
loop where dead inputs are checked.
The fix is to split the loop in two parts. This avoid emitting a move
and using a register for the movcond instruction when used as "move if
true" on x86-64. This might bring more improvements on RISC TCG targets
which don't have outputs aliased to inputs.
Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <1433447228-29425-3-git-send-email-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
tcg/tcg.c | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/tcg/tcg.c b/tcg/tcg.c
index 4a6eb26..7e088b1 100644
--- a/tcg/tcg.c
+++ b/tcg/tcg.c
@@ -1387,16 +1387,20 @@ static void tcg_liveness_analysis(TCGContext *s)
memset(dead_temps, 1, s->nb_globals);
}
- /* input args are live */
+ /* record arguments that die in this helper */
for (i = nb_oargs; i < nb_iargs + nb_oargs; i++) {
arg = args[i];
if (arg != TCG_CALL_DUMMY_ARG) {
if (dead_temps[arg]) {
dead_args |= (1 << i);
}
- dead_temps[arg] = 0;
}
}
+ /* input arguments are live for preceeding opcodes */
+ for (i = nb_oargs; i < nb_oargs + nb_iargs; i++) {
+ arg = args[i];
+ dead_temps[arg] = 0;
+ }
s->op_dead_args[oi] = dead_args;
s->op_sync_args[oi] = sync_args;
}
@@ -1531,12 +1535,16 @@ static void tcg_liveness_analysis(TCGContext *s)
memset(mem_temps, 1, s->nb_globals);
}
- /* input args are live */
+ /* record arguments that die in this opcode */
for (i = nb_oargs; i < nb_oargs + nb_iargs; i++) {
arg = args[i];
if (dead_temps[arg]) {
dead_args |= (1 << i);
}
+ }
+ /* input arguments are live for preceeding opcodes */
+ for (i = nb_oargs; i < nb_oargs + nb_iargs; i++) {
+ arg = args[i];
dead_temps[arg] = 0;
}
s->op_dead_args[oi] = dead_args;
--
2.4.2
next prev parent reply other threads:[~2015-06-09 14:13 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-09 14:12 [Qemu-devel] [PULL 0/9] tcg patch queue Richard Henderson
2015-06-09 14:12 ` [Qemu-devel] [PULL 1/9] tcg: Mask TCGMemOp appropriately for indexing Richard Henderson
2015-06-09 14:12 ` [Qemu-devel] [PULL 2/9] tcg: Handle MO_AMASK in tcg_dump_ops Richard Henderson
2015-06-09 14:12 ` [Qemu-devel] [PULL 3/9] tcg: fix register allocation with two aliased dead inputs Richard Henderson
2015-06-09 14:13 ` Richard Henderson [this message]
2015-06-09 14:13 ` [Qemu-devel] [PULL 5/9] tcg/optimize: remove opc argument from tcg_opt_gen_movi Richard Henderson
2015-06-09 14:13 ` [Qemu-devel] [PULL 6/9] tcg/optimize: remove opc argument from tcg_opt_gen_mov Richard Henderson
2015-06-09 14:13 ` [Qemu-devel] [PULL 7/9] tcg/optimize: fold temp copies test in tcg_opt_gen_mov Richard Henderson
2015-06-09 14:13 ` [Qemu-devel] [PULL 8/9] tcg/optimize: fold constant " Richard Henderson
2015-06-09 14:13 ` [Qemu-devel] [PULL 9/9] tcg/optimize: rename tcg_constant_folding Richard Henderson
2015-06-09 15:45 ` [Qemu-devel] [PULL 0/9] tcg patch queue Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1433859185-24874-5-git-send-email-rth@twiddle.net \
--to=rth@twiddle.net \
--cc=aurelien@aurel32.net \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).