------- Comment #14 from zadeck at naturalbridge dot com  2007-10-11 11:43 
-------
Subject: Re:  libgfortran bootstrap failure: selected_int_kind.f90:22:
 Segmentation fault, wrong code with -fomit-frame-pointer

ebotcazou at gcc dot gnu dot org wrote:
> ------- Comment #13 from ebotcazou at gcc dot gnu dot org  2007-10-11 11:14 
> -------
>   
>> Revision 128957 causes this regression.
>>     
>
> There is a suspect non-documented hunk in the commit:
>
>         * reload1.c (compute_use_by_pseudos): Change DF_RA_LIVE
>         usage to DF_LIVE usage.
>
> --- trunk/gcc/reload1.c 2007/10/02 12:47:13     128956
> +++ trunk/gcc/reload1.c 2007/10/02 13:10:07     128957
> @@ -548,7 +548,7 @@
>        if (r < 0)
>         {
>           /* reload_combine uses the information from
> -            DF_RA_LIVE_IN (BASIC_BLOCK), which might still
> +            DF_LIVE_IN (BASIC_BLOCK), which might still
>              contain registers that have not actually been allocated
>              since they have an equivalence.  */
>           gcc_assert (reload_completed);
> @@ -1158,10 +1158,7 @@
>
>    if (! frame_pointer_needed)
>      FOR_EACH_BB (bb)
> -      {
> -       bitmap_clear_bit (df_get_live_in (bb), HARD_FRAME_POINTER_REGNUM);
> -       bitmap_clear_bit (df_get_live_top (bb), HARD_FRAME_POINTER_REGNUM);
> -      }
> +      bitmap_clear_bit (df_get_live_in (bb), HARD_FRAME_POINTER_REGNUM);
>
>    /* Come here (with failure set nonzero) if we can't get enough spill
>       regs.  */
>
>
>   

That is fine, there are no top sets anymore.

the problem is the code that builds the reload insn chain.  the new code
uses the cfg and does not add the label or the jump table that lives
between basic blocks to the chain.  I will post a patch as soon as my
tests finish.

kenny


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33676

Reply via email to