------- Comment #1 from wilson at gcc dot gnu dot org 2010-04-04 01:34 ------- This is failing due to invalid rtl unsharing. The asm has two dests. We end up with a parallel with two sets, and the ASM_OPERAND_INPUT_VEC in each SET_SRC is supposed to be the same rtl pointer. This is checked by asm_noperands. This is necessary for reg-alloc to handle the asm correctly.
The invalid unsharing happens in the file sel-sched-ir.c in the function create_copy_of_insn_rtx. It has code res = create_insn_rtx_from_pattern (copy_rtx (PATTERN (insn_rtx)), NULL_RTX); This won't work. You can't use copy_rtx to copy an insn. You must use copy_insn. See the code and comments in emit-rtl.c. This problem can be fixed by changing the copy_rtx to copy_insn, but I'm concerned that there may be other places in sel-sched*.c that also need fixing. I don't know the code well enough to be able to easily tell which copy_rtx calls are broken. The testcase works on mainline, but the bug appears to still be there. This testcase just doesn't trigger it. -- wilson at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |wilson at gcc dot gnu dot | |org Status|UNCONFIRMED |NEW Ever Confirmed|0 |1 Last reconfirmed|0000-00-00 00:00:00 |2010-04-04 01:34:03 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43603