Hello all, For a target that i porting in gcc 4.1.2 i am getting the following assert failure :
internal compiler error: in schedule_region, at sched-rgn.c:2413 This is due to the following line gcc_assert (sched_rgn_n_insns == rgn_n_insns); I executed the program with -O2 option. When -fno-schedule-insn2 or -fno-reorder-block is provided the program works fine. The code that i am using for testing has 3 basic blocks. Block reorder phase makes changes to produce the following as the last basic block ;; Start of basic block 2, registers live: 7 [R7] 12 [R12] (code_label 104 100 43 2 6 "" [1 uses]) (note 43 104 47 2 [bb 2] NOTE_INSN_BASIC_BLOCK) (call_insn 47 43 105 2 (parallel [ (call (mem:HI (symbol_ref:HI ("fun2") [flags 0x41] <function_decl 0xb7d33780 fun2>) [0 S2 A16]) (const_int 0 [0x0])) (use (reg:HI 7 R7 [28])) ]) 20 {*call_internal} (insn_list:REG_DEP_ANTI 41 (insn_list:REG_DEP_OUTPUT 37 (insn_list:REG_DEP_TRUE 17 (insn_list:REG_DEP_TRUE 16 (insn_list:REG_DEP_ANTI 39 (nil)))))) (nil) (nil)) (jump_insn 105 47 106 2 (set (pc) (label_ref 48)) -1 (nil) (nil)) (barrier 106 105 107) ;; End of basic block 2, registers live: 7 [R7] 12 [R12] This looks like reordering is proper. When schedule-insn2 is run for the above region/block the no:of instructions in the region (rgn_n_insns) is 3. Initially call insn gets scheduled and then unconditional jump instruction gets scheduled (hence sched_n_insns becomes 2). But since the last scheduled instruction is a jump instruction scheduling stops and comes out. Due to this the assertion fails. Looking at the code i am not able to find out where the problem might be. Can anyone help me? Thanks for your time. Regards, Shafi.