On Tue, Jun 19, 2007 at 11:11:54AM +0200, Uros Bizjak wrote: > On 6/19/07, Rask Ingemann Lambertsen <[EMAIL PROTECTED]> wrote: > > > > It is possible to mess up the substitution that the vregs pass performs. > >IIRC, it happened to me once because I accidentally put one of these > >virtual > >pseudo inside a (clobber) or (use) or something like that. I don't quite > >recall the details, but maybe the substitution fails if they appear outside > >an operand? > > There is one annoying case in PR32374, where on-the-stack constructor > creates invalid memory clobber that includes virtual-stack-regs. These > are simply ignored by vregs pass and this confuses dataflow register > initialization.
Yes, that sure rings a bell with me. A "bare" (clobber) with a virtual-what-have-we reg inside it does the trick nicely. If it hadn't been hidden inside a MEM, you would have seen the rnreg pass choke on it, IIRC. My DKK 0.02 worth: I don't see the point in clobbering a memory location just before storing into it. We do so with pseudos wider than BITS_PER_WORD just before storing into all BITS_PER_WORD sized subregs of it, but that's because life analysis doesn't (didn't?) handle subregs in a useful way. We shouldn't do the same for MEMs. -- Rask Ingemann Lambertsen