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