On Sun, Jun 24, 2012 at 11:50:12AM +0100, Richard Sandiford wrote:
> --- gcc/df-problems.c 2012-06-23 13:28:55.576128246 +0100
> +++ gcc/df-problems.c 2012-06-24 11:25:36.851531368 +0100
> @@ -3209,7 +3210,8 @@ dead_debug_insert_temp (struct dead_debu
>       the widest referenced mode.  */
>    while ((cur = *tailp))
>      {
> -      if (DF_REF_REGNO (cur->use) == uregno)
> +      cur_reg = *DF_REF_REAL_LOC (cur->use);
> +      if (REGNO (cur_reg) == uregno)
>       {
>         *usesp = cur;
>         usesp = &cur->next;
> @@ -3217,21 +3219,13 @@ dead_debug_insert_temp (struct dead_debu
>         cur->next = NULL;
>         if (!reg
>             || (GET_MODE_BITSIZE (GET_MODE (reg))
> -               < GET_MODE_BITSIZE (GET_MODE (*DF_REF_REAL_LOC (cur->use)))))
> -         reg = *DF_REF_REAL_LOC (cur->use);
> +               < GET_MODE_BITSIZE (GET_MODE (cur_reg))))
> +         reg = cur_reg;
>       }
>        else
>       tailp = &(*tailp)->next;
>      }
>  
> -  /* We may have dangling bits in debug->used for registers that were part
> -     of a multi-register use, one component of which has been reset.  */
> -  if (reg == NULL)
> -    {
> -      gcc_checking_assert (!uses);
> -      return 0;
> -    }
> -
>    gcc_checking_assert (uses);
>  
>    breg = reg;

Unfortunately this seems to break bootstrap on i686-linux.
Delta-reduced testcase is:
typedef _Complex float __attribute__ ((mode (TC))) __complex128;
extern __complex128 clogq (__complex128) __attribute__ ((__nothrow__));
__complex128
cacoshq (__complex128 x)
{
  __complex128 res;
  int rcls = __builtin_fpclassify (0, 1, 4, 3, 2, __real__ x);
  int icls = __builtin_fpclassify (0, 1, 4, 3, 2, __imag__ x);
  if (rcls <= 1 || icls <= 1)
    {
      __complex128 y;
      res = clogq (y);
      if (__real__ res < 0.0)
        res = -res;
    }
  return res;
}
which ICEs at -O2 -g -fPIC -m32 in the above gcc_checking_assert (uses)
now.

        Jakub

Reply via email to