Loading tcg/tcg.c +56 −22 Original line number Diff line number Diff line Loading @@ -2982,6 +2982,39 @@ static bool liveness_pass_2(TCGContext *s) } /* Outputs become available. */ if (opc == INDEX_op_mov_i32 || opc == INDEX_op_mov_i64) { arg_ts = arg_temp(op->args[0]); dir_ts = arg_ts->state_ptr; if (dir_ts) { op->args[0] = temp_arg(dir_ts); changes = true; /* The output is now live and modified. */ arg_ts->state = 0; if (NEED_SYNC_ARG(0)) { TCGOpcode sopc = (arg_ts->type == TCG_TYPE_I32 ? INDEX_op_st_i32 : INDEX_op_st_i64); TCGOp *sop = tcg_op_insert_after(s, op, sopc); TCGTemp *out_ts = dir_ts; if (IS_DEAD_ARG(0)) { out_ts = arg_temp(op->args[1]); arg_ts->state = TS_DEAD; tcg_op_remove(s, op); } else { arg_ts->state = TS_MEM; } sop->args[0] = temp_arg(out_ts); sop->args[1] = temp_arg(arg_ts->mem_base); sop->args[2] = arg_ts->mem_offset; } else { tcg_debug_assert(!IS_DEAD_ARG(0)); } } } else { for (i = 0; i < nb_oargs; i++) { arg_ts = arg_temp(op->args[i]); dir_ts = arg_ts->state_ptr; Loading Loading @@ -3013,6 +3046,7 @@ static bool liveness_pass_2(TCGContext *s) } } } } return changes; } Loading Loading
tcg/tcg.c +56 −22 Original line number Diff line number Diff line Loading @@ -2982,6 +2982,39 @@ static bool liveness_pass_2(TCGContext *s) } /* Outputs become available. */ if (opc == INDEX_op_mov_i32 || opc == INDEX_op_mov_i64) { arg_ts = arg_temp(op->args[0]); dir_ts = arg_ts->state_ptr; if (dir_ts) { op->args[0] = temp_arg(dir_ts); changes = true; /* The output is now live and modified. */ arg_ts->state = 0; if (NEED_SYNC_ARG(0)) { TCGOpcode sopc = (arg_ts->type == TCG_TYPE_I32 ? INDEX_op_st_i32 : INDEX_op_st_i64); TCGOp *sop = tcg_op_insert_after(s, op, sopc); TCGTemp *out_ts = dir_ts; if (IS_DEAD_ARG(0)) { out_ts = arg_temp(op->args[1]); arg_ts->state = TS_DEAD; tcg_op_remove(s, op); } else { arg_ts->state = TS_MEM; } sop->args[0] = temp_arg(out_ts); sop->args[1] = temp_arg(arg_ts->mem_base); sop->args[2] = arg_ts->mem_offset; } else { tcg_debug_assert(!IS_DEAD_ARG(0)); } } } else { for (i = 0; i < nb_oargs; i++) { arg_ts = arg_temp(op->args[i]); dir_ts = arg_ts->state_ptr; Loading Loading @@ -3013,6 +3046,7 @@ static bool liveness_pass_2(TCGContext *s) } } } } return changes; } Loading