This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Reload problem: asm operand requires impossible reload
- From: "Bingfeng Mei" <bmei at broadcom dot com>
- To: "gcc at gcc dot gnu dot org" <gcc at gcc dot gnu dot org>
- Cc: "bernd dot schmidt at analog dot com" <bernd dot schmidt at analog dot com>, "weigand at de dot ibm dot com" <weigand at de dot ibm dot com>
- Date: Fri, 1 May 2009 02:05:39 -0700
- Subject: Reload problem: asm operand requires impossible reload
Hello,
I experienced "asm operand requires impossible reload" error in our private porting.
After digging into the reloading pass, I found something a bit fishy.
The error message is produced in reload_as_needed function (reload1.c)
...
/* If this was an ASM, make sure that all the reload insns
we have generated are valid. If not, give an error
and delete them. */
if (asm_noperands (PATTERN (insn)) >= 0)
for (p = NEXT_INSN (prev); p != next; p = NEXT_INSN (p))
if (p != insn && INSN_P (p)
&& GET_CODE (PATTERN (p)) != USE
&& (recog_memoized (p) < 0
|| (extract_insn (p), ! constrain_operands (1))))
{
error_for_asm (insn,
"%<asm%> operand requires "
"impossible reload");
delete_insn (p);
}
...
Here the code checks whether all generated reload insns are valid. The "strict"
argument of the constraint_oeprands is set to 1, thus any pseudo register operand
will fail the check if I understood correctly. However, at this stage, all the
generated reload instructions, including normal and asm insns, seems to have
pseudo register operands. Only later they are replaced by memory operand. If I
disable this piece of code, the code is compiled without problem.
Did I misunderstand something here, or is it an possible bug? The code base is
GCC 4.4 branch.
Thanks in advance for help.
Cheers,
Bingfeng Mei
Broadcom UK