summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tcg/tcg.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/tcg/tcg.c b/tcg/tcg.c
index 427b66bd6b..4a6eb26d0a 100644
--- a/tcg/tcg.c
+++ b/tcg/tcg.c
@@ -2007,6 +2007,16 @@ static void tcg_reg_alloc_op(TCGContext *s,
if (!IS_DEAD_ARG(i)) {
goto allocate_in_reg;
}
+ /* check if the current register has already been allocated
+ for another input aliased to an output */
+ int k2, i2;
+ for (k2 = 0 ; k2 < k ; k2++) {
+ i2 = def->sorted_args[nb_oargs + k2];
+ if ((def->args_ct[i2].ct & TCG_CT_IALIAS) &&
+ (new_args[i2] == ts->reg)) {
+ goto allocate_in_reg;
+ }
+ }
}
}
reg = ts->reg;