On 08/18/2015 04:23 PM, Peter Maydell wrote: > Hi. I'm afraid this fails 'make check' on 32-bit ARM for me:
Found it. The problem is in the temps tracking patch, where we weren't ignoring TCG_CALL_DUMMY_ARG (-1). This isn't used on x86 of course, which is why we didn't see this failure there. The following fixes the problem. I chose to split the initialization so that non-call opcodes don't need to check for <dummy>. Can I get an RB for squashing this into the original patch? r~ diff --git a/tcg/optimize.c b/tcg/optimize.c index 2693168..10795ec 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -597,17 +597,24 @@ void tcg_optimize(TCGContext *s) const TCGOpDef *def = &tcg_op_defs[opc]; oi_next = op->next; + + /* Count the arguments, and initialize the temps that are + going to be used */ if (opc == INDEX_op_call) { nb_oargs = op->callo; nb_iargs = op->calli; + for (i = 0; i < nb_oargs + nb_iargs; i++) { + tmp = args[i]; + if (tmp != TCG_CALL_DUMMY_ARG) { + init_temp_info(tmp); + } + } } else { nb_oargs = def->nb_oargs; nb_iargs = def->nb_iargs; - } - - /* Initialize the temps that are going to be used */ - for (i = 0; i < nb_oargs + nb_iargs; i++) { - init_temp_info(args[i]); + for (i = 0; i < nb_oargs + nb_iargs; i++) { + init_temp_info(args[i]); + } } /* Do copy propagation */