On Fri, Nov 9, 2012 at 1:18 PM, Vladimir Yakovlev <vbyakov...@gmail.com> wrote: >> These assert should tell you what is wrong with the control flow. >> Please look at control_flow_insn_p, which condition returns true. > > There is a note after call insn. > > (call_insn:TI 908 35558 50534 1681 (call (mem:QI (symbol_ref:DI > ("_gfortran_stop_string") [flags 0x41] <function_decl 0x7ffff7eb6200 > _gfortran_stop_string>) [0 _gfortran_stop_string S1 A8]) > (const_int 0 [0])) huygens.fppized.f90:190 616 {*call} > (expr_list:REG_DEAD (reg:DI 5 di) > (expr_list:REG_DEAD (reg:SI 4 si) > (expr_list:REG_NORETURN (const_int 0 [0]) > (nil)))) > (expr_list:REG_FRAME_RELATED_EXPR (use (reg:DI 5 di)) > (expr_list:REG_BR_PRED (use (reg:SI 4 si)) > (nil)))) > (note 50534 908 909 1681 (expr_list:REG_DEP_TRUE (concat:DI (reg:DI 5 di) > (const_int 0 [0])) > (expr_list:REG_DEP_TRUE (concat:SI (reg:SI 4 si) > (const_int 0 [0])) > (nil))) NOTE_INSN_CALL_ARG_LOCATION) >
Huh, this RTX is ignored: --cfgrtl.c-- bool control_flow_insn_p (const_rtx insn) { switch (GET_CODE (insn)) { case NOTE: case CODE_LABEL: case DEBUG_INSN: return false; --cfgrtl.c-- The problem is noreturn call. BTW: What happens if the new pass is put before pro_and_epilogue pass? Uros,