This is the mail archive of the
mailing list for the GCC project.
Re: VREGS cannot handle subreg(mem (plus ...)) pattern
- From: Jeff Law <law at redhat dot com>
- To: Claudiu Zissulescu <Claudiu dot Zissulescu at synopsys dot com>, "gcc at gcc dot gnu dot org" <gcc at gcc dot gnu dot org>
- Cc: Francois Bedard <Francois dot Bedard at synopsys dot com>
- Date: Tue, 11 Oct 2016 09:06:38 -0600
- Subject: Re: VREGS cannot handle subreg(mem (plus ...)) pattern
- Authentication-results: sourceware.org; auth=none
- References: <098ECE41A0A6114BB2A07F1EC238DE89661B82DF@de02wembxa.internal.synopsys.com>
On 10/11/2016 08:48 AM, Claudiu Zissulescu wrote:
Out of the expand I get the following pattern:
(set (reg:SI 203)
(subreg:SI (mem/c:DI (plus:SI (reg/f:SI 147 virtual-stack-vars)
(const_int -320 [0xfffffffffffffec0])) [4 buf1.state+0 S8 A32]) 4))
which it looks too complex to be handled by the VREGS pass. I.e., in the instantiate_virtual_regs_in_insn() function, it seems we handle only subreg (reg ...).
As a consequence, the virtual-stack-vars reg is not instantiated leading to a compiler internal error later on.
Now, is the above pattern expected out of expand? Is the VREGS expected to handle this type of pattern?
IIRC you're not supposed to have (subreg (mem)) expressions at this point.
Any (subreg (mem)) at this point can be trivially turned into a simple