This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
illegal insn created in ira
- From: roy rosen <roy dot 1rosen at gmail dot com>
- To: gcc at gcc dot gnu dot org
- Date: Sun, 8 May 2011 11:38:36 +0300
- Subject: illegal insn created in ira
Hi,
In my port I have an error: Before ira I have the following insn:
(insn 3859 4277 4366 57 (set (reg:BI 2038)
(subreg:BI (reg/v:SI 181 [ realsz ]) 3)) 76 {movbi}
(expr_list:REG_EQUAL (const_int 1 [0x1])
(nil)))
During ira this insn is transformed (I guess because reg 181 is spilled) into:
(insn 5109 5108 4366 57 (set (reg:BI 82 p1 [2038])
(mem/c:BI (plus:SI (reg/f:SI 79 r31)
(const_int -353 [0xfffffffffffffe9f])) [26 %sfp+-353
S1 A8])) 77 {movbi_load}
(nil))
The problem is that this is an illegal insn since the I don't have an
insn which loads from memory to P registers so I get error:
unrecognizable insn.
I have only insns which load from memory to R register class and insn
that moves from R to P and I expected that to happen.
I also tried to add to secondary reload things like:
if (rclass == P_REGS && MEM_P(x))
return R_REGS;
or
if ((rclass == P_REGS) && (((GET_CODE(x) == SUBREG) && MEM_P(XEXP (x, 0)))))
{
return R_REGS;
}
but it does not seem to help.
Does anyone have any idea what can I do?
Thanks, Roy.