On Thu, Feb 20, 2014 at 02:41:06PM -0600, Richard Henderson wrote: > On 02/20/2014 12:39 PM, Jakub Jelinek wrote: > > + if (!d->testing_p) > > + { > > + dremap.target = gen_reg_rtx (dremap.vmode); > > + dfinal.op0 = gen_lowpart (dfinal.vmode, dremap.target); > > + } > ... > > + if (d->testing_p) > > + d_copy.target = gen_lowpart (V4DFmode, d->target); > > + else > > + d_copy.target = gen_reg_rtx (V4DFmode); > > I'm not keen on these changes, because they could potentially affect how the > insn matching happens. I'm not 100% sure it actually matters, but I think > there's a simple way around it: use the same gen_raw_REG kind of thing that we > do to begin.
Note, the patch has been committed already. Anyway, I don't see why this would matter, when d->testing_p, d->target is some pseudo register, d->op0 another one and d->op1 either the same as d->op0 or yet another register. For testing we are just matching a single d_copy (or other permutation) at a time, so all we care about is that target/op0/op1 have the right modes and that target is a different register from op0 and op0 either the same as op1 or yet another register. > What about this? Note that I've also slightly adjusted a few of the breaks, > to > take into account that both arms of the if will always succeed. The problem I see with this is that we'll need to maintain test_regno everywhere. E.g. there are places which even fir !d->testing_p create temporary structures and set testing_p in it, that would now require that we also set test_regno there to something (what?). Jakub