https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79985
Alexander Monakov <amonakov at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2017-03-10 CC| |abel at gcc dot gnu.org, | |amonakov at gcc dot gnu.org Ever confirmed|0 |1 --- Comment #1 from Alexander Monakov <amonakov at gcc dot gnu.org> --- Thanks for the nice minimal testcase. We choose to schedule the bottom asm first (it doesn't depend on anything else), but then while moving it up we notice a use/set conflict with the upper asm in undo_transformations. Somehow register 110 (vscr) is added to set/use regsets for insns representing asms via DF: Breakpoint 2, setup_id_reg_sets (id=0x1d71e28, insn=0x7ffff18af400) at gcc/sel-sched-ir.c:2677 2677 struct df_insn_info *insn_info = DF_INSN_INFO_GET (insn); (gdb) c Continuing. Breakpoint 2, setup_id_reg_sets (id=0x1dcedf8, insn=0x7ffff18af6c0) at gcc/sel-sched-ir.c:2677 2677 struct df_insn_info *insn_info = DF_INSN_INFO_GET (insn); (gdb) Continuing. Breakpoint 2, setup_id_reg_sets (id=0x1dcf058, insn=0x7ffff18af480) at gcc/sel-sched-ir.c:2677 2677 struct df_insn_info *insn_info = DF_INSN_INFO_GET (insn); (gdb) call debug_rtx(insn) (insn 8 14 5 2 (parallel [ (set (reg:DI 155) (asm_operands:DI ("") ("=r") 0 [ (reg:DI 155) ] [ (asm_input:DI ("0") t.c:6) ] [] t.c:6)) (clobber (reg:SI 76 ca)) ]) "t.c":6 -1 (expr_list:REG_UNUSED (reg:SI 76 ca) (nil))) (gdb) n 2679 regset tmp = get_clear_regset_from_pool (); (gdb) 2681 FOR_EACH_INSN_INFO_DEF (def, insn_info) (gdb) 2683 unsigned int regno = DF_REF_REGNO (def); (gdb) 2686 if (DF_REF_FLAGS_IS_SET (def, (DF_REF_MUST_CLOBBER (gdb) p regno $15 = 110