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,

Reply via email to