From: Aurelien Jarno <aurelien@aurel32.net>
To: qemu-devel@nongnu.org
Cc: Aurelien Jarno <aurelien@aurel32.net>
Subject: [Qemu-devel] [PATCH 4/9] tcg/optimize: do copy propagation for all operations
Date: Wed, 19 Sep 2012 22:00:18 +0200 [thread overview]
Message-ID: <1348084823-18277-5-git-send-email-aurelien@aurel32.net> (raw)
In-Reply-To: <1348084823-18277-1-git-send-email-aurelien@aurel32.net>
It is possible to do copy propagation for all operations, even the ones
that have side effects or clobber arguments (it only concerns input
arguments). That said, the call operation should be handled differently
due to the variable number of arguments.
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
---
tcg/optimize.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/tcg/optimize.c b/tcg/optimize.c
index 244eb02..a58de3b 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -376,8 +376,15 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr,
op = gen_opc_buf[op_index];
def = &tcg_op_defs[op];
/* Do copy propagation */
- if (!(def->flags & (TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS))) {
- assert(op != INDEX_op_call);
+ if (op == INDEX_op_call) {
+ int nb_oargs = args[0] >> 16;
+ int nb_iargs = args[0] & 0xffff;
+ for (i = nb_oargs + 1; i < nb_oargs + nb_iargs + 1; i++) {
+ if (temps[args[i]].state == TCG_TEMP_COPY) {
+ args[i] = find_better_copy(s, args[i]);
+ }
+ }
+ } else {
for (i = def->nb_oargs; i < def->nb_oargs + def->nb_iargs; i++) {
if (temps[args[i]].state == TCG_TEMP_COPY) {
args[i] = find_better_copy(s, args[i]);
--
1.7.10.4
next prev parent reply other threads:[~2012-09-19 20:00 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-19 20:00 [Qemu-devel] [PATCH 0/9] tcg/optimize: rework copy propagation Aurelien Jarno
2012-09-19 20:00 ` [Qemu-devel] [PATCH 1/9] tcg/optimizer: remove TCG_TEMP_ANY Aurelien Jarno
2012-09-19 21:25 ` Richard Henderson
2012-09-19 20:00 ` [Qemu-devel] [PATCH 2/9] tcg/optimizer: check types in copy propagation Aurelien Jarno
2012-09-19 21:33 ` Richard Henderson
2012-09-20 5:54 ` Aurelien Jarno
2012-09-20 14:00 ` Richard Henderson
2012-09-19 20:00 ` [Qemu-devel] [PATCH 3/9] tcg/optimizer: rework copy progagation Aurelien Jarno
2012-09-19 21:41 ` Richard Henderson
2012-09-19 20:00 ` Aurelien Jarno [this message]
2012-09-19 21:43 ` [Qemu-devel] [PATCH 4/9] tcg/optimize: do copy propagation for all operations Richard Henderson
2012-09-19 20:00 ` [Qemu-devel] [PATCH 5/9] tcg/optimize: optimize "op r, a, a => mov r, a" Aurelien Jarno
2012-09-19 21:43 ` Richard Henderson
2012-09-19 20:00 ` [Qemu-devel] [PATCH 6/9] tcg/optimize: optimize "op r, a, a => movi r, 0" Aurelien Jarno
2012-09-19 21:46 ` Richard Henderson
2012-09-19 20:00 ` [Qemu-devel] [PATCH 7/9] tcg/optimize: further optimize brcond/setcond Aurelien Jarno
2012-09-19 21:48 ` Richard Henderson
2012-09-19 20:00 ` [Qemu-devel] [PATCH 8/9] tcg/optimize: prefer the "op a, a, b" form for commutative ops Aurelien Jarno
2012-09-19 21:49 ` Richard Henderson
2012-09-19 20:00 ` [Qemu-devel] [PATCH 9/9] tcg: remove #ifdef #endif around TCGOpcode tests Aurelien Jarno
2012-09-19 21:50 ` Richard Henderson
2012-09-21 12:36 ` [Qemu-devel] [PATCH 0/9] tcg/optimize: rework copy propagation Laurent Desnogues
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=1348084823-18277-5-git-send-email-aurelien@aurel32.net \
--to=aurelien@aurel32.net \
--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).