Commit b3a1be87 authored by Aurelien Jarno's avatar Aurelien Jarno
Browse files

tcg: don't remove op if output needs to be synced to memory



Commit 9c43b68d do not correctly check
for dead outputs when they need to be synced to memory in case of
half-dead operations.

Fix that by applying the same pattern than for the default case.

Tested-by: default avatarStefan Weil <sw@weilnetz.de>
Signed-off-by: default avatarAurelien Jarno <aurelien@aurel32.net>
parent e1e1b25c
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -1329,8 +1329,8 @@ static void tcg_liveness_analysis(TCGContext *s)
               the low part.  The result can be optimized to a simple
               add or sub.  This happens often for x86_64 guest when the
               cpu mode is set to 32 bit.  */
            if (dead_temps[args[1]]) {
                if (dead_temps[args[0]]) {
            if (dead_temps[args[1]] && !mem_temps[1]) {
                if (dead_temps[args[0]] && !mem_temps[0]) {
                    goto do_remove;
                }
                /* Create the single operation plus nop.  */
@@ -1355,8 +1355,8 @@ static void tcg_liveness_analysis(TCGContext *s)
            nb_iargs = 2;
            nb_oargs = 2;
            /* Likewise, test for the high part of the operation dead.  */
            if (dead_temps[args[1]]) {
                if (dead_temps[args[0]]) {
            if (dead_temps[args[1]] && !mem_temps[1]) {
                if (dead_temps[args[0]] && !mem_temps[0]) {
                    goto do_remove;
                }
                gen_opc_buf[op_index] = op = INDEX_op_mul_i32;