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

--- Comment #2 from Georg-Johann Lay <gjl at gcc dot gnu.org> 2012-07-11 
10:03:49 UTC ---
avr.c already contains code to work around problems from DCE, instead of DCE
working out proper solutions to cover AVR, see PR50063

Something goes wrong in

df-problems.c:dead_debug_insert_temp

(insn 328 886 866 37 (set (reg:SF 16 r16)
        (unspec:SF [
                (reg:SF 16 r16)
                (reg/v:SF 4 r4 [orig:162 b ] [162])
            ] UNSPEC_COPYSIGN)) libgcc2-mulsc3.c:1307 322 {copysignsf3}
     (expr_list:REG_DEAD (reg/v:SF 4 r4 [orig:162 b ] [162])
        (expr_list:REG_DEAD (reg/v:SF 4 r4 [orig:162 b ] [162])
            (expr_list:REG_EQUAL (unspec:SF [
                        (const_double:SF 0 [0] 0.0 [0x0.0p+0])
                        (reg/v:SF 4 r4 [orig:162 b ] [162])
                    ] UNSPEC_COPYSIGN)
                (nil)))))


There is this code that sets reg from NULL to garbage (debug_expr:SF D#2)

  /* Move all uses of uregno from debug->head to uses, setting mode to
     the widest referenced mode.  */
  while ((cur = *tailp))
    {
      if (DF_REF_REGNO (cur->use) == uregno)
    {
      *usesp = cur;
      usesp = &cur->next;
      *tailp = cur->next;
      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);

Reply via email to