Message ID | 55D4A57F.6070209@twiddle.net |
---|---|
State | New |
Headers | show |
On 2015-08-19 08:49, Richard Henderson wrote: > 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? Sorry for answering so late while it's already merged. This is indeed correct. Thanks for fixing that. > 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 */ > >
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 */
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~