mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
tcg: Add TCGType to tcg_op_insert_{after,before}
We cannot rely on the value copied from TCGOP_TYPE(op), because
the relevant op could be typeless, such as INDEX_op_call.
Fixes: fb744ece3a
("tcg: Copy TCGOP_TYPE in tcg_op_insert_{after,before}")
Suggested-by: Nicholas Piggin <npiggin@gmail.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
a3c1c579ba
commit
cf5c9f697f
3 changed files with 14 additions and 11 deletions
|
@ -347,13 +347,13 @@ static TCGArg arg_new_temp(OptContext *ctx)
|
|||
static TCGOp *opt_insert_after(OptContext *ctx, TCGOp *op,
|
||||
TCGOpcode opc, unsigned narg)
|
||||
{
|
||||
return tcg_op_insert_after(ctx->tcg, op, opc, narg);
|
||||
return tcg_op_insert_after(ctx->tcg, op, opc, ctx->type, narg);
|
||||
}
|
||||
|
||||
static TCGOp *opt_insert_before(OptContext *ctx, TCGOp *op,
|
||||
TCGOpcode opc, unsigned narg)
|
||||
{
|
||||
return tcg_op_insert_before(ctx->tcg, op, opc, narg);
|
||||
return tcg_op_insert_before(ctx->tcg, op, opc, ctx->type, narg);
|
||||
}
|
||||
|
||||
static bool tcg_opt_gen_mov(OptContext *ctx, TCGOp *op, TCGArg dst, TCGArg src)
|
||||
|
|
|
@ -107,8 +107,8 @@ void vec_gen_6(TCGOpcode opc, TCGType type, unsigned vece, TCGArg r,
|
|||
TCGArg a, TCGArg b, TCGArg c, TCGArg d, TCGArg e);
|
||||
|
||||
TCGOp *tcg_op_insert_before(TCGContext *s, TCGOp *op,
|
||||
TCGOpcode opc, unsigned nargs);
|
||||
TCGOpcode, TCGType, unsigned nargs);
|
||||
TCGOp *tcg_op_insert_after(TCGContext *s, TCGOp *op,
|
||||
TCGOpcode opc, unsigned nargs);
|
||||
TCGOpcode, TCGType, unsigned nargs);
|
||||
|
||||
#endif /* TCG_INTERNAL_H */
|
||||
|
|
17
tcg/tcg.c
17
tcg/tcg.c
|
@ -3449,21 +3449,21 @@ TCGOp *tcg_emit_op(TCGOpcode opc, unsigned nargs)
|
|||
}
|
||||
|
||||
TCGOp *tcg_op_insert_before(TCGContext *s, TCGOp *old_op,
|
||||
TCGOpcode opc, unsigned nargs)
|
||||
TCGOpcode opc, TCGType type, unsigned nargs)
|
||||
{
|
||||
TCGOp *new_op = tcg_op_alloc(opc, nargs);
|
||||
|
||||
TCGOP_TYPE(new_op) = TCGOP_TYPE(old_op);
|
||||
TCGOP_TYPE(new_op) = type;
|
||||
QTAILQ_INSERT_BEFORE(old_op, new_op, link);
|
||||
return new_op;
|
||||
}
|
||||
|
||||
TCGOp *tcg_op_insert_after(TCGContext *s, TCGOp *old_op,
|
||||
TCGOpcode opc, unsigned nargs)
|
||||
TCGOpcode opc, TCGType type, unsigned nargs)
|
||||
{
|
||||
TCGOp *new_op = tcg_op_alloc(opc, nargs);
|
||||
|
||||
TCGOP_TYPE(new_op) = TCGOP_TYPE(old_op);
|
||||
TCGOP_TYPE(new_op) = type;
|
||||
QTAILQ_INSERT_AFTER(&s->ops, old_op, new_op, link);
|
||||
return new_op;
|
||||
}
|
||||
|
@ -4214,7 +4214,8 @@ liveness_pass_2(TCGContext *s)
|
|||
TCGOpcode lopc = (arg_ts->type == TCG_TYPE_I32
|
||||
? INDEX_op_ld_i32
|
||||
: INDEX_op_ld_i64);
|
||||
TCGOp *lop = tcg_op_insert_before(s, op, lopc, 3);
|
||||
TCGOp *lop = tcg_op_insert_before(s, op, lopc,
|
||||
arg_ts->type, 3);
|
||||
|
||||
lop->args[0] = temp_arg(dir_ts);
|
||||
lop->args[1] = temp_arg(arg_ts->mem_base);
|
||||
|
@ -4277,7 +4278,8 @@ liveness_pass_2(TCGContext *s)
|
|||
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, 3);
|
||||
TCGOp *sop = tcg_op_insert_after(s, op, sopc,
|
||||
arg_ts->type, 3);
|
||||
TCGTemp *out_ts = dir_ts;
|
||||
|
||||
if (IS_DEAD_ARG(0)) {
|
||||
|
@ -4313,7 +4315,8 @@ liveness_pass_2(TCGContext *s)
|
|||
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, 3);
|
||||
TCGOp *sop = tcg_op_insert_after(s, op, sopc,
|
||||
arg_ts->type, 3);
|
||||
|
||||
sop->args[0] = temp_arg(dir_ts);
|
||||
sop->args[1] = temp_arg(arg_ts->mem_base);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue