tcg/optimize: Split out init_arguments
There was no real reason for calls to have separate code here. Unify init for calls vs non-calls using the call path, which handles TCG_CALL_DUMMY_ARG. Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Luis Pires <luis.pires@eldorado.org.br> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
d0ed5151b1
commit
e2577ea24f
|
@ -128,11 +128,6 @@ static void init_ts_info(OptContext *ctx, TCGTemp *ts)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void init_arg_info(OptContext *ctx, TCGArg arg)
|
|
||||||
{
|
|
||||||
init_ts_info(ctx, arg_temp(arg));
|
|
||||||
}
|
|
||||||
|
|
||||||
static TCGTemp *find_better_copy(TCGContext *s, TCGTemp *ts)
|
static TCGTemp *find_better_copy(TCGContext *s, TCGTemp *ts)
|
||||||
{
|
{
|
||||||
TCGTemp *i, *g, *l;
|
TCGTemp *i, *g, *l;
|
||||||
|
@ -606,6 +601,16 @@ static bool swap_commutative2(TCGArg *p1, TCGArg *p2)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void init_arguments(OptContext *ctx, TCGOp *op, int nb_args)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < nb_args; i++) {
|
||||||
|
TCGTemp *ts = arg_temp(op->args[i]);
|
||||||
|
if (ts) {
|
||||||
|
init_ts_info(ctx, ts);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Propagate constants and copies, fold constant expressions. */
|
/* Propagate constants and copies, fold constant expressions. */
|
||||||
void tcg_optimize(TCGContext *s)
|
void tcg_optimize(TCGContext *s)
|
||||||
{
|
{
|
||||||
|
@ -636,19 +641,11 @@ void tcg_optimize(TCGContext *s)
|
||||||
if (opc == INDEX_op_call) {
|
if (opc == INDEX_op_call) {
|
||||||
nb_oargs = TCGOP_CALLO(op);
|
nb_oargs = TCGOP_CALLO(op);
|
||||||
nb_iargs = TCGOP_CALLI(op);
|
nb_iargs = TCGOP_CALLI(op);
|
||||||
for (i = 0; i < nb_oargs + nb_iargs; i++) {
|
|
||||||
TCGTemp *ts = arg_temp(op->args[i]);
|
|
||||||
if (ts) {
|
|
||||||
init_ts_info(&ctx, ts);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
nb_oargs = def->nb_oargs;
|
nb_oargs = def->nb_oargs;
|
||||||
nb_iargs = def->nb_iargs;
|
nb_iargs = def->nb_iargs;
|
||||||
for (i = 0; i < nb_oargs + nb_iargs; i++) {
|
|
||||||
init_arg_info(&ctx, op->args[i]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
init_arguments(&ctx, op, nb_oargs + nb_iargs);
|
||||||
|
|
||||||
/* Do copy propagation */
|
/* Do copy propagation */
|
||||||
for (i = nb_oargs; i < nb_oargs + nb_iargs; i++) {
|
for (i = nb_oargs; i < nb_oargs + nb_iargs; i++) {
|
||||||
|
|
Loading…
Reference in a new issue