This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: abort dominance:calc_dfs_tree trunck configured for arm-elf target
- To: gcc-bugs at gcc dot gnu dot org
- Subject: Re: abort dominance:calc_dfs_tree trunck configured for arm-elf target
- From: Graham Stott <grahams at redhat dot com>
- Date: Fri, 27 Jul 2001 23:31:30 +0100
- References: <3B616CE1.B1C5634@redhat.com>
Graham Stott wrote:
>
> Michael
>
> sf_erf.c: In function `erfcf':
> sf_erf.c:16: Internal compiler error in calc_dfs_tree, at dominance.c:355
>
> The following almost trival peice of code triggers an abort
> in calc_dfs_tree because di->nodes == 7 and n_basic_blocks == 8
>
> ---------------------------sf_erf.c---------------------------------
> extern float erfcf (float);
>
> extern const float one,two;
>
> float
> erfcf(float x)
> {
> int hx,ix;
>
> hx = one;
> ix = hx & 0x7fffffff;
> if(ix >= 0x7f800000)
> return (float)(((unsigned)hx>>31)<<1)+one/x;
> else
> return two;
> }
> ---------------------------------------------------------------------
I think I've identified the problem.
The CFG had an unreachable block which appears to trigger the abort
because the unreachable block is never processed during the DFS.
I added a call to cleanup_cfg (CLEANUP_EXEPENSIVE) before the call to
schedule_insns() toplev.c which removed the unreachable block from the
CFG.
Graham