peterdelevoryas / rpms / qemu

Forked from rpms/qemu 2 years ago
Clone

Blame 0071-tcg-optimize-do-copy-propagation-for-all-operations.patch

5544c1
From 7c1a67bb734f364ea0643b549e030f04d4eed798 Mon Sep 17 00:00:00 2001
5544c1
From: Aurelien Jarno <aurelien@aurel32.net>
5544c1
Date: Tue, 11 Sep 2012 16:18:49 +0200
5544c1
Subject: [PATCH] tcg/optimize: do copy propagation for all operations
5544c1
5544c1
It is possible to due copy propagation for all operations, even the one
5544c1
that have side effects or clobber arguments (it only concerns input
5544c1
arguments). That said, the call operation should be handled differently
5544c1
due to the variable number of arguments.
5544c1
5544c1
Reviewed-by: Richard Henderson <rth@twiddle.net>
5544c1
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
5544c1
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
5544c1
---
5544c1
 tcg/optimize.c | 11 +++++++++--
5544c1
 1 file changed, 9 insertions(+), 2 deletions(-)
5544c1
5544c1
diff --git a/tcg/optimize.c b/tcg/optimize.c
5544c1
index 1904b39..aeb2225 100644
5544c1
--- a/tcg/optimize.c
5544c1
+++ b/tcg/optimize.c
5544c1
@@ -378,8 +378,15 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr,
5544c1
         op = gen_opc_buf[op_index];
5544c1
         def = &tcg_op_defs[op];
5544c1
         /* Do copy propagation */
5544c1
-        if (!(def->flags & (TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS))) {
5544c1
-            assert(op != INDEX_op_call);
5544c1
+        if (op == INDEX_op_call) {
5544c1
+            int nb_oargs = args[0] >> 16;
5544c1
+            int nb_iargs = args[0] & 0xffff;
5544c1
+            for (i = nb_oargs + 1; i < nb_oargs + nb_iargs + 1; i++) {
5544c1
+                if (temps[args[i]].state == TCG_TEMP_COPY) {
5544c1
+                    args[i] = find_better_copy(s, args[i]);
5544c1
+                }
5544c1
+            }
5544c1
+        } else {
5544c1
             for (i = def->nb_oargs; i < def->nb_oargs + def->nb_iargs; i++) {
5544c1
                 if (temps[args[i]].state == TCG_TEMP_COPY) {
5544c1
                     args[i] = find_better_copy(s, args[i]);
5544c1
-- 
5544c1
1.7.12.1
5544c1